[INFO] cloning repository https://github.com/mraasvel/codingame-spring-2022 [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/mraasvel/codingame-spring-2022" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmraasvel%2Fcodingame-spring-2022", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmraasvel%2Fcodingame-spring-2022'... [INFO] [stderr] /workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmraasvel%2Fcodingame-spring-2022: No space left on device [WARN] Retrying crate fetch in 3 seconds (attempt 1) [INFO] cloning repository https://github.com/mraasvel/codingame-spring-2022 [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/mraasvel/codingame-spring-2022" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmraasvel%2Fcodingame-spring-2022", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmraasvel%2Fcodingame-spring-2022'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 56e8c026919c346af0293d1a92c4cac3a2ee222f [INFO] checking mraasvel/codingame-spring-2022 against master#19f42cb9bb65555e7d95dab7d17573ae6c5d634c for pr-139087 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmraasvel%2Fcodingame-spring-2022" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/mraasvel/codingame-spring-2022 on toolchain 19f42cb9bb65555e7d95dab7d17573ae6c5d634c [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+19f42cb9bb65555e7d95dab7d17573ae6c5d634c" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/mraasvel/codingame-spring-2022 [INFO] finished tweaking git repo https://github.com/mraasvel/codingame-spring-2022 [INFO] tweaked toml for git repo https://github.com/mraasvel/codingame-spring-2022 written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] crate git repo https://github.com/mraasvel/codingame-spring-2022 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+19f42cb9bb65555e7d95dab7d17573ae6c5d634c" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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:4b26683ee3c49f365255c425c23003cbf4366de097804722c29c5bbbee3624d2" "/opt/rustwide/cargo-home/bin/cargo" "+19f42cb9bb65555e7d95dab7d17573ae6c5d634c" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 455b547c934ac2bdf3ff9817f2b3b5532cc4a9b311e066e37420488c9f03bcf1 [INFO] running `Command { std: "docker" "start" "-a" "455b547c934ac2bdf3ff9817f2b3b5532cc4a9b311e066e37420488c9f03bcf1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "455b547c934ac2bdf3ff9817f2b3b5532cc4a9b311e066e37420488c9f03bcf1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "455b547c934ac2bdf3ff9817f2b3b5532cc4a9b311e066e37420488c9f03bcf1", kill_on_drop: false }` [INFO] [stdout] 455b547c934ac2bdf3ff9817f2b3b5532cc4a9b311e066e37420488c9f03bcf1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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:4b26683ee3c49f365255c425c23003cbf4366de097804722c29c5bbbee3624d2" "/opt/rustwide/cargo-home/bin/cargo" "+19f42cb9bb65555e7d95dab7d17573ae6c5d634c" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] c013ff76e9a5839c900a7a84d8ed7253642f6350972b0999ba7a7512c8b840df [INFO] running `Command { std: "docker" "start" "-a" "c013ff76e9a5839c900a7a84d8ed7253642f6350972b0999ba7a7512c8b840df", kill_on_drop: false }` [INFO] [stderr] Checking codingame_spring_challenge_2022 v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/main.rs:101:13 [INFO] [stdout] | [INFO] [stdout] 101 | for i in 0..entity_count as usize { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `id` [INFO] [stdout] --> src/main.rs:105:17 [INFO] [stdout] | [INFO] [stdout] 105 | let id = parse_input!(inputs[0], i32); // Unique identifier [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_id` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `x` [INFO] [stdout] --> src/main.rs:107:17 [INFO] [stdout] | [INFO] [stdout] 107 | let x = parse_input!(inputs[2], i32); // Position of this entity [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_x` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `y` [INFO] [stdout] --> src/main.rs:108:17 [INFO] [stdout] | [INFO] [stdout] 108 | let y = parse_input!(inputs[3], i32); [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_y` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `shield_life` [INFO] [stdout] --> src/main.rs:109:17 [INFO] [stdout] | [INFO] [stdout] 109 | let shield_life = parse_input!(inputs[4], i32); // Ignore for this league; Count down until shield spell fades [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_shield_life` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `is_controlled` [INFO] [stdout] --> src/main.rs:110:17 [INFO] [stdout] | [INFO] [stdout] 110 | let is_controlled = parse_input!(inputs[5], i32); // Ignore for this league; Equals 1 when this entity is under a control spell [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_controlled` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `health` [INFO] [stdout] --> src/main.rs:111:17 [INFO] [stdout] | [INFO] [stdout] 111 | let health = parse_input!(inputs[6], i32); // Remaining health of this monster [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_health` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `vx` [INFO] [stdout] --> src/main.rs:112:17 [INFO] [stdout] | [INFO] [stdout] 112 | let vx = parse_input!(inputs[7], i32); // Trajectory of this monster [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_vx` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `vy` [INFO] [stdout] --> src/main.rs:113:17 [INFO] [stdout] | [INFO] [stdout] 113 | let vy = parse_input!(inputs[8], i32); [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_vy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `near_base` [INFO] [stdout] --> src/main.rs:114:17 [INFO] [stdout] | [INFO] [stdout] 114 | let near_base = parse_input!(inputs[9], i32); // 0=monster with no target yet, 1=monster targeting a base [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_near_base` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `threat_for` [INFO] [stdout] --> src/main.rs:115:17 [INFO] [stdout] | [INFO] [stdout] 115 | ... let threat_for = parse_input!(inputs[10], i32); // Given this monster's trajectory, is it a threat to 1=your base, 2=your opponent'... [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_threat_for` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HERO_ONE` is never used [INFO] [stdout] --> src/main.rs:3:7 [INFO] [stdout] | [INFO] [stdout] 3 | const HERO_ONE: &str = "Hero One"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HERO_TWO` is never used [INFO] [stdout] --> src/main.rs:4:7 [INFO] [stdout] | [INFO] [stdout] 4 | const HERO_TWO: &str = "Hero Two"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HERO_THREE` is never used [INFO] [stdout] --> src/main.rs:5:7 [INFO] [stdout] | [INFO] [stdout] 5 | const HERO_THREE: &str = "Hero Three"; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `x` and `y` are never read [INFO] [stdout] --> src/main.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 13 | struct Point { [INFO] [stdout] | ----- fields in this struct [INFO] [stdout] 14 | x: i32, [INFO] [stdout] | ^ [INFO] [stdout] 15 | y: i32, [INFO] [stdout] | ^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `EntityType` is never used [INFO] [stdout] --> src/main.rs:18:6 [INFO] [stdout] | [INFO] [stdout] 18 | enum EntityType { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `convert_number` is never used [INFO] [stdout] --> src/main.rs:25:8 [INFO] [stdout] | [INFO] [stdout] 24 | impl EntityType { [INFO] [stdout] | --------------- associated function in this implementation [INFO] [stdout] 25 | fn convert_number(n: i32) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `Entity` is never used [INFO] [stdout] --> src/main.rs:35:7 [INFO] [stdout] | [INFO] [stdout] 35 | trait Entity { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Hero` is never constructed [INFO] [stdout] --> src/main.rs:38:8 [INFO] [stdout] | [INFO] [stdout] 38 | struct Hero { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Monster` is never constructed [INFO] [stdout] --> src/main.rs:41:8 [INFO] [stdout] | [INFO] [stdout] 41 | struct Monster { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `position` is never read [INFO] [stdout] --> src/main.rs:45:5 [INFO] [stdout] | [INFO] [stdout] 44 | struct BaseData { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 45 | position: Point, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `point_distance` is never used [INFO] [stdout] --> src/main.rs:76:4 [INFO] [stdout] | [INFO] [stdout] 76 | fn point_distance(a: &Point, b: &Point) -> i32 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/main.rs:101:13 [INFO] [stdout] | [INFO] [stdout] 101 | for i in 0..entity_count as usize { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `id` [INFO] [stdout] --> src/main.rs:105:17 [INFO] [stdout] | [INFO] [stdout] 105 | let id = parse_input!(inputs[0], i32); // Unique identifier [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_id` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `x` [INFO] [stdout] --> src/main.rs:107:17 [INFO] [stdout] | [INFO] [stdout] 107 | let x = parse_input!(inputs[2], i32); // Position of this entity [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_x` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `y` [INFO] [stdout] --> src/main.rs:108:17 [INFO] [stdout] | [INFO] [stdout] 108 | let y = parse_input!(inputs[3], i32); [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_y` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `shield_life` [INFO] [stdout] --> src/main.rs:109:17 [INFO] [stdout] | [INFO] [stdout] 109 | let shield_life = parse_input!(inputs[4], i32); // Ignore for this league; Count down until shield spell fades [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_shield_life` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `is_controlled` [INFO] [stdout] --> src/main.rs:110:17 [INFO] [stdout] | [INFO] [stdout] 110 | let is_controlled = parse_input!(inputs[5], i32); // Ignore for this league; Equals 1 when this entity is under a control spell [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_controlled` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `health` [INFO] [stdout] --> src/main.rs:111:17 [INFO] [stdout] | [INFO] [stdout] 111 | let health = parse_input!(inputs[6], i32); // Remaining health of this monster [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_health` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `vx` [INFO] [stdout] --> src/main.rs:112:17 [INFO] [stdout] | [INFO] [stdout] 112 | let vx = parse_input!(inputs[7], i32); // Trajectory of this monster [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_vx` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `vy` [INFO] [stdout] --> src/main.rs:113:17 [INFO] [stdout] | [INFO] [stdout] 113 | let vy = parse_input!(inputs[8], i32); [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_vy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `near_base` [INFO] [stdout] --> src/main.rs:114:17 [INFO] [stdout] | [INFO] [stdout] 114 | let near_base = parse_input!(inputs[9], i32); // 0=monster with no target yet, 1=monster targeting a base [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_near_base` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `threat_for` [INFO] [stdout] --> src/main.rs:115:17 [INFO] [stdout] | [INFO] [stdout] 115 | ... let threat_for = parse_input!(inputs[10], i32); // Given this monster's trajectory, is it a threat to 1=your base, 2=your opponent'... [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_threat_for` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HERO_ONE` is never used [INFO] [stdout] --> src/main.rs:3:7 [INFO] [stdout] | [INFO] [stdout] 3 | const HERO_ONE: &str = "Hero One"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HERO_TWO` is never used [INFO] [stdout] --> src/main.rs:4:7 [INFO] [stdout] | [INFO] [stdout] 4 | const HERO_TWO: &str = "Hero Two"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HERO_THREE` is never used [INFO] [stdout] --> src/main.rs:5:7 [INFO] [stdout] | [INFO] [stdout] 5 | const HERO_THREE: &str = "Hero Three"; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `x` and `y` are never read [INFO] [stdout] --> src/main.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 13 | struct Point { [INFO] [stdout] | ----- fields in this struct [INFO] [stdout] 14 | x: i32, [INFO] [stdout] | ^ [INFO] [stdout] 15 | y: i32, [INFO] [stdout] | ^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `EntityType` is never used [INFO] [stdout] --> src/main.rs:18:6 [INFO] [stdout] | [INFO] [stdout] 18 | enum EntityType { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `convert_number` is never used [INFO] [stdout] --> src/main.rs:25:8 [INFO] [stdout] | [INFO] [stdout] 24 | impl EntityType { [INFO] [stdout] | --------------- associated function in this implementation [INFO] [stdout] 25 | fn convert_number(n: i32) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `Entity` is never used [INFO] [stdout] --> src/main.rs:35:7 [INFO] [stdout] | [INFO] [stdout] 35 | trait Entity { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Hero` is never constructed [INFO] [stdout] --> src/main.rs:38:8 [INFO] [stdout] | [INFO] [stdout] 38 | struct Hero { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Monster` is never constructed [INFO] [stdout] --> src/main.rs:41:8 [INFO] [stdout] | [INFO] [stdout] 41 | struct Monster { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `position` is never read [INFO] [stdout] --> src/main.rs:45:5 [INFO] [stdout] | [INFO] [stdout] 44 | struct BaseData { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 45 | position: Point, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `point_distance` is never used [INFO] [stdout] --> src/main.rs:76:4 [INFO] [stdout] | [INFO] [stdout] 76 | fn point_distance(a: &Point, b: &Point) -> i32 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.06s [INFO] running `Command { std: "docker" "inspect" "c013ff76e9a5839c900a7a84d8ed7253642f6350972b0999ba7a7512c8b840df", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c013ff76e9a5839c900a7a84d8ed7253642f6350972b0999ba7a7512c8b840df", kill_on_drop: false }` [INFO] [stdout] c013ff76e9a5839c900a7a84d8ed7253642f6350972b0999ba7a7512c8b840df