[INFO] fetching crate shoulda_core 0.2.1... [INFO] testing shoulda_core-0.2.1 against master#c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38 for pr-146098-8 [INFO] extracting crate shoulda_core 0.2.1 into /workspace/builds/worker-2-tc1/source [INFO] started tweaking crates.io crate shoulda_core 0.2.1 [INFO] finished tweaking crates.io crate shoulda_core 0.2.1 [INFO] tweaked toml for crates.io crate shoulda_core 0.2.1 written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate shoulda_core 0.2.1 on toolchain c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "generate-lockfile" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Locking 8 packages to latest compatible versions [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded const_env v0.1.4 [INFO] [stderr] Downloaded const_env_impl v0.1.4 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 6328dab5969be9bf1cbb921f16e056d34bca4f9749b9e9508263fab180eb0436 [INFO] running `Command { std: "docker" "start" "-a" "6328dab5969be9bf1cbb921f16e056d34bca4f9749b9e9508263fab180eb0436", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "6328dab5969be9bf1cbb921f16e056d34bca4f9749b9e9508263fab180eb0436", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "6328dab5969be9bf1cbb921f16e056d34bca4f9749b9e9508263fab180eb0436", kill_on_drop: false }` [INFO] [stdout] 6328dab5969be9bf1cbb921f16e056d34bca4f9749b9e9508263fab180eb0436 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] e5effd1fc730b041edf85b432eba84b326ed24de2fd151f6cfbfeab47d9278d5 [INFO] running `Command { std: "docker" "start" "-a" "e5effd1fc730b041edf85b432eba84b326ed24de2fd151f6cfbfeab47d9278d5", kill_on_drop: false }` [INFO] [stderr] Compiling const_env_impl v0.1.4 [INFO] [stderr] Compiling impl-trait-for-tuples v0.2.3 [INFO] [stderr] Compiling const_env v0.1.4 [INFO] [stderr] Compiling shoulda_core v0.2.1 (/opt/rustwide/workdir) [INFO] [stdout] warning: use of deprecated macro `from_env`: Deprecated alias of env_item, use env_item instead [INFO] [stdout] --> src/epsilon_provider.rs:7:3 [INFO] [stdout] | [INFO] [stdout] 7 | #[from_env] [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/lib.rs:130:15 [INFO] [stdout] | [INFO] [stdout] 130 | fn should(&self) -> Should [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 130 | fn should(&self) -> Should<'_, Self> [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: call to `.borrow()` on a reference in this situation does nothing [INFO] [stdout] --> src/wrapper_types.rs:72:47 [INFO] [stdout] | [INFO] [stdout] 72 | self.get().should_eq::(&other.borrow().get()) [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: the type `Cell` does not implement `Borrow`, so calling `borrow` on `&Cell` copies the reference, which does not do anything and can be removed [INFO] [stdout] = note: `#[warn(noop_method_call)]` on by default [INFO] [stdout] help: remove this redundant call [INFO] [stdout] | [INFO] [stdout] 72 - self.get().should_eq::(&other.borrow().get()) [INFO] [stdout] 72 + self.get().should_eq::(&other.get()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] WARN rustc_errors::emitter Invalid span /rustc/c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38/library/core/src/cell.rs:313:1: 313:1 (#0), error=SourceNotAvailable { filename: Real(Remapped { local_path: None, virtual_name: "/rustc/c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38/library/core/src/cell.rs" }) } [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.03s [INFO] running `Command { std: "docker" "inspect" "e5effd1fc730b041edf85b432eba84b326ed24de2fd151f6cfbfeab47d9278d5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e5effd1fc730b041edf85b432eba84b326ed24de2fd151f6cfbfeab47d9278d5", kill_on_drop: false }` [INFO] [stdout] e5effd1fc730b041edf85b432eba84b326ed24de2fd151f6cfbfeab47d9278d5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 9bd9eb7727f8dfe39f7d4b2d87e68c1f1d6be1154fe58f8b6c5f78d3da9caf46 [INFO] running `Command { std: "docker" "start" "-a" "9bd9eb7727f8dfe39f7d4b2d87e68c1f1d6be1154fe58f8b6c5f78d3da9caf46", kill_on_drop: false }` [INFO] [stdout] warning: use of deprecated macro `from_env`: Deprecated alias of env_item, use env_item instead [INFO] [stdout] --> src/epsilon_provider.rs:7:3 [INFO] [stdout] | [INFO] [stdout] 7 | #[from_env] [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/lib.rs:130:15 [INFO] [stdout] | [INFO] [stdout] 130 | fn should(&self) -> Should [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 130 | fn should(&self) -> Should<'_, Self> [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] WARN rustc_errors::emitter Invalid span /rustc/c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38/library/core/src/cell.rs:313:1: 313:1 (#0), error=SourceNotAvailable { filename: Real(Remapped { local_path: None, virtual_name: "/rustc/c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38/library/core/src/cell.rs" }) } [INFO] [stdout] warning: call to `.borrow()` on a reference in this situation does nothing [INFO] [stdout] --> src/wrapper_types.rs:72:47 [INFO] [stdout] | [INFO] [stdout] 72 | self.get().should_eq::(&other.borrow().get()) [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: the type `Cell` does not implement `Borrow`, so calling `borrow` on `&Cell` copies the reference, which does not do anything and can be removed [INFO] [stdout] = note: `#[warn(noop_method_call)]` on by default [INFO] [stdout] help: remove this redundant call [INFO] [stdout] | [INFO] [stdout] 72 - self.get().should_eq::(&other.borrow().get()) [INFO] [stdout] 72 + self.get().should_eq::(&other.get()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Compiling shoulda_core v0.2.1 (/opt/rustwide/workdir) [INFO] [stdout] warning: use of deprecated macro `from_env`: Deprecated alias of env_item, use env_item instead [INFO] [stdout] --> src/epsilon_provider.rs:7:3 [INFO] [stdout] | [INFO] [stdout] 7 | #[from_env] [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/lib.rs:130:15 [INFO] [stdout] | [INFO] [stdout] 130 | fn should(&self) -> Should [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 130 | fn should(&self) -> Should<'_, Self> [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] WARN rustc_errors::emitter Invalid span /rustc/c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38/library/core/src/cell.rs:313:1: 313:1 (#0), error=SourceNotAvailable { filename: Real(Remapped { local_path: None, virtual_name: "/rustc/c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38/library/core/src/cell.rs" }) } [INFO] [stdout] warning: call to `.borrow()` on a reference in this situation does nothing [INFO] [stdout] --> src/wrapper_types.rs:72:47 [INFO] [stdout] | [INFO] [stdout] 72 | self.get().should_eq::(&other.borrow().get()) [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: the type `Cell` does not implement `Borrow`, so calling `borrow` on `&Cell` copies the reference, which does not do anything and can be removed [INFO] [stdout] = note: `#[warn(noop_method_call)]` on by default [INFO] [stdout] help: remove this redundant call [INFO] [stdout] | [INFO] [stdout] 72 - self.get().should_eq::(&other.borrow().get()) [INFO] [stdout] 72 + self.get().should_eq::(&other.get()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 2.07s [INFO] running `Command { std: "docker" "inspect" "9bd9eb7727f8dfe39f7d4b2d87e68c1f1d6be1154fe58f8b6c5f78d3da9caf46", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "9bd9eb7727f8dfe39f7d4b2d87e68c1f1d6be1154fe58f8b6c5f78d3da9caf46", kill_on_drop: false }` [INFO] [stdout] 9bd9eb7727f8dfe39f7d4b2d87e68c1f1d6be1154fe58f8b6c5f78d3da9caf46 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 60cb6e18d1b8c82a027851b1029b9f3ce62496d77fbc325c500cc2bfb7c218a3 [INFO] running `Command { std: "docker" "start" "-a" "60cb6e18d1b8c82a027851b1029b9f3ce62496d77fbc325c500cc2bfb7c218a3", kill_on_drop: false }` [INFO] [stderr] warning: use of deprecated macro `from_env`: Deprecated alias of env_item, use env_item instead [INFO] [stderr] --> src/epsilon_provider.rs:7:3 [INFO] [stderr] | [INFO] [stderr] 7 | #[from_env] [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(deprecated)]` on by default [INFO] [stderr] [INFO] [stderr] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stderr] --> src/lib.rs:130:15 [INFO] [stderr] | [INFO] [stderr] 130 | fn should(&self) -> Should [INFO] [stderr] | ^^^^^ ^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stderr] | | [INFO] [stderr] | the lifetime is elided here [INFO] [stderr] | [INFO] [stderr] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stderr] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stderr] help: use `'_` for type paths [INFO] [stderr] | [INFO] [stderr] 130 | fn should(&self) -> Should<'_, Self> [INFO] [stderr] | +++ [INFO] [stderr] [INFO] [stderr] WARN rustc_errors::emitter Invalid span /rustc/c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38/library/core/src/cell.rs:313:1: 313:1 (#0), error=SourceNotAvailable { filename: Real(Remapped { local_path: None, virtual_name: "/rustc/c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38/library/core/src/cell.rs" }) } [INFO] [stderr] warning: call to `.borrow()` on a reference in this situation does nothing [INFO] [stderr] --> src/wrapper_types.rs:72:47 [INFO] [stderr] | [INFO] [stderr] 72 | self.get().should_eq::(&other.borrow().get()) [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: the type `Cell` does not implement `Borrow`, so calling `borrow` on `&Cell` copies the reference, which does not do anything and can be removed [INFO] [stderr] = note: `#[warn(noop_method_call)]` on by default [INFO] [stderr] help: remove this redundant call [INFO] [stderr] | [INFO] [stderr] 72 - self.get().should_eq::(&other.borrow().get()) [INFO] [stderr] 72 + self.get().should_eq::(&other.get()) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `shoulda_core` (lib) generated 3 warnings (run `cargo fix --lib -p shoulda_core` to apply 2 suggestions) [INFO] [stderr] WARN rustc_errors::emitter Invalid span /rustc/c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38/library/core/src/cell.rs:313:1: 313:1 (#0), error=SourceNotAvailable { filename: Real(Remapped { local_path: None, virtual_name: "/rustc/c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38/library/core/src/cell.rs" }) } [INFO] [stderr] warning: `shoulda_core` (lib test) generated 3 warnings (3 duplicates) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.05s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/shoulda_core-e53d9f694954baab) [INFO] [stdout] [INFO] [stdout] running 17 tests [INFO] [stdout] test specifics::iter::tests::should_contain ... ok [INFO] [stdout] test specifics::iter::tests::should_not_contain_sequence ... ok [INFO] [stdout] test specifics::iter::tests::should_contain_sequence ... ok [INFO] [stdout] test tests::operation_order_dependent ... ok [INFO] [stdout] test tests::panic_catching ... ok [INFO] [stdout] test specifics::iter::tests::should_not_contains ... ok [INFO] [stdout] test tests::contains ... ok [INFO] [stdout] test tests::float_diff_changes ... ok [INFO] [stdout] test tests::of_type ... ok [INFO] [stdout] test tests::or_operation ... ok [INFO] [stdout] test tests::tuples ... ok [INFO] [stdout] test tests::vec_cow_i32 ... ok [INFO] [stdout] test tests::vec_cow_str ... ok [INFO] [stdout] test specifics::iter::tests::should_contains ... ok [INFO] [stdout] test specifics::iter::tests::should_not_contain ... ok [INFO] [stdout] test tests::should_panic_on_fail ... ok [INFO] [stdout] test tests::string_and_str ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s [INFO] [stdout] [INFO] [stderr] Doc-tests shoulda_core [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "60cb6e18d1b8c82a027851b1029b9f3ce62496d77fbc325c500cc2bfb7c218a3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "60cb6e18d1b8c82a027851b1029b9f3ce62496d77fbc325c500cc2bfb7c218a3", kill_on_drop: false }` [INFO] [stdout] 60cb6e18d1b8c82a027851b1029b9f3ce62496d77fbc325c500cc2bfb7c218a3