From 32a8a6386be728ebb8668f77b29877a9c2947829 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 19:46:58 -0400 Subject: [PATCH 01/50] packaging: several floor rungs per package, over one base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A component may now have several floor rungs: each piece has one floor object per floor rung, in ladder order, over one integer base, so one package carries a title's whole AV1 ladder and its base is coded once (packaging §7.1). Each floor rung has a floor name: the component's id when it has one floor rung, so existing packages are unchanged byte for byte, and the rung's id when it has several. The name names the supplied stream, the CMAF files, the floor playlist, the DASH representation and the MoQ track; a name that cannot be a path segment, or two equal in any case, is refused (pack-id). - wai-pack: the packer reads its source and each floor stream as streams and writes each file to a sink as it is made (files.rs, av1::TuReader, floor::check_stream); a source that does not read the same twice is refused (pack-source-changed). The catalogs list every floor; the verifier holds the k-th floor entry of each piece to the k-th floor rung. - wai-rs: the DASH renderer writes a representation's own codecs and size, and an adaptation set's codecs only when shared. - pack-conformance: packs/video-ladder-01 (two floors over the bases of video-base-01, which are the same objects), ladder-mutations, and pack_verify.py's floor and catalog checks per floor rung, in §11.3's order; supplied_floor.py writes one stream per floor rung. - tests/ladder.rs, and CI's test-count floor and media probe of every floor. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-pack.yml | 35 +- wai/CHANGELOG.md | 24 ++ wai/extensions/packaging.md | 117 +++-- wai/pack-conformance/README.md | 14 + .../ladder-mutations/expected.json | 35 ++ .../floor-under-the-component-s-name/LISTING | 46 ++ ...846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s | Bin 0 -> 1127 bytes ...92fdd2aa86db43ccdc684b69c51a688856a0db.m4s | Bin 0 -> 1127 bytes ...659d88613f6d0d360485effe3751504cefbb74.m4s | Bin 0 -> 2248 bytes ...d45c4c0274b0460f6abc8f54940ac378165833.m4s | Bin 0 -> 2526 bytes ...7189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s | Bin 0 -> 1695 bytes .../floor/v/init.mp4 | Bin 0 -> 628 bytes .../ladder-mutations/floors-swapped/LISTING | 46 ++ .../floors-swapped/dash/classic.mpd | 41 ++ ...659d88613f6d0d360485effe3751504cefbb74.m4s | Bin 0 -> 2248 bytes ...b33fd445037d6538b445bcc76431f9c9f91c5b.m4s | Bin 0 -> 2400 bytes .../floors-swapped/hls/classic/floor-hi.m3u8 | 18 + .../floors-swapped/hls/classic/floor-lo.m3u8 | 18 + .../floors-swapped/hls/classic/master.m3u8 | 7 + .../floors-swapped/hls/legacy/master.m3u8 | 7 + .../floors-swapped/hls/mobile/master.m3u8 | 8 + .../floors-swapped/hls/tv/master.m3u8 | 8 + .../floors-swapped/index-v.wsix | Bin 0 -> 2368 bytes .../floors-swapped/package.receipt.json | 1 + .../master-lists-one-floor/LISTING | 46 ++ .../hls/classic/master.m3u8 | 5 + wai/pack-conformance/pack_verify.py | 305 +++++++------ .../packs/video-ladder-01/floor/hi.obu | Bin 0 -> 6575 bytes .../packs/video-ladder-01/floor/lo.obu | Bin 0 -> 6243 bytes .../packs/video-ladder-01/key.hex | 1 + .../packs/video-ladder-01/package/LISTING | 46 ++ .../video-ladder-01/package/dash/classic.mpd | 41 ++ .../video-ladder-01/package/dash/mobile.mpd | 21 + .../packs/video-ladder-01/package/dash/tv.mpd | 27 ++ ...2a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s | Bin 0 -> 981 bytes ...5de0902f941a3c6a000295714f7cab193aa6cf.m4s | Bin 0 -> 981 bytes ...b33fd445037d6538b445bcc76431f9c9f91c5b.m4s | Bin 0 -> 2400 bytes ...01dc69170ecb4240dffd2e86808ddf87baa12a.m4s | Bin 0 -> 2605 bytes ...7996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s | Bin 0 -> 2088 bytes .../video-ladder-01/package/floor/hi/init.mp4 | Bin 0 -> 628 bytes ...846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s | Bin 0 -> 1127 bytes ...92fdd2aa86db43ccdc684b69c51a688856a0db.m4s | Bin 0 -> 1127 bytes ...659d88613f6d0d360485effe3751504cefbb74.m4s | Bin 0 -> 2248 bytes ...d45c4c0274b0460f6abc8f54940ac378165833.m4s | Bin 0 -> 2526 bytes ...7189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s | Bin 0 -> 1695 bytes .../video-ladder-01/package/floor/lo/init.mp4 | Bin 0 -> 628 bytes .../package/hls/classic/floor-hi.m3u8 | 18 + .../package/hls/classic/floor-lo.m3u8 | 18 + .../package/hls/classic/master.m3u8 | 7 + .../package/hls/legacy/master.m3u8 | 7 + .../package/hls/mobile/master.m3u8 | 8 + .../package/hls/mobile/wai-v.m3u8 | 20 + .../package/hls/mobile/wai.m3u8 | 7 + .../package/hls/tv/master.m3u8 | 8 + .../video-ladder-01/package/hls/tv/wai-v.m3u8 | 17 + .../video-ladder-01/package/hls/tv/wai.m3u8 | 7 + .../video-ladder-01/package/index-v.wsix | Bin 0 -> 2368 bytes .../video-ladder-01/package/moq/catalog.json | 1 + ...371966b50573602a200dd7bb04e0d90889326d.wai | Bin 0 -> 39826 bytes ...269ea591df681ced90b05d97e0df106b49b08e.wai | Bin 0 -> 2569 bytes ...a8bb86c174409cb625157784e18c5e5559a381.wai | Bin 0 -> 2503 bytes ...19c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai | Bin 0 -> 25514 bytes ...a0240598b914dbf2cabe545aa001e8de12d365.wai | Bin 0 -> 9950 bytes ...ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai | Bin 0 -> 1380 bytes ...f66cbb814cde679bceb1ae37f0765308ddee72.wai | Bin 0 -> 2251 bytes ...d007436368e8d20467fdec2a1eebbb84b03bf2.wai | Bin 0 -> 35882 bytes ...75efdc77163602b4a1dabcff080e5ea28b9946.wai | Bin 0 -> 2648 bytes ...22fc0bed42baeb3488f00dfe3567056a7009c5.wai | Bin 0 -> 1858 bytes ...43dfb76fcc3884c607b744c8a53fa6a1728580.wai | Bin 0 -> 1234 bytes ...cb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai | Bin 0 -> 2351 bytes .../package/package.receipt.json | 1 + .../packs/video-ladder-01/package/plan-v.txt | 5 + .../packs/video-ladder-01/package/policy.json | 1 + .../packs/video-ladder-01/package/policy.toml | 54 +++ .../package/stages/legacy.json | 1 + .../package/stages/mobile.json | 1 + .../video-ladder-01/package/stages/tv.json | 1 + .../packs/video-ladder-01/policy.toml | 54 +++ wai/pack-conformance/supplied_floor.py | 111 +++-- wai/wai-pack/src/av1.rs | 147 +++++++ wai/wai-pack/src/catalog.rs | 157 ++++--- wai/wai-pack/src/files.rs | 398 +++++++++++++++++ wai/wai-pack/src/floor.rs | 117 +++-- wai/wai-pack/src/golden.rs | 130 ++++-- wai/wai-pack/src/lib.rs | 4 +- wai/wai-pack/src/pack.rs | 407 +++++++++++++----- wai/wai-pack/src/verify.rs | 83 ++-- wai/wai-pack/tests/ladder.rs | 157 +++++++ wai/wai-rs/src/http_binding/dash.rs | 34 +- .../src/http_binding/tests_playlists.rs | 19 +- 90 files changed, 2418 insertions(+), 499 deletions(-) create mode 100644 wai/pack-conformance/ladder-mutations/expected.json create mode 100644 wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/LISTING create mode 100644 wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s create mode 100644 wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s create mode 100644 wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s create mode 100644 wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s create mode 100644 wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s create mode 100644 wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/init.mp4 create mode 100644 wai/pack-conformance/ladder-mutations/floors-swapped/LISTING create mode 100644 wai/pack-conformance/ladder-mutations/floors-swapped/dash/classic.mpd create mode 100644 wai/pack-conformance/ladder-mutations/floors-swapped/floor/hi/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s create mode 100644 wai/pack-conformance/ladder-mutations/floors-swapped/floor/lo/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s create mode 100644 wai/pack-conformance/ladder-mutations/floors-swapped/hls/classic/floor-hi.m3u8 create mode 100644 wai/pack-conformance/ladder-mutations/floors-swapped/hls/classic/floor-lo.m3u8 create mode 100644 wai/pack-conformance/ladder-mutations/floors-swapped/hls/classic/master.m3u8 create mode 100644 wai/pack-conformance/ladder-mutations/floors-swapped/hls/legacy/master.m3u8 create mode 100644 wai/pack-conformance/ladder-mutations/floors-swapped/hls/mobile/master.m3u8 create mode 100644 wai/pack-conformance/ladder-mutations/floors-swapped/hls/tv/master.m3u8 create mode 100644 wai/pack-conformance/ladder-mutations/floors-swapped/index-v.wsix create mode 100644 wai/pack-conformance/ladder-mutations/floors-swapped/package.receipt.json create mode 100644 wai/pack-conformance/ladder-mutations/master-lists-one-floor/LISTING create mode 100644 wai/pack-conformance/ladder-mutations/master-lists-one-floor/hls/classic/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-ladder-01/floor/hi.obu create mode 100644 wai/pack-conformance/packs/video-ladder-01/floor/lo.obu create mode 100644 wai/pack-conformance/packs/video-ladder-01/key.hex create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/LISTING create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/dash/classic.mpd create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/dash/mobile.mpd create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/dash/tv.mpd create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/floor/hi/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/floor/hi/init.mp4 create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/floor/lo/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/floor/lo/init.mp4 create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/hls/classic/floor-hi.m3u8 create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/hls/classic/floor-lo.m3u8 create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/hls/classic/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/hls/legacy/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/hls/mobile/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/hls/mobile/wai-v.m3u8 create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/hls/mobile/wai.m3u8 create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/hls/tv/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/hls/tv/wai-v.m3u8 create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/hls/tv/wai.m3u8 create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/index-v.wsix create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/moq/catalog.json create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/objects/482fbbb9b39bdb9cbf00515f94269ea591df681ced90b05d97e0df106b49b08e.wai create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/objects/4ab8f747d181632f342a4887b0a8bb86c174409cb625157784e18c5e5559a381.wai create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/objects/6ce13c9ef6872caeb7fbe71661ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/objects/b7bf0717e968d7b6be473785c9f66cbb814cde679bceb1ae37f0765308ddee72.wai create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/objects/cf842ef3058d3c54d56c0ea3e075efdc77163602b4a1dabcff080e5ea28b9946.wai create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/objects/d382ba093b0595c44a43dc3aad22fc0bed42baeb3488f00dfe3567056a7009c5.wai create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/objects/f525b4450c29153dde0b43e4d143dfb76fcc3884c607b744c8a53fa6a1728580.wai create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/objects/f7f7f4d6af777bfcce09cdda5ecb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/package.receipt.json create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/plan-v.txt create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/policy.json create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/policy.toml create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/stages/legacy.json create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/stages/mobile.json create mode 100644 wai/pack-conformance/packs/video-ladder-01/package/stages/tv.json create mode 100644 wai/pack-conformance/packs/video-ladder-01/policy.toml create mode 100644 wai/wai-pack/src/files.rs create mode 100644 wai/wai-pack/tests/ladder.rs diff --git a/.github/workflows/wai-pack.yml b/.github/workflows/wai-pack.yml index d1eca1656..769989147 100644 --- a/.github/workflows/wai-pack.yml +++ b/.github/workflows/wai-pack.yml @@ -128,6 +128,7 @@ jobs: done <<'EOF' --lib 34 --test=conformance 1 + --test=ladder 3 --test=packs 7 --test=review 9 --test=refusals 5 @@ -232,27 +233,31 @@ jobs: SUDO=""; [ "$(id -u)" -ne 0 ] && SUDO="sudo" $SUDO apt-get update -qq $SUDO apt-get install -y -qq ffmpeg - # Test 14: the golden's init.mp4 and its fragments, in its floor playlist's order, - # read as one AV1 track of every frame of the source, with a key frame at each piece - # start of the plan and nowhere else, and decode without an error. + # Test 14: each golden floor's init.mp4 and its fragments, in its floor playlist's + # order, read as one AV1 track of every frame of the source, with a key frame at each + # piece start of the plan and nowhere else, and decode without an error; a ladder + # golden has one floor playlist per floor rung (packaging §7.1), each read so. - name: The goldens' floors read and decode shell: bash working-directory: wai/pack-conformance/packs run: | set -euo pipefail - for g in video-base-01 video-staged-01; do + for g in video-base-01 video-staged-01 video-ladder-01; do ( cd "$g/package" - tmp=$(mktemp -d) - cat floor/v/init.mp4 $(grep -v '^#' hls/classic/floor-v.m3u8 | sed 's#^\.\./\.\./##') > "$tmp/floor.mp4" - ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=codec_name,width,height,nb_read_frames -of default=nw=1 "$tmp/floor.mp4" | tee "$tmp/probe.txt" - grep -qx 'codec_name=av1' "$tmp/probe.txt" - grep -qx 'nb_read_frames=200' "$tmp/probe.txt" - keys=$(ffprobe -v error -select_streams v:0 -show_entries packet=pts,flags -of csv=p=0 "$tmp/floor.mp4" | awk -F, '$2 ~ /K/ {print $1}' | tr '\n' ' ') - want=$(tr '\n' ' ' < plan-v.txt) - echo "$g key frames: $keys" - [ "$keys" = "$want" ] || { echo "::error::$g: key frames at $keys; the plan says $want"; exit 1; } - ffmpeg -v error -xerror -i "$tmp/floor.mp4" -f null - - echo "$g: the floor reads as one AV1 track of 200 frames, a key frame at each piece start" ) + for pl in hls/classic/floor-*.m3u8; do + f=$(basename "$pl" .m3u8); f=${f#floor-} + tmp=$(mktemp -d) + cat "floor/$f/init.mp4" $(grep -v '^#' "$pl" | sed 's#^\.\./\.\./##') > "$tmp/floor.mp4" + ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=codec_name,width,height,nb_read_frames -of default=nw=1 "$tmp/floor.mp4" | tee "$tmp/probe.txt" + grep -qx 'codec_name=av1' "$tmp/probe.txt" + grep -qx 'nb_read_frames=200' "$tmp/probe.txt" + keys=$(ffprobe -v error -select_streams v:0 -show_entries packet=pts,flags -of csv=p=0 "$tmp/floor.mp4" | awk -F, '$2 ~ /K/ {print $1}' | tr '\n' ' ') + want=$(tr '\n' ' ' < plan-v.txt) + echo "$g $f key frames: $keys" + [ "$keys" = "$want" ] || { echo "::error::$g $f: key frames at $keys; the plan says $want"; exit 1; } + ffmpeg -v error -xerror -i "$tmp/floor.mp4" -f null - + echo "$g $f: the floor reads as one AV1 track of 200 frames, a key frame at each piece start" + done ) done licences: diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md index 6fa6bf836..b6da01232 100644 --- a/wai/CHANGELOG.md +++ b/wai/CHANGELOG.md @@ -6,6 +6,30 @@ wire format may change and such changes are recorded here. ## v0.4.0 — current +### Packaging: a title's whole ladder in one package + +- **Several floor rungs per package** ([packaging](extensions/packaging.md) §7.1). A + component may have any number of floor rungs; each piece then has one floor object per + floor rung, in ladder order, all over one base, so the base of a ladder is coded once. + Each floor rung has a **floor name**: the component's id when it has one floor rung (so + existing packages are unchanged, byte for byte), the rung's id when it has several. The + name names the supplied stream (`.obu`, §7.3), the CMAF files (`floor//`, + §7.6), the floor playlist (`hls/classic/floor-.m3u8`), the DASH representation + (`-floor`) and the MoQ track (`/floor`); a floor name that cannot be one path + segment, or two equal in any case, is refused (`pack-id`). The classical master lists one + variant per floor rung; with several, `dash/classic.mpd` carries each representation's + codecs and size on the representation. The verifier holds the *k*-th floor entry of each + piece to the *k*-th floor rung. +- **The DASH renderer** (`wai::http_binding::dash`) writes a representation's own + `@codecs`, `@width` and `@height` when given, and an adaptation set's `@codecs` only when + every representation shares it. +- **The packer reads its inputs as streams.** It reads the source twice, a frame at a + time, and each floor stream a temporal unit at a time, and writes each file as it is + made; a source that does not read the same twice is refused (`pack-source-changed`). +- **Conformance.** `packs/video-ladder-01/` (two floors, one at half size, over + `video-base-01`'s bases, which are the same objects), `ladder-mutations/`, + `tests/ladder.rs`, and the independent verifier `pack_verify.py`, which re-derives the + ladder golden from its sources. `supplied_floor.py` writes one stream per floor rung. ### `wai.delivery.settlement`: delivery paid on what the party that received it signed - **The extension** ([settlement](extensions/settlement.md)) registers the record diff --git a/wai/extensions/packaging.md b/wai/extensions/packaging.md index 287b0aae7..06e7c7c5b 100644 --- a/wai/extensions/packaging.md +++ b/wai/extensions/packaging.md @@ -32,6 +32,9 @@ where it names them. - **Class**: a delivery profile the policy names. - **Moment**: a declared span of presentation time with tags. - **Floor**: a rendition in a standard codec, for sinks that lack the primary. +- **Floor name**: the name a floor rung's files and catalog entries carry (§7.1): its + component's id when the component has one floor rung, the rung's id when it has + several. - **Timebase** of a component: `num / den` units per second. For video one unit is one frame; for audio, one sample. @@ -615,8 +618,14 @@ and one without the source cannot. A floor's `sse` is `2^64 − 1`. **7.1** Every piece of a video, image or audio component **MUST** have a floor rendition in a capability of SPEC §5's mandatory floor or recommended set; a packager refuses a video component with no floor rung (`floor-missing`). A film or world package SHOULD -have one. This revision packs a supplied AV1 floor (`wai.video.av1` or -`wai.video.av1.lossless`, `source = "supplied"`). +have one. A component may have several floor rungs: each piece then has one floor object +per floor rung, in ladder order (§5.7), so one package carries a ladder of standard-codec +renditions over one base, which is coded once. Each floor rung has a floor name (§2): the +component's id when the component has one floor rung, the rung's id when it has several. +A floor name names files (§7.3, §7.6, §8.3), so one that cannot be one path segment of a +listing, or two floor names of a package equal once `A`–`Z` are mapped to `a`–`z`, are +refused (`pack-id`, §11.1). This revision packs supplied AV1 floors (`wai.video.av1` or +`wai.video.av1.lossless`, `source = "supplied"`), one stream per floor rung. **7.2** *Floor objects.* Each piece's floor is one object of the floor rung's capability (§5.2), whose manifest carries `derived_from` (SPEC §7.1, *Derived renditions*) naming @@ -633,13 +642,15 @@ sequence header's maximum frame height and width, the component's timebase `num` `den`), then each temporal unit as a `u32` little-endian length and its bytes as the stream holds them. -**7.3** *A supplied floor* is a directory holding, per video component, `.obu`: an -AV1 stream in the low-overhead OBU format (every OBU with its size field), one temporal -unit per source frame. Its listing (SPEC §3.1) of every file is pinned by the policy's -`floor.supplied_listing`. A packager **MUST** refuse, before it writes anything: +**7.3** *A supplied floor* is a directory holding, per floor rung of a video component, +`.obu` (§7.1): an AV1 stream in the low-overhead OBU format (every OBU with +its size field), one temporal unit per source frame. Its listing (SPEC §3.1) of every +file is pinned by the policy's `floor.supplied_listing`. A packager **MUST** refuse, +before it writes anything, the directory and then each floor rung's stream in ladder +order: - a directory whose listing does not hash to `floor.supplied_listing` - (`floor-listing-mismatch`), and a component with no stream in it + (`floor-listing-mismatch`), and a floor rung with no stream in it (`floor-stream-missing`); - a stream that does not split into temporal units each holding a frame, whose first unit holds no sequence header, with a sequence header whose bytes differ from the @@ -663,10 +674,10 @@ no tier or `replicate` claim covers it. **7.5** A floor produced by an encoder that is not a pure function of its input (§11) **MUST** name that encoder and its version in `derived_from.renderer`. -**7.6** *CMAF.* The floor of a video component is also written as CMAF files, which no -stage index lists: `floor//init.mp4`, and one fragment per piece, -`floor//.m4s`. Box layouts are ISO/IEC 14496-12's, with the -AV1 binding's sample entry; every integer is big-endian and every time 0: +**7.6** *CMAF.* Each floor rung's floor is also written as CMAF files, which no stage +index lists: `floor//init.mp4`, and one fragment per piece, +`floor//.m4s`. Box layouts are ISO/IEC 14496-12's, +with the AV1 binding's sample entry; every integer is big-endian and every time 0: - `init.mp4`: `ftyp` (major brand `cmfc`, minor version 0, compatible `cmfc`, `iso6`, `av01`), then `moov` holding `mvhd` (version 0, timescale `tb_num`, rate 1, volume 1, @@ -737,18 +748,20 @@ second; a variant's `BANDWIDTH` is the largest over the pieces it lists and `AVERAGE-BANDWIDTH` the rate of all their bytes over all their durations. A floor variant's bytes per piece are its fragment's; a WAI variant's are the listed bases' and refinements', over the pieces its HTTP view lists (above). Every playlist -line ends with a line feed. For component *c*, of frame size `W×H`, whose floor has -codecs string *F* and maximum frame size `FW×FH`: +line ends with a line feed. For component *c*, of frame size `W×H`, and each of its +floor rungs, in ladder order, of floor name *f* (§7.1), codecs string *F* and maximum +frame size `FW×FH`: - `hls/classic/master.m3u8`: `#EXTM3U`, `#EXT-X-VERSION:7`, - `#EXT-X-INDEPENDENT-SEGMENTS`, `#EXT-X-STREAM-INF:BANDWIDTH=,AVERAGE-BANDWIDTH=,CODECS="F",RESOLUTION=FWxFH`, - `../classic/floor-.m3u8`: a URI that names the same playlist from every class's + `#EXT-X-INDEPENDENT-SEGMENTS`, then per floor rung + `#EXT-X-STREAM-INF:BANDWIDTH=,AVERAGE-BANDWIDTH=,CODECS="F",RESOLUTION=FWxFH` and + `../classic/floor-.m3u8`: a URI that names the same playlist from every class's directory, so each class's master differs from this one only by the session-data line, as [http-delivery](http-delivery.md) §11.1 and §11.8 require. -- `hls/classic/floor-.m3u8`: `#EXTM3U`, `#EXT-X-VERSION:7`, +- `hls/classic/floor-.m3u8`, per floor rung: `#EXTM3U`, `#EXT-X-VERSION:7`, `#EXT-X-TARGETDURATION:`, `#EXT-X-MEDIA-SEQUENCE:0`, `#EXT-X-PLAYLIST-TYPE:VOD`, - `#EXT-X-INDEPENDENT-SEGMENTS`, `#EXT-X-MAP:URI="../../floor//init.mp4"`, then per - piece `#EXTINF:,` and `../../floor//.m4s`, then `#EXT-X-ENDLIST`. + `#EXT-X-INDEPENDENT-SEGMENTS`, `#EXT-X-MAP:URI="../../floor//init.mp4"`, then per + piece `#EXTINF:,` and `../../floor//.m4s`, then `#EXT-X-ENDLIST`. - `hls//master.m3u8`: the classical master, byte for byte, with, when the class lists a WAI object over HTTP, `#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.multivariant",VALUE="wai.m3u8"` after `#EXT-X-INDEPENDENT-SEGMENTS`, and no other change. @@ -759,8 +772,9 @@ codecs string *F* and maximum frame size `FW×FH`: `#EXT-X-STREAM-INF:BANDWIDTH=,AVERAGE-BANDWIDTH=,CODECS="",X-WAI-FLOOR="",RESOLUTION=WxH`, `wai-.m3u8`. The union and the floor are [http-delivery](http-delivery.md) §4.2's over the objects the class lists. -- `hls//wai-.m3u8`: the floor playlist's lines without `#EXT-X-MAP`, adjacent - to it ([http-delivery](http-delivery.md) §11.2); per piece, `#EXT-X-GAP` when the +- `hls//wai-.m3u8`: the first floor rung's playlist's lines without + `#EXT-X-MAP`, adjacent to it ([http-delivery](http-delivery.md) §11.2) and so to every + floor rung's, which list the same pieces; per piece, `#EXT-X-GAP` when the class's HTTP view lists nothing of it (a floor-only piece, or one whose base is not of the default base capability), `#EXTINF:,`, each refinement the class lists, in entry order, as `#WAI-LAYER:N=,URI="../../objects/.wai#n="`, @@ -778,10 +792,13 @@ over the component's whole duration and its target duration, `` and ``, indented by two spaces a level: - `dash/classic.mpd`: `` - holding `` with - ``: ``, + holding, per floor rung, `` with + ``: ``, a `SegmentTimeline` of one `` per - piece, and one `` per piece. + piece, and one `` per piece. With + several floor rungs, the `AdaptationSet` carries no `codecs`, `width` or `height`, and + each `Representation` carries its own after `bandwidth`: + ``. - `dash/.mpd`, when the class's HTTP view lists a WAI object: `` holding ``, @@ -819,9 +836,10 @@ does not hold. A sink receives every track a track depends on (moq-streaming-for §4.1), so a dependency is all of them. A refinement track carries `wai_delivery_timeout_ms` (§8.6), a catalog field this extension defines under the `wai_` prefix of moq-streaming-format §4. The base track has `altGroup` 1 when the component has -a floor: the floor is a track `/floor` of `packaging` `"cmaf"`, in the same namespace, -with `altGroup` 1, `renderGroup` 1, `codec`, `width` and `height`, and a sink that -selects the floor subscribes to no layer track. The receipts tracks follow, one per media +a floor: each floor rung's floor, in ladder order, is a track `/floor` for its floor +name *f* (§7.1), of `packaging` `"cmaf"`, in the same namespace, with `altGroup` 1, +`renderGroup` 1, `codec`, `width` and `height`, and a sink that selects a floor +subscribes to no layer track. The receipts tracks follow, one per media track in its order, each `{"isLive": false, "name": "/receipts", "namespace", "packaging": "wai-receipts"}`. The catalog passes moq-streaming-format §4.1's check, and a packager writes no other. A package holds no receipt: the publisher signs each track's @@ -1041,16 +1059,17 @@ royalty-free by its standards body"; it is not a freedom-to-operate opinion. policy.toml policy.json plan-.txt index-.wsix package.receipt.json objects/.wai … - floor//init.mp4 floor//.m4s … + floor//init.mp4 floor//.m4s … (per floor rung, of floor name f) hls/classic/… hls//… dash/… moq/catalog.json stages/.json claims/.measurement.json (a metered package) LISTING `policy.toml` is the policy as given; `policy.json` its effective canonical JSON (§3.2). `LISTING` is the listing (SPEC §3.1) of every other file, and its SHA-256 is the -**pack digest**. A component or class id that cannot be one path segment of a listing, -two class ids equal once `A`–`Z` are mapped to `a`–`z`, and a class named `classic` in -any case (ids name paths, and paths fold case) are refused (`pack-id`). +**pack digest**. A component or class id or a floor name (§7.1) that cannot be one path +segment of a listing, two class ids or two floor names equal once `A`–`Z` are mapped to +`a`–`z`, and a class named `classic` in any case (ids name paths, and paths fold case) +are refused (`pack-id`). **11.2** *Re-pack equivalence.* Given the same source bytes, effective policy, supplied floor, signing key and packager identity, a conforming reference packager **MUST** @@ -1077,7 +1096,7 @@ failed check names is not applied: effective canonical JSON, `royalty_free_only` forced on where `policy.json` says `true` (`policy-json-mismatch`; an override never turns it off, §3.2, so a `policy.json` that says `false` over a `policy.toml` that says `true` is refused - here); its ids can name files (`pack-id`, §11.1); and under that effective policy it + here); its ids and floor names can name files (`pack-id`, §11.1); and under that effective policy it asks for nothing a packager may not emit (§3.6's reason; under `royalty_free_only`, a patent-pool floor is `license-refused`). 5. The receipt's components are the policy's, by id, in order, each of the policy's @@ -1098,9 +1117,9 @@ failed check names is not applied: (`plan-mismatch`); - every entry's object is present (`object-missing`) and keeps the object rules of §6.3, its counted bytes included; - - before any frame is decoded, each piece's floor object, where the policy has a floor - rung and the object's payload reads as §7.2's framing, holds one unit per frame of - its piece (`floor-object-mismatch`); + - before any frame is decoded, each piece's floor objects, where the policy has floor + rungs and an object's payload reads as §7.2's framing, hold one unit per frame of + their piece (`floor-object-mismatch`); - every base and refinement, in entry order: a base decodes by its capability (a still is a PNG §5.7 reads, its one frame held for the piece), or it is `prefix-digest`; its manifest is the one §5.2 states for its piece's frames and its @@ -1111,15 +1130,17 @@ failed check names is not applied: does not apply, ends the check; - then every decode-equivalent prefix decodes to its `prefix_digest` (`prefix-digest`); - - when all of that holds, the floor: per piece, one floor object of the floor rung's - capability whose renderer, settings, framing header, unit count and target are - §7.2's (`floor-object-mismatch`) and which presents the piece's base - (`floor-motif-mismatch`); its units each one temporal unit holding a frame, the - first of the first piece carrying a sequence header, every sequence header the - first's bytes, every shown key frame carrying one (`floor-av1-malformed`); each - piece opening on a shown key frame, and no other unit being one unless the policy - allows extra key frames (`floor-keyframe-mismatch`); and the CMAF files are the - ones its temporal units give (§7.6, `floor-cmaf-mismatch`); + - when all of that holds, the floors, floor rung by floor rung in ladder order: per + piece, one floor object per floor rung, the rung's the *k*-th floor entry for the + *k*-th floor rung, of the rung's capability, whose renderer, settings, framing + header, unit count and target are §7.2's (`floor-object-mismatch`) and which + presents the piece's base (`floor-motif-mismatch`); its units each one temporal unit + holding a frame, the first of the rung's first piece carrying a sequence header, + every sequence header the first's bytes, every shown key frame carrying one + (`floor-av1-malformed`); each piece opening on a shown key frame, and no other unit + being one unless the policy allows extra key frames (`floor-keyframe-mismatch`); and + the rung's CMAF files are the ones its temporal units give (§7.6, + `floor-cmaf-mismatch`); - then the catalogs are the ones the index, the objects and the floor give, and an index no catalog can be written for (a start past `2^53 − 1`) is refused (`catalog-mismatch`). @@ -1131,7 +1152,8 @@ failed check names is not applied: **11.4** *What this revision packs.* The reference packager packs one video component: bases of `wai.video.int_motion` (§5.5, §5.6) and stills of `wai.image.png` (§5.7); refinements of `wai.video.int_refine` over an `int_motion` base (§5.4); each piece by its -ladder, a rule's ladder subset included (§5.7); and a supplied AV1 floor (§7.3). Its live +ladder, a rule's ladder subset included (§5.7); and a supplied AV1 floor per floor rung, +one or several (§7.1, §7.3). Its live packer packs the same pieces in windows, without a floor (§9.2). It refuses by name, before writing anything, what it does not pack yet: another medium (`pack-media-unsupported`), a floor to encode (`pack-floor-encode-unsupported`), and a rung @@ -1145,7 +1167,10 @@ piece past `2^32 − 1` units (`pack-piece-length`); catalogs it cannot write, t §11.3 refuses as `catalog-mismatch` (`pack-catalog`); a meter that was asked for and gives no figure, a span too short to reach a microjoule or a figure past `2^64 − 1` (`pack-meter`, never an unmetered package in its place); a measurement claim it cannot -write (`pack-measurement-claim`); and a listing it cannot write (`pack-listing`). It +write (`pack-measurement-claim`); a listing it cannot write (`pack-listing`); and a source +that does not read the same twice (`pack-source-changed`) or a supplied floor stream that +does not (`floor-listing-mismatch`): it reads each a frame or a temporal unit at a time, +once to cut and check it and once to code it, and holds neither whole. It writes a package only into a directory that is new or holds nothing, and refuses any other before it packs (`pack-out-not-empty`): written among another package's files, it would leave behind the ones it does not write. @@ -1168,4 +1193,4 @@ would leave behind the ones it does not write. | `measurement-claim-missing`, `measurement-claim-invalid` | §9.4 | | `unexpected-file`, `listing-missing`, `listing-mismatch`, `policy-digest-mismatch`, `policy-json-mismatch`, `policy-component-mismatch`, `index-missing`, `index-policy-mismatch`, `plan-mismatch`, `object-missing`, `object-manifest`, `prefix-digest`, `catalog-mismatch`, `catalog-unexpected`, `object-unlisted` | §11.3 | | `pack-id`, `pack-source-missing`, `pack-source-rate`, `pack-media-unsupported`, `pack-floor-encode-unsupported`, `pack-capability-unsupported` (naming the capability) | §11.1, §11.4 | -| `pack-encode`, `pack-piece-length`, `pack-catalog`, `pack-meter`, `pack-measurement-claim`, `pack-listing`, `pack-out-not-empty` | §11.4 | +| `pack-encode`, `pack-piece-length`, `pack-catalog`, `pack-meter`, `pack-measurement-claim`, `pack-listing`, `pack-source-changed`, `pack-out-not-empty` | §11.4 | diff --git a/wai/pack-conformance/README.md b/wai/pack-conformance/README.md index 375ff2408..29c0d3817 100644 --- a/wai/pack-conformance/README.md +++ b/wai/pack-conformance/README.md @@ -57,6 +57,20 @@ packages (§6–§11), and their delivery over a simulated link (§8.9). written by `supplied_floor.py`. The bumper's base, layers and floor are one object each; the still's piece is carried over HTTP by the floor (§8.3) and over MoQ on the base track. +- `packs/video-ladder-01/` — a golden package of two floor rungs over one base (§7.1): + the fixture and base rung of `video-base-01`, so its bases are that package's objects, + and two supplied AV1 streams, `floor/hi.obu` at the fixture's size and `floor/lo.obu` + at half its width and height, each written by `supplied_floor.py` (`--scale lo=2`). + Each piece has its base and one floor object per floor rung; each floor has its own + CMAF files under its floor name (`floor/hi/`, `floor/lo/`), its own floor playlist and + MoQ track, and the classical master, every class's master and `dash/classic.mpd` list + both. +- `ladder-mutations/` — packages a verifier must refuse or accept (§11.3), each the + ladder golden altered (re-sealed with its key where the receipt or `LISTING` alone + would catch it), in `package-mutations/`'s layout: the golden itself (`ok`); piece 2's + two floor objects swapped (`floor-object-mismatch`); the second floor's CMAF files + under the component's name (`floor-cmaf-mismatch`); and a classical master listing one + floor of two (`catalog-mismatch`). - `mutations/` — stage indexes, objects and version-2 receipts, and `expected.json`: each case's reason (§6.2–§6.4, §9.1), a well-formed case of each kind among them, and three receipts carrying a signature only a verifier that checks the equation diff --git a/wai/pack-conformance/ladder-mutations/expected.json b/wai/pack-conformance/ladder-mutations/expected.json new file mode 100644 index 000000000..459c1583e --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/expected.json @@ -0,0 +1,35 @@ +{ + "pack": "video-ladder-01", + "cases": [ + { + "name": "ok", + "reason": "ok", + "remove": [] + }, + { + "name": "floors-swapped", + "reason": "floor-object-mismatch", + "remove": [ + "floor/hi/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s", + "floor/lo/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s" + ] + }, + { + "name": "floor-under-the-component-s-name", + "reason": "floor-cmaf-mismatch", + "remove": [ + "floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s", + "floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s", + "floor/lo/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s", + "floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s", + "floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s", + "floor/lo/init.mp4" + ] + }, + { + "name": "master-lists-one-floor", + "reason": "catalog-mismatch", + "remove": [] + } + ] +} diff --git a/wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/LISTING b/wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/LISTING new file mode 100644 index 000000000..3f9313343 --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/LISTING @@ -0,0 +1,46 @@ +c5203585fea0962de941d258789157a0590e18b62a2e5d1facbd11e1cfd1ddb9 dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6 floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b floor/hi/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s +58c598174eed554cd0d1bc8abedca8c9d51d992c8e3b963bcb7574da4983ed9f floor/hi/init.mp4 +589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f floor/v/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s +6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db floor/v/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s +acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74 floor/v/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s +d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833 floor/v/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s +d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9 floor/v/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s +640cd81c83baefbe13e8ccc2bf577395c6602885cc73e201ca34dc267e7f0a48 floor/v/init.mp4 +bfa98255d682517f58df4073bc71fdb3fcca120fc33d16e4aca873392476c586 hls/classic/floor-hi.m3u8 +ad81674ac359096ebed255a26a40e82858e53e9754702429e59d72898df33812 hls/classic/floor-lo.m3u8 +3fd88f9dcf835edf0fcca8dff8371d2b4e897ac097fc85901477c950c0da7996 hls/classic/master.m3u8 +3fd88f9dcf835edf0fcca8dff8371d2b4e897ac097fc85901477c950c0da7996 hls/legacy/master.m3u8 +09e75f55cb7ea829a4e630404d2ab540e8be0dbb1c4365dc30802359b658aed9 hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +09e75f55cb7ea829a4e630404d2ab540e8be0dbb1c4365dc30802359b658aed9 hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +a5140df0bf1f82b88335c13789502298a952b350ad45dfcfcd249b2b9a263a71 index-v.wsix +c310c5a4ae14df691a1a37a6c34e90243ed72be1e8f725d38f1babe1f6866b21 moq/catalog.json +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +2f5bd830d841eb122c63ae57a15442075478fd522ce55b6f9bcbe41acd51d8ae objects/482fbbb9b39bdb9cbf00515f94269ea591df681ced90b05d97e0df106b49b08e.wai +0057633252a2c2ed5f71fe14ca78075c8e89fc6675a08335ac90f0e56032b825 objects/4ab8f747d181632f342a4887b0a8bb86c174409cb625157784e18c5e5559a381.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +1a6f30fdc000f258c948470386d84beef2ba5a84e922c355093837ae21fd573c objects/6ce13c9ef6872caeb7fbe71661ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai +b773dac63c9d2d9980d0d249ea956e03065c1ae40d17c512df29b690c0c820ef objects/b7bf0717e968d7b6be473785c9f66cbb814cde679bceb1ae37f0765308ddee72.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +cc8a6fc59be29bd33d96fb30ea9e5a30a5aa367a82da9c5784cbadce63396f62 objects/cf842ef3058d3c54d56c0ea3e075efdc77163602b4a1dabcff080e5ea28b9946.wai +01b596b672de3352adb3e01b34fcddfeff975f4ee1d0b88dde160ac10c9bf929 objects/d382ba093b0595c44a43dc3aad22fc0bed42baeb3488f00dfe3567056a7009c5.wai +9d9ae296558ce7f7d644ad0ca3af65eb4fc98d03b0bd6d7a8fc821fc952e86c1 objects/f525b4450c29153dde0b43e4d143dfb76fcc3884c607b744c8a53fa6a1728580.wai +3d573ee482f8187b0e3bc839aeea0f51a67144588d6d207e8466fea91a0c5b34 objects/f7f7f4d6af777bfcce09cdda5ecb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai +bd6086051d0452449da8a90f426f454fee368b4794f7c294218a410ded8d9088 package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +d1cf1bd28a06f3a9d695dd64331cb56cf793818e9e9e6cec620183d9dce37b2d policy.json +4ba48d04e5c8e72336e32307b27b4371c96f20f7abf959ac1c1d344ccb9a8106 policy.toml +813329d5521ab5891bb86d29b362e448fae4247c949384b0687d66966546c4fe stages/legacy.json +ca8e0059a23311d7690a0519f85dfb48883721c817cd8fe1cd481cabe14b0032 stages/mobile.json +8bc9c9da674b4765ead0e41d54852ac105161e9638e7ae705e3982847b069e4c stages/tv.json diff --git a/wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s b/wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s new file mode 100644 index 0000000000000000000000000000000000000000..78b5c886674e2dbd93fd45b08573c5214c082bb5 GIT binary patch literal 1127 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 J3Z`r-_#X%x5%B;3 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s b/wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s new file mode 100644 index 0000000000000000000000000000000000000000..6adf8fdfddb9f43c4eda7bcb3dc4a4a5518f1282 GIT binary patch literal 2526 zcmZ`(Yfuwc7+sbW!qWsWgd{+)fLH~07V4lzO>NbV4=Pp}WDp556kEb0#zzND*IGpy zsI(|*QL$<(T18Z#Qguv_Y6?D}7DXb8DB9YNf)4a)?YEnd{nDA{2l@E!`OZ1_+#C8YTu-NHMj$gr`edrK~Fxzy@0e)hSU zgG;lE=jKe>5-UxKo|4#7TKTtY`oxcVO0_3PXInJFU+)I&EFRa;lyc~o{3M2sq+Cr5 zLAbSnS0h0%M7^bewodQA-ewL?mQ>H45kE?P@skf}B_(hX4C5G*A>0mrplb6gj{o7O zOV?uB{!r3>lp868KFb7*3{g}|2T?+Sj|lZF@`3qBk3>CUXc^@x6z^5rgjvGi_KfI` z8!^YKO|+Eq7D=ehJXJ?Z%YE{}zDOYSRmx25{FJ<+aKPiqhHy1Kk`fVBi86kuxwvmm z8*ur#xZhpIPe`}59|#|;?4%`B04W?eVjtL`Bzle?DoH&KL=u6Ic#tQu{N~v{k5*7p zFl?|BZP-iP$+(r@o%?ZK&h?uWbRZ=I%Uk#%>y-n~4vW=vFr`3_A(mi4TIE)^HPj?Z zEnEUIggCpt#c0Ik9+gj{n_)D}%v*=iu=A76sq=D^u9+l%F?0YmigfQw=Os@^Bm_W0 z;R5f$YP(Gsl3PE|B=^s#>xUgg3dP&{ZAM4rk(Ad9o#S72*4!~2@G;K*EdIWS z!35>(FZiOOv-a!9E9FNGO4^^I9TvGu^nK7ST293wXKaM2dFNMo`PG_z8PK1AT!HQG zWtVgPyF7M7wDHc)6xWu$?(4oWVNn$5O!|+vx_mfzmBSh*emNv#V=C-pso(-|- zzgEV^Wg5Qj#>IjjpqQ?dsOIw-9jlNug+TiaV$Y>EzTMXv{)F{DlXUME*|UQ;;3XwC zHSbuT3@dL6yr0{6j0|jfWT}=EmNc1wYPL|k8&N$t5m#@3Sm!!~jSR$aOY!!L@^5xW z#qCiW;B6*2>s#)@jh&CgK_Vz#u=@QqY5*^AXmc^N48g5h=uqYS1Wjn~y1hKVh5>kz zL)n&E0z9o`hn@|dC63$7Kb|x>n6>i%#B=$ z12>xV;gmW02y;g4xe)RC&7hD$R7@-5lRo;^EJ!nxbh~P6a(L;`)5M9V>L}385_sRS zudq+z)5a4KBNnAuBM(GOg$I}|6ju$;L8w-Zbqpz~`q5a^UoZ|X*t}BAZ=OZ;(dU?rCb!_9kb$|A5g*lx= yi~F5!xUnfs`I14B4!hGkq_~7SzAZYO@~EmG7+3LP?C!#fdY7*730?O%TKz9K{6yUV literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s b/wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s new file mode 100644 index 0000000000000000000000000000000000000000..5c06ef47a465a0b1f6802d80907cf89f7a8c472a GIT binary patch literal 1695 zcmZQzV6w=~&rf4uU=YYn%SZvzAi&DNz@$)8ln53t0f{q##TkL5NJ&~s35Wp&3m6y} zzmyb}<}om^gM>AJdL4i?i2WR*4a}BcglGbhl1OY3B(@?FTO5gvtXBp}To?yi3P~K7 zIml{|%||v9Ssa;-tOgfb8p#dFYKSohIed`y;$kD4DTZV(G8;J@kj+6BM-G2vy~yT6 z*(~X~DTyUqT)^05Qh$_Nb3no92BQGOY#^7rfoWT(uGSs>wEWQUN1Ue1Dhy@k^6mfC zH7#0jFEeB8{qM2MSyO6 z49yA*4^;l`x@=%1ZotCGf-HVtJ87R~On{M)0UHxX155)$14E~Rk-Py13$Fk~tQ%xb z`4ZjY>{?lg*rScdJrB$?5;frB5M1DZu;reK@3MZNV<2b-t3W#JpyihgOP4@QCp0u1v5rJ#C%_O}6rgc#W$CL@HJj3f+1m^ePJK?q%5 z#U*NeWnlu)DPkc|POPYOI}^^AQfc20jl*NyNuAS7dJ3Lwf^p(c@2PGs=|Up|&O006TcZ;t=~ literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/init.mp4 b/wai/pack-conformance/ladder-mutations/floor-under-the-component-s-name/floor/v/init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..d419e7893b423b9190462bd07734f8d65d2f1cfc GIT binary patch literal 628 zcmaJ72wlj--P?G~v~>ZbEg8c>oz#gjkv{w=`HjkN|b0NVI}qD>5;-$JpC X@ML@i0XNF!FA&0NA34waI@sGks3|>p literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/ladder-mutations/floors-swapped/LISTING b/wai/pack-conformance/ladder-mutations/floors-swapped/LISTING new file mode 100644 index 000000000..9fe69e397 --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/floors-swapped/LISTING @@ -0,0 +1,46 @@ +00ebf8e21ba74af068445c05138d2523c801d9d27d364e1377b518540bc8b34d dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6 floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s +acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74 floor/hi/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s +58c598174eed554cd0d1bc8abedca8c9d51d992c8e3b963bcb7574da4983ed9f floor/hi/init.mp4 +2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b floor/lo/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s +6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s +d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833 floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s +d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9 floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s +640cd81c83baefbe13e8ccc2bf577395c6602885cc73e201ca34dc267e7f0a48 floor/lo/init.mp4 +49c1a6c22b80524c40e9509fd3c93ab4a7c1a470f4ff6df188aefe656a940a88 hls/classic/floor-hi.m3u8 +cdb43220dbeebd408a3a221829c819ca5fb7c38682f3e63ebe2039648d4ce34d hls/classic/floor-lo.m3u8 +cf34fb5f72042d09e651c8f21b68affb966bdbe55422e70c0d9d66d1a228a0af hls/classic/master.m3u8 +cf34fb5f72042d09e651c8f21b68affb966bdbe55422e70c0d9d66d1a228a0af hls/legacy/master.m3u8 +d40a6303c71682889899b2044f2d321dfd1f42b268abed0671109c61e0a67ad1 hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +d40a6303c71682889899b2044f2d321dfd1f42b268abed0671109c61e0a67ad1 hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +555648a512bc2da29e24dd6c2c4c2c245fb65d05a1228a8185dbb36d94299b46 index-v.wsix +c310c5a4ae14df691a1a37a6c34e90243ed72be1e8f725d38f1babe1f6866b21 moq/catalog.json +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +2f5bd830d841eb122c63ae57a15442075478fd522ce55b6f9bcbe41acd51d8ae objects/482fbbb9b39bdb9cbf00515f94269ea591df681ced90b05d97e0df106b49b08e.wai +0057633252a2c2ed5f71fe14ca78075c8e89fc6675a08335ac90f0e56032b825 objects/4ab8f747d181632f342a4887b0a8bb86c174409cb625157784e18c5e5559a381.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +1a6f30fdc000f258c948470386d84beef2ba5a84e922c355093837ae21fd573c objects/6ce13c9ef6872caeb7fbe71661ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai +b773dac63c9d2d9980d0d249ea956e03065c1ae40d17c512df29b690c0c820ef objects/b7bf0717e968d7b6be473785c9f66cbb814cde679bceb1ae37f0765308ddee72.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +cc8a6fc59be29bd33d96fb30ea9e5a30a5aa367a82da9c5784cbadce63396f62 objects/cf842ef3058d3c54d56c0ea3e075efdc77163602b4a1dabcff080e5ea28b9946.wai +01b596b672de3352adb3e01b34fcddfeff975f4ee1d0b88dde160ac10c9bf929 objects/d382ba093b0595c44a43dc3aad22fc0bed42baeb3488f00dfe3567056a7009c5.wai +9d9ae296558ce7f7d644ad0ca3af65eb4fc98d03b0bd6d7a8fc821fc952e86c1 objects/f525b4450c29153dde0b43e4d143dfb76fcc3884c607b744c8a53fa6a1728580.wai +3d573ee482f8187b0e3bc839aeea0f51a67144588d6d207e8466fea91a0c5b34 objects/f7f7f4d6af777bfcce09cdda5ecb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai +96b7f835515e95018d614ac326d03538b055a9ac2d3a52fac97e9f2dc29dc63b package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +d1cf1bd28a06f3a9d695dd64331cb56cf793818e9e9e6cec620183d9dce37b2d policy.json +4ba48d04e5c8e72336e32307b27b4371c96f20f7abf959ac1c1d344ccb9a8106 policy.toml +813329d5521ab5891bb86d29b362e448fae4247c949384b0687d66966546c4fe stages/legacy.json +ca8e0059a23311d7690a0519f85dfb48883721c817cd8fe1cd481cabe14b0032 stages/mobile.json +8bc9c9da674b4765ead0e41d54852ac105161e9638e7ae705e3982847b069e4c stages/tv.json diff --git a/wai/pack-conformance/ladder-mutations/floors-swapped/dash/classic.mpd b/wai/pack-conformance/ladder-mutations/floors-swapped/dash/classic.mpd new file mode 100644 index 000000000..1e82eeab4 --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/floors-swapped/dash/classic.mpd @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/ladder-mutations/floors-swapped/floor/hi/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s b/wai/pack-conformance/ladder-mutations/floors-swapped/floor/hi/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s new file mode 100644 index 0000000000000000000000000000000000000000..8747edc9f9e4a78b5be8d70f34948261b2a63000 GIT binary patch literal 2248 zcmZ`(Yfw{17+pdLDX%6F1B6EchJc{V&K08q6}2d+2;t=jrYHpwsz?g4fZFz=mhu#a zhel8+w1W>Eb)Zrzj)p=7tM!p$3kn)2pjD}~Le)AQy7wj~%MbJ8=F8dhedp}iy#au6 zES;DVRXN z+tD{wPwLv}+Ra4QL_Gyq?T*zvtaij|d#uKL?J(RKt8pBkgX3@G<34deI3M>T#&mHl zFANu9^<1pR`7Ria&&PXlKCX*&Vly4ET8Py+|7|$FU;Iq* zeDM6|>*li@(vuUF78d9hF+4}o_o_w2un7m$qMw$4VfH*WqUiG8foFLtOED*;@s;uu z)lkLvCGBRr6-OeU4E`d&=#@Q_+u+lrc)9Lm_|2r@cUtC$`kd|cOaEe`t5i~aiXAwn zDiiWFbwFS)DzL zuE%sK`X7llAGg%}ym~^d_?Ro+8u8m=m4EYoR%_i-pBW-$y5yRN=8r92?xkDVd@EpNP-@7$-HSGfrJRM7;IAC3K%5tba}Oh z-;~%l_nRHCJuS0arm%6zp!5f z9#pd?yOF+)NT9xLhWXeQqsFDp;8Ar4 zA?c_=@rapL(hr@M4Fz#szpoEP+w|h_ z{c?<)AA|q&IL{Un66h@wboc5OD3dp~XO!;nKl=9(Y4m#AoWYA#eQ~mdQoNcJ#f=FzM(Jyr~oqh8)D<$(4vlwm<^PQ z3|)eFgErk^k==73W^Bzi-!EUHe*n3`0KItoeBJHK`NOH`-X$2ci>ctXIh_H*s0W^x z8cc(-UMN0DK(ATimN!R0+bdj7c*76Dp`dbI)Kr^WMe}5ibWMrYF;um{E5rWDSQck2 J3Z`r-_#X%x5%B;3 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/ladder-mutations/floors-swapped/floor/lo/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s b/wai/pack-conformance/ladder-mutations/floors-swapped/floor/lo/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s new file mode 100644 index 0000000000000000000000000000000000000000..ec55da7e89f760ac0144c11755cf3e9561226eb0 GIT binary patch literal 2400 zcmZQzVA_zIpP$CSz#x#DmXQLaL4cWofoVobQ6gBp1SHM`7H0&KA|+`lB_IYAgaXy( zloXZbF)*-$gpGjw9Y7k$W>SG@1F;!I7$KTKq!JPvSzH-OTo{Qhjl?EKTpovdSsdaj zIK<_M5Jy%ci9hQl0O;eg9t^&G831-aG8%wy#kV%$aZ0I58H;^ zl*AG)E?_ERTK{o&ya9*NR2Bh-*+4Eg1JhkSsZ(8N8l=i*ER)^%Ke~)_P5uS1Zn4&` zIcJNyKE0EFs%8Jm*Fd&OJ9XEL`faTNexYicUhLQ(Yn!p43}x zZr*LnxJ=OW=tqw|A66x`-zYCW60gMYl;?7Ko7Bv=aVPVOO?9doL)3Sjd%y2RAs>g7 zzhb5Na+7s4b0*p~)O==JU|Rhk*GoidLz`%;gv$3ES!wxgOQ!hSZ~mje`r*NfRmVSN zsPbvJ{16DLIlX7%^{>Y*t_2u>US+&3`jBhx+`TR9lCI?LI-DStcsN=2!s7)Gr4t`V zAKx%H%EGNMR%T*1m*-v6i{+1QALJ5{n6TaIU;0Cx2MfMEUYQ!&<5K$jg_QZX$BP~` z@4fohS=-_A<3PWRX{iUka&;-Q{+(MMJEh&VKCm|ShSrB&;%lxbbWOHqE@MpGDyeH` z>Hp?$*}^EZuKTa5RWA9@YO8zyGfZ33?b6?MhTh9;e%7SH8izH-NOsp}IN3NX9_% zAc|XWyE*GK9^_`c`|@2EP=gW^`_lx3J#9b@Dl9x-SAd1OL9ujCa{FZ&Lx~-mP3J= z!h?n9FOm@lwHO>sTc3sk6?<_A&P6gw0Vw2yYM+9Un1LUveVg9$CoXXS#zp|DRqJo{ z3YwXNf-MNuLIt3kL*O=bgR=6n*yK76>k}z%$EO3;hoRdkZV-WL=N8HRdy5l5p&W&3 zse+N5K@8kFa4O%_q`g8>b9UPDr*$8WMF6$L!R-d81W=G9CZL4s>4P7`X1&b^xjl(t Ln*9Vs_%#6l=bT(r literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/ladder-mutations/floors-swapped/hls/classic/floor-hi.m3u8 b/wai/pack-conformance/ladder-mutations/floors-swapped/hls/classic/floor-hi.m3u8 new file mode 100644 index 000000000..40aecdff8 --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/floors-swapped/hls/classic/floor-hi.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:3 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-MAP:URI="../../floor/hi/init.mp4" +#EXTINF:2.400, +../../floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +#EXTINF:1.000, +../../floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +#EXTINF:2.000, +../../floor/hi/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s +#EXTINF:1.000, +../../floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +#EXTINF:1.600, +../../floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s +#EXT-X-ENDLIST diff --git a/wai/pack-conformance/ladder-mutations/floors-swapped/hls/classic/floor-lo.m3u8 b/wai/pack-conformance/ladder-mutations/floors-swapped/hls/classic/floor-lo.m3u8 new file mode 100644 index 000000000..aebf60714 --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/floors-swapped/hls/classic/floor-lo.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:3 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-MAP:URI="../../floor/lo/init.mp4" +#EXTINF:2.400, +../../floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s +#EXTINF:1.000, +../../floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s +#EXTINF:2.000, +../../floor/lo/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +#EXTINF:1.000, +../../floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s +#EXTINF:1.600, +../../floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s +#EXT-X-ENDLIST diff --git a/wai/pack-conformance/ladder-mutations/floors-swapped/hls/classic/master.m3u8 b/wai/pack-conformance/ladder-mutations/floors-swapped/hls/classic/master.m3u8 new file mode 100644 index 000000000..02be4ba12 --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/floors-swapped/hls/classic/master.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=8903,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9600,AVERAGE-BANDWIDTH=8875,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/ladder-mutations/floors-swapped/hls/legacy/master.m3u8 b/wai/pack-conformance/ladder-mutations/floors-swapped/hls/legacy/master.m3u8 new file mode 100644 index 000000000..02be4ba12 --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/floors-swapped/hls/legacy/master.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=8903,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9600,AVERAGE-BANDWIDTH=8875,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/ladder-mutations/floors-swapped/hls/mobile/master.m3u8 b/wai/pack-conformance/ladder-mutations/floors-swapped/hls/mobile/master.m3u8 new file mode 100644 index 000000000..9cdb3e5eb --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/floors-swapped/hls/mobile/master.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.multivariant",VALUE="wai.m3u8" +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=8903,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9600,AVERAGE-BANDWIDTH=8875,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/ladder-mutations/floors-swapped/hls/tv/master.m3u8 b/wai/pack-conformance/ladder-mutations/floors-swapped/hls/tv/master.m3u8 new file mode 100644 index 000000000..9cdb3e5eb --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/floors-swapped/hls/tv/master.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.multivariant",VALUE="wai.m3u8" +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=8903,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9600,AVERAGE-BANDWIDTH=8875,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/ladder-mutations/floors-swapped/index-v.wsix b/wai/pack-conformance/ladder-mutations/floors-swapped/index-v.wsix new file mode 100644 index 0000000000000000000000000000000000000000..77547f145ef3f0f51aefcba4e5acf27be2a4a083 GIT binary patch literal 2368 zcmWF!_KaX;U|^60Vi3&=#QZ?a2E@!joM~}C@uIq)a|T<``V5sBdt>TFS&x2|<~Uv; zV&;6zq7SHqBoLAQN9z%HdWxZd`IfsPV!5IZ1b3P=-dFj%X`$G@)LAcZ8D;~OU;k#C2}gY$N4)vr<}OT;$0NG4X{x_Z?Ex{?4tSwXD zdC#0U&-RMc`mBA~mb-2r-|+I~!tkvT*BZbow?Wlkm<44(sq-y*pILitLayfUEq+k? z{!Y1=8Pk@9xAy$!;EP+-J<~0M3spVHepZm}AV&}ZKM{;=yK{kHHdp*kq+_;a`^vup5|P7aBoog1firy!lqMG*2%J+hT+g(m9wO_Wd zsI}n|G@Oy`rzHG8!x9eE0XYwC=6!3|S-1W7bFsuz9ea)>pIhVpk@LjC(8t~zmwm2H z0cB_)pqBlupiG7Y4xN)^SB+wkvFQ5CcIE=Rb8^OuODySs-)PCb-rcgn`jb`=5%{q}Pt` z?iU-A^-Z)q+BdA&-FC3VVa_&H(ejpuJ#nFtiyMzq+5Q)3_7j`_VbKN;e`tWvEBzze z4-S7&VN3)7xfcXr8YI?y`?9!u?KBS`kH0#BWeW|b^>DM?bg_uKYWvf0^VW9} zU;|+3|3wmNpl#pJF8(s(`nG-U=B+2cWq$Vp94Os*7RC{N7PE6Yqt Z&DYD!D~Zp|FUic$<3$opEHeaI0{}#XGzkCz literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/ladder-mutations/floors-swapped/package.receipt.json b/wai/pack-conformance/ladder-mutations/floors-swapped/package.receipt.json new file mode 100644 index 000000000..5fb9a0c0f --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/floors-swapped/package.receipt.json @@ -0,0 +1 @@ +{"asset_id":"video-ladder-01","components":[{"id":"v","index":"index-v.wsix","index_digest":"fc97f47085f5d79c5ac12f3ce965a6523929b3161091256f545bf6b520cb3017","media_class":"video","stage_root":"c9825fa6105cd5a41a142e11be3d6bf85421ca1547f580315cb5542f1a2de268"}],"energy_provenance":null,"grant":{"capability":"wai.video.package","funds_ceiling":null,"grant_hash":"0000000000000000000000000000000000000000000000000000000000000000","joule_ceiling_micro":null},"joules_micro":0,"kind":"package","packager":"builtin:wai-pack@0.1.0","parent_kind":"none","parent_receipt_hash":null,"policy_digest":"6938df61d1274e43680652af682498bd5c7f1505c5f51b08c770143643c6388e","receipt_hash":"42c2905ad0aabfe3c1d00caa9ecc73a089e289cd01f356ed5c60ce38395663e6","sig":"2f39ed2b68c18fce1278711711bc0cde4634403ae38b2c65dd1f64944acbbdcdd723490f017376c8c017871ef64b6c7a4d6e394851fe4ebed38dd2c84309a602","signer_id":"did:key:z6MkqahniHbtvRDna9jmc9dSMo88FCuKnuujLKxbWyK4682w","signer_pubkey":"a558bae731bbba29b0b2308493514f6ec8a51ab40409cce9e3afafecca787224","stored_bytes":127966,"total_bytes":140530,"total_entries":15,"unique_objects":12,"version":2,"work_units":15} \ No newline at end of file diff --git a/wai/pack-conformance/ladder-mutations/master-lists-one-floor/LISTING b/wai/pack-conformance/ladder-mutations/master-lists-one-floor/LISTING new file mode 100644 index 000000000..3497529b9 --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/master-lists-one-floor/LISTING @@ -0,0 +1,46 @@ +c5203585fea0962de941d258789157a0590e18b62a2e5d1facbd11e1cfd1ddb9 dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6 floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b floor/hi/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s +58c598174eed554cd0d1bc8abedca8c9d51d992c8e3b963bcb7574da4983ed9f floor/hi/init.mp4 +589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s +6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s +acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74 floor/lo/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s +d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833 floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s +d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9 floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s +640cd81c83baefbe13e8ccc2bf577395c6602885cc73e201ca34dc267e7f0a48 floor/lo/init.mp4 +bfa98255d682517f58df4073bc71fdb3fcca120fc33d16e4aca873392476c586 hls/classic/floor-hi.m3u8 +ad81674ac359096ebed255a26a40e82858e53e9754702429e59d72898df33812 hls/classic/floor-lo.m3u8 +3d8ca6988d54790388e062f4ed37b3f73fd6904aefa5ed88014125e51aaf5429 hls/classic/master.m3u8 +3fd88f9dcf835edf0fcca8dff8371d2b4e897ac097fc85901477c950c0da7996 hls/legacy/master.m3u8 +09e75f55cb7ea829a4e630404d2ab540e8be0dbb1c4365dc30802359b658aed9 hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +09e75f55cb7ea829a4e630404d2ab540e8be0dbb1c4365dc30802359b658aed9 hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +a5140df0bf1f82b88335c13789502298a952b350ad45dfcfcd249b2b9a263a71 index-v.wsix +c310c5a4ae14df691a1a37a6c34e90243ed72be1e8f725d38f1babe1f6866b21 moq/catalog.json +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +2f5bd830d841eb122c63ae57a15442075478fd522ce55b6f9bcbe41acd51d8ae objects/482fbbb9b39bdb9cbf00515f94269ea591df681ced90b05d97e0df106b49b08e.wai +0057633252a2c2ed5f71fe14ca78075c8e89fc6675a08335ac90f0e56032b825 objects/4ab8f747d181632f342a4887b0a8bb86c174409cb625157784e18c5e5559a381.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +1a6f30fdc000f258c948470386d84beef2ba5a84e922c355093837ae21fd573c objects/6ce13c9ef6872caeb7fbe71661ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai +b773dac63c9d2d9980d0d249ea956e03065c1ae40d17c512df29b690c0c820ef objects/b7bf0717e968d7b6be473785c9f66cbb814cde679bceb1ae37f0765308ddee72.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +cc8a6fc59be29bd33d96fb30ea9e5a30a5aa367a82da9c5784cbadce63396f62 objects/cf842ef3058d3c54d56c0ea3e075efdc77163602b4a1dabcff080e5ea28b9946.wai +01b596b672de3352adb3e01b34fcddfeff975f4ee1d0b88dde160ac10c9bf929 objects/d382ba093b0595c44a43dc3aad22fc0bed42baeb3488f00dfe3567056a7009c5.wai +9d9ae296558ce7f7d644ad0ca3af65eb4fc98d03b0bd6d7a8fc821fc952e86c1 objects/f525b4450c29153dde0b43e4d143dfb76fcc3884c607b744c8a53fa6a1728580.wai +3d573ee482f8187b0e3bc839aeea0f51a67144588d6d207e8466fea91a0c5b34 objects/f7f7f4d6af777bfcce09cdda5ecb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai +bd6086051d0452449da8a90f426f454fee368b4794f7c294218a410ded8d9088 package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +d1cf1bd28a06f3a9d695dd64331cb56cf793818e9e9e6cec620183d9dce37b2d policy.json +4ba48d04e5c8e72336e32307b27b4371c96f20f7abf959ac1c1d344ccb9a8106 policy.toml +813329d5521ab5891bb86d29b362e448fae4247c949384b0687d66966546c4fe stages/legacy.json +ca8e0059a23311d7690a0519f85dfb48883721c817cd8fe1cd481cabe14b0032 stages/mobile.json +8bc9c9da674b4765ead0e41d54852ac105161e9638e7ae705e3982847b069e4c stages/tv.json diff --git a/wai/pack-conformance/ladder-mutations/master-lists-one-floor/hls/classic/master.m3u8 b/wai/pack-conformance/ladder-mutations/master-lists-one-floor/hls/classic/master.m3u8 new file mode 100644 index 000000000..1742325fb --- /dev/null +++ b/wai/pack-conformance/ladder-mutations/master-lists-one-floor/hls/classic/master.m3u8 @@ -0,0 +1,5 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=9055,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 diff --git a/wai/pack-conformance/pack_verify.py b/wai/pack-conformance/pack_verify.py index 3e637f56d..4b4006186 100644 --- a/wai/pack-conformance/pack_verify.py +++ b/wai/pack-conformance/pack_verify.py @@ -2554,6 +2554,13 @@ def piece_ladder(P, cid, then): return base, chain, [r for r in mine if r["role"] == "floor"] +def floor_names(P, cid): + """§7.1: the component's floor rungs, in ladder order, each with its floor name: the + component's id when it has one floor rung, the rung's id when it has several.""" + rungs = [r for r in P["ladder"] if r["component"] == cid and r["role"] == "floor"] + return [(r, cid if len(rungs) == 1 else r["id"]) for r in rungs] + + def default_base_cap(P, cid): """§5.7: the capability of a component's first base rung, which its HTTP views carry.""" return next((r["capability"] for r in P["ladder"] if r["component"] == cid and r["role"] == "base"), "") @@ -2623,12 +2630,12 @@ def codecs_value(objects): return "wai1." + "|".join(alt(*a) for a in union), "wai1." + "|".join(alt(*a) for a in floor) -def render_catalogs(P, ix, c, floor, size, policy_hex): +def render_catalogs(P, ix, c, floors, size, policy_hex): """§8.3–§8.8 for one component c: every catalog file as the index, the objects and the - floor give it. floor: (codecs, width, height, [(fragment name, bytes)]); size: (W, H).""" + floors give it. floors: per floor rung in ladder order, (floor name, codecs, width, + height, [(fragment name, bytes)]); size: (W, H).""" num, den = ix["tb"] pieces, plan = ix["pieces"], ix["plan"] - F, FW, FH, frags = floor W, H = size first_piece, first_start = ix["first_piece"], pieces[0]["start"] total = sum(pc["duration"] for pc in pieces) @@ -2642,18 +2649,24 @@ def render_catalogs(P, ix, c, floor, size, policy_hex): """(BANDWIDTH, AVERAGE-BANDWIDTH) over (bytes, units) pairs.""" return (max(bps(n, d, num, den) for n, d in per), bps(sum(n for n, _ in per), sum(d for _, d in per), num, den)) - fb, fa = rates([(len(fr), pc["duration"]) for (_, fr), pc in zip(frags, pieces)]) head = ["#EXTM3U", "#EXT-X-VERSION:7", "#EXT-X-INDEPENDENT-SEGMENTS"] - inf = f'#EXT-X-STREAM-INF:BANDWIDTH={fb},AVERAGE-BANDWIDTH={fa},CODECS="{F}",RESOLUTION={FW}x{FH}' - # The floor variant's URI resolves from hls/classic/ and from every class's directory - # alike, so a class's master is the classical one with at most one line added. - out["hls/classic/master.m3u8"] = text(head + [inf, f"../classic/floor-{c}.m3u8"]) + # One variant per floor rung, in ladder order. A variant's URI resolves from + # hls/classic/ and from every class's directory alike, so a class's master is the + # classical one with at most one line added. + variants, fbw = [], {} + for fname, F, FW, FH, frags in floors: + fb, fa = rates([(len(fr), pc["duration"]) for (_, fr), pc in zip(frags, pieces)]) + fbw[fname] = fb + variants += [f'#EXT-X-STREAM-INF:BANDWIDTH={fb},AVERAGE-BANDWIDTH={fa},CODECS="{F}",RESOLUTION={FW}x{FH}', + f"../classic/floor-{fname}.m3u8"] + out["hls/classic/master.m3u8"] = text(head + variants) media = ["#EXTM3U", "#EXT-X-VERSION:7", f"#EXT-X-TARGETDURATION:{tgt}", "#EXT-X-MEDIA-SEQUENCE:0", "#EXT-X-PLAYLIST-TYPE:VOD", "#EXT-X-INDEPENDENT-SEGMENTS"] - lines = media + [f'#EXT-X-MAP:URI="../../floor/{c}/init.mp4"'] - for (name, _), pc in zip(frags, pieces): - lines += [f"#EXTINF:{ms_text(pc['duration'], num, den)},", f"../../floor/{c}/{name}"] - out[f"hls/classic/floor-{c}.m3u8"] = text(lines + ["#EXT-X-ENDLIST"]) + for fname, _, _, _, frags in floors: + lines = media + [f'#EXT-X-MAP:URI="../../floor/{fname}/init.mp4"'] + for (name, _), pc in zip(frags, pieces): + lines += [f"#EXTINF:{ms_text(pc['duration'], num, den)},", f"../../floor/{fname}/{name}"] + out[f"hls/classic/floor-{fname}.m3u8"] = text(lines + ["#EXT-X-ENDLIST"]) mpd_head = ['', '', @@ -2664,13 +2677,21 @@ def render_catalogs(P, ix, c, floor, size, policy_hex): return [" "] + \ [f' ' for k in ks] + [" "] - lines = mpd_head + [ - f' ', - f' ', f' ', - f' '] + timeline(range(len(pieces))) - lines += [f' ' for name, _ in frags] - out["dash/classic.mpd"] = text(lines + [" ", " "] + mpd_tail) + # One Representation per floor rung: with one, its codecs and size are the set's; with + # several, each Representation's. + one = len(floors) == 1 + _, F0, FW0, FH0, _ = floors[0] + own_attrs = f' codecs="{F0}" width="{FW0}" height="{FH0}"' if one else "" + lines = mpd_head + [f' '] + for fname, F, FW, FH, frags in floors: + attrs = "" if one else f' codecs="{F}" width="{FW}" height="{FH}"' + lines += [f' ', + f' ', + f' '] + timeline(range(len(pieces))) + lines += [f' ' for name, _ in frags] + lines += [" ", " "] + out["dash/classic.mpd"] = text(lines + mpd_tail) E = ix["entries"] # §8.3: an HTTP view lists a piece only where its base is of the component's default # base capability (http-delivery §4.2: no variant mixes bases with nothing in common). @@ -2684,7 +2705,7 @@ def render_catalogs(P, ix, c, floor, size, policy_hex): lines = head[:] if wai: lines.append('#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.multivariant",VALUE="wai.m3u8"') - out[f"hls/{name}/master.m3u8"] = text(lines + [inf, f"../classic/floor-{c}.m3u8"]) + out[f"hls/{name}/master.m3u8"] = text(lines + variants) views = [] for k, pc in enumerate(pieces): v = {"dur": pc["duration"], "p": first_piece + k, "start": pc["start"], "stages": []} @@ -2750,7 +2771,7 @@ def render_catalogs(P, ix, c, floor, size, policy_hex): out[f"dash/{name}.mpd"] = text(lines + mpd_tail) has_floor = any(e["role"] == FLOOR for e in E) out["moq/catalog.json"] = render_moq(c, E, P["live"]["layer_lag_ms"], P["defaults"]["deadline_ms"], - (F, FW, FH) if has_floor else None, P["asset_id"]) + [(f[0], f[1], f[2], f[3]) for f in floors] if has_floor else [], P["asset_id"]) return out @@ -2760,14 +2781,14 @@ def receipt_alias(ns, name): return int.from_bytes(blake3(b"wai:pack-receipt-alias\x01" + ns.encode() + b"\x00" + name.encode())[:8], "little") & MAX_INTEGER -def render_moq(c, E, lag, default_deadline, floor, ns): +def render_moq(c, E, lag, default_deadline, floors, ns): """§8.4: moq/catalog.json, the component's bases and refinements as a stage set of moq-streaming-format §4.1. One track per (layer, deadline), by layer, then deadline ascending, of namespace `ns`; each depends on every track carrying an entry below one of its own down its chain; each with wai_staged, receipts declared with its alias and a - receipts track of its own; then the floor (cmaf, altGroup 1 with the base track), then - the receipts tracks. floor: (codecs, width, height) or None. The catalog must pass - §4.1's check (staged_verify.py's).""" + receipts track of its own; then each floor (cmaf, `/floor`, altGroup 1 with + the base track), then the receipts tracks. floors: (floor name, codecs, width, height) + per floor rung in ladder order. The catalog must pass §4.1's check (staged_verify.py's).""" keys = sorted({(e["layer"], e["deadline"]) for e in E if e["role"] in (BASE, REFINEMENT)}) def name(key): @@ -2800,12 +2821,12 @@ def render_moq(c, E, lag, default_deadline, floor, ns): t["wai_determinism"] = TIER_NAMES[weakest] if layer: t["wai_delivery_timeout_ms"] = max(0, deadline - (lag[layer] if layer < len(lag) else 0)) - elif floor is not None: + elif floors: t["altGroup"] = 1 tracks.append(t) - if floor is not None: - tracks.append({"altGroup": 1, "codec": floor[0], "height": floor[2], "name": f"{c}/floor", "namespace": ns, - "packaging": "cmaf", "renderGroup": 1, "width": floor[1]}) + for fname, codec, fw, fh in floors: + tracks.append({"altGroup": 1, "codec": codec, "height": fh, "name": f"{fname}/floor", "namespace": ns, + "packaging": "cmaf", "renderGroup": 1, "width": fw}) tracks += [{"namespace": ns, "name": f"{name(k)}/receipts", "packaging": "wai-receipts", "isLive": False} for k in keys] if len({receipt_alias(ns, name(k)) for k in keys}) != len(keys): raise ValueError("two tracks' receipt aliases are equal") @@ -2977,6 +2998,11 @@ def verify_pack(rep, d, name, pkg=None, inputs=True): cls = [c["id"].lower() for c in P["class"]] ok = all(segment_ok(i) for i in ids) and len(set(cls)) == len(cls) and "classic" not in cls rep.check(ok, f"{tag}: component and class ids are path segments, class ids distinct in any case, none `classic` (pack-id)") + if not ok: + return + names = [n for c in P["component"] for _, n in floor_names(P, c["id"])] + ok = all(segment_ok(n) for n in names) and len({n.lower() for n in names}) == len(names) + rep.check(ok, f"{tag}: floor names (§7.1) are path segments, distinct in any case (pack-id)") if not ok: return # §3.6 under the effective policy: royalty_free_only as policy.json states it. @@ -3204,12 +3230,12 @@ def verify_component(rep, tag, root, pkg, files, P, j, c, ix, inputs=True): if any(r["component"] == c["id"] and r["role"] == "floor" for r in P["ladder"]): own = owners(ix) for k, pc in enumerate(pieces): - fl = [i for i in range(len(E)) if own[i] == k and E[i]["role"] == FLOOR] - fp = floor_payload(objs[fl[0]][12 + E[fl[0]]["man_len"]:]) if len(fl) == 1 else None - if fp is not None and len(fp[5]) != pc["duration"]: - rep.check(False, f"{t}: piece {k}: {len(fp[5])} floor units for {pc['duration']} frames, before any frame " - f"is decoded (floor-object-mismatch)") - return named | unreached(files, c['id']) + for i in [i for i in range(len(E)) if own[i] == k and E[i]["role"] == FLOOR]: + fp = floor_payload(objs[i][12 + E[i]["man_len"]:]) + if fp is not None and len(fp[5]) != pc["duration"]: + rep.check(False, f"{t}: piece {k}: {len(fp[5])} floor units for {pc['duration']} frames, before any " + f"frame is decoded (floor-object-mismatch)") + return named | unreached(files, c['id']) size = None own = owners(ix) stage = {} # entry index → the frames of the prefix it completes, decoded @@ -3259,75 +3285,85 @@ def verify_component(rep, tag, root, pkg, files, P, j, c, ix, inputs=True): rep.check(prefix_digest_of(stage[i]) == e["prefix"], f"{t}: entry {i}: the prefix decodes to its prefix_digest (prefix-digest)") - # The floor objects (§7.2) and the CMAF files their temporal units give (§7.6). - rung = next((r for r in P["ladder"] if r["component"] == c["id"] and r["role"] == "floor"), None) + # The floor objects (§7.2) and the CMAF files their temporal units give (§7.6), floor + # rung by floor rung in ladder order: the k-th floor entry of each piece is rung k's. sup = P["floor"].get("supplied_listing") settings = blake3(b"wai:render-settings\x01" + jcs({"source": "supplied", "supplied_listing": sup}).encode()).hex() \ if sup else None - seq = seq_obu = None - units_of, frags = [], [] + rungs = floor_names(P, c["id"]) own = owners(ix) - for k, pc in enumerate(pieces): - mine = [i for i in range(len(E)) if own[i] == k] - bases = [i for i in mine if E[i]["role"] == BASE] - fl = [i for i in mine if E[i]["role"] == FLOOR] - rep.check(len(bases) == 1 and rung is not None and len(fl) == 1 and E[fl[0]]["cap"] == rung["capability"], - f"{t}: piece {k}: one base, and one floor object of the floor rung's capability (§5, §7.2) (floor-object-mismatch)") - if len(bases) != 1 or len(fl) != 1: - return named | unreached(files, c['id']) - base, i = bases[0], fl[0] - df = mans[i]["derived_from"] - rep.check(df["motif"] == E[base]["hash"].hex() and df["motif_capability"] == E[base]["cap"], - f"{t}: piece {k}: the floor presents its piece's base (floor-motif-mismatch)") - rep.check(sup is not None and df["renderer"] == f"supplied@{sup}" and df["settings"] == settings, - f"{t}: piece {k}: a supplied floor's renderer and settings (§7.2) (floor-object-mismatch)") - fp = floor_payload(objs[i][12 + E[i]["man_len"]:]) - if fp is None: - rep.check(False, f"{t}: piece {k}: the floor payload is not §7.2's framing (floor-object-mismatch)") - return named | unreached(files, c['id']) - rep.check(len(fp[5]) == pc["duration"], f"{t}: piece {k}: one temporal unit per frame (floor-object-mismatch)") - try: - units = [obus(u) for u in fp[5]] - if any(not o or o[0][0] != OBU_TD or sum(x[0] == OBU_TD for x in o) != 1 or unit_frame(o) is None for o in units): - raise Malformed("a unit that is not one temporal unit holding a frame") - if seq is None: - seq_obu = next((whole for typ, whole, _ in units[0] if typ == OBU_SEQ), None) if units else None - if seq_obu is None: - raise Malformed("the first unit holds no sequence header") - seq = sequence_header(obus(seq_obu)[0][2]) - # §7.3 against the package: every sequence header the first's bytes, a shown key - # frame with one. - for o in units: - if any(typ == OBU_SEQ and whole != seq_obu for typ, whole, _ in o): - raise Malformed("a sequence header other than the first") - if shown_key(o, seq) and not any(typ == OBU_SEQ for typ, _, _ in o): - raise Malformed("a shown key frame without a sequence header") - except Malformed as x: - rep.check(False, f"{t}: piece {k}: the floor payload ({x}) (floor-av1-malformed)") - return named | unreached(files, c['id']) - rep.check(fp[:5] == (pc["duration"], seq["max_h"], seq["max_w"], num, den), - f"{t}: piece {k}: the floor payload's n, h, w, fps_num and fps_den (§7.2) (floor-object-mismatch)") - rep.check(mans[i].get("target") == {"frames": pc["duration"], "h": seq["max_h"], "w": seq["max_w"]}, - f"{t}: piece {k}: the floor's target is its piece's frames and its size (§5.2, §7.2) (floor-object-mismatch)") - keys = [shown_key(o, seq) for o in units] - ok = bool(keys) and keys[0] and (P["floor"]["extra_keyframes"] or not any(keys[1:])) - rep.check(ok, f"{t}: piece {k}: it opens on a shown key frame, with no other unless the policy allows (floor-keyframe-mismatch)") - if not ok: - return named | unreached(files, c['id']) - units_of.append(fp[5]) - frag = fragment(ix["first_piece"] + k, pc["start"], den, [(without_delimiters(o), shown_key(o, seq)) for o in units]) - frags.append((hashlib.sha256(frag).hexdigest() + ".m4s", frag)) - init = init_mp4(num, seq["max_w"], seq["max_h"], av1c(seq, seq_obu)) - for p, want in [("init.mp4", init)] + frags: - path = f"floor/{c['id']}/{p}" - named.add(path) - rep.check(path in files and load(os.path.join(pkg, path)) == want, - f"{t}: {path} is the one the floor's temporal units give (floor-cmaf-mismatch)") + floors, units_of = [], {} + for fk, (rung, fname) in enumerate(rungs if rungs else [(None, c["id"])]): + seq = seq_obu = None + units_of[fname], frags = [], [] + for k, pc in enumerate(pieces): + mine = [i for i in range(len(E)) if own[i] == k] + bases = [i for i in mine if E[i]["role"] == BASE] + fl = [i for i in mine if E[i]["role"] == FLOOR] + ok = len(bases) == 1 and rung is not None and len(fl) == len(rungs) and E[fl[fk]]["cap"] == rung["capability"] + rep.check(ok, f"{t}: piece {k}: one base, and one floor object of each floor rung's capability (§5, §7.2) " + f"(floor-object-mismatch)") + if not ok: + return named | unreached(files, c['id']) + base, i = bases[0], fl[fk] + df = mans[i]["derived_from"] + rep.check(df["motif"] == E[base]["hash"].hex() and df["motif_capability"] == E[base]["cap"], + f"{t}: piece {k}: the floor presents its piece's base (floor-motif-mismatch)") + rep.check(sup is not None and df["renderer"] == f"supplied@{sup}" and df["settings"] == settings, + f"{t}: piece {k}: a supplied floor's renderer and settings (§7.2) (floor-object-mismatch)") + fp = floor_payload(objs[i][12 + E[i]["man_len"]:]) + if fp is None: + rep.check(False, f"{t}: piece {k}: the floor payload is not §7.2's framing (floor-object-mismatch)") + return named | unreached(files, c['id']) + rep.check(len(fp[5]) == pc["duration"], f"{t}: piece {k}: one temporal unit per frame (floor-object-mismatch)") + try: + units = [obus(u) for u in fp[5]] + if any(not o or o[0][0] != OBU_TD or sum(x[0] == OBU_TD for x in o) != 1 or unit_frame(o) is None for o in units): + raise Malformed("a unit that is not one temporal unit holding a frame") + if seq is None: + seq_obu = next((whole for typ, whole, _ in units[0] if typ == OBU_SEQ), None) if units else None + if seq_obu is None: + raise Malformed("the first unit holds no sequence header") + seq = sequence_header(obus(seq_obu)[0][2]) + except Malformed as x: + rep.check(False, f"{t}: piece {k}: the floor payload ({x}) (floor-av1-malformed)") + return named | unreached(files, c['id']) + # The object's own members against the floor's sequence header (§7.2), before + # its units are held to it (§11.3's order). + rep.check(fp[:5] == (pc["duration"], seq["max_h"], seq["max_w"], num, den), + f"{t}: piece {k}: the floor payload's n, h, w, fps_num and fps_den (§7.2) (floor-object-mismatch)") + rep.check(mans[i].get("target") == {"frames": pc["duration"], "h": seq["max_h"], "w": seq["max_w"]}, + f"{t}: piece {k}: the floor's target is its piece's frames and its size (§5.2, §7.2) (floor-object-mismatch)") + try: + # §7.3 against the package: every sequence header the first's bytes, a shown + # key frame with one. + for o in units: + if any(typ == OBU_SEQ and whole != seq_obu for typ, whole, _ in o): + raise Malformed("a sequence header other than the first") + if shown_key(o, seq) and not any(typ == OBU_SEQ for typ, _, _ in o): + raise Malformed("a shown key frame without a sequence header") + except Malformed as x: + rep.check(False, f"{t}: piece {k}: the floor payload ({x}) (floor-av1-malformed)") + return named | unreached(files, c['id']) + keys = [shown_key(o, seq) for o in units] + ok = bool(keys) and keys[0] and (P["floor"]["extra_keyframes"] or not any(keys[1:])) + rep.check(ok, f"{t}: piece {k}: it opens on a shown key frame, with no other unless the policy allows (floor-keyframe-mismatch)") + if not ok: + return named | unreached(files, c['id']) + units_of[fname].append(fp[5]) + frag = fragment(ix["first_piece"] + k, pc["start"], den, [(without_delimiters(o), shown_key(o, seq)) for o in units]) + frags.append((hashlib.sha256(frag).hexdigest() + ".m4s", frag)) + init = init_mp4(num, seq["max_w"], seq["max_h"], av1c(seq, seq_obu)) + for p, want in [("init.mp4", init)] + frags: + path = f"floor/{fname}/{p}" + named.add(path) + rep.check(path in files and load(os.path.join(pkg, path)) == want, + f"{t}: {path} is the one the floor's temporal units give (floor-cmaf-mismatch)") + floors.append((fname, av1_codecs(seq), seq["max_w"], seq["max_h"], frags)) # The catalogs (§8.3–§8.8). try: - cats = render_catalogs(P, ix, c["id"], (av1_codecs(seq), seq["max_w"], seq["max_h"], frags), size, - j["policy_digest"]) + cats = render_catalogs(P, ix, c["id"], floors, size, j["policy_digest"]) except (ValueError, OverflowError) as x: # A time or count past the canonical range (a start past 2^53 − 1): no catalog can # be written for this index (§11.3). @@ -3337,19 +3373,20 @@ def verify_component(rep, tag, root, pkg, files, P, j, c, ix, inputs=True): named.add(path) rep.check(path in files and load(os.path.join(pkg, path)) == cats[path], f"{t}: {path} is the one the index, the objects and the floor give (catalog-mismatch)") - http_views(rep, t, c["id"], cats, {f"{e['hash'].hex()}.wai": objs[i] for i, e in enumerate(E)}) + http_views(rep, t, c["id"], floors[0][0], cats, {f"{e['hash'].hex()}.wai": objs[i] for i, e in enumerate(E)}) if inputs: verify_sources(rep, t, root, P, comp, ix, stage, units_of, objs) return named -def http_views(rep, t, c, cats, objmap): +def http_views(rep, t, c, first_floor, cats, objmap): """§8.3 read by http-delivery's own verifier (http_verify.py): each class's WAI media - playlist adjacent to the classical one, the union and floor of the objects it lists + playlist adjacent to the classical one (the first floor's; every floor's has the + pieces' durations), the union and floor of the objects it lists (an object listed twice is one, a layer joins every occurrence of its base, http-delivery §4.2) equal to its master's CODECS and X-WAI-FLOOR, and its MPD adjacent to the classical MPD.""" - floor_text = cats[f"hls/classic/floor-{c}.m3u8"].decode() + floor_text = cats[f"hls/classic/floor-{first_floor}.m3u8"].decode() for path in sorted(cats): m = re.fullmatch(r"hls/([^/]+)/wai-" + re.escape(c) + r"\.m3u8", path) if not m: @@ -3453,39 +3490,41 @@ def verify_sources(rep, t, root, P, comp, ix, stage, units_of, objs): f"{t}: entry {i}: sse against the source (§6.6)") below = nxt - # The supplied floor (§7.3): its listing, its temporal units and its key frames. + # The supplied floor (§7.3): its listing, then each floor rung's stream, its temporal + # units and its key frames. sup = os.path.join(root, "floor") names = tree(sup) rep.check(hashlib.sha256(listing(sup, names)).hexdigest() == P["floor"].get("supplied_listing"), f"{t}: the supplied floor's listing hashes to floor.supplied_listing (floor-listing-mismatch)") - stream = f"{comp['id']}.obu" - if stream not in names: - rep.check(False, f"{t}: no {stream} in the supplied floor (floor-stream-missing)") - return - try: - units = temporal_units(load(os.path.join(sup, stream))) - if not units or not any(typ == OBU_SEQ for typ, _, _ in units[0][1]): - raise Malformed("the first unit holds no sequence header") - first = next(whole for typ, whole, _ in units[0][1] if typ == OBU_SEQ) - seq = sequence_header(obus(first)[0][2]) - for u, o in units: - if unit_frame(o) is None: - raise Malformed("a unit holding no frame") - if any(typ == OBU_SEQ and whole != first for typ, whole, _ in o): - raise Malformed("a sequence header other than the first") - if shown_key(o, seq) and not any(typ == OBU_SEQ for typ, _, _ in o): - raise Malformed("a shown key frame without a sequence header") - rep.check(True, f"{t}: the supplied stream splits into temporal units, each a frame (floor-av1-malformed)") - except Malformed as x: - rep.check(False, f"{t}: the supplied stream ({x}) (floor-av1-malformed)") - return - rep.check(len(units) == len(frames), f"{t}: one temporal unit per source frame (floor-frame-count)") - keys = [f for f, (_, o) in enumerate(units) if shown_key(o, seq)] - starts = [pc["start"] for pc in ix["pieces"]] - ok = set(starts) <= set(keys) and (P["floor"]["extra_keyframes"] or keys == starts) - rep.check(ok, f"{t}: shown key frames at the piece starts {starts}, and only there: {keys} (floor-keyframe-mismatch)") - rep.check([[u for u, _ in units[pc["start"]:pc["start"] + pc["duration"]]] for pc in ix["pieces"]] == units_of, - f"{t}: each floor object holds its piece's temporal units of the supplied stream (§7.2)") + for _, fname in floor_names(P, comp["id"]): + stream = f"{fname}.obu" + if stream not in names: + rep.check(False, f"{t}: no {stream} in the supplied floor (floor-stream-missing)") + return + try: + units = temporal_units(load(os.path.join(sup, stream))) + if not units or not any(typ == OBU_SEQ for typ, _, _ in units[0][1]): + raise Malformed("the first unit holds no sequence header") + first = next(whole for typ, whole, _ in units[0][1] if typ == OBU_SEQ) + seq = sequence_header(obus(first)[0][2]) + for u, o in units: + if unit_frame(o) is None: + raise Malformed("a unit holding no frame") + if any(typ == OBU_SEQ and whole != first for typ, whole, _ in o): + raise Malformed("a sequence header other than the first") + if shown_key(o, seq) and not any(typ == OBU_SEQ for typ, _, _ in o): + raise Malformed("a shown key frame without a sequence header") + rep.check(True, f"{t}: {stream} splits into temporal units, each a frame (floor-av1-malformed)") + except Malformed as x: + rep.check(False, f"{t}: {stream} ({x}) (floor-av1-malformed)") + return + rep.check(len(units) == len(frames), f"{t}: {stream}: one temporal unit per source frame (floor-frame-count)") + keys = [f for f, (_, o) in enumerate(units) if shown_key(o, seq)] + starts = [pc["start"] for pc in ix["pieces"]] + ok = set(starts) <= set(keys) and (P["floor"]["extra_keyframes"] or keys == starts) + rep.check(ok, f"{t}: {stream}: shown key frames at the piece starts {starts}, and only there: {keys} (floor-keyframe-mismatch)") + rep.check([[u for u, _ in units[pc["start"]:pc["start"] + pc["duration"]]] for pc in ix["pieces"]] == units_of[fname], + f"{t}: each floor object of {fname} holds its piece's temporal units of {stream} (§7.2)") def mutation_verdict(m, c, used): @@ -3771,8 +3810,8 @@ def verify(d): ix = parse_index(load(os.path.join(d, c["index"]))) index_rules(ix) f = c["floor"] - got = render_moq(ix["component"], ix["entries"], c["layer_lag_ms"], c["default_deadline"], (f["codec"], f["w"], f["h"]), - c["namespace"]) + got = render_moq(ix["component"], ix["entries"], c["layer_lag_ms"], c["default_deadline"], + [(ix["component"], f["codec"], f["w"], f["h"])], c["namespace"]) rep.check(got == c["moq"].encode(), f"{c['index']}: the MoQ catalog §8.4 gives") names = {t["name"] for t in json.loads(got)["tracks"]} rep.check(all(x in names for t in json.loads(got)["tracks"] for x in t.get("depends", [])), @@ -3802,6 +3841,8 @@ def verify(d): verify_package_mutations(rep, d) # staged-mutations/: the staged golden altered (§5.4, §5.7, §6.5, §8.6). verify_package_mutations(rep, d, "staged-mutations") + # ladder-mutations/: the ladder golden altered (§7.1: several floor rungs). + verify_package_mutations(rep, d, "ladder-mutations") return rep diff --git a/wai/pack-conformance/packs/video-ladder-01/floor/hi.obu b/wai/pack-conformance/packs/video-ladder-01/floor/hi.obu new file mode 100644 index 0000000000000000000000000000000000000000..a75994f85ee7aae7ced1b3713dd2d8bf9514231f GIT binary patch literal 6575 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 LNB;T4GU@*TnaWI= literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/key.hex b/wai/pack-conformance/packs/video-ladder-01/key.hex new file mode 100644 index 000000000..602576559 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/key.hex @@ -0,0 +1 @@ +92baad1b286358f32cf2996070c85a60ab85af6055432d4a754a4fde64fcbe09 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/LISTING b/wai/pack-conformance/packs/video-ladder-01/package/LISTING new file mode 100644 index 000000000..3ac875157 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/LISTING @@ -0,0 +1,46 @@ +c5203585fea0962de941d258789157a0590e18b62a2e5d1facbd11e1cfd1ddb9 dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6 floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b floor/hi/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s +58c598174eed554cd0d1bc8abedca8c9d51d992c8e3b963bcb7574da4983ed9f floor/hi/init.mp4 +589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s +6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s +acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74 floor/lo/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s +d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833 floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s +d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9 floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s +640cd81c83baefbe13e8ccc2bf577395c6602885cc73e201ca34dc267e7f0a48 floor/lo/init.mp4 +bfa98255d682517f58df4073bc71fdb3fcca120fc33d16e4aca873392476c586 hls/classic/floor-hi.m3u8 +ad81674ac359096ebed255a26a40e82858e53e9754702429e59d72898df33812 hls/classic/floor-lo.m3u8 +3fd88f9dcf835edf0fcca8dff8371d2b4e897ac097fc85901477c950c0da7996 hls/classic/master.m3u8 +3fd88f9dcf835edf0fcca8dff8371d2b4e897ac097fc85901477c950c0da7996 hls/legacy/master.m3u8 +09e75f55cb7ea829a4e630404d2ab540e8be0dbb1c4365dc30802359b658aed9 hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +09e75f55cb7ea829a4e630404d2ab540e8be0dbb1c4365dc30802359b658aed9 hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +a5140df0bf1f82b88335c13789502298a952b350ad45dfcfcd249b2b9a263a71 index-v.wsix +c310c5a4ae14df691a1a37a6c34e90243ed72be1e8f725d38f1babe1f6866b21 moq/catalog.json +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +2f5bd830d841eb122c63ae57a15442075478fd522ce55b6f9bcbe41acd51d8ae objects/482fbbb9b39bdb9cbf00515f94269ea591df681ced90b05d97e0df106b49b08e.wai +0057633252a2c2ed5f71fe14ca78075c8e89fc6675a08335ac90f0e56032b825 objects/4ab8f747d181632f342a4887b0a8bb86c174409cb625157784e18c5e5559a381.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +1a6f30fdc000f258c948470386d84beef2ba5a84e922c355093837ae21fd573c objects/6ce13c9ef6872caeb7fbe71661ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai +b773dac63c9d2d9980d0d249ea956e03065c1ae40d17c512df29b690c0c820ef objects/b7bf0717e968d7b6be473785c9f66cbb814cde679bceb1ae37f0765308ddee72.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +cc8a6fc59be29bd33d96fb30ea9e5a30a5aa367a82da9c5784cbadce63396f62 objects/cf842ef3058d3c54d56c0ea3e075efdc77163602b4a1dabcff080e5ea28b9946.wai +01b596b672de3352adb3e01b34fcddfeff975f4ee1d0b88dde160ac10c9bf929 objects/d382ba093b0595c44a43dc3aad22fc0bed42baeb3488f00dfe3567056a7009c5.wai +9d9ae296558ce7f7d644ad0ca3af65eb4fc98d03b0bd6d7a8fc821fc952e86c1 objects/f525b4450c29153dde0b43e4d143dfb76fcc3884c607b744c8a53fa6a1728580.wai +3d573ee482f8187b0e3bc839aeea0f51a67144588d6d207e8466fea91a0c5b34 objects/f7f7f4d6af777bfcce09cdda5ecb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai +bd6086051d0452449da8a90f426f454fee368b4794f7c294218a410ded8d9088 package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +d1cf1bd28a06f3a9d695dd64331cb56cf793818e9e9e6cec620183d9dce37b2d policy.json +4ba48d04e5c8e72336e32307b27b4371c96f20f7abf959ac1c1d344ccb9a8106 policy.toml +813329d5521ab5891bb86d29b362e448fae4247c949384b0687d66966546c4fe stages/legacy.json +ca8e0059a23311d7690a0519f85dfb48883721c817cd8fe1cd481cabe14b0032 stages/mobile.json +8bc9c9da674b4765ead0e41d54852ac105161e9638e7ae705e3982847b069e4c stages/tv.json diff --git a/wai/pack-conformance/packs/video-ladder-01/package/dash/classic.mpd b/wai/pack-conformance/packs/video-ladder-01/package/dash/classic.mpd new file mode 100644 index 000000000..0bc509f7c --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/dash/classic.mpd @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/packs/video-ladder-01/package/dash/mobile.mpd b/wai/pack-conformance/packs/video-ladder-01/package/dash/mobile.mpd new file mode 100644 index 000000000..d3340daa2 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/dash/mobile.mpd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/packs/video-ladder-01/package/dash/tv.mpd b/wai/pack-conformance/packs/video-ladder-01/package/dash/tv.mpd new file mode 100644 index 000000000..f0817bb2c --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/dash/tv.mpd @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/packs/video-ladder-01/package/floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s b/wai/pack-conformance/packs/video-ladder-01/package/floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s new file mode 100644 index 0000000000000000000000000000000000000000..7e5a29203e5ad8907861e9d0bba3c074652aaabe GIT binary patch literal 981 zcmZQzU~I|F&rf4uU=YYn%SZvzAi%`Hz?f4~ln53t0f_@efPfK*MM~0AN`ZD>)ul4GzYNU-fRG!?;WVklSNXUqZ zp$V!GsKJ4u>kCkfnUTc-q8TFA02E_kV(UN>Yi}?TG-74pxS#;G1gx$VD8$CWE#ZO? zY61$e3-BgnG=rQ1Rs|B`VDMkji%?Z#q+-O$(EMQ|Se5GmpgS%J)G54YWIT4KVrj#d z%2VghNAk!6HF7bsR9r)7%mE5<10D7YVLV8P2k0()gsKdn5HHYO?g&*NAwE=hfrR)` z-IW3Kx4;9KyTGoW^T9~VNRW~F(*~gV0uBr!z*Ng{Wj&M1)4RscZ2gZ{3+?Z?FM9X> z1Gz+-I98y3Attt}D{!?e3=u#vVHS>4Kaj)%fMOyX+)_4ZVxj`PNhxSzVhsMPdeFqg SQQX7A5MU&1B!On{J_i6~LX$%P literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s b/wai/pack-conformance/packs/video-ladder-01/package/floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s new file mode 100644 index 0000000000000000000000000000000000000000..3e21af5bfbf09877f851ca6abe777d4380b6af59 GIT binary patch literal 981 zcmZQzU~I|F&rf4uU=YYn%SZvzAi%=Fz?f4~ln53t0f{q##TkL5NJ&~s35Wp&?Lf5- zB}Juq3=HfbVM!pr2S|h1#t>~_wk9J)6NnTcf-Q`sh8VUQiRy_l6WN_QNaiDpQ^FR7 zn8_5Fo03?<#RUu*ru83Z#~W}MsfsWtJ1{Ub0ELVsY`6?w#U^-VKiU5G+e>L?^@sQ7 z%Ffa;+NNNnZp8QisEj!S7~ZZ8j1COvpWLszzD)k{YrQ(F8foJVl_z&I8Lka75;9_9 zXo4yPYH(oa`T`VVW@K@IXoiS20L56C*gBBJ+8c}njaXSYE+~L40jp~T3bAo;OSm9} znt(#=0=x+s%^;_MRe^*!82nfCB2?8FsTgrGG=JC#R^@sC=#EPQbqenp8IRqmSlaNV z^3?hBkv#H1ja-Z@71t0NbAUqJK!^Q87!MNS0lLc`p(+C?#0zwnJ35N03S2DSG@1F;!I7$KTKq!JPvSzH-OTo{Qhjl?EKTpovdSsdaj zIK<_M5Jy%ci9hQl0O;eg9t^&G831-aG8%wy#kV%$aZ0I58H;^ zl*AG)E?_ERTK{o&ya9*NR2Bh-*+4Eg1JhkSsZ(8N8l=i*ER)^%Ke~)_P5uS1Zn4&` zIcJNyKE0EFs%8Jm*Fd&OJ9XEL`faTNexYicUhLQ(Yn!p43}x zZr*LnxJ=OW=tqw|A66x`-zYCW60gMYl;?7Ko7Bv=aVPVOO?9doL)3Sjd%y2RAs>g7 zzhb5Na+7s4b0*p~)O==JU|Rhk*GoidLz`%;gv$3ES!wxgOQ!hSZ~mje`r*NfRmVSN zsPbvJ{16DLIlX7%^{>Y*t_2u>US+&3`jBhx+`TR9lCI?LI-DStcsN=2!s7)Gr4t`V zAKx%H%EGNMR%T*1m*-v6i{+1QALJ5{n6TaIU;0Cx2MfMEUYQ!&<5K$jg_QZX$BP~` z@4fohS=-_A<3PWRX{iUka&;-Q{+(MMJEh&VKCm|ShSrB&;%lxbbWOHqE@MpGDyeH` z>Hp?$*}^EZuKTa5RWA9@YO8zyGfZ33?b6?MhTh9;e%7SH8izH-NOsp}IN3NX9_% zAc|XWyE*GK9^_`c`|@2EP=gW^`_lx3J#9b@Dl9x-SAd1OL9ujCa{FZ&Lx~-mP3J= z!h?n9FOm@lwHO>sTc3sk6?<_A&P6gw0Vw2yYM+9Un1LUveVg9$CoXXS#zp|DRqJo{ z3YwXNf-MNuLIt3kL*O=bgR=6n*yK76>k}z%$EO3;hoRdkZV-WL=N8HRdy5l5p&W&3 zse+N5K@8kFa4O%_q`g8>b9UPDr*$8WMF6$L!R-d81W=G9CZL4s>4P7`X1&b^xjl(t Ln*9Vs_%#6l=bT(r literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s b/wai/pack-conformance/packs/video-ladder-01/package/floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s new file mode 100644 index 0000000000000000000000000000000000000000..a246e72beae3b37d64c24c831a41f58e23f0cb74 GIT binary patch literal 2605 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 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/floor/hi/init.mp4 b/wai/pack-conformance/packs/video-ladder-01/package/floor/hi/init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..0b3ade2588318c8374e2813c379f92328998bc05 GIT binary patch literal 628 zcmaJ(|3il#OZDrXHF*9Xt4iVyflo2Lr+O&i_bGHW)? zR{&~y95}iJXIX&p%jQpQGF?B~?~xj%c7FFx1BxQB@bmZMan=XA(#B}71zfv-;*cAH bzj}3s&}4iCt=&kQ??7UsT;x3O>uhg-8t^^c literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s b/wai/pack-conformance/packs/video-ladder-01/package/floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s new file mode 100644 index 0000000000000000000000000000000000000000..78b5c886674e2dbd93fd45b08573c5214c082bb5 GIT binary patch literal 1127 zcmZQzU~I|F&rf4uU=YYn%SZvzAi%=Fz?f4~ln53t0f{q##TkL5NJ&~s35Wp&?Lf5- zB}Juq3=HfbVM!pr2S|h1h7fIFwk{(?6NofHVyhvsMMz`|BdJ$JVrw9=k;Rpf#F5#^ z<{-0?-Ggk75|TM`NNi~&HnMtTGqJFl9_OYcmT++aLxxHHQEtrv1tVn<24x2Zh6bRJ zsCh+5tp?lO?f3s%*nY_Owo!Ks5siDwmSCi9#P|THh&clo+O7v2FEBg^bWRJrw9}yS z;zTCB_wzQ-OFUp>+`G6XKJ9>!kr5L^6I?N)1H&byp52X{@fRP23QP=nqg&)9&Bu7^ z=F-w7EWBIA?(BW6SYV`L#LURz0JmTQ!+ovo3%6cBaCMXX_ajDuJ(@Fwa~h0hKa6yRm9RP~43-BgnG=sbVR@c{HBxuCJ z;J>05p>D2`yb&iu^M{RKWv&N+RzzoIoNN{8pOqbJ`E#Gy6(cnxE=HD$YhXQK1!pr1 zawosL!N?uwBvsLKkl!NQ_>PG!&>(K0TYo_fa-6_$FMN*Iy=^#n0c`YPYn$lzFjU>U&ej2_qRJVHS>4KcFgre!Sz^{b}`+zg{-28ybuxjYK%O zrEH+Gz(Bvy=dtc%Sn7!lK)Xc+c#~2P8gH+vxY|(s$1yG9*yYdaNjHF%>iLHUeMiy5_5=Uku zn}f_ob`P>SN=W9&A+e>A*vRUU&BVfHdYqe*Si;2x3>hZ%N4Yfz6pWNb7?d3t7#e^= zqUIGLwHj=9x8MJ7Vf!K9+eY0nL^SRxTY{0c5#s}(BIXQWXuBS8yuk1v&^aye(oTcQ zixZjj-p|`SFY$nlaqr@m__PB?Mn+5wO>o7G4h)x+dUiK*#$S98DljqRjc$>bG#}%s zn@dZVu<&jbyR-MPVu6v05i=u;1KffM4EMFRFWh?lz|~Fi-;Wpt_Gr!!&S@|bGGbw3 z>wu^NI>&*bT>&V@%EEC$0qiueSepY-jE#d^!UZALcK|5HF2I|R(G2neSY2O(k)RO= zga3+Ngu1y#@^7SklLXZ#%c=#0|l4?KKLn>H<*V>8+9o$>>q5?-J`+!1EnwRe@4ow2mFX$$+&53kr3O8~vV zhw80vpb$T*ueyMq7kB{k71;9=1b_|{WMuxd0bxI{dUDN_8CTeZH(mKwZx~<%3|l6) zsw)Tu7e9Y%tKHK2Qs%{asqal8CyZo_gjqOF{eY?f`tgou_ovlQ{(9N8ZfG!)G!o(9 zma>7$0t5X*pU1k7VW}rJ0PPkP;7v+FXuQ3u;%YEb)Zrzj)p=7tM!p$3kn)2pjD}~Le)AQy7wj~%MbJ8=F8dhedp}iy#au6 zES;DVRXN z+tD{wPwLv}+Ra4QL_Gyq?T*zvtaij|d#uKL?J(RKt8pBkgX3@G<34deI3M>T#&mHl zFANu9^<1pR`7Ria&&PXlKCX*&Vly4ET8Py+|7|$FU;Iq* zeDM6|>*li@(vuUF78d9hF+4}o_o_w2un7m$qMw$4VfH*WqUiG8foFLtOED*;@s;uu z)lkLvCGBRr6-OeU4E`d&=#@Q_+u+lrc)9Lm_|2r@cUtC$`kd|cOaEe`t5i~aiXAwn zDiiWFbwFS)DzL zuE%sK`X7llAGg%}ym~^d_?Ro+8u8m=m4EYoR%_i-pBW-$y5yRN=8r92?xkDVd@EpNP-@7$-HSGfrJRM7;IAC3K%5tba}Oh z-;~%l_nRHCJuS0arm%6zp!5f z9#pd?yOF+)NT9xLhWXeQqsFDp;8Ar4 zA?c_=@rapL(hr@M4Fz#szpoEP+w|h_ z{c?<)AA|q&IL{Un66h@wboc5OD3dp~XO!;nKl=9(Y4m#AoWYA#eQ~mdQoNcJ#f=FzM(Jyr~oqh8)D<$(4vlwm<^PQ z3|)eFgErk^k==73W^Bzi-!EUHe*n3`0KItoeBJHK`NOH`-X$2ci>ctXIh_H*s0W^x z8cc(-UMN0DK(ATimN!R0+bdj7c*76Dp`dbI)Kr^WMe}5ibWMrYF;um{E5rWDSQck2 J3Z`r-_#X%x5%B;3 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s b/wai/pack-conformance/packs/video-ladder-01/package/floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s new file mode 100644 index 0000000000000000000000000000000000000000..6adf8fdfddb9f43c4eda7bcb3dc4a4a5518f1282 GIT binary patch literal 2526 zcmZ`(Yfuwc7+sbW!qWsWgd{+)fLH~07V4lzO>NbV4=Pp}WDp556kEb0#zzND*IGpy zsI(|*QL$<(T18Z#Qguv_Y6?D}7DXb8DB9YNf)4a)?YEnd{nDA{2l@E!`OZ1_+#C8YTu-NHMj$gr`edrK~Fxzy@0e)hSU zgG;lE=jKe>5-UxKo|4#7TKTtY`oxcVO0_3PXInJFU+)I&EFRa;lyc~o{3M2sq+Cr5 zLAbSnS0h0%M7^bewodQA-ewL?mQ>H45kE?P@skf}B_(hX4C5G*A>0mrplb6gj{o7O zOV?uB{!r3>lp868KFb7*3{g}|2T?+Sj|lZF@`3qBk3>CUXc^@x6z^5rgjvGi_KfI` z8!^YKO|+Eq7D=ehJXJ?Z%YE{}zDOYSRmx25{FJ<+aKPiqhHy1Kk`fVBi86kuxwvmm z8*ur#xZhpIPe`}59|#|;?4%`B04W?eVjtL`Bzle?DoH&KL=u6Ic#tQu{N~v{k5*7p zFl?|BZP-iP$+(r@o%?ZK&h?uWbRZ=I%Uk#%>y-n~4vW=vFr`3_A(mi4TIE)^HPj?Z zEnEUIggCpt#c0Ik9+gj{n_)D}%v*=iu=A76sq=D^u9+l%F?0YmigfQw=Os@^Bm_W0 z;R5f$YP(Gsl3PE|B=^s#>xUgg3dP&{ZAM4rk(Ad9o#S72*4!~2@G;K*EdIWS z!35>(FZiOOv-a!9E9FNGO4^^I9TvGu^nK7ST293wXKaM2dFNMo`PG_z8PK1AT!HQG zWtVgPyF7M7wDHc)6xWu$?(4oWVNn$5O!|+vx_mfzmBSh*emNv#V=C-pso(-|- zzgEV^Wg5Qj#>IjjpqQ?dsOIw-9jlNug+TiaV$Y>EzTMXv{)F{DlXUME*|UQ;;3XwC zHSbuT3@dL6yr0{6j0|jfWT}=EmNc1wYPL|k8&N$t5m#@3Sm!!~jSR$aOY!!L@^5xW z#qCiW;B6*2>s#)@jh&CgK_Vz#u=@QqY5*^AXmc^N48g5h=uqYS1Wjn~y1hKVh5>kz zL)n&E0z9o`hn@|dC63$7Kb|x>n6>i%#B=$ z12>xV;gmW02y;g4xe)RC&7hD$R7@-5lRo;^EJ!nxbh~P6a(L;`)5M9V>L}385_sRS zudq+z)5a4KBNnAuBM(GOg$I}|6ju$;L8w-Zbqpz~`q5a^UoZ|X*t}BAZ=OZ;(dU?rCb!_9kb$|A5g*lx= yi~F5!xUnfs`I14B4!hGkq_~7SzAZYO@~EmG7+3LP?C!#fdY7*730?O%TKz9K{6yUV literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s b/wai/pack-conformance/packs/video-ladder-01/package/floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s new file mode 100644 index 0000000000000000000000000000000000000000..5c06ef47a465a0b1f6802d80907cf89f7a8c472a GIT binary patch literal 1695 zcmZQzV6w=~&rf4uU=YYn%SZvzAi&DNz@$)8ln53t0f{q##TkL5NJ&~s35Wp&3m6y} zzmyb}<}om^gM>AJdL4i?i2WR*4a}BcglGbhl1OY3B(@?FTO5gvtXBp}To?yi3P~K7 zIml{|%||v9Ssa;-tOgfb8p#dFYKSohIed`y;$kD4DTZV(G8;J@kj+6BM-G2vy~yT6 z*(~X~DTyUqT)^05Qh$_Nb3no92BQGOY#^7rfoWT(uGSs>wEWQUN1Ue1Dhy@k^6mfC zH7#0jFEeB8{qM2MSyO6 z49yA*4^;l`x@=%1ZotCGf-HVtJ87R~On{M)0UHxX155)$14E~Rk-Py13$Fk~tQ%xb z`4ZjY>{?lg*rScdJrB$?5;frB5M1DZu;reK@3MZNV<2b-t3W#JpyihgOP4@QCp0u1v5rJ#C%_O}6rgc#W$CL@HJj3f+1m^ePJK?q%5 z#U*NeWnlu)DPkc|POPYOI}^^AQfc20jl*NyNuAS7dJ3Lwf^p(c@2PGs=|Up|&O006TcZ;t=~ literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/floor/lo/init.mp4 b/wai/pack-conformance/packs/video-ladder-01/package/floor/lo/init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..d419e7893b423b9190462bd07734f8d65d2f1cfc GIT binary patch literal 628 zcmaJ72wlj--P?G~v~>ZbEg8c>oz#gjkv{w=`HjkN|b0NVI}qD>5;-$JpC X@ML@i0XNF!FA&0NA34waI@sGks3|>p literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/hls/classic/floor-hi.m3u8 b/wai/pack-conformance/packs/video-ladder-01/package/hls/classic/floor-hi.m3u8 new file mode 100644 index 000000000..d6ac7336d --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/hls/classic/floor-hi.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:3 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-MAP:URI="../../floor/hi/init.mp4" +#EXTINF:2.400, +../../floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +#EXTINF:1.000, +../../floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +#EXTINF:2.000, +../../floor/hi/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +#EXTINF:1.000, +../../floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +#EXTINF:1.600, +../../floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s +#EXT-X-ENDLIST diff --git a/wai/pack-conformance/packs/video-ladder-01/package/hls/classic/floor-lo.m3u8 b/wai/pack-conformance/packs/video-ladder-01/package/hls/classic/floor-lo.m3u8 new file mode 100644 index 000000000..628e70c2b --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/hls/classic/floor-lo.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:3 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-MAP:URI="../../floor/lo/init.mp4" +#EXTINF:2.400, +../../floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s +#EXTINF:1.000, +../../floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s +#EXTINF:2.000, +../../floor/lo/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s +#EXTINF:1.000, +../../floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s +#EXTINF:1.600, +../../floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s +#EXT-X-ENDLIST diff --git a/wai/pack-conformance/packs/video-ladder-01/package/hls/classic/master.m3u8 b/wai/pack-conformance/packs/video-ladder-01/package/hls/classic/master.m3u8 new file mode 100644 index 000000000..5fb4ccb7c --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/hls/classic/master.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=9055,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9016,AVERAGE-BANDWIDTH=8723,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/hls/legacy/master.m3u8 b/wai/pack-conformance/packs/video-ladder-01/package/hls/legacy/master.m3u8 new file mode 100644 index 000000000..5fb4ccb7c --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/hls/legacy/master.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=9055,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9016,AVERAGE-BANDWIDTH=8723,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/hls/mobile/master.m3u8 b/wai/pack-conformance/packs/video-ladder-01/package/hls/mobile/master.m3u8 new file mode 100644 index 000000000..5f049c978 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/hls/mobile/master.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.multivariant",VALUE="wai.m3u8" +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=9055,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9016,AVERAGE-BANDWIDTH=8723,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/hls/mobile/wai-v.m3u8 b/wai/pack-conformance/packs/video-ladder-01/package/hls/mobile/wai-v.m3u8 new file mode 100644 index 000000000..949e945a2 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/hls/mobile/wai-v.m3u8 @@ -0,0 +1,20 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:3 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-GAP +#EXTINF:2.400, +../../objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai#n=39826 +#EXTINF:1.000, +../../objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai#n=9950 +#EXT-X-GAP +#EXTINF:2.000, +../../objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai#n=35882 +#EXTINF:1.000, +../../objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai#n=9950 +#EXT-X-GAP +#EXTINF:1.600, +../../objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai#n=25514 +#EXT-X-ENDLIST diff --git a/wai/pack-conformance/packs/video-ladder-01/package/hls/mobile/wai.m3u8 b/wai/pack-conformance/packs/video-ladder-01/package/hls/mobile/wai.m3u8 new file mode 100644 index 000000000..66fa8dc50 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/hls/mobile/wai.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.class",VALUE="mobile" +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.stages",URI="../../stages/mobile.json" +#EXT-X-STREAM-INF:BANDWIDTH=79600,AVERAGE-BANDWIDTH=79600,CODECS="wai1.video.int_motion",X-WAI-FLOOR="wai1.video.int_motion",RESOLUTION=64x36 +wai-v.m3u8 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/hls/tv/master.m3u8 b/wai/pack-conformance/packs/video-ladder-01/package/hls/tv/master.m3u8 new file mode 100644 index 000000000..5f049c978 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/hls/tv/master.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.multivariant",VALUE="wai.m3u8" +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=9055,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9016,AVERAGE-BANDWIDTH=8723,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/hls/tv/wai-v.m3u8 b/wai/pack-conformance/packs/video-ladder-01/package/hls/tv/wai-v.m3u8 new file mode 100644 index 000000000..8d1c2efe8 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/hls/tv/wai-v.m3u8 @@ -0,0 +1,17 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:3 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-INDEPENDENT-SEGMENTS +#EXTINF:2.400, +../../objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai#n=39826 +#EXTINF:1.000, +../../objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai#n=9950 +#EXTINF:2.000, +../../objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai#n=35882 +#EXTINF:1.000, +../../objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai#n=9950 +#EXTINF:1.600, +../../objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai#n=25514 +#EXT-X-ENDLIST diff --git a/wai/pack-conformance/packs/video-ladder-01/package/hls/tv/wai.m3u8 b/wai/pack-conformance/packs/video-ladder-01/package/hls/tv/wai.m3u8 new file mode 100644 index 000000000..47679d0e9 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/hls/tv/wai.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.class",VALUE="tv" +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.stages",URI="../../stages/tv.json" +#EXT-X-STREAM-INF:BANDWIDTH=143528,AVERAGE-BANDWIDTH=121122,CODECS="wai1.video.int_motion",X-WAI-FLOOR="wai1.video.int_motion",RESOLUTION=64x36 +wai-v.m3u8 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/index-v.wsix b/wai/pack-conformance/packs/video-ladder-01/package/index-v.wsix new file mode 100644 index 0000000000000000000000000000000000000000..9f10add88ce849120a16b096d26800ba3d4479bf GIT binary patch literal 2368 zcmWF!_KaX;U|^60Vi3&=#QZ?a2E@!joM~}C@uIq)a|T<``V5sBdt>TFS&x2|<~Uv; zV&;6zq7SHqBoLAQN9z%HdWxZd`IfsPV!5IZ1b3P=-dFj%X`$G@)LAcZ8D;~OU;k#C2}gY$N4)vr<}OT;$0NG4X{x_Z?Ex{?4tSwXD zdC#0U&-RMc`mBA~mb-2r-|+I~!tkvT*BZbow?Wlkm<44(sq-y*pILitLayfUEq+k? z{!Y1=8Pk@9xAy$!;EP+-J<~0M3spVHepZm}AV&}ZKM{;=yK{kHHdp*kq+_;a`^vup5|P7aBoog1firy!lqMG*2%J+hT+g(m9wO_Wd zsI}n|G@Oy`rzHG8!x9eE0XYwC=6!3|S-1W7bFsuz9ea)>pIhVpk@LjC(8t~zmwm2H z0cB_)pqBlupiG7Y4xN)^SB+wkvFQ5CcIE=Rb8^OuODySs-)PCb-rcgn`jb`% zTVG!N=N#wRTXCmLeV*;@J*&t3=8vQ4oV7D%i+8YI?y`?9!u?KBS`kH0#BWeW|b^>DM?bg_uKYWvf0^VW9} zU;|+3|3wmNpl#pJF8(s(`nG-U=B+2cWq$Vp94Os*7RC{N7PE6Yqt Z&DYD!D~Zp|FUic$<3$opEHeaI0|2#VGzkCz literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/moq/catalog.json b/wai/pack-conformance/packs/video-ladder-01/package/moq/catalog.json new file mode 100644 index 000000000..cb914abd4 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/moq/catalog.json @@ -0,0 +1 @@ +{"tracks":[{"altGroup":1,"isLive":false,"name":"v/l0","namespace":"video-ladder-01","packaging":"wai","renderGroup":1,"role":"video","wai_capabilities":["wai.video.int_motion"],"wai_determinism":"decode-equivalence","wai_receipt_alias":4716788767000716,"wai_receipts":true,"wai_receipts_track":"v/l0/receipts","wai_staged":{"layer":0,"lead_ms":null,"set":"v"}},{"altGroup":1,"codec":"av01.0.00M.08","height":36,"name":"hi/floor","namespace":"video-ladder-01","packaging":"cmaf","renderGroup":1,"width":64},{"altGroup":1,"codec":"av01.0.00M.08","height":18,"name":"lo/floor","namespace":"video-ladder-01","packaging":"cmaf","renderGroup":1,"width":32},{"isLive":false,"name":"v/l0/receipts","namespace":"video-ladder-01","packaging":"wai-receipts"}],"version":1} diff --git a/wai/pack-conformance/packs/video-ladder-01/package/objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai b/wai/pack-conformance/packs/video-ladder-01/package/objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai new file mode 100644 index 0000000000000000000000000000000000000000..b15b5310886cf0f3076b32c2b77264e58fd7b1d0 GIT binary patch literal 39826 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

YmH;T^6RA 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 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/objects/4ab8f747d181632f342a4887b0a8bb86c174409cb625157784e18c5e5559a381.wai b/wai/pack-conformance/packs/video-ladder-01/package/objects/4ab8f747d181632f342a4887b0a8bb86c174409cb625157784e18c5e5559a381.wai new file mode 100644 index 0000000000000000000000000000000000000000..cf1710435b2925d643182d2b65e219d87159a714 GIT binary patch literal 2503 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 LNgU4&(V+hW7Cne_ literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/objects/6ce13c9ef6872caeb7fbe71661ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai b/wai/pack-conformance/packs/video-ladder-01/package/objects/6ce13c9ef6872caeb7fbe71661ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai new file mode 100644 index 0000000000000000000000000000000000000000..93381e7ad632b0c62b0c50b41f138aa51d44d249 GIT binary patch literal 1380 zcmZ{heQXnD9LJw_wJRGPUH9S`AmxS@an8Hv?s|7i39UL6`~#OvXJVv0ch7V5WNl~H zjp1l4!=jNfN9G@kQ4)g~#YAU;5aUZ~q6Ud38w_9Kkj9rpjll^CsL|-tyLk;J{_*5q zzMtRs_xt{y-smRotOI}%W+yV3PKN7XnRX^Yuz~2;kby~xejCXQNoMGeH0kd%G?XD_ zD1}L1EKMFAG}0tt>LZMX`jKk%8JS&_rj{M1MF$$WbBY8xLC`f?ggJx>7D6mi6-5>}3Fo<<2m zZK2rC#F#OqoNncWPK&krLW9Xo`IVgA73Ct`XrWR*bZ1fzC|BLdDaV{h+S5}PgE?>pG@^R4O4E9xAl zzdSPdlFNIddH&sR*YvNmD%Zj)hbv+?n*bNqpM3Ge=f!h{)mJ}&-D5XTHT310E!GcR zPWMw5O9zaACj+)}oy#*5Fh@3(eGyx6dum(mtSI9}TdDSWx5f9CW12PNxhAVmJ@kMr zuNk`FUZ3ZCXoH{jq2ood93=zSCYEF6>e3gOfJ|Q#V?sYv58E zabv~w6Xw{$(z?+?;pOMUlXqQgE7_ozCceAkcYb5nid9ob@}tMAKV109eYnMrS$FLM z_S?d;Yx6&Cugq8aH-Dsj0TVtuM7^Wx(sX4yZ&2I)?9`mQp)hylaqhmgR)_%fJKc}X zRj}F1SN3I(=YL%J!yBzvM|(~MEN&%iaCuJuw#d<)%x~I%>9z0v+8oYL=T=$Fa@gpp zZ4ECnjtH0;zvuN|A0Vfu?U|Zp5~Nf=IUytx`|5>ss4_Emdr7_a@Vwz#skNo-;GQ z@B2OO_szPcS;S}nhE?J&M!?NDp#^vCaFzR>{$686oh;%q4Ktn?3 zyGSSFD1vApl{oKUN+6;&fK>c>+^nZkaTji;3{_Qkf-o!v!?5}2WS|p|4w^I;D#Nfy zEF=Uy%1%r)Sb$vjV3q=Fz;8`^*{8WQ~{pitci=S%v_xafLlCfC>N&KboCGL4iQh!AR{e*1e!vc;v+Ky_=&RhIc*JaPlSfE8i{7JF18E9e-JI z)?B>4>#Gl%-zb>!+`HULPqwx9ldXO$qmN`g zy=`luhik)6VP9yAfBaGNnP#Z%+uo*C zS1&pw5%bJ6g^!C|3qZP*#>dtF&*Pz2x~Z0RBfZ}reS3DqnveEuztAVqERiC*yhEV$b7}~;;NA48zsSPbxgfj=k|tFFBAp;1ah#$r>7B|v7fHUX;Z}JrJeoo Me$}~43oG3J19W+`r2qf` literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai b/wai/pack-conformance/packs/video-ladder-01/package/objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai new file mode 100644 index 0000000000000000000000000000000000000000..2ab2cbd490b9f5789d5eb043cffbb31dac0dda3c GIT binary patch literal 35882 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 bxgBY@5%KXhDVueAQ1qo2i}6y{*ZjOI^HwNn literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/objects/cf842ef3058d3c54d56c0ea3e075efdc77163602b4a1dabcff080e5ea28b9946.wai b/wai/pack-conformance/packs/video-ladder-01/package/objects/cf842ef3058d3c54d56c0ea3e075efdc77163602b4a1dabcff080e5ea28b9946.wai new file mode 100644 index 0000000000000000000000000000000000000000..5b4b092ebb2bec1dc52fe1987b91ef15cd29ee73 GIT binary patch literal 2648 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 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/objects/f525b4450c29153dde0b43e4d143dfb76fcc3884c607b744c8a53fa6a1728580.wai b/wai/pack-conformance/packs/video-ladder-01/package/objects/f525b4450c29153dde0b43e4d143dfb76fcc3884c607b744c8a53fa6a1728580.wai new file mode 100644 index 0000000000000000000000000000000000000000..f91d83f963f2032c6a6f7f40d71290e2af675b0d GIT binary patch literal 1234 zcmZ{h-ERz07{hL{HZy0wHx(<<2sdrq;DYU$IcMxdcekda)V9rr z2oe4PAD2WV(z@Y7f-9mo6&h|-D@uY3^$`(?#JjW1s8lj1Gw1x?=Xu}f%${vKg{L8e ziri6Rb16^)iUVliAq=wdrV}pGezTe=<=GnxOw03pJf}}B4XV3-7O4N1z+=8TO-pmoy-Bd}l0yqCN+uigp D%T*i5 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/objects/f7f7f4d6af777bfcce09cdda5ecb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai b/wai/pack-conformance/packs/video-ladder-01/package/objects/f7f7f4d6af777bfcce09cdda5ecb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai new file mode 100644 index 0000000000000000000000000000000000000000..ccf6489fc6a4df75c3b252aa792e7bce90cffe23 GIT binary patch literal 2351 zcmZ`(X;c$e7#$WN1+;(|6i~tl0ReMfCOcY1i-L*>xKxmWlUZ;oBr!w*(Karntik~o z+_2alT#tIRTB{z7#ky4Mg4&9rq7}6+)v8pjr^mjT!58__A9Hdh_ulWj_xs+wPezSX zUUb2*61S)}#_%LF&E(}+nK^Sg zE0ZtaB{)S|NF$fW*@__>mQ)BO6y!W5zAzT2%qE(%ab^=|%EjYK@Y$S+hP-Z+W~|&i zhR$KF=6oK_H`_QC!W2O(Npt)9`-1W;>rEX_~^ zsbm&57=YPz>bUA!4vk5Y-j0yT+tgvsvTnkLg(DAg+prKg<0SMNp zVO0dnD7AW$)aW%T6+vpW1~p0RXg#fC^hUkLz*0I|qa$?&B@6VF!N5%AECofhlB5}0tp%jfV9=|TI)c^Hlu<+KU>_PbFfd9&7^ID~ z<}z?0B{*v(^BGuH17h)6c$`unix=W?Dq`WnR8I^eFbwmDj|@Ho-~%^}J%f)w=H&%{ zTqAGiFL20+TQ0uXTKMXXx%PTKbyCHV1#M3jHF$^nCT@Ifo7Zr??uV-Vz2;k1r#)=H zm~|+s@NIEZOtaQuWdF58g@Xm&s(16z37i>ZDw#Sj$ zG1l7K!Gs&Inf=z(6~DQCP|=*zj$b%4={H?N+_ohidm0TfZwa=m>U2cwALYR{K~4Jro$grC$Jf0py?)u1r92cD0Q-e6X(C1EgKT+%le6bB_K~CH{NCbj_zl-NBN&qVP zSf_%&+cW>ljYVw|Bn@zt{I%UFrIBB$dvCukC(yF0qoU>?2h#P2aXxp#S*T?Y3{v9+ zP7SGdUvy`!*~cjj>6vCa+SMQwqtXtC+;4Zu=B)Z_fjI->q-!$lXvSej--Qw;S!F@J zaaYgIna4ifT%YtWd(-F>7`5T573}f6NZ>XOfRch^#Q6K-mOy12y-K zPuMp@r7F&@Cckm5_!)TvD55|-)|!>x_5Gnxu}&}`P)Iv}B+jipeLXPy!&ckMnP^CA zl+KPpLs#}Bk{!sc)|rjhhh~(v?n#i`d(t?4YXv|i^v+ED_Y$HgZ5=J&fF>Q+Gt94s zWp^^O4uHk&6>@)UN5*akTIq0S8h(_Q?;l9m6xi_5LOW_TqGzDX%Rajl(A(Z$%o_kk z)$*%yzzaagTR%+Wl#Z53ho^Q=9%cz&lxVn{+83Si1g!DQc>xxrbJ0N^>*{&k*SX)Q z-Mg-NKDc>eykqD?OG_@&C%OClE0!1ZsVLNViQjs$uy850r^Gm_%enFZ=NFxfoQYBy zCfpMtAmu$za5vXO>WA&xn5N$Dof;J+a-<*?*%S8H9(H&3S@TBaJnSg2^(j5+&#K{@R_;}q@MnsNnVW(UnX)UsJ#kL zES=IhE?4o@D|FXoA$tPl!rsOUM@nzaLf=6)a#qQ&w4>_6z( BnjioG literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/package.receipt.json b/wai/pack-conformance/packs/video-ladder-01/package/package.receipt.json new file mode 100644 index 000000000..232e4656d --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/package.receipt.json @@ -0,0 +1 @@ +{"asset_id":"video-ladder-01","components":[{"id":"v","index":"index-v.wsix","index_digest":"901134f541a31eed733c22e4e471abd9530566cb54d945b6c86843bb5bcc85cb","media_class":"video","stage_root":"56ff2237e4654a894ebefb9d0588092806b71c58ee502aa43624bba633cd4bf2"}],"energy_provenance":null,"grant":{"capability":"wai.video.package","funds_ceiling":null,"grant_hash":"0000000000000000000000000000000000000000000000000000000000000000","joule_ceiling_micro":null},"joules_micro":0,"kind":"package","packager":"builtin:wai-pack@0.1.0","parent_kind":"none","parent_receipt_hash":null,"policy_digest":"6938df61d1274e43680652af682498bd5c7f1505c5f51b08c770143643c6388e","receipt_hash":"8ffbff73ab3b6a07c2e9645965a0bf8537bb9023e6b478186d9d9a399e343f3f","sig":"66e04ae9335a32844b7e1f83fad3d05005d296c6e69638e026d543df0596bf5066862df13ce6c4bf80b8dab32f67a0e72811e1227821857c29f9be45faf14c0a","signer_id":"did:key:z6MkqahniHbtvRDna9jmc9dSMo88FCuKnuujLKxbWyK4682w","signer_pubkey":"a558bae731bbba29b0b2308493514f6ec8a51ab40409cce9e3afafecca787224","stored_bytes":127966,"total_bytes":140530,"total_entries":15,"unique_objects":12,"version":2,"work_units":15} \ No newline at end of file diff --git a/wai/pack-conformance/packs/video-ladder-01/package/plan-v.txt b/wai/pack-conformance/packs/video-ladder-01/package/plan-v.txt new file mode 100644 index 000000000..c7196c34c --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/plan-v.txt @@ -0,0 +1,5 @@ +0 +60 +85 +135 +160 diff --git a/wai/pack-conformance/packs/video-ladder-01/package/policy.json b/wai/pack-conformance/packs/video-ladder-01/package/policy.json new file mode 100644 index 000000000..2dbbeffda --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/policy.json @@ -0,0 +1 @@ +{"asset_id":"video-ladder-01","class":[{"floor_only":false,"id":"tv","max_layer":0},{"floor_only":false,"id":"mobile","max_kbps":100,"max_layer":0},{"floor_only":true,"id":"legacy","max_layer":0}],"classify":{"motion_high_milli":9000,"static_mad_milli":300,"static_permille":5,"synthetic_bins":12},"component":[{"id":"v","media":"video","source":"video-base-01.y4m","timebase":{"den":1,"num":25}}],"defaults":{"deadline_ms":1500},"floor":{"extra_keyframes":false,"supplied_listing":"d795df9202fb5f32fe168aa585332a5694ad7d8d7e8b859fc7d57a791f08c990"},"ladder":[{"capability":"wai.video.int_motion","component":"v","id":"b0","params":{"block":16,"max_sse_px_milli":30000,"mv_precision":1,"q_candidates":[16,12,8],"search":4},"role":"base"},{"capability":"wai.video.av1","component":"v","id":"hi","params":{"source":"supplied"},"role":"floor"},{"capability":"wai.video.av1","component":"v","id":"lo","params":{"source":"supplied"},"role":"floor"}],"lead":"v","live":{"layer_lag_ms":[0]},"moment":[],"royalty_free_only":true,"rule":[],"schema":"wai.pack.policy/1","segmentation":{"closed":true,"cut_abs_permille":300,"cut_rel_permille":3000,"cut_window":8,"lookahead_frames":6,"max_ms":4000,"min_ms":1000,"scene_cut":"wai.pack.scenecut/1","target_ms":2000}} \ No newline at end of file diff --git a/wai/pack-conformance/packs/video-ladder-01/package/policy.toml b/wai/pack-conformance/packs/video-ladder-01/package/policy.toml new file mode 100644 index 000000000..07e11d953 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/policy.toml @@ -0,0 +1,54 @@ +schema = "wai.pack.policy/1" +asset_id = "video-ladder-01" +royalty_free_only = true +lead = "v" + +[[component]] +id = "v" +media = "video" +source = "video-base-01.y4m" + +[component.timebase] +num = 25 +den = 1 + +[segmentation] +target_ms = 2000 +min_ms = 1000 +max_ms = 4000 + +[[ladder]] +id = "b0" +component = "v" +capability = "wai.video.int_motion" +role = "base" +params = { block = 16, search = 4, mv_precision = 1, q_candidates = [16, 12, 8], max_sse_px_milli = 30000 } + +[[ladder]] +id = "hi" +component = "v" +capability = "wai.video.av1" +role = "floor" +params = { source = "supplied" } + +[[ladder]] +id = "lo" +component = "v" +capability = "wai.video.av1" +role = "floor" +params = { source = "supplied" } + +[floor] +supplied_listing = "d795df9202fb5f32fe168aa585332a5694ad7d8d7e8b859fc7d57a791f08c990" + +[[class]] +id = "tv" +max_layer = 0 + +[[class]] +id = "mobile" +max_kbps = 100 + +[[class]] +id = "legacy" +floor_only = true diff --git a/wai/pack-conformance/packs/video-ladder-01/package/stages/legacy.json b/wai/pack-conformance/packs/video-ladder-01/package/stages/legacy.json new file mode 100644 index 000000000..f75b26874 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/stages/legacy.json @@ -0,0 +1 @@ +{"class":"legacy","components":{"v":{"pieces":[{"dur":60,"floor_only":true,"p":0,"stages":[],"start":0},{"dur":25,"floor_only":true,"p":1,"stages":[],"start":60},{"dur":50,"floor_only":true,"p":2,"stages":[],"start":85},{"dur":25,"floor_only":true,"p":3,"stages":[],"start":135},{"dur":40,"floor_only":true,"p":4,"stages":[],"start":160}]}},"policy_digest":"6938df61d1274e43680652af682498bd5c7f1505c5f51b08c770143643c6388e"} diff --git a/wai/pack-conformance/packs/video-ladder-01/package/stages/mobile.json b/wai/pack-conformance/packs/video-ladder-01/package/stages/mobile.json new file mode 100644 index 000000000..a17df1d90 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/stages/mobile.json @@ -0,0 +1 @@ +{"class":"mobile","components":{"v":{"media_playlist":"../hls/mobile/wai-v.m3u8","pieces":[{"dur":60,"floor_only":true,"p":0,"stages":[],"start":0},{"dur":25,"p":1,"stages":[{"bytes":9950,"h":"61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365","layer":0}],"start":60},{"dur":50,"floor_only":true,"p":2,"stages":[],"start":85},{"dur":25,"p":3,"stages":[{"bytes":9950,"h":"61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365","layer":0}],"start":135},{"dur":40,"floor_only":true,"p":4,"stages":[],"start":160}]}},"policy_digest":"6938df61d1274e43680652af682498bd5c7f1505c5f51b08c770143643c6388e"} diff --git a/wai/pack-conformance/packs/video-ladder-01/package/stages/tv.json b/wai/pack-conformance/packs/video-ladder-01/package/stages/tv.json new file mode 100644 index 000000000..f2b8286b1 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/package/stages/tv.json @@ -0,0 +1 @@ +{"class":"tv","components":{"v":{"media_playlist":"../hls/tv/wai-v.m3u8","pieces":[{"dur":60,"p":0,"stages":[{"bytes":39826,"h":"24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d","layer":0}],"start":0},{"dur":25,"p":1,"stages":[{"bytes":9950,"h":"61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365","layer":0}],"start":60},{"dur":50,"p":2,"stages":[{"bytes":35882,"h":"c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2","layer":0}],"start":85},{"dur":25,"p":3,"stages":[{"bytes":9950,"h":"61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365","layer":0}],"start":135},{"dur":40,"p":4,"stages":[{"bytes":25514,"h":"618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481","layer":0}],"start":160}]}},"policy_digest":"6938df61d1274e43680652af682498bd5c7f1505c5f51b08c770143643c6388e"} diff --git a/wai/pack-conformance/packs/video-ladder-01/policy.toml b/wai/pack-conformance/packs/video-ladder-01/policy.toml new file mode 100644 index 000000000..07e11d953 --- /dev/null +++ b/wai/pack-conformance/packs/video-ladder-01/policy.toml @@ -0,0 +1,54 @@ +schema = "wai.pack.policy/1" +asset_id = "video-ladder-01" +royalty_free_only = true +lead = "v" + +[[component]] +id = "v" +media = "video" +source = "video-base-01.y4m" + +[component.timebase] +num = 25 +den = 1 + +[segmentation] +target_ms = 2000 +min_ms = 1000 +max_ms = 4000 + +[[ladder]] +id = "b0" +component = "v" +capability = "wai.video.int_motion" +role = "base" +params = { block = 16, search = 4, mv_precision = 1, q_candidates = [16, 12, 8], max_sse_px_milli = 30000 } + +[[ladder]] +id = "hi" +component = "v" +capability = "wai.video.av1" +role = "floor" +params = { source = "supplied" } + +[[ladder]] +id = "lo" +component = "v" +capability = "wai.video.av1" +role = "floor" +params = { source = "supplied" } + +[floor] +supplied_listing = "d795df9202fb5f32fe168aa585332a5694ad7d8d7e8b859fc7d57a791f08c990" + +[[class]] +id = "tv" +max_layer = 0 + +[[class]] +id = "mobile" +max_kbps = 100 + +[[class]] +id = "legacy" +floor_only = true diff --git a/wai/pack-conformance/supplied_floor.py b/wai/pack-conformance/supplied_floor.py index d01635825..02e58eb52 100644 --- a/wai/pack-conformance/supplied_floor.py +++ b/wai/pack-conformance/supplied_floor.py @@ -6,10 +6,14 @@ from the fixture generator and nothing else. This script states how it was made: 1. `wai-pack fixture gen ` writes the fixture the policy's component names; 2. `wai-pack plan` cuts it with the policy and writes the keyframe plan (§7.3); -3. each piece is coded alone by an AV1 encoder (`aomenc`, one pass, constant quality, no - lag and no alternate reference, so each temporal unit holds one shown frame, and no - key frame but the piece's first), in the low-overhead OBU format; -4. the pieces' streams, concatenated in order, are `floor/.obu`; +3. for each floor rung of the policy, in ladder order, each piece is coded alone by an AV1 + encoder (`aomenc`, one pass, constant quality, no lag and no alternate reference, so + each temporal unit holds one shown frame, and no key frame but the piece's first), in + the low-overhead OBU format; a rung given `--scale =` codes the fixture with + its width and height divided by d, each sample the mean of its d × d block, rounded + half up, and `--cq =` sets its quality (40 by default); +4. each rung's pieces' streams, concatenated in order, are `floor/.obu`: the + component's id when it has one floor rung, the rung's id when it has several (§7.1); 5. the policy's `floor.supplied_listing` is set to the SHA-256 of the floor directory's listing (SPEC §3.1), which `wai-pack listing` prints. @@ -19,6 +23,7 @@ never encodes it. This script is how the committed stream was written, not a ste verification. python3 supplied_floor.py directory> [aomenc] + [--scale =]... [--cq =]... """ import os import re @@ -46,45 +51,101 @@ def frames_of(y4m): return head, out +def scaled(head, frames, d): + """The frames with width and height divided by d: each sample of each plane the mean + of its d x d block, rounded half up (4:2:0, so the chroma planes are halved too).""" + if d == 1: + return head, frames + w = int(re.search(rb" W(\d+)", head).group(1)) + h = int(re.search(rb" H(\d+)", head).group(1)) + if w % (2 * d) or h % (2 * d): + raise SystemExit(f"{w}x{h} does not divide by {2 * d}") + cw, ch = (w + 1) // 2, (h + 1) // 2 + + def plane(b, pw, ph): + out = bytearray() + for y in range(0, ph, d): + for x in range(0, pw, d): + t = sum(b[(y + j) * pw + x + i] for j in range(d) for i in range(d)) + out.append((2 * t + d * d) // (2 * d * d)) + return bytes(out) + out = [] + for f in frames: + line_end = f.index(b"\n") + 1 + body = f[line_end:] + y, u, v = body[:w * h], body[w * h:w * h + cw * ch], body[w * h + cw * ch:] + out.append(f[:line_end] + plane(y, w, h) + plane(u, cw, ch) + plane(v, cw, ch)) + head = re.sub(rb" W\d+", b" W%d" % (w // d), head) + head = re.sub(rb" H\d+", b" H%d" % (h // d), head) + return head, out + + +def floor_rungs(policy): + """The policy's floor rungs, in ladder order.""" + out = [] + for block in re.split(r"\n(?=\[)", policy): + if block.startswith("[[ladder]]") and re.search(r'role = "floor"', block): + out.append(re.search(r'id = "([^"]+)"', block).group(1)) + return out + + def main(argv): - if len(argv) < 3: + opts = {"--scale": {}, "--cq": {}} + rest = [] + it = iter(argv[1:]) + for a in it: + if a in opts: + k, v = next(it).split("=") + opts[a][k] = int(v) + else: + rest.append(a) + if len(rest) < 2: print(__doc__) return 2 - wai_pack, pack = argv[1], os.path.abspath(argv[2]) - aomenc = argv[3] if len(argv) > 3 else "aomenc" + wai_pack, pack = rest[0], os.path.abspath(rest[1]) + aomenc = rest[2] if len(rest) > 2 else "aomenc" policy_path = os.path.join(pack, "policy.toml") policy = open(policy_path, encoding="utf-8").read() comp = re.search(r'\[\[component\]\]\s*id = "([^"]+)"', policy).group(1) source = re.search(r'source = "([^"]+)\.y4m"', policy).group(1) + rungs = floor_rungs(policy) + names = [comp] if len(rungs) == 1 else rungs + floor = os.path.join(pack, "floor") with tempfile.TemporaryDirectory() as tmp: src = os.path.join(tmp, "source.y4m") run(wai_pack, "fixture", "gen", source, "-o", src) plan = os.path.join(tmp, "plan.txt") run(wai_pack, "plan", "--policy", policy_path, "--component", comp, "--source", src, "--out", plan) starts = [int(x) for x in open(plan).read().split()] - head, frames = frames_of(open(src, "rb").read()) - bounds = starts + [len(frames)] - stream = b"" - for k, (a, b) in enumerate(zip(bounds, bounds[1:])): - piece = os.path.join(tmp, f"p{k}.y4m") - with open(piece, "wb") as f: - f.write(head + b"".join(frames[a:b])) - out = os.path.join(tmp, f"p{k}.obu") - run(aomenc, "--obu", f"--limit={b - a}", "--passes=1", "--lag-in-frames=0", "--auto-alt-ref=0", - "--kf-min-dist=0", f"--kf-max-dist={b - a}", "--end-usage=q", "--cq-level=40", "--cpu-used=6", - "--threads=1", "--row-mt=0", "-q", "-o", out, piece) - stream += open(out, "rb").read() - floor = os.path.join(pack, "floor") + head0, frames0 = frames_of(open(src, "rb").read()) + bounds = starts + [len(frames0)] + streams = {} + for rung, name in zip(rungs, names): + head, frames = scaled(head0, frames0, opts["--scale"].get(rung, 1)) + stream = b"" + for k, (a, b) in enumerate(zip(bounds, bounds[1:])): + piece = os.path.join(tmp, f"{rung}-p{k}.y4m") + with open(piece, "wb") as f: + f.write(head + b"".join(frames[a:b])) + out = os.path.join(tmp, f"{rung}-p{k}.obu") + run(aomenc, "--obu", f"--limit={b - a}", "--passes=1", "--lag-in-frames=0", "--auto-alt-ref=0", + "--kf-min-dist=0", f"--kf-max-dist={b - a}", "--end-usage=q", f"--cq-level={opts['--cq'].get(rung, 40)}", + "--cpu-used=6", "--threads=1", "--row-mt=0", "-q", "-o", out, piece) + stream += open(out, "rb").read() + streams[name] = stream os.makedirs(floor, exist_ok=True) - for name in os.listdir(floor): - os.remove(os.path.join(floor, name)) - with open(os.path.join(floor, f"{comp}.obu"), "wb") as f: - f.write(stream) + for n in os.listdir(floor): + os.remove(os.path.join(floor, n)) + for name, stream in streams.items(): + with open(os.path.join(floor, f"{name}.obu"), "wb") as f: + f.write(stream) import hashlib listing = hashlib.sha256(run(wai_pack, "listing", floor)).hexdigest() policy = re.sub(r'supplied_listing = "[0-9a-f]{64}"', f'supplied_listing = "{listing}"', policy) open(policy_path, "w", encoding="utf-8").write(policy) - print(f"{floor}/{comp}.obu: {len(stream)} bytes, {len(frames)} frames, key frames at {starts}; listing {listing}") + for name, stream in streams.items(): + print(f"{floor}/{name}.obu: {len(stream)} bytes, {len(frames0)} frames, key frames at {starts}") + print(f"listing {listing}") return 0 diff --git a/wai/wai-pack/src/av1.rs b/wai/wai-pack/src/av1.rs index 2b13e87fd..387954a13 100644 --- a/wai/wai-pack/src/av1.rs +++ b/wai/wai-pack/src/av1.rs @@ -131,6 +131,153 @@ pub fn temporal_units(b: &[u8]) -> Result>, Av1Error> { Ok(out) } +/// Why a temporal unit could not be read from a stream: the stream is malformed, or the +/// stream could not be read. +#[derive(Debug)] +pub enum ReadError { + Malformed(Av1Error), + Io(std::io::Error), +} + +impl From for ReadError { + fn from(e: Av1Error) -> Self { + ReadError::Malformed(e) + } +} + +impl From for ReadError { + fn from(e: std::io::Error) -> Self { + ReadError::Io(e) + } +} + +/// The temporal units of a low-overhead OBU stream read one at a time: the split +/// [`temporal_units`] makes, the same units refused for the same faults, without holding +/// the stream. Each unit is given as the stream holds it, its temporal delimiter +/// included. +pub struct TuReader { + r: std::io::BufReader, + /// The delimiter that starts the next unit, read with the unit before it. + next: Option>, + at: u64, + units: u64, + done: bool, +} + +impl TuReader { + pub fn new(r: R) -> Self { + TuReader { r: std::io::BufReader::with_capacity(1 << 16, r), next: None, at: 0, units: 0, done: false } + } + + /// One OBU: its type, its bytes and its payload's length; `None` at a clean end of + /// the stream. + fn obu(&mut self) -> Result, u64)>, ReadError> { + use std::io::Read as _; + let mut h = [0u8; 1]; + if self.r.read(&mut h)? == 0 { + return Ok(None); + } + let at = self.at; + let h = h[0]; + if h & 0x80 != 0 { + return Err(Av1Error(format!("the forbidden bit is set at byte {at}")).into()); + } + if h & 0x02 == 0 { + return Err(Av1Error(format!("an OBU at byte {at} has no size field")).into()); + } + let mut bytes = vec![h]; + if h & 0x04 != 0 { + let mut e = [0u8; 1]; + if self.r.read(&mut e)? == 0 { + return Err(Av1Error("an OBU header runs past the end".into()).into()); + } + bytes.push(e[0]); + } + let mut size = 0u64; + let mut ended = false; + for i in 0..8 { + let mut b = [0u8; 1]; + if self.r.read(&mut b)? == 0 { + return Err(Av1Error("a size field runs past the end".into()).into()); + } + bytes.push(b[0]); + size |= ((b[0] & 0x7f) as u64) << (7 * i); + if b[0] & 0x80 == 0 { + ended = true; + break; + } + } + if !ended { + return Err(Av1Error("a size field longer than 8 bytes".into()).into()); + } + if size > u32::MAX as u64 { + return Err(Av1Error("a size field past 2^32 - 1".into()).into()); + } + let head = bytes.len(); + // The payload grows with the bytes read, never to the size field's value ahead + // of them. + (&mut self.r).take(size).read_to_end(&mut bytes)?; + if (bytes.len() - head) as u64 != size { + return Err(Av1Error(format!("the OBU at byte {at} runs past the end")).into()); + } + self.at += bytes.len() as u64; + Ok(Some(((h >> 3) & 0x0f, bytes, size))) + } + + /// The reader under this one, once every unit has been read. + pub fn into_inner(self) -> R { + self.r.into_inner() + } + + /// The next temporal unit, its delimiter included; `None` after the last. + pub fn next_unit(&mut self) -> Result>, ReadError> { + if self.done { + return Ok(None); + } + let mut unit = match self.next.take() { + Some(td) => td, + None => match self.obu()? { + None => { + self.done = true; + return Err(Av1Error("no temporal unit".into()).into()); + } + Some((t, b, size)) if t == OBU_TEMPORAL_DELIMITER => { + if size != 0 { + return Err(Av1Error("a temporal delimiter with a payload".into()).into()); + } + b + } + Some(_) => return Err(Av1Error("the stream does not begin with a temporal delimiter".into()).into()), + }, + }; + let mut n = 1usize; + loop { + match self.obu()? { + None => { + self.done = true; + break; + } + Some((t, b, size)) if t == OBU_TEMPORAL_DELIMITER => { + if size != 0 { + return Err(Av1Error("a temporal delimiter with a payload".into()).into()); + } + self.next = Some(b); + break; + } + Some((_, b, _)) => { + unit.extend_from_slice(&b); + n += 1; + } + } + } + if n < 2 { + return Err(Av1Error("a temporal unit holds only its delimiter".into()).into()); + } + self.units += 1; + Ok(Some(unit)) + } +} + struct Bits<'a> { b: &'a [u8], at: usize, diff --git a/wai/wai-pack/src/catalog.rs b/wai/wai-pack/src/catalog.rs index 47f3daa8c..7d73f10ff 100644 --- a/wai/wai-pack/src/catalog.rs +++ b/wai/wai-pack/src/catalog.rs @@ -3,10 +3,11 @@ //! file is a pure function of the stage index, the objects and the floor, so a verifier //! renders each again and compares bytes. //! -//! - `hls/classic/master.m3u8` and `hls/classic/floor-.m3u8`: the classical -//! presentation, the floor alone; it names nothing of WAI. Its variant is -//! `../classic/floor-.m3u8`, which resolves to the same playlist from every -//! class's directory, so a class's master is this one byte for byte. +//! - `hls/classic/master.m3u8` and `hls/classic/floor-.m3u8`: the classical +//! presentation, the floors alone; it names nothing of WAI. It has one variant per +//! floor rung, in ladder order, `../classic/floor-.m3u8` for its floor name `` +//! (packaging §7.1), which resolves to the same playlist from every class's directory, +//! so a class's master is this one byte for byte. //! - `hls//master.m3u8`: the classical master with, for a class offered WAI //! objects, the one line http-delivery §11.1 lets a publisher add, naming //! `wai.m3u8`, and no other change (http-delivery §11.1, §11.8). @@ -14,20 +15,23 @@ //! stage view as `EXT-X-SESSION-DATA`, and one variant whose `CODECS` is the union and //! `X-WAI-FLOOR` the floor (http-delivery §4.2) of the objects it lists, with //! `BANDWIDTH` the peak and `AVERAGE-BANDWIDTH` the mean of `8 · bytes / duration`. -//! - `hls//wai-.m3u8`: the WAI media playlist, adjacent to the floor's -//! (http-delivery §11.2), rendered from the floor playlist and the objects by +//! - `hls//wai-.m3u8`: the WAI media playlist, adjacent to the floors' +//! (http-delivery §11.2; every floor has the pieces' durations), rendered from the +//! first floor's playlist and the objects by //! `wai::http_binding::hls::wai_media_playlist`: a piece's base as its segment, each //! layer the class lists as a `#WAI-LAYER` line after the segment's `EXTINF` //! (http-delivery §10.4), and a piece the class takes as floor only marked //! `#EXT-X-GAP`, so the sink takes the floor's segment there. //! - `dash/classic.mpd` and `dash/.mpd`: the same as two MPDs (http-delivery -//! §11.1): the classical one, and the class's WAI MPD with `EssentialProperty` and the +//! §11.1): the classical one, one Representation per floor rung (with one floor rung +//! its codecs and size on the AdaptationSet, with several on each Representation), and +//! the class's WAI MPD with `EssentialProperty` and the //! floor in a `SupplementalProperty`, one Representation per layer, each layer's //! depending on the one below (`dependencyId`), and a timeline with a gap where the //! class lists the floor only. //! - `moq/catalog.json`: one track per (component, layer, deadline) of packaging `wai`, a -//! refinement track depending on the track below, the floor a `cmaf` track sharing the -//! base track's `altGroup`. +//! refinement track depending on the track below, each floor a `cmaf` track +//! `/floor` sharing the base track's `altGroup`. //! - `stages/.json`: per piece, the stages the class lists. //! //! Durations: a piece of `d` units of `num/den` lasts `floor(d · den · 1000 / num)` @@ -68,9 +72,11 @@ pub const SCHEME_STAGES: &str = "tag:transaction.science,2026:wai/stages"; pub const PRIORITY_BASE: u64 = 64; pub const PRIORITY_STEP: u64 = 32; -/// A component's floor as the catalogs name it. +/// A floor rung's floor as the catalogs name it. #[derive(Debug, Clone, PartialEq, Eq)] pub struct FloorView { + /// Its floor name (packaging §7.1). + pub name: String, pub codec: String, pub w: u32, pub h: u32, @@ -80,6 +86,26 @@ pub struct FloorView { pub fragments: Vec<(String, u64)>, } +/// Where the catalogs read a package's objects: by content hash, each whole. +pub trait Objects { + fn object(&self, h: &[u8; 32]) -> Option>; +} + +impl Objects for BTreeMap<[u8; 32], Vec> { + fn object(&self, h: &[u8; 32]) -> Option> { + self.get(h).cloned() + } +} + +/// The objects a [`crate::files::Sink`] holds, read back from it one at a time. +pub struct SinkObjects<'a>(pub &'a dyn crate::files::Sink); + +impl Objects for SinkObjects<'_> { + fn object(&self, h: &[u8; 32]) -> Option> { + self.0.get(&crate::objects::object_path(h)).ok() + } +} + /// A component as the catalogs read it. pub struct CompView<'a> { pub index: &'a StageIndex, @@ -87,8 +113,9 @@ pub struct CompView<'a> { pub w: u32, pub h: u32, /// Every object of the index by its content hash. - pub objects: &'a BTreeMap<[u8; 32], Vec>, - pub floor: Option, + pub objects: &'a dyn Objects, + /// Its floor rungs' floors, in ladder order. + pub floors: Vec, /// The capability of the component's default base rung (§5.7): the base an HTTP view /// carries (§8.3). pub base_cap: String, @@ -180,8 +207,8 @@ impl CompView<'_> { for p in 0..self.index.pieces.len() { for e in self.http_listed(c, p) { if seen.insert(e.content_hash) { - let env = self.objects.get(&e.content_hash).ok_or_else(|| CatalogError(format!("object {} is not held", crate::hex(&e.content_hash))))?; - out.push(SeqObject::from_envelope(env).map_err(|r| CatalogError(r.to_string()))?); + let env = self.objects.object(&e.content_hash).ok_or_else(|| CatalogError(format!("object {} is not held", crate::hex(&e.content_hash))))?; + out.push(SeqObject::from_envelope(&env).map_err(|r| CatalogError(r.to_string()))?); } } } @@ -207,8 +234,7 @@ impl CompView<'_> { rates(&items, self.tb) } - fn floor_rates(&self) -> (u64, u64) { - let f = self.floor.as_ref().expect("a floor"); + fn floor_rates(&self, f: &FloorView) -> (u64, u64) { let items: Vec<(u64, u64)> = f.fragments.iter().zip(&self.index.pieces).map(|((_, len), p)| (*len, p.duration as u64)).collect(); rates(&items, self.tb) } @@ -236,22 +262,20 @@ fn media_render(v: &CompView, map_uri: Option) -> HlsRender { } } -/// `hls/classic/floor-.m3u8`. -pub fn render_floor_media(v: &CompView) -> String { - let f = v.floor.as_ref().expect("a floor"); +/// `hls/classic/floor-.m3u8`, for the floor `f`. +pub fn render_floor_media(v: &CompView, f: &FloorView) -> String { let segments: Vec = f.fragments.iter().enumerate() .map(|(p, (path, _))| Segment { index: p as u64, kind: SegmentKind::Content, uri: format!("../../{path}"), duration_ms: piece_ms(v, p), ad_id: None }) .collect(); render_hls_with(&segments, &media_render(v, Some(format!("../../{}", f.init))), &[]) } -/// The floor's variant, as every master names it: `../classic/floor-.m3u8`, the +/// A floor's variant, as every master names it: `../classic/floor-.m3u8`, the /// same URI from `hls/classic/` and from a class's directory. -fn floor_variant(v: &CompView) -> StreamInf { - let f = v.floor.as_ref().expect("a floor"); - let (peak, mean) = v.floor_rates(); +fn floor_variant(v: &CompView, f: &FloorView) -> StreamInf { + let (peak, mean) = v.floor_rates(f); StreamInf { - uri: format!("../classic/floor-{}.m3u8", v.id()), + uri: format!("../classic/floor-{}.m3u8", f.name), bandwidth: peak, average_bandwidth: Some(mean), codecs: f.codec.clone(), @@ -265,9 +289,13 @@ fn master(session_data: Vec, variants: Vec) -> Result Vec { + v.floors.iter().map(|f| floor_variant(v, f)).collect() +} + +/// `hls/classic/master.m3u8`: one variant per floor rung, in ladder order. pub fn render_classic_master(v: &CompView) -> String { - master(Vec::new(), vec![floor_variant(v)]).expect("a floor variant renders") + master(Vec::new(), floor_variants(v)).expect("a floor variant renders") } /// `hls//master.m3u8`: the classical master, and the line naming the class's @@ -277,7 +305,7 @@ pub fn render_class_master(v: &CompView, c: usize) -> Result vec![SessionData::Value { data_id: DATA_ID_MULTIVARIANT.into(), value: "wai.m3u8".into() }], None => Vec::new(), }; - master(data, vec![floor_variant(v)]) + master(data, floor_variants(v)) } /// `hls//wai.m3u8`, or `None` when the class lists no WAI object. @@ -302,14 +330,15 @@ pub fn render_wai_multivariant(v: &CompView, c: usize) -> Result, } fn object(v: &CompView, e: &EntryRec) -> Result, CatalogError> { - v.objects.get(&e.content_hash).cloned().ok_or_else(|| CatalogError(format!("object {} is not held", crate::hex(&e.content_hash)))) + v.objects.object(&e.content_hash).ok_or_else(|| CatalogError(format!("object {} is not held", crate::hex(&e.content_hash)))) } -/// `hls//wai-.m3u8`: `wai_media_playlist` over the floor playlist, each piece's -/// base as its segment (a gap where the class takes the floor), with the layers it -/// lists. +/// `hls//wai-.m3u8`: `wai_media_playlist` over the first floor's playlist (every +/// floor's has the pieces' durations), each piece's base as its segment (a gap where the +/// class takes the floor), with the layers it lists. pub fn render_wai_media(v: &CompView, c: usize) -> Result { - let floor = parse_media_playlist(&render_floor_media(v))?; + let first = v.floors.first().ok_or_else(|| CatalogError("a component with no floor".into()))?; + let floor = parse_media_playlist(&render_floor_media(v, first))?; let mut segs = Vec::with_capacity(v.index.pieces.len()); for p in 0..v.index.pieces.len() { let base = v.index.piece_entries(p).iter().find(|e| e.role == Role::Base).expect("a piece has a base"); @@ -350,23 +379,32 @@ fn mpd(v: &CompView, set: AdaptationSet) -> Result { })?) } -/// `dash/classic.mpd`. +/// `dash/classic.mpd`: one Representation per floor rung, in ladder order, `-floor`. +/// With one floor rung its codecs and size are the AdaptationSet's; with several, each +/// Representation's, and the set carries none. pub fn render_dash_classic(v: &CompView) -> Result { - let f = v.floor.as_ref().expect("a floor"); - let (peak, _) = v.floor_rates(); let all: Vec = (0..v.index.pieces.len()).collect(); - let rep = Representation { - id: format!("{}-floor", v.id()), - dependency_id: None, - bandwidth: peak, - timescale: v.tb.num as u64, - initialization: Some(format!("../{}", f.init)), - timeline: timeline(v.index, &all, v.tb)?, - media: f.fragments.iter().map(|(path, _)| format!("../{path}")).collect(), - }; + let one = v.floors.len() == 1; + let mut reps = Vec::with_capacity(v.floors.len()); + for f in &v.floors { + let (peak, _) = v.floor_rates(f); + reps.push(Representation { + id: format!("{}-floor", f.name), + dependency_id: None, + bandwidth: peak, + codecs: (!one).then(|| f.codec.clone()), + size: (!one).then_some((f.w, f.h)), + timescale: v.tb.num as u64, + initialization: Some(format!("../{}", f.init)), + timeline: timeline(v.index, &all, v.tb)?, + media: f.fragments.iter().map(|(path, _)| format!("../{path}")).collect(), + }); + } + let first = v.floors.first().ok_or_else(|| CatalogError("a component with no floor".into()))?; let set = AdaptationSet { - id: 1, content_type: Some("video".into()), mime_type: "video/mp4".into(), codecs: f.codec.clone(), size: Some((f.w, f.h)), - segment_alignment: true, start_with_sap: Some(1), essential: Vec::new(), supplemental: Vec::new(), representations: vec![rep], + id: 1, content_type: Some("video".into()), mime_type: "video/mp4".into(), + codecs: one.then(|| first.codec.clone()), size: one.then_some((first.w, first.h)), + segment_alignment: true, start_with_sap: Some(1), essential: Vec::new(), supplemental: Vec::new(), representations: reps, }; mpd(v, set) } @@ -386,6 +424,8 @@ pub fn render_dash_class(v: &CompView, c: usize) -> Result, Catal id: format!("{}-l{k}", v.id()), dependency_id: (k > 0).then(|| format!("{}-l{}", v.id(), k - 1)), bandwidth: peak, + codecs: None, + size: None, timescale: v.tb.num as u64, initialization: None, timeline: timeline(v.index, &ps.iter().map(|(p, _)| *p).collect::>(), v.tb)?, @@ -393,7 +433,7 @@ pub fn render_dash_class(v: &CompView, c: usize) -> Result, Catal }); } let set = AdaptationSet { - id: 1, content_type: Some("video".into()), mime_type: wai::http_binding::MEDIA_TYPE.into(), codecs: union, size: Some((v.w, v.h)), + id: 1, content_type: Some("video".into()), mime_type: wai::http_binding::MEDIA_TYPE.into(), codecs: Some(union), size: Some((v.w, v.h)), segment_alignment: false, start_with_sap: None, essential: vec![Descriptor { scheme: SCHEME_HTTP.into(), value: None }], supplemental: vec![ @@ -474,7 +514,8 @@ pub fn moq_tracks(v: &CompView, namespace: &str, layer_lag_ms: &[u64], default_d /// `wai_determinism`, receipts declared with an alias ([`receipt_alias`]) and a receipts /// track of its own, `/receipts`; a refinement track carries /// `wai_delivery_timeout_ms` (§8.6), and the base track `altGroup` 1, which it shares with -/// the floor, a `cmaf` track. The receipts tracks follow, in their media tracks' order. +/// each floor, a `cmaf` track `/floor` for its floor name, in ladder order. The +/// receipts tracks follow, in their media tracks' order. /// The result passes §4.1's catalog check. pub fn render_moq_catalog(v: &CompView, namespace: &str, layer_lag_ms: &[u64], default_deadline: u64) -> Result { use wai::staged::moq::{receipts_track_json, SetTrack, StagedTrack}; @@ -526,13 +567,13 @@ pub fn render_moq_catalog(v: &CompView, namespace: &str, layer_lag_ms: &[u64], d if let Some(to) = t.timeout_ms { j["wai_delivery_timeout_ms"] = json!(to); } - if t.layer == 0 && v.floor.is_some() { + if t.layer == 0 && !v.floors.is_empty() { j["altGroup"] = json!(1); } out.push(j); } - if let Some(f) = &v.floor { - out.push(json!({"altGroup": 1, "codec": f.codec, "height": f.h, "name": format!("{id}/floor"), "namespace": namespace, "packaging": "cmaf", "renderGroup": 1, "width": f.w})); + for f in &v.floors { + out.push(json!({"altGroup": 1, "codec": f.codec, "height": f.h, "name": format!("{}/floor", f.name), "namespace": namespace, "packaging": "cmaf", "renderGroup": 1, "width": f.w})); } for t in &tracks { out.push(receipts_track_json(namespace, &format!("{}/receipts", t.name), false)); @@ -590,11 +631,13 @@ pub fn render_stage_view(v: &CompView, c: usize, policy_digest: &[u8; 32]) -> Re pub fn render_all(v: &CompView, policy: &crate::policy::Policy, policy_digest: &[u8; 32]) -> Result>, CatalogError> { let mut out: BTreeMap> = BTreeMap::new(); let id = v.id().to_string(); - if v.floor.is_none() { + if v.floors.is_empty() { return Err(CatalogError(format!("component {id} has no floor"))); } out.insert("hls/classic/master.m3u8".into(), render_classic_master(v).into_bytes()); - out.insert(format!("hls/classic/floor-{id}.m3u8"), render_floor_media(v).into_bytes()); + for f in &v.floors { + out.insert(format!("hls/classic/floor-{}.m3u8", f.name), render_floor_media(v, f).into_bytes()); + } out.insert("dash/classic.mpd".into(), render_dash_classic(v)?.into_bytes()); out.insert("moq/catalog.json".into(), render_moq_catalog(v, &policy.asset_id, &policy.layer_lag_ms, policy.deadline_ms)?.into_bytes()); for c in 0..v.index.classes.len() { @@ -629,7 +672,7 @@ mod tests { w: 64, h: 36, objects, - floor: Some(FloorView { codec: "av01.0.00M.08".into(), w: 64, h: 36, init: "floor/v/init.mp4".into(), fragments: vec![("floor/v/a.m4s".into(), 2000), ("floor/v/b.m4s".into(), 1000)] }), + floors: vec![FloorView { name: "v".into(), codec: "av01.0.00M.08".into(), w: 64, h: 36, init: "floor/v/init.mp4".into(), fragments: vec![("floor/v/a.m4s".into(), 2000), ("floor/v/b.m4s".into(), 1000)] }], base_cap: "wai.video.int_motion".into(), } } @@ -668,15 +711,15 @@ mod tests { assert_eq!(m1.lines().filter(|l| l.starts_with("#WAI-LAYER")).count(), 1, "class 1 lists layer 1 of piece 0 only"); assert_eq!(m1.lines().filter(|l| *l == "#EXT-X-GAP").count(), 1, "and piece 1 as floor only"); let extinf = |s: &str| s.lines().filter(|l| l.starts_with("#EXTINF") || l.starts_with("#EXT-X-TARGETDURATION") || l.starts_with("#EXT-X-MEDIA-SEQUENCE")).map(str::to_string).collect::>(); - assert_eq!(extinf(&media), extinf(&render_floor_media(&v)), "adjacent: the same sequence and durations to the millisecond"); + assert_eq!(extinf(&media), extinf(&render_floor_media(&v, &v.floors[0])), "adjacent: the same sequence and durations to the millisecond"); // The layers sit after their segment's EXTINF, where http-delivery's reader finds // them; the WAI playlist is adjacent to the floor's; a class's master is the // classical master with the one line http-delivery §11.1 allows. let read = wai::http_binding::hls::parse_media_playlist(&media).unwrap(); assert_eq!(read.segments[0].extra.layers.len(), 2); assert!(read.is_rendered_form(&media)); - wai::http_binding::hls::check_adjacent(&media, &render_floor_media(&v)).unwrap(); - wai::http_binding::hls::check_adjacent(&m1, &render_floor_media(&v)).unwrap(); + wai::http_binding::hls::check_adjacent(&media, &render_floor_media(&v, &v.floors[0])).unwrap(); + wai::http_binding::hls::check_adjacent(&m1, &render_floor_media(&v, &v.floors[0])).unwrap(); wai::http_binding::hls::classical_unchanged(&render_classic_master(&v), &render_class_master(&v, 0).unwrap()).unwrap(); let dash = render_dash_class(&v, 0).unwrap().unwrap(); assert!(dash.contains(">), + /// Below a directory, read when asked. + Dir(PathBuf), +} + +impl Default for FileSet { + fn default() -> FileSet { + FileSet::Memory(BTreeMap::new()) + } +} + +fn walk(root: &Path, rel: &str, out: &mut Vec) -> Result<(), String> { + let dir = if rel.is_empty() { root.to_path_buf() } else { root.join(rel) }; + for entry in std::fs::read_dir(&dir).map_err(|e| format!("{}: {e}", dir.display()))? { + let entry = entry.map_err(|e| e.to_string())?; + let name = entry.file_name().into_string().map_err(|n| format!("{n:?} is not a listing path"))?; + if name.starts_with('.') { + continue; + } + let ty = entry.file_type().map_err(|e| e.to_string())?; + let path = if rel.is_empty() { name.clone() } else { format!("{rel}/{name}") }; + if ty.is_symlink() { + return Err(format!("'{path}' is a symbolic link")); + } else if ty.is_dir() { + walk(root, &path, out)?; + } else if rel.is_empty() && name.ends_with(".sha256") { + continue; + } else { + if !wai::pin::is_listing_path(&path) { + return Err(format!("'{path}' is not a listing path")); + } + out.push(path); + } + } + Ok(()) +} + +impl FileSet { + /// Every file's path, in byte order. + pub fn names(&self) -> Result, String> { + let mut v = match self { + FileSet::Memory(m) => m.keys().cloned().collect(), + FileSet::Dir(d) => { + let mut v = Vec::new(); + if d.is_dir() { + walk(d, "", &mut v)?; + } + v + } + }; + v.sort_by(|a, b| a.as_bytes().cmp(b.as_bytes())); + Ok(v) + } + + /// Whether the set holds `name`. + pub fn contains(&self, name: &str) -> bool { + match self { + FileSet::Memory(m) => m.contains_key(name), + FileSet::Dir(d) => wai::pin::is_listing_path(name) && d.join(name).is_file(), + } + } + + /// `name`'s bytes, read as a stream. + pub fn open(&self, name: &str) -> std::io::Result> { + match self { + FileSet::Memory(m) => m + .get(name) + .map(|b| Box::new(std::io::Cursor::new(b.as_slice())) as Box) + .ok_or_else(|| std::io::Error::new(std::io::ErrorKind::NotFound, name.to_string())), + FileSet::Dir(d) => Ok(Box::new(std::fs::File::open(d.join(name))?)), + } + } + + /// `name`'s bytes, whole: for a file the packer holds anyway (a policy, an index). + pub fn read(&self, name: &str) -> std::io::Result> { + let mut v = Vec::new(); + self.open(name)?.read_to_end(&mut v)?; + Ok(v) + } + + /// `name`'s length in bytes. + pub fn len_of(&self, name: &str) -> std::io::Result { + match self { + FileSet::Memory(m) => m.get(name).map(|b| b.len() as u64).ok_or_else(|| std::io::Error::new(std::io::ErrorKind::NotFound, name.to_string())), + FileSet::Dir(d) => Ok(std::fs::metadata(d.join(name))?.len()), + } + } + + /// The file `name` as a path on disk, when the set is a directory. + pub fn path_of(&self, name: &str) -> Option { + match self { + FileSet::Memory(_) => None, + FileSet::Dir(d) => Some(d.join(name)), + } + } + + /// Every file's SHA-256, by path, each read once as a stream. + pub fn sha256s(&self) -> Result, String> { + let mut out = BTreeMap::new(); + for n in self.names()? { + let r = self.open(&n).map_err(|e| format!("{n}: {e}"))?; + out.insert(n.clone(), sha256_of(r).map_err(|e| format!("{n}: {e}"))?); + } + Ok(out) + } + + /// The set's listing (SPEC §3.1), and each file's SHA-256 by path. + pub fn listing(&self) -> Result<(Vec, BTreeMap), String> { + let shas = self.sha256s()?; + let l = wai::pin::listing_from_sha256(&shas).map_err(|e| e.to_string())?; + Ok((l, shas)) + } +} + +/// The SHA-256 of a stream, as lowercase hex. +pub fn sha256_of(mut r: impl Read) -> std::io::Result { + use sha2::Digest as _; + let mut h = sha2::Sha256::new(); + let mut buf = vec![0u8; 1 << 16]; + loop { + let n = r.read(&mut buf)?; + if n == 0 { + break; + } + h.update(&buf[..n]); + } + Ok(crate::hex(&h.finalize())) +} + +/// A reader that hashes what passes through it with SHA-256. +pub struct HashingReader { + inner: R, + h: sha2::Sha256, +} + +impl HashingReader { + pub fn new(inner: R) -> Self { + use sha2::Digest as _; + HashingReader { inner, h: sha2::Sha256::new() } + } + + /// Read what is left, and give the SHA-256 of everything read, as lowercase hex. + pub fn finish(mut self) -> std::io::Result { + use sha2::Digest as _; + std::io::copy(&mut self.inner, &mut DigestWriter(&mut self.h))?; + Ok(crate::hex(&self.h.finalize())) + } +} + +struct DigestWriter<'a>(&'a mut sha2::Sha256); + +impl std::io::Write for DigestWriter<'_> { + fn write(&mut self, b: &[u8]) -> std::io::Result { + use sha2::Digest as _; + self.0.update(b); + Ok(b.len()) + } + fn flush(&mut self) -> std::io::Result<()> { + Ok(()) + } +} + +impl Read for HashingReader { + fn read(&mut self, buf: &mut [u8]) -> std::io::Result { + use sha2::Digest as _; + let n = self.inner.read(buf)?; + self.h.update(&buf[..n]); + Ok(n) + } +} + +/// A component's source: its bytes in memory, or a file the packer opens as many times as +/// it reads it. +#[derive(Debug, Clone)] +pub enum Input<'a> { + Bytes(&'a [u8]), + Path(PathBuf), +} + +impl Input<'_> { + pub fn open(&self) -> std::io::Result> { + match self { + Input::Bytes(b) => Ok(Box::new(std::io::Cursor::new(*b))), + Input::Path(p) => Ok(Box::new(std::fs::File::open(p).map_err(|e| std::io::Error::new(e.kind(), format!("{}: {e}", p.display())))?)), + } + } +} + +/// Where a package's files go as they are made. Each file is taken whole, once; an object +/// the package already holds (one content hash at two entries, §6.2) is taken once. +pub trait Sink { + /// Take the file `path`. + fn put(&mut self, path: &str, bytes: &[u8]) -> std::io::Result<()>; + /// Take the file `path` as a copy of `name` of `from`, which the caller has read and + /// checked: a directory sink may link it rather than copy it (`link` true). + fn put_from(&mut self, path: &str, from: &FileSet, name: &str, sha256: &str, link: bool) -> std::io::Result<()>; + /// Whether the sink holds `path`. + fn has(&self, path: &str) -> bool; + /// The bytes of a file it holds. + fn get(&self, path: &str) -> std::io::Result>; + /// Every file's SHA-256 by path: what `LISTING` lists. + fn sha256s(&self) -> BTreeMap; +} + +/// A sink that keeps every file in memory. +#[derive(Debug, Default)] +pub struct MemSink { + pub files: BTreeMap>, +} + +impl Sink for MemSink { + fn put(&mut self, path: &str, bytes: &[u8]) -> std::io::Result<()> { + self.files.insert(path.to_string(), bytes.to_vec()); + Ok(()) + } + fn put_from(&mut self, path: &str, from: &FileSet, name: &str, _sha256: &str, _link: bool) -> std::io::Result<()> { + let b = from.read(name)?; + self.files.insert(path.to_string(), b); + Ok(()) + } + fn has(&self, path: &str) -> bool { + self.files.contains_key(path) + } + fn get(&self, path: &str) -> std::io::Result> { + self.files.get(path).cloned().ok_or_else(|| std::io::Error::new(std::io::ErrorKind::NotFound, path.to_string())) + } + fn sha256s(&self) -> BTreeMap { + self.files.iter().map(|(k, v)| (k.clone(), crate::sha256_hex(v))).collect() + } +} + +/// A sink that writes each file below a directory as it is made (written beside its place +/// and renamed into it) and keeps only its SHA-256. Until [`DirSink::keep`] is called, +/// dropping it removes every file it wrote and every directory it made, so a refused pack +/// leaves the directory as it found it. +#[derive(Debug)] +pub struct DirSink { + root: PathBuf, + made_root: bool, + sha: BTreeMap, + dirs: Vec, + kept: bool, +} + +impl DirSink { + /// A sink into `root`, which is new or holds nothing (`crate::pack::out_dir_ready`). + pub fn new(root: &Path) -> std::io::Result { + let made_root = !root.exists(); + std::fs::create_dir_all(root)?; + Ok(DirSink { root: root.to_path_buf(), made_root, sha: BTreeMap::new(), dirs: Vec::new(), kept: false }) + } + + fn place(&mut self, path: &str) -> std::io::Result { + let full = self.root.join(path); + let mut missing = Vec::new(); + let mut at = full.parent().map(Path::to_path_buf); + while let Some(d) = at { + if d == self.root || d.exists() { + break; + } + missing.push(d.clone()); + at = d.parent().map(Path::to_path_buf); + } + for d in missing.into_iter().rev() { + std::fs::create_dir(&d)?; + self.dirs.push(d); + } + Ok(full) + } + + /// Keep what was written. + pub fn keep(mut self) { + self.kept = true; + } +} + +impl Sink for DirSink { + fn put(&mut self, path: &str, bytes: &[u8]) -> std::io::Result<()> { + let full = self.place(path)?; + let tmp = full.with_file_name(format!(".{}.partial", full.file_name().and_then(|n| n.to_str()).unwrap_or("file"))); + std::fs::write(&tmp, bytes)?; + std::fs::rename(&tmp, &full)?; + self.sha.insert(path.to_string(), crate::sha256_hex(bytes)); + Ok(()) + } + fn put_from(&mut self, path: &str, from: &FileSet, name: &str, sha256: &str, link: bool) -> std::io::Result<()> { + let full = self.place(path)?; + let tmp = full.with_file_name(format!(".{}.partial", full.file_name().and_then(|n| n.to_str()).unwrap_or("file"))); + let linked = link && from.path_of(name).is_some_and(|src| std::fs::hard_link(src, &tmp).is_ok()); + if !linked { + let mut r = from.open(name)?; + let mut f = std::fs::File::create(&tmp)?; + std::io::copy(&mut r, &mut f)?; + } + // The file is held to the digest the caller checked, whichever way it came. + if sha256_of(std::fs::File::open(&tmp)?)? != sha256 { + let _ = std::fs::remove_file(&tmp); + return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, format!("{name} changed while it was read"))); + } + std::fs::rename(&tmp, &full)?; + self.sha.insert(path.to_string(), sha256.to_string()); + Ok(()) + } + fn has(&self, path: &str) -> bool { + self.sha.contains_key(path) + } + fn get(&self, path: &str) -> std::io::Result> { + std::fs::read(self.root.join(path)) + } + fn sha256s(&self) -> BTreeMap { + self.sha.clone() + } +} + +impl Drop for DirSink { + fn drop(&mut self) { + if self.kept { + return; + } + for p in self.sha.keys() { + let _ = std::fs::remove_file(self.root.join(p)); + } + for d in self.dirs.iter().rev() { + let _ = std::fs::remove_dir(d); + } + if self.made_root { + let _ = std::fs::remove_dir(&self.root); + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn a_directory_and_memory_list_alike() { + let d = std::env::temp_dir().join(format!("wai-pack-files-{}", std::process::id())); + let _ = std::fs::remove_dir_all(&d); + std::fs::create_dir_all(d.join("a")).unwrap(); + std::fs::write(d.join("a/x.bin"), b"xyz").unwrap(); + std::fs::write(d.join("b.obu"), b"12").unwrap(); + std::fs::write(d.join(".hidden"), b"skipped").unwrap(); + std::fs::write(d.join("set.sha256"), b"skipped").unwrap(); + let m: BTreeMap> = [("a/x.bin".to_string(), b"xyz".to_vec()), ("b.obu".to_string(), b"12".to_vec())].into(); + let (ld, _) = FileSet::Dir(d.clone()).listing().unwrap(); + let (lm, _) = FileSet::Memory(m.clone()).listing().unwrap(); + assert_eq!(ld, lm); + let view: BTreeMap = m.iter().map(|(k, v)| (k.clone(), v.as_slice())).collect(); + assert_eq!(ld, wai::pin::listing_from(&view).unwrap(), "the listing wai::pin writes"); + std::fs::remove_dir_all(&d).unwrap(); + } + + #[test] + fn a_dropped_dir_sink_leaves_nothing() { + let d = std::env::temp_dir().join(format!("wai-pack-sink-{}", std::process::id())); + let _ = std::fs::remove_dir_all(&d); + { + let mut s = DirSink::new(&d).unwrap(); + s.put("objects/a.wai", b"1").unwrap(); + s.put("floor/v/init.mp4", b"2").unwrap(); + assert!(d.join("floor/v/init.mp4").is_file()); + } + assert!(!d.exists(), "a refused pack leaves no directory it made"); + std::fs::create_dir_all(&d).unwrap(); + { + let mut s = DirSink::new(&d).unwrap(); + s.put("x/y.txt", b"3").unwrap(); + } + assert!(d.is_dir() && std::fs::read_dir(&d).unwrap().next().is_none(), "and an empty one it was given stays empty"); + let mut s = DirSink::new(&d).unwrap(); + s.put("x/y.txt", b"3").unwrap(); + s.keep(); + assert_eq!(std::fs::read(d.join("x/y.txt")).unwrap(), b"3"); + std::fs::remove_dir_all(&d).unwrap(); + } +} diff --git a/wai/wai-pack/src/floor.rs b/wai/wai-pack/src/floor.rs index b47c1b180..92e6db95f 100644 --- a/wai/wai-pack/src/floor.rs +++ b/wai/wai-pack/src/floor.rs @@ -1,10 +1,11 @@ -//! A supplied floor ([packaging] §7.3): a directory of AV1 streams, one per video -//! component, named `.obu` in the low-overhead OBU format, whose listing -//! (SPEC §3.1) the policy pins by SHA-256 (`floor.supplied_listing`). The floor is checked -//! against the plan before anything is written: +//! A supplied floor ([packaging] §7.3): a directory of AV1 streams, one per floor rung of +//! a video component, named `.obu` (§7.1) in the low-overhead OBU format, +//! whose listing (SPEC §3.1) the policy pins by SHA-256 (`floor.supplied_listing`). The +//! floor is checked against the plan before anything is written, each stream read a +//! temporal unit at a time ([`check_stream`], [`check_keyframes`]): //! //! - the directory's listing hashes to `floor.supplied_listing` (`floor-listing-mismatch`); -//! - the component's stream is in it (`floor-stream-missing`) and parses +//! - each floor rung's stream is in it (`floor-stream-missing`) and parses //! (`floor-av1-malformed`): temporal units, a sequence header in every unit that starts //! at a key frame, every sequence header the same; //! - it has one temporal unit per source frame (`floor-frame-count`); @@ -54,41 +55,83 @@ pub struct Floor { /// The SHA-256 of a set's listing, as 64 lowercase hexadecimal digits. pub fn listing_sha256(files: &BTreeMap>) -> Result { - let view: BTreeMap = files.iter().map(|(k, v)| (k.clone(), v.as_slice())).collect(); - let listing = wai::pin::listing_from(&view).map_err(|e| FloorReason { code: "floor-listing-mismatch", detail: e.to_string() })?; - Ok(crate::sha256_hex(&listing)) + Ok(set_listing(&crate::files::FileSet::Memory(files.clone()))?.0) } -/// Check component `component`'s supplied floor against its plan: `starts` (the piece -/// starts, in frames) of a source of `frames` frames. -pub fn floor_supplied(files: &BTreeMap>, listing: Option<&str>, component: &str, starts: &[u64], frames: u64, extra_keyframes: bool) -> Result { - let got = listing_sha256(files)?; - if listing != Some(got.as_str()) { - return refuse("floor-listing-mismatch", format!("the supplied floor's listing is {got}, the policy pins {}", listing.unwrap_or("none"))); - } - let name = format!("{component}.obu"); - let stream = files.get(&name).ok_or_else(|| FloorReason { code: "floor-stream-missing", detail: format!("no {name} in the supplied floor") })?; +/// The SHA-256 of a file set's listing, as 64 lowercase hexadecimal digits, and each +/// file's SHA-256 by path, each file read once as a stream. +pub fn set_listing(files: &crate::files::FileSet) -> Result<(String, BTreeMap), FloorReason> { + let (listing, shas) = files.listing().map_err(|e| FloorReason { code: "floor-listing-mismatch", detail: e })?; + Ok((crate::sha256_hex(&listing), shas)) +} + +/// What the first read of one supplied stream gives: its sequence header and the OBU that +/// carries it, which of its units start at a shown key frame, and its unit count. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct StreamCheck { + pub seq: SequenceHeader, + pub seq_obu: Vec, + /// One per temporal unit: whether it starts at a shown key frame. + pub key: Vec, +} + +/// §7.3's checks of one supplied stream that need no plan, read a unit at a time: it +/// splits into temporal units each holding a frame, the first carrying a sequence +/// header, every sequence header the first's bytes, and every unit that starts at a shown +/// key frame carrying one (`floor-av1-malformed`); then it holds one unit per source +/// frame (`floor-frame-count`). A fault of the stream's structure is refused where it is +/// read; a unit's other faults are refused after the count, in unit order, as a reader +/// of the whole stream refuses them. An I/O failure is `io`. +pub fn check_stream(r: R, frames: u64) -> Result { + let mut rd = av1::TuReader::new(r); + let read = |e: av1::ReadError| match e { + av1::ReadError::Malformed(m) => FloorReason { code: "floor-av1-malformed", detail: m.0 }, + av1::ReadError::Io(e) => FloorReason { code: "io", detail: e.to_string() }, + }; let malformed = |e: av1::Av1Error| FloorReason { code: "floor-av1-malformed", detail: e.0 }; - let tus = av1::temporal_units(stream).map_err(malformed)?; - let first = tus[0].sequence_header().ok_or_else(|| FloorReason { code: "floor-av1-malformed", detail: "the first temporal unit carries no sequence header".into() })?; - let seq_obu = first.bytes.to_vec(); - let seq = SequenceHeader::parse(first.payload).map_err(malformed)?; - if tus.len() as u64 != frames { - return refuse("floor-frame-count", format!("{} temporal units for {frames} source frames", tus.len())); - } - let mut key = Vec::with_capacity(tus.len()); - for (i, tu) in tus.iter().enumerate() { - if let Some(s) = tu.sequence_header() - && s.bytes != seq_obu.as_slice() - { - return refuse("floor-av1-malformed", format!("temporal unit {i} carries another sequence header")); + let mut seq: Option<(SequenceHeader, Vec)> = None; + let mut key = Vec::new(); + let mut later: Option = None; + while let Some(u) = rd.next_unit().map_err(read)? { + let i = key.len(); + let tus = av1::temporal_units(&u).map_err(malformed)?; + let tu = &tus[0]; + if seq.is_none() { + let first = tu.sequence_header().ok_or_else(|| FloorReason { code: "floor-av1-malformed", detail: "the first temporal unit carries no sequence header".into() })?; + seq = Some((SequenceHeader::parse(first.payload).map_err(malformed)?, first.bytes.to_vec())); } - let k = av1::starts_with_shown_key_frame(tu, &seq).map_err(malformed)?; - if k && tu.sequence_header().is_none() { - return refuse("floor-av1-malformed", format!("temporal unit {i} starts a key frame without a sequence header")); + let (s, obu) = seq.as_ref().expect("set"); + let mut k = false; + if later.is_none() { + if let Some(h) = tu.sequence_header() + && h.bytes != obu.as_slice() + { + later = Some(FloorReason { code: "floor-av1-malformed", detail: format!("temporal unit {i} carries another sequence header") }); + } else { + match av1::starts_with_shown_key_frame(tu, s) { + Err(e) => later = Some(malformed(e)), + Ok(true) if tu.sequence_header().is_none() => { + later = Some(FloorReason { code: "floor-av1-malformed", detail: format!("temporal unit {i} starts a key frame without a sequence header") }) + } + Ok(x) => k = x, + } + } } key.push(k); } + let (seq, seq_obu) = seq.ok_or_else(|| FloorReason { code: "floor-av1-malformed", detail: "no temporal unit".into() })?; + if key.len() as u64 != frames { + return refuse("floor-frame-count", format!("{} temporal units for {frames} source frames", key.len())); + } + if let Some(r) = later { + return Err(r); + } + Ok(StreamCheck { seq, seq_obu, key }) +} + +/// §7.3: a unit starts at a shown key frame at every piece start of the plan `starts`, +/// and at no other frame unless `extra_keyframes` (`floor-keyframe-mismatch`). +pub fn check_keyframes(key: &[bool], starts: &[u64], extra_keyframes: bool) -> Result<(), FloorReason> { for (i, &k) in key.iter().enumerate() { let at_start = starts.binary_search(&(i as u64)).is_ok(); if at_start && !k { @@ -98,13 +141,7 @@ pub fn floor_supplied(files: &BTreeMap>, listing: Option<&str>, return refuse("floor-keyframe-mismatch", format!("a key frame at {i}, inside a piece")); } } - let mut pieces = Vec::with_capacity(starts.len()); - for (p, &s) in starts.iter().enumerate() { - let e = starts.get(p + 1).copied().unwrap_or(frames); - let (s, e) = (s as usize, e as usize); - pieces.push(FloorPiece { units: tus[s..e].iter().map(av1::TemporalUnit::bytes).collect(), key: key[s..e].to_vec() }); - } - Ok(Floor { seq, seq_obu, pieces }) + Ok(()) } /// The payload of a `wai.video.av1` object as the reference sink decodes it diff --git a/wai/wai-pack/src/golden.rs b/wai/wai-pack/src/golden.rs index f1e5804d7..71f2980c8 100644 --- a/wai/wai-pack/src/golden.rs +++ b/wai/wai-pack/src/golden.rs @@ -31,7 +31,7 @@ use wai::stage_index::{self as wsix, ClassRec, EntryRec, Header, MediaClass, Pie use wai::wai_video_manifest::EnergyProvenance; /// The golden packs. -pub const PACKS: &[&str] = &["video-base-01", "video-staged-01"]; +pub const PACKS: &[&str] = &["video-base-01", "video-staged-01", "video-ladder-01"]; type Files = BTreeMap>; @@ -543,37 +543,40 @@ pub fn reseal_as(files: &mut Files, key: &SigningKey, policy_json: Option<&[u8]> } } } - let mut pieces = Vec::new(); - let mut seq: Option<(crate::av1::SequenceHeader, Vec)> = None; - for p in 0..ix.pieces.len() { - let Some(fe) = ix.piece_entries(p).iter().find(|e| e.role == Role::Floor) else { break }; - let w = Wai::from_bytes(objects.get(&fe.content_hash).ok_or("a floor object is not held")?).map_err(|e| e.to_string())?; - let (units, _) = crate::floor::av1_units(&w.payload).ok_or("a floor payload is not the framing")?; - let mut key_frames = Vec::new(); - for u in &units { - let tus = crate::av1::temporal_units(u).map_err(|e| e.0)?; - let tu = tus.first().ok_or("an empty unit")?; - if seq.is_none() { - let s = tu.sequence_header().ok_or("no sequence header")?; - seq = Some((crate::av1::SequenceHeader::parse(s.payload).map_err(|e| e.0)?, s.bytes.to_vec())); - } - key_frames.push(crate::av1::starts_with_shown_key_frame(tu, &seq.as_ref().expect("set").0).map_err(|e| e.0)?); - } - pieces.push(crate::floor::FloorPiece { units, key: key_frames }); - } files.retain(|k, _| !k.starts_with("floor/")); files.retain(|k, _| !["hls/", "dash/", "moq/", "stages/"].iter().any(|d| k.starts_with(d))); - let mut floor_view = None; - if let Some((s, obu)) = seq { - let fl = crate::floor::Floor { seq: s, seq_obu: obu, pieces }; - let starts: Vec = ix.pieces.iter().map(|p| p.start).collect(); - let (ip, init, frags) = crate::pack::cmaf_files(&comp.id, &fl, &starts, tb.den, tb.num)?; - floor_view = Some(FloorView { codec: fl.seq.codec_string(), w: fl.seq.max_frame_width, h: fl.seq.max_frame_height, init: ip.clone(), fragments: frags.iter().map(|(p, b)| (p.clone(), b.len() as u64)).collect() }); - files.insert(ip, init); - files.extend(frags); + // Each floor rung's floor, from the k-th floor entry of each piece (§5.7). + let mut floor_views = Vec::new(); + for (k, (_, name)) in crate::pack::floor_rungs(&policy, &comp.id).into_iter().enumerate() { + let mut pieces = Vec::new(); + let mut seq: Option<(crate::av1::SequenceHeader, Vec)> = None; + for p in 0..ix.pieces.len() { + let Some(fe) = ix.piece_entries(p).iter().filter(|e| e.role == Role::Floor).nth(k) else { break }; + let w = Wai::from_bytes(objects.get(&fe.content_hash).ok_or("a floor object is not held")?).map_err(|e| e.to_string())?; + let (units, _) = crate::floor::av1_units(&w.payload).ok_or("a floor payload is not the framing")?; + let mut key_frames = Vec::new(); + for u in &units { + let tus = crate::av1::temporal_units(u).map_err(|e| e.0)?; + let tu = tus.first().ok_or("an empty unit")?; + if seq.is_none() { + let s = tu.sequence_header().ok_or("no sequence header")?; + seq = Some((crate::av1::SequenceHeader::parse(s.payload).map_err(|e| e.0)?, s.bytes.to_vec())); + } + key_frames.push(crate::av1::starts_with_shown_key_frame(tu, &seq.as_ref().expect("set").0).map_err(|e| e.0)?); + } + pieces.push(crate::floor::FloorPiece { units, key: key_frames }); + } + if let Some((s, obu)) = seq { + let fl = crate::floor::Floor { seq: s, seq_obu: obu, pieces }; + let starts: Vec = ix.pieces.iter().map(|p| p.start).collect(); + let (ip, init, frags) = crate::pack::cmaf_files(&name, &fl, &starts, tb.den, tb.num)?; + floor_views.push(FloorView { name, codec: fl.seq.codec_string(), w: fl.seq.max_frame_width, h: fl.seq.max_frame_height, init: ip.clone(), fragments: frags.iter().map(|(p, b)| (p.clone(), b.len() as u64)).collect() }); + files.insert(ip, init); + files.extend(frags); + } } let (w, h) = dims.unwrap_or((0, 0)); - let view = CompView { index: &ix, tb, w, h, objects: &objects, floor: floor_view, base_cap: crate::catalog::default_base_cap(&policy, &comp.id) }; + let view = CompView { index: &ix, tb, w, h, objects: &objects, floors: floor_views, base_cap: crate::catalog::default_base_cap(&policy, &comp.id) }; if let Ok(cats) = crate::catalog::render_all(&view, &policy, &policy_digest) { files.extend(cats); } @@ -621,8 +624,8 @@ pub fn catalogs() -> (Files, Value) { let (mut ix, objs) = layered(); m(&mut ix); let objects: BTreeMap<[u8; 32], Vec> = objs.iter().map(|o| (objects::object_hash(o), o.clone())).collect(); - let floor = FloorView { codec: "av01.0.00M.08".into(), w: 64, h: 36, init: "floor/v/init.mp4".into(), fragments: Vec::new() }; - let v = CompView { index: &ix, tb: crate::policy::Timebase { num: 25, den: 1 }, w: 8, h: 8, objects: &objects, floor: Some(floor), base_cap: "wai.video.int_motion".into() }; + let floor = FloorView { name: "v".into(), codec: "av01.0.00M.08".into(), w: 64, h: 36, init: "floor/v/init.mp4".into(), fragments: Vec::new() }; + let v = CompView { index: &ix, tb: crate::policy::Timebase { num: 25, den: 1 }, w: 8, h: 8, objects: &objects, floors: vec![floor], base_cap: "wai.video.int_motion".into() }; let moq = render_moq_catalog(&v, CATALOG_NAMESPACE, &lag, deadline).expect("a catalog"); let path = format!("catalogs/{name}.wsix"); files.insert(path.clone(), ix.to_bytes()); @@ -1207,6 +1210,51 @@ pub fn staged_overlays(g: &Files, key: &SigningKey) -> (Files, Value) { overlays("staged-mutations", STAGED_PACK, g, staged_mutations(g, key)) } +/// The ladder golden: two floor rungs over one base (§7.1), which the ladder mutations +/// alter. +pub const LADDER_PACK: &str = "video-ladder-01"; + +/// Ladder packages a verifier must refuse or accept (§11.3), each the ladder golden +/// altered and re-sealed with its key where the receipt or `LISTING` alone would catch +/// it: the golden itself (`ok`); piece 2's two floor objects swapped in the index, so the +/// first floor rung's place holds an object framed for the second's size +/// (`floor-object-mismatch`); the second floor's CMAF files under the component's name +/// rather than its floor name (`floor-cmaf-mismatch`); and a classical master that lists +/// one floor of two (`catalog-mismatch`). +pub fn ladder_mutations(g: &Files, key: &SigningKey) -> Vec { + let mut out: Vec = Vec::new(); + let mut add = |name: &'static str, reason: &str, files: Files| out.push(PackageMutation { name, reason: reason.into(), files, empty_dirs: Vec::new(), unreadable_dirs: Vec::new() }); + add("ok", "ok", g.clone()); + let mut f = g.clone(); + let mut x = golden_index(&f); + let at = x.pieces[2].first_entry as usize; + x.entries.swap(at + 1, at + 2); + set_golden_index(&mut f, &x); + reseal(&mut f, key).expect("the alteration re-seals"); + add("floors-swapped", "floor-object-mismatch", f); + let mut f = g.clone(); + let moved: Vec = f.keys().filter(|k| k.starts_with("floor/lo/")).cloned().collect(); + for k in moved { + let b = f.remove(&k).expect("held"); + f.insert(k.replacen("floor/lo/", "floor/v/", 1), b); + } + relist(&mut f); + add("floor-under-the-component-s-name", "floor-cmaf-mismatch", f); + let mut f = g.clone(); + let master = String::from_utf8(f["hls/classic/master.m3u8"].clone()).expect("UTF-8"); + let one: Vec<&str> = master.lines().take(5).collect(); + f.insert("hls/classic/master.m3u8".into(), (one.join("\n") + "\n").into_bytes()); + relist(&mut f); + add("master-lists-one-floor", "catalog-mismatch", f); + out +} + +/// The ladder mutations as overlays on the ladder golden (`ladder-mutations/`), in the +/// layout of [`package_overlays`]. +pub fn ladder_overlays(g: &Files, key: &SigningKey) -> (Files, Value) { + overlays("ladder-mutations", LADDER_PACK, g, ladder_mutations(g, key)) +} + fn overlays(dir: &str, pack: &str, g: &Files, mutations: Vec) -> (Files, Value) { let mut files = BTreeMap::new(); let mut cases = Vec::new(); @@ -1645,15 +1693,20 @@ pub fn regen(dir: &Path) -> std::io::Result<()> { let dl = dir.join("delivery"); std::fs::create_dir_all(&dl)?; write_json(&dl.join("expected.json"), &delivery(dir)?)?; - let golden = read_tree(&dir.join("packs").join(STAGED_PACK).join("package"))?; - let key = read_key(&dir.join("packs").join(STAGED_PACK).join("key.hex"))?; - let (files, expected) = staged_overlays(&golden, &key); - let sm = dir.join("staged-mutations"); - if sm.exists() { - std::fs::remove_dir_all(&sm)?; + for (sub, pack, f) in [ + ("staged-mutations", STAGED_PACK, staged_overlays as fn(&Files, &SigningKey) -> (Files, Value)), + ("ladder-mutations", LADDER_PACK, ladder_overlays), + ] { + let golden = read_tree(&dir.join("packs").join(pack).join("package"))?; + let key = read_key(&dir.join("packs").join(pack).join("key.hex"))?; + let (files, expected) = f(&golden, &key); + let sm = dir.join(sub); + if sm.exists() { + std::fs::remove_dir_all(&sm)?; + } + write_files(dir, &files)?; + write_json(&sm.join("expected.json"), &expected)?; } - write_files(dir, &files)?; - write_json(&sm.join("expected.json"), &expected)?; Ok(()) } @@ -1771,6 +1824,7 @@ pub fn check(dir: &Path) -> std::io::Result> { for (sub, pack, f) in [ ("package-mutations", MUTATED_PACK, package_overlays as fn(&Files, &SigningKey) -> (Files, Value)), ("staged-mutations", STAGED_PACK, staged_overlays), + ("ladder-mutations", LADDER_PACK, ladder_overlays), ] { let golden = read_tree(&dir.join("packs").join(pack).join("package"))?; let key = read_key(&dir.join("packs").join(pack).join("key.hex"))?; diff --git a/wai/wai-pack/src/lib.rs b/wai/wai-pack/src/lib.rs index dfa81609d..d9dabfdba 100644 --- a/wai/wai-pack/src/lib.rs +++ b/wai/wai-pack/src/lib.rs @@ -6,7 +6,8 @@ //! ([`scenecut`]), piece classification ([`classify`]), a piece's plan, ladder and class //! plan ([`plan`]), the base encode's choice of step and the refinement layers //! ([`encode`]), stills ([`png`]), the floor ([`floor`], [`av1`], [`cmaf`]), the objects -//! ([`objects`]), the catalogs ([`catalog`]), the packer ([`pack`]) and its verifier +//! ([`objects`]), the catalogs ([`catalog`]), where a packer's inputs come from and its +//! files go ([`files`]), the packer ([`pack`]) and its verifier //! ([`verify`]), the live packer ([`live`]), delivery over a simulated link //! ([`delivery`]), the synthetic fixtures ([`fixture`]), and the conformance corpus's //! regeneration and check ([`conformance`], [`golden`]). @@ -24,6 +25,7 @@ pub mod cmaf; pub mod conformance; pub mod delivery; pub mod encode; +pub mod files; pub mod fixture; pub mod floor; pub mod golden; diff --git a/wai/wai-pack/src/pack.rs b/wai/wai-pack/src/pack.rs index 9a5fe6a6c..c45d484c8 100644 --- a/wai/wai-pack/src/pack.rs +++ b/wai/wai-pack/src/pack.rs @@ -7,32 +7,49 @@ //! [`crate::plan::piece_ladder`]): a `wai.video.int_motion` base (its step chosen per //! piece by [`crate::encode::choose_q`]) or a still of `wai.image.png` ([`crate::png`]), //! the refinements of `wai.video.int_refine` over an `int_motion` base -//! ([`crate::encode::encode_refinement`], §5.4), and a supplied AV1 floor. Every piece is -//! coded by [`Coder`], which the live packer (`crate::live`) shares. What it does not pack -//! yet it refuses by name rather than leaving out: another medium +//! ([`crate::encode::encode_refinement`], §5.4), and one supplied AV1 floor per floor +//! rung (§7.1: several floor rungs carry a ladder of renditions over one base). Every +//! piece is coded by [`Coder`], which the live packer (`crate::live`) shares. What it does +//! not pack yet it refuses by name rather than leaving out: another medium //! (`pack-media-unsupported`), a floor to encode (`pack-floor-encode-unsupported`), a rung //! of a capability it does not encode or a refinement over a base it does not refine //! (`pack-capability-unsupported:`). Its own failures are refused by name too //! (`pack-encode`, `pack-piece-length`, `pack-catalog`, `pack-meter`, -//! `pack-measurement-claim`, `pack-listing`; packaging §11.4), and a package is written -//! only into a new or empty directory ([`out_dir_ready`], `pack-out-not-empty`). +//! `pack-measurement-claim`, `pack-listing`, `pack-source-changed`; packaging §11.4), and a +//! package is written only into a new or empty directory ([`out_dir_ready`], +//! `pack-out-not-empty`). +//! +//! It holds neither its source nor its floor whole. [`pack_into`] reads the source twice, +//! a frame at a time: once to cut its pieces (the segmenter holds a few frames' records, +//! §4.3), once to code them, a piece at a time; each floor stream is read a temporal unit +//! at a time, once to check it against the plan before anything is written (§7.3) and +//! once to cut it into the pieces' floor objects; and every file goes to a +//! [`crate::files::Sink`] as it is made, the catalogs reading objects back from it. What +//! it holds across a pack is a record per piece and per entry, and one byte per frame for +//! each floor's key frames; the frames of the pieces it is coding at once +//! ([`PackOpts::jobs`]); and one piece of each floor. [`pack`] is the same packer into +//! memory. //! //! The package: //! //! ```text //! policy.toml policy.json plan-.txt index-.wsix package.receipt.json //! objects/.wai … -//! floor//init.mp4 floor//.m4s … (CMAF; never in an index) +//! floor//init.mp4 floor//.m4s … (CMAF; never in an index) //! hls/classic/… hls//… dash/… moq/catalog.json stages/.json //! claims/.measurement.json (a metered pack) //! LISTING (SPEC §3.1, of every other file) //! ``` //! +//! where `` is each floor rung's floor name (§7.1): the component's id when it has one +//! floor rung, the rung's id when it has several. +//! //! [packaging]: ../../../extensions/packaging.md use crate::catalog::{self, CompView, FloorView}; use crate::classify::{self, PieceKind}; use crate::encode::{choose_q, MotionParams}; +use crate::files::{FileSet, Input, MemSink, Sink}; use crate::floor::{self, Floor}; use crate::objects; use crate::plan::{class_plan, plan_piece}; @@ -74,8 +91,9 @@ impl std::error::Error for PackError {} pub struct PackOpts { pub signer: SigningKey, pub signer_id: String, - /// The supplied floor's files, by listing path. - pub floor: BTreeMap>, + /// The supplied floor's files, by listing path: in memory, or a directory read a file + /// at a time. + pub floor: FileSet, /// The override a command line applies (§3.2). pub overrides: Overrides, /// The meter that brackets the pack, or none (the unmetered form). @@ -85,11 +103,20 @@ pub struct PackOpts { /// The `issued_at` of a measurement claim (RFC 3339, UTC). pub issued_at: String, pub grant: GrantRef, + /// How many pieces are coded at once, each alone (§4.1: a piece references nothing + /// outside itself), so the package is the same for any value; at least 1. + pub jobs: usize, } impl PackOpts { - /// Unmetered options with the grant `wai.video.package` and no ceilings. + /// Unmetered options with the grant `wai.video.package` and no ceilings, coding one + /// piece at a time, the supplied floor's files given in memory. pub fn new(signer: SigningKey, signer_id: impl Into, floor: BTreeMap>) -> PackOpts { + PackOpts::with_floor(signer, signer_id, FileSet::Memory(floor)) + } + + /// [`PackOpts::new`] over a supplied floor given as a file set. + pub fn with_floor(signer: SigningKey, signer_id: impl Into, floor: FileSet) -> PackOpts { PackOpts { signer, signer_id: signer_id.into(), @@ -99,6 +126,7 @@ impl PackOpts { power_reader: String::new(), issued_at: String::new(), grant: GrantRef::unbounded("wai.video.package"), + jobs: 1, } } } @@ -193,31 +221,42 @@ pub fn object_lengths(env: &[u8]) -> Result<(u32, u64), String> { Ok((man, env.len() as u64 - 12 - man as u64)) } -fn rungs_of<'a>(p: &'a Policy, comp: &str, role: RungRole) -> Vec<&'a Rung> { - p.ladder.iter().filter(|r| r.component == comp && r.role == role).collect() -} - -/// A component's CMAF files: the initialization segment's path and bytes, and each -/// piece's fragment's. +/// A floor's CMAF files: the initialization segment's path and bytes, and each piece's +/// fragment's. pub type CmafFiles = (String, Vec, Vec<(String, Vec)>); -/// The floor's CMAF files of a component: the initialization segment and each piece's -/// fragment, by path. `floor` is the checked floor, `starts` the piece starts. -pub fn cmaf_files(comp: &str, floor: &Floor, starts: &[u64], tb_den: u32, timescale: u32) -> Result { +/// One piece's fragment of the floor named `name` (§7.6): its path and bytes. `units` are +/// its temporal units as the stream holds them, `key` which start at a shown key frame. +pub fn cmaf_fragment(name: &str, piece: u64, start: u64, units: &[Vec], key: &[bool], tb_den: u32) -> Result<(String, Vec), String> { + let mut samples = Vec::with_capacity(units.len()); + for (u, k) in units.iter().zip(key) { + let tus = crate::av1::temporal_units(u).map_err(|e| e.to_string())?; + let [tu] = tus.as_slice() else { return Err("a floor unit is not one temporal unit".into()) }; + samples.push(crate::cmaf::Sample { data: tu.sample(), duration: tb_den, sync: *k }); + } + let tfdt = start.checked_mul(tb_den as u64).ok_or("a fragment's decode time past 2^64 - 1")?; + let seq = u32::try_from(piece + 1).map_err(|_| "a piece number past 2^32 - 2")?; + let f = crate::cmaf::write_fragment(seq, tfdt, &samples); + Ok((format!("floor/{name}/{}.m4s", crate::sha256_hex(&f)), f)) +} + +/// The CMAF files of the floor named `name` (§7.6): the initialization segment and each +/// piece's fragment, by path. `floor` is the checked floor, `starts` the piece starts. +pub fn cmaf_files(name: &str, floor: &Floor, starts: &[u64], tb_den: u32, timescale: u32) -> Result { let init = crate::cmaf::write_init_av1(&floor.seq, &floor.seq_obu, floor.seq.max_frame_width, floor.seq.max_frame_height, timescale); let mut frags = Vec::with_capacity(floor.pieces.len()); for (p, piece) in floor.pieces.iter().enumerate() { - let mut samples = Vec::with_capacity(piece.units.len()); - for (u, k) in piece.units.iter().zip(&piece.key) { - let tus = crate::av1::temporal_units(u).map_err(|e| e.to_string())?; - let [tu] = tus.as_slice() else { return Err("a floor unit is not one temporal unit".into()) }; - samples.push(crate::cmaf::Sample { data: tu.sample(), duration: tb_den, sync: *k }); - } - let tfdt = starts[p].checked_mul(tb_den as u64).ok_or("a fragment's decode time past 2^64 - 1")?; - let f = crate::cmaf::write_fragment(p as u32 + 1, tfdt, &samples); - frags.push((format!("floor/{comp}/{}.m4s", crate::sha256_hex(&f)), f)); + frags.push(cmaf_fragment(name, p as u64, starts[p], &piece.units, &piece.key, tb_den)?); } - Ok((format!("floor/{comp}/init.mp4"), init, frags)) + Ok((format!("floor/{name}/init.mp4"), init, frags)) +} + +/// A component's floor rungs, in ladder order, each with its floor name (§7.1): the +/// component's id when it has one floor rung, the rung's id when it has several. +pub fn floor_rungs<'a>(p: &'a Policy, comp: &str) -> Vec<(&'a Rung, String)> { + let rungs: Vec<&Rung> = p.ladder.iter().filter(|r| r.component == comp && r.role == RungRole::Floor).collect(); + let one = rungs.len() == 1; + rungs.into_iter().map(|r| (r, if one { comp.to_string() } else { r.id.clone() })).collect() } /// The keyframe plan's file: each piece start, one decimal per line. @@ -523,8 +562,57 @@ pub fn window_index(policy: &Policy, comp: &crate::policy::Component, pieces: &[ Ok(Window { index, objects }) } -/// Pack `policy_bytes` over `sources` (each component's source bytes, by id). +/// Pack `policy_bytes` over `sources` (each component's source bytes, by id), into +/// memory: [`pack_into`] with a [`MemSink`]. pub fn pack(policy_bytes: &[u8], sources: &BTreeMap>, opts: &mut PackOpts) -> Result { + let inputs: BTreeMap> = sources.iter().map(|(k, v)| (k.clone(), Input::Bytes(v))).collect(); + let mut sink = MemSink::default(); + let receipt = pack_into(policy_bytes, &inputs, opts, &mut sink)?; + Ok(PackOutput { files: sink.files, receipt }) +} + +/// One floor rung as the packer reads it: the rung, its floor name, and its stream's check. +struct FloorIn<'a> { + rung: &'a Rung, + name: String, + check: floor::StreamCheck, + /// The stream's SHA-256, as the supplied floor's listing gives it. + sha256: String, +} + +fn io_err(what: &str, e: impl std::fmt::Display) -> PackError { + PackError::new("io", format!("{what}: {e}")) +} + +/// The SHA-256 of one piece's frames, in order: what the second read of the source must +/// give again. +fn frames_digest(frames: &[Vec]) -> [u8; 32] { + use sha2::Digest as _; + let mut h = sha2::Sha256::new(); + for f in frames { + h.update(f); + } + h.finalize().into() +} + +/// Read `n` frames from `rd`, or refuse: the source ended or changed since the first read +/// (`pack-source-changed`), or a frame does not read (its reason). +fn read_frames(rd: &mut crate::source::y4m::Y4mReader, n: u64) -> Result>, PackError> { + let mut v = Vec::with_capacity(n as usize); + for _ in 0..n { + match rd.next_frame() { + Some(Ok(f)) => v.push(f.rgb), + Some(Err(e)) => return Err(PackError::new(e.code(), e.to_string())), + None => return Err(PackError::new("pack-source-changed", "the source ended earlier on its second read")), + } + } + Ok(v) +} + +/// Pack `policy_bytes` over `sources` into `sink`, each file as it is made. The checks are +/// [`pack`]'s and their order the verifier's (§11.3, §11.4); a refusal leaves in the sink +/// what it had written, which a [`crate::files::DirSink`] removes when it is dropped. +pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opts: &mut PackOpts, sink: &mut dyn Sink) -> Result { let policy = Policy::parse_bytes(policy_bytes).map_err(|e| PackError::new(e.code(), e.to_string()))?.effective(&opts.overrides); // The policy's own refusals, in the order a package's verifier applies them (§11.3). if let Some(r) = crate::verify::policy_refusal(&policy) { @@ -538,77 +626,199 @@ pub fn pack(policy_bytes: &[u8], sources: &BTreeMap>, opts: &mut } // The rungs it codes, before the source is read. Coder::new(&policy, comp, 0, 0)?; - let floors = rungs_of(&policy, &comp.id, RungRole::Floor); - let [floor_rung] = floors.as_slice() else { - return Err(PackError::new("floor-missing", format!("component {} needs one floor rung (§7.1)", comp.id))); - }; - if floor_rung.params.get("source").and_then(|v| v.as_str()) != Some("supplied") { + let floors = floor_rungs(&policy, &comp.id); + if floors.is_empty() { + return Err(PackError::new("floor-missing", format!("component {} needs a floor rung (§7.1)", comp.id))); + } + if floors.iter().any(|(r, _)| r.params.get("source").and_then(|v| v.as_str()) != Some("supplied")) { return Err(PackError::new("pack-floor-encode-unsupported", "this revision packs a supplied floor")); } let tb = comp.timebase; let src = sources.get(&comp.id).ok_or_else(|| PackError::new("pack-source-missing", format!("no source for component {}", comp.id)))?; - let (hd, frames) = crate::source::y4m::read_all(src).map_err(|e| PackError::new(e.code(), e.to_string()))?; - if hd.rate.is_some_and(|(n, d)| (n, d) != (tb.num, tb.den)) { - return Err(PackError::new("pack-source-rate", "the source's frame rate is not the component's timebase")); - } - if frames.is_empty() { - return Err(PackError::new("y4m-truncated", "a source of no frames")); - } + + // The first read of the source: its pieces (§4.3), a frame at a time. + let source_err = |e: crate::source::SourceError| PackError::new(e.code(), e.to_string()); + let mut rd = crate::source::y4m::Y4mReader::new(src.open().map_err(|e| io_err("the source", e))?).map_err(source_err)?; + let hd = rd.header; let (w, h) = (hd.w, hd.h); let mut seg = Segmenter::new(SegParams::from_policy(&policy.segmentation, tb), w, h); let mut pieces = Vec::new(); - for f in &frames { - pieces.extend(seg.push(&f.rgb)); + let mut n_frames = 0u64; + let mut digests: Vec<[u8; 32]> = Vec::new(); + let mut held: Vec> = Vec::new(); + while let Some(f) = rd.next_frame() { + let f = f.map_err(source_err)?; + n_frames += 1; + let closed = seg.push(&f.rgb); + held.push(f.rgb); + for p in closed { + // The frames of a closed piece leave the hold once their digest is taken. + let first = n_frames - held.len() as u64; + let take = (p.start + p.len - first) as usize; + digests.push(frames_digest(&held[..take])); + held.drain(..take); + pieces.push(p); + } + } + for p in seg.finish() { + let first = n_frames - held.len() as u64; + let take = (p.start + p.len - first) as usize; + digests.push(frames_digest(&held[..take])); + held.drain(..take); + pieces.push(p); + } + drop(held); + if hd.rate.is_some_and(|(n, d)| (n, d) != (tb.num, tb.den)) { + return Err(PackError::new("pack-source-rate", "the source's frame rate is not the component's timebase")); + } + if n_frames == 0 { + return Err(PackError::new("y4m-truncated", "a source of no frames")); } - pieces.extend(seg.finish()); let starts: Vec = pieces.iter().map(|p| p.start).collect(); - let floor_listing = policy.floor.supplied_listing.clone(); - let fl = floor::floor_supplied(&opts.floor, floor_listing.as_deref(), &comp.id, &starts, frames.len() as u64, policy.floor.extra_keyframes) - .map_err(|r| PackError::new(r.code, r.detail))?; - let listing = floor_listing.expect("checked by floor_supplied"); + + // The supplied floor, checked before anything is written (§7.3): the listing once, + // then each floor rung's stream in ladder order. + let floor_reason = |r: floor::FloorReason| PackError::new(r.code, r.detail); + let (got, shas) = floor::set_listing(&opts.floor).map_err(floor_reason)?; + let listing = policy.floor.supplied_listing.clone(); + if listing.as_deref() != Some(got.as_str()) { + return Err(PackError::new("floor-listing-mismatch", format!("the supplied floor's listing is {got}, the policy pins {}", listing.as_deref().unwrap_or("none")))); + } + let listing = listing.expect("checked"); + let mut fins: Vec = Vec::new(); + for (rung, name) in &floors { + let file = format!("{name}.obu"); + let sha256 = shas.get(&file).cloned().ok_or_else(|| PackError::new("floor-stream-missing", format!("no {file} in the supplied floor")))?; + let r = opts.floor.open(&file).map_err(|e| io_err(&file, e))?; + let check = floor::check_stream(r, n_frames).map_err(floor_reason)?; + floor::check_keyframes(&check.key, &starts, policy.floor.extra_keyframes).map_err(floor_reason)?; + fins.push(FloorIn { rung, name: name.clone(), check, sha256 }); + } + if let Some(m) = opts.meter.as_mut() { m.start(); } let coder = Coder::new(&policy, comp, w, h)?; - let (fw, fh) = (fl.seq.max_frame_width, fl.seq.max_frame_height); - let mut coded = Vec::with_capacity(pieces.len()); - for (p, piece) in pieces.iter().enumerate() { - let src_frames: Vec> = frames[piece.start as usize..(piece.start + piece.len) as usize].iter().map(|f| f.rgb.clone()).collect(); - let mut cp = coder.code(piece, &src_frames)?; - // The floor, presenting the piece's base (§7.2). - let base = &cp.stages[0]; - let df = objects::supplied_derived_from(&base.hash, &base.capability, &listing); - let payload = floor::av1_payload(&fl.pieces[p].units, fh, fw, tb.num, tb.den); - let env = objects::floor_envelope(comp.media.label(), &floor_rung.capability, payload, piece.len, fh, fw, &df); - cp.stages.push(Stage { - hash: objects::object_hash(&env), - capability: floor_rung.capability.clone(), - role: Role::Floor, - layer: 0, - prefix_tier: wsix::TIER_NONE, - prefix_digest: [0u8; 32], - sse: wsix::SSE_UNKNOWN, - deadline_ms: 0, - flags: wsix::ENTRY_DERIVED_FROM, - lens: Lens::of(&env)?, - envelope: env, - }); - coded.push(cp); + // The second read: each piece coded, and each floor rung's units for it. + let mut rd = crate::source::y4m::Y4mReader::new(src.open().map_err(|e| io_err("the source", e))?).map_err(source_err)?; + let mut streams = Vec::with_capacity(fins.len()); + for f in &fins { + let r = crate::files::HashingReader::new(opts.floor.open(&format!("{}.obu", f.name)).map_err(|e| io_err(&f.name, e))?); + streams.push(crate::av1::TuReader::new(r)); } - let Window { index, objects } = window_index(&policy, comp, &coded, 0, 0, [0u8; 32])?; + let mut frag_views: Vec> = vec![Vec::new(); fins.len()]; + let mut inits: Vec = Vec::with_capacity(fins.len()); + for f in &fins { + let c = &f.check; + let init = crate::cmaf::write_init_av1(&c.seq, &c.seq_obu, c.seq.max_frame_width, c.seq.max_frame_height, tb.num); + let path = format!("floor/{}/init.mp4", f.name); + sink.put(&path, &init).map_err(|e| io_err(&path, e))?; + inits.push(path); + } + let jobs = opts.jobs.max(1); + let mut coded: Vec = Vec::with_capacity(pieces.len()); + for batch in (0..pieces.len()).collect::>().chunks(jobs) { + let mut srcs: Vec>> = Vec::with_capacity(batch.len()); + for &p in batch { + let fr = read_frames(&mut rd, pieces[p].len)?; + if frames_digest(&fr) != digests[p] { + return Err(PackError::new("pack-source-changed", format!("piece {p}'s frames differ on the source's second read"))); + } + srcs.push(fr); + } + let results: Vec> = if batch.len() == 1 { + vec![coder.code(&pieces[batch[0]], &srcs[0])] + } else { + std::thread::scope(|s| { + let hs: Vec<_> = batch.iter().zip(&srcs).map(|(&p, fr)| { + let (coder, piece) = (&coder, &pieces[p]); + s.spawn(move || coder.code(piece, fr)) + }).collect(); + hs.into_iter().map(|h| h.join().unwrap_or_else(|_| Err(PackError::new("pack-encode", "a coding thread panicked")))).collect() + }) + }; + drop(srcs); + for (&p, r) in batch.iter().zip(results) { + let piece = &pieces[p]; + let mut cp = r?; + // The floors, each presenting the piece's base (§7.2). + let (base_hash, base_cap) = (cp.stages[0].hash, cp.stages[0].capability.clone()); + let df = objects::supplied_derived_from(&base_hash, &base_cap, &listing); + for (fi, f) in fins.iter().enumerate() { + let (fw, fh) = (f.check.seq.max_frame_width, f.check.seq.max_frame_height); + let mut units = Vec::with_capacity(piece.len as usize); + for _ in 0..piece.len { + match streams[fi].next_unit() { + Ok(Some(u)) => units.push(u), + Ok(None) => return Err(PackError::new("floor-listing-mismatch", format!("{}.obu changed while it was read", f.name))), + Err(crate::av1::ReadError::Io(e)) => return Err(io_err(&f.name, e)), + Err(crate::av1::ReadError::Malformed(e)) => return Err(PackError::new("floor-listing-mismatch", format!("{}.obu changed while it was read: {e}", f.name))), + } + } + let at = piece.start as usize; + let key = &f.check.key[at..at + piece.len as usize]; + let (path, frag) = cmaf_fragment(&f.name, p as u64, piece.start, &units, key, tb.den).map_err(|e| PackError::new("floor-av1-malformed", e))?; + sink.put(&path, &frag).map_err(|e| io_err(&path, e))?; + frag_views[fi].push((path, frag.len() as u64)); + let payload = floor::av1_payload(&units, fh, fw, tb.num, tb.den); + let env = objects::floor_envelope(comp.media.label(), &f.rung.capability, payload, piece.len, fh, fw, &df); + cp.stages.push(Stage { + hash: objects::object_hash(&env), + capability: f.rung.capability.clone(), + role: Role::Floor, + layer: 0, + prefix_tier: wsix::TIER_NONE, + prefix_digest: [0u8; 32], + sse: wsix::SSE_UNKNOWN, + deadline_ms: 0, + flags: wsix::ENTRY_DERIVED_FROM, + lens: Lens::of(&env)?, + envelope: env, + }); + } + // Each object is written once, and its bytes are not held after. + for st in &mut cp.stages { + let path = objects::object_path(&st.hash); + if !sink.has(&path) { + sink.put(&path, &st.envelope).map_err(|e| io_err(&path, e))?; + } + st.envelope = Vec::new(); + } + coded.push(cp); + } + } + // Each stream read again whole is the one the listing pinned. + for (f, s) in fins.iter().zip(streams) { + let mut s = s; + if !matches!(s.next_unit(), Ok(None)) { + return Err(PackError::new("floor-listing-mismatch", format!("{}.obu changed while it was read", f.name))); + } + let got = s.into_inner().finish().map_err(|e| io_err(&f.name, e))?; + if got != f.sha256 { + return Err(PackError::new("floor-listing-mismatch", format!("{}.obu changed while it was read", f.name))); + } + } + if rd.next_frame().is_some() { + return Err(PackError::new("pack-source-changed", "the source holds more frames on its second read")); + } + let Window { index, .. } = window_index(&policy, comp, &coded, 0, 0, [0u8; 32])?; + drop(coded); let policy_digest = policy.digest(); - let (init_path, init, frags) = cmaf_files(&comp.id, &fl, &starts, tb.den, tb.num).map_err(|e| PackError::new("floor-av1-malformed", e))?; - let view = CompView { - index: &index, - tb, - w, - h, - objects: &objects, - floor: Some(FloorView { codec: fl.seq.codec_string(), w: fw, h: fh, init: init_path.clone(), fragments: frags.iter().map(|(p, b)| (p.clone(), b.len() as u64)).collect() }), - base_cap: catalog::default_base_cap(&policy, &comp.id), - }; - let catalogs = catalog::render_all(&view, &policy, &policy_digest).map_err(|e| PackError::new("pack-catalog", e.0))?; + let views: Vec = fins + .iter() + .zip(inits) + .zip(frag_views) + .map(|((f, init), fragments)| FloorView { name: f.name.clone(), codec: f.check.seq.codec_string(), w: f.check.seq.max_frame_width, h: f.check.seq.max_frame_height, init, fragments }) + .collect(); let index_bytes = index.to_bytes(); + let catalogs = { + let objs = catalog::SinkObjects(&*sink); + let view = CompView { index: &index, tb, w, h, objects: &objs, floors: views, base_cap: catalog::default_base_cap(&policy, &comp.id) }; + catalog::render_all(&view, &policy, &policy_digest).map_err(|e| PackError::new("pack-catalog", e.0))? + }; + for (p, b) in &catalogs { + sink.put(p, b).map_err(|e| io_err(p, e))?; + } // A meter that was asked for and gives no figure (a span too short, a product past // its range) refuses the pack: it never turns into an unmetered package. let energy = match opts.meter.as_mut() { @@ -627,28 +837,19 @@ pub fn pack(policy_bytes: &[u8], sources: &BTreeMap>, opts: &mut Parent::None, ) .map_err(|r| PackError::new(r.code, r.detail))?; - let mut files: BTreeMap> = BTreeMap::new(); - files.insert("policy.toml".into(), policy_bytes.to_vec()); - files.insert("policy.json".into(), policy.canonical_json().into_bytes()); - files.insert(format!("plan-{}.txt", comp.id), plan_file(&starts).into_bytes()); - files.insert(wai::package::index_file(&comp.id), index_bytes.clone()); - for (h, env) in objects { - files.insert(objects::object_path(&h), env); - } - files.insert(init_path, init); - for (p, b) in frags { - files.insert(p, b); - } - files.extend(catalogs); - files.insert("package.receipt.json".into(), receipt.to_json().into_bytes()); + let put = |sink: &mut dyn Sink, p: &str, b: &[u8]| sink.put(p, b).map_err(|e| io_err(p, e)); + put(sink, "policy.toml", policy_bytes)?; + put(sink, "policy.json", policy.canonical_json().as_bytes())?; + put(sink, &format!("plan-{}.txt", comp.id), plan_file(&starts).as_bytes())?; + put(sink, &wai::package::index_file(&comp.id), &index_bytes)?; + put(sink, "package.receipt.json", receipt.to_json().as_bytes())?; if receipt.energy_provenance.is_some() { let claim = measurement_claim(&receipt, &index_bytes, opts).map_err(|e| PackError::new("pack-measurement-claim", e))?; - files.insert(claim_path(&receipt), claim.into_bytes()); + put(sink, &claim_path(&receipt), claim.as_bytes())?; } - let view: BTreeMap = files.iter().map(|(k, v)| (k.clone(), v.as_slice())).collect(); - let listing = wai::pin::listing_from(&view).map_err(|e| PackError::new("pack-listing", e.to_string()))?; - files.insert("LISTING".into(), listing); - Ok(PackOutput { files, receipt }) + let listing = wai::pin::listing_from_sha256(&sink.sha256s()).map_err(|e| PackError::new("pack-listing", e.to_string()))?; + put(sink, "LISTING", &listing)?; + Ok(receipt) } /// Where a package's measurement claim is: `claims/.measurement.json`. diff --git a/wai/wai-pack/src/verify.rs b/wai/wai-pack/src/verify.rs index 2e3b12a71..a72ce8511 100644 --- a/wai/wai-pack/src/verify.rs +++ b/wai/wai-pack/src/verify.rs @@ -120,14 +120,20 @@ pub fn verify_dir(dir: &std::path::Path) -> Result> { verify_files(&files) } -/// The policy's own refusals a package is held to (§11.1, §3.6): its ids, then what it -/// asks a packager to emit. +/// The policy's own refusals a package is held to (§11.1, §3.6): its ids and floor names, +/// then what it asks a packager to emit. pub fn policy_refusal(policy: &Policy) -> Option { let classes_ok = policy.classes.iter().all(|c| crate::pack::id_is_path_segment(&c.id) && !c.id.eq_ignore_ascii_case("classic")); let folded: std::collections::BTreeSet = policy.classes.iter().map(|c| c.id.to_ascii_lowercase()).collect(); if !policy.components.iter().all(|c| crate::pack::id_is_path_segment(&c.id)) || !classes_ok || folded.len() != policy.classes.len() { return Some(reason("pack-id", "a component or class id that cannot name a file, two class ids equal in any case, or a class named classic")); } + // Floor names (§7.1) name paths too: each a path segment, no two equal in any case. + let names: Vec = policy.components.iter().flat_map(|c| crate::pack::floor_rungs(policy, &c.id).into_iter().map(|(_, n)| n)).collect(); + let folded: std::collections::BTreeSet = names.iter().map(|n| n.to_ascii_lowercase()).collect(); + if !names.iter().all(|n| crate::pack::id_is_path_segment(n)) || folded.len() != names.len() { + return Some(reason("pack-id", "a floor name that cannot name a file, or two floor names equal in any case")); + } if let Err(v) = crate::capcheck::check(policy) { return Some(reason(v[0].code.clone(), format!("ladder.{}", v[0].rung))); } @@ -379,7 +385,7 @@ fn verify_component( if !errs.is_empty() { return Err(errs); } - let (floor, produced) = floor_view(policy, comp, ix, &objects).map_err(|e| vec![e])?; + let (floors, produced) = floor_view(policy, comp, ix, &objects).map_err(|e| vec![e])?; for (p, b) in &produced { expected.insert(p.clone()); if files.get(p) != Some(b) { @@ -390,7 +396,7 @@ fn verify_component( return Err(errs); } let (w, hgt) = dims.unwrap_or((0, 0)); - let view = CompView { index: ix, tb: Timebase { num: tb.num, den: tb.den }, w, h: hgt, objects: &objects, floor, base_cap: catalog::default_base_cap(policy, &comp.id) }; + let view = CompView { index: ix, tb: Timebase { num: tb.num, den: tb.den }, w, h: hgt, objects: &objects, floors, base_cap: catalog::default_base_cap(policy, &comp.id) }; catalog::render_all(&view, policy, policy_digest).map_err(|e| vec![reason("catalog-mismatch", format!("no catalog can be written: {}", e.0))]) } @@ -494,50 +500,68 @@ fn prefix_digests(media: &str, ix: &StageIndex, objects: &BTreeMap<[u8; 32], Vec if errs.is_empty() { Ok(dims) } else { Err(errs) } } -/// Before any frame is decoded (§11.3): each piece's floor object, where the policy has a -/// floor rung and the object's payload reads as §7.2's framing, holds one unit per frame -/// of its piece (`floor-object-mismatch`). A floor that does not read is left to +/// Before any frame is decoded (§11.3): each piece's floor objects, where the policy has +/// floor rungs and an object's payload reads as §7.2's framing, hold one unit per frame of +/// their piece (`floor-object-mismatch`). A floor that does not read is left to /// [`floor_view`], which runs when everything before it holds. fn floor_unit_counts(policy: &Policy, comp: &Component, ix: &StageIndex, objects: &BTreeMap<[u8; 32], Vec>) -> Option { policy.ladder.iter().find(|r| r.component == comp.id && r.role == RungRole::Floor)?; for p in 0..ix.pieces.len() { - let floors: Vec<&wsix::EntryRec> = ix.piece_entries(p).iter().filter(|e| e.role == Role::Floor).collect(); - let [fe] = floors.as_slice() else { continue }; - let Some(w) = objects.get(&fe.content_hash).and_then(|b| wai::container::Wai::from_bytes(b).ok()) else { continue }; - let Some((units, _)) = crate::floor::av1_units(&w.payload) else { continue }; - if units.len() as u64 != ix.pieces[p].duration as u64 { - return Some(reason("floor-object-mismatch", format!("piece {p}: {} floor units for {} frames, before any frame is decoded", units.len(), ix.pieces[p].duration))); + for fe in ix.piece_entries(p).iter().filter(|e| e.role == Role::Floor) { + let Some(w) = objects.get(&fe.content_hash).and_then(|b| wai::container::Wai::from_bytes(b).ok()) else { continue }; + let Some((units, _)) = crate::floor::av1_units(&w.payload) else { continue }; + if units.len() as u64 != ix.pieces[p].duration as u64 { + return Some(reason("floor-object-mismatch", format!("piece {p}: {} floor units for {} frames, before any frame is decoded", units.len(), ix.pieces[p].duration))); + } } } None } -type FloorFiles = (Option, Vec<(String, Vec)>); +type FloorFiles = (Vec, Vec<(String, Vec)>); -/// The floor of a component as its objects give it (§7.2, §7.3, §7.6), and the CMAF files -/// its temporal units give. Per piece: one floor object of the floor rung's capability, -/// presenting the piece's base (`floor-motif-mismatch`), whose renderer, settings, target -/// and framing header are §7.2's (`floor-object-mismatch`), one temporal unit per frame; -/// the first unit of the first piece carries a sequence header, every sequence header is -/// the first's bytes, and a shown key frame carries one (`floor-av1-malformed`); each -/// piece's first unit is a shown key frame, and no other is unless the policy allows extra -/// key frames (`floor-keyframe-mismatch`). +/// The floors of a component as its objects give them (§7.2, §7.3, §7.6), and the CMAF +/// files their temporal units give, floor rung by floor rung in ladder order. Per piece +/// and floor rung: one floor object of the rung's capability, at its place among the +/// piece's floors, presenting the piece's base (`floor-motif-mismatch`), whose renderer, +/// settings, target and framing header are §7.2's (`floor-object-mismatch`), one temporal +/// unit per frame; the first unit of the rung's first piece carries a sequence header, +/// every sequence header is the first's bytes, and a shown key frame carries one +/// (`floor-av1-malformed`); each piece's first unit is a shown key frame, and no other is +/// unless the policy allows extra key frames (`floor-keyframe-mismatch`). fn floor_view(policy: &Policy, comp: &Component, ix: &StageIndex, objects: &BTreeMap<[u8; 32], Vec>) -> Result { + let mut views = Vec::new(); + let mut produced = Vec::new(); + for (k, (rung, name)) in crate::pack::floor_rungs(policy, &comp.id).into_iter().enumerate() { + let (v, files) = one_floor(policy, comp, ix, objects, rung, &name, k)?; + views.push(v); + produced.extend(files); + } + Ok((views, produced)) +} + +/// One floor's view and the CMAF files it gives. +type OneFloor = (FloorView, Vec<(String, Vec)>); + +/// [`floor_view`] for the `k`-th floor rung, `rung`, of floor name `name`. +fn one_floor(policy: &Policy, comp: &Component, ix: &StageIndex, objects: &BTreeMap<[u8; 32], Vec>, rung: &crate::policy::Rung, name: &str, k: usize) -> Result { let tb = comp.timebase; - let rung = policy.ladder.iter().find(|r| r.component == comp.id && r.role == RungRole::Floor); - let Some(rung) = rung else { return Ok((None, Vec::new())) }; let object = |why: String| reason("floor-object-mismatch", why); let listing = policy.floor.supplied_listing.clone().ok_or_else(|| object("a supplied floor with no listing in the policy".into()))?; let df_want = crate::objects::supplied_derived_from(&[0u8; 32], "", &listing); + let n_floors = crate::pack::floor_rungs(policy, &comp.id).len(); let mut pieces = Vec::new(); let mut seq: Option<(crate::av1::SequenceHeader, Vec)> = None; // The objects first: their members, framing and units. for p in 0..ix.pieces.len() { let es = ix.piece_entries(p); let floors: Vec<&wsix::EntryRec> = es.iter().filter(|e| e.role == Role::Floor).collect(); - let [fe] = floors.as_slice() else { return Err(object(format!("piece {p}: not one floor object"))) }; + if floors.len() != n_floors { + return Err(object(format!("piece {p}: not one floor object per floor rung"))); + } + let fe = floors[k]; if ix.capability(fe) != rung.capability { - return Err(object(format!("piece {p}: the floor is not the floor rung's capability"))); + return Err(object(format!("piece {p}: floor {name} is not its floor rung's capability"))); } let base = es.iter().find(|e| e.role == Role::Base).ok_or_else(|| reason("floor-motif-mismatch", format!("piece {p} has no base")))?; let bytes = objects.get(&fe.content_hash).ok_or_else(|| object(format!("piece {p}: the floor object is not held")))?; @@ -592,11 +616,12 @@ fn floor_view(policy: &Policy, comp: &Component, ix: &StageIndex, objects: &BTre } pieces.push(crate::floor::FloorPiece { units, key }); } - let Some((s, obu)) = seq else { return Ok((None, Vec::new())) }; + let (s, obu) = seq.ok_or_else(|| object("a component with no piece".into()))?; let fl = crate::floor::Floor { seq: s, seq_obu: obu, pieces }; let starts: Vec = ix.pieces.iter().map(|p| p.start).collect(); - let (init_path, init, frags) = crate::pack::cmaf_files(&comp.id, &fl, &starts, tb.den, tb.num).map_err(|e| reason("floor-cmaf-mismatch", e))?; + let (init_path, init, frags) = crate::pack::cmaf_files(name, &fl, &starts, tb.den, tb.num).map_err(|e| reason("floor-cmaf-mismatch", e))?; let view = FloorView { + name: name.to_string(), codec: fl.seq.codec_string(), w: fl.seq.max_frame_width, h: fl.seq.max_frame_height, @@ -605,7 +630,7 @@ fn floor_view(policy: &Policy, comp: &Component, ix: &StageIndex, objects: &BTre }; let mut produced = vec![(init_path, init)]; produced.extend(frags); - Ok((Some(view), produced)) + Ok((view, produced)) } fn check_claim(r: &PackageReceiptV2, indexes: &[&[u8]], b: &[u8]) -> Result<(), String> { diff --git a/wai/wai-pack/tests/ladder.rs b/wai/wai-pack/tests/ladder.rs new file mode 100644 index 000000000..11bd737f6 --- /dev/null +++ b/wai/wai-pack/tests/ladder.rs @@ -0,0 +1,157 @@ +//! Several floor rungs in one package (packaging §7.1): the golden `video-ladder-01` of +//! `wai/pack-conformance` carries two AV1 floors over one integer base, which is +//! `video-base-01`'s, object for object; the catalogs list both floors; floor names that +//! cannot name a file, and each floor's streams, are refused by name. + +use std::collections::BTreeMap; +use std::path::{Path, PathBuf}; +use wai::stage_index::{Role, StageIndex}; +use wai_pack::golden; + +type Files = BTreeMap>; + +fn corpus() -> PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")).join("../pack-conformance") +} + +fn held(p: &Path) -> Files { + wai::pin::read_dir_set(p).unwrap() +} + +fn ladder_package() -> Files { + held(&corpus().join("packs/video-ladder-01/package")) +} + +fn ladder_policy() -> String { + String::from_utf8(std::fs::read(corpus().join("packs/video-ladder-01/policy.toml")).unwrap()).unwrap() +} + +fn ladder_floor() -> Files { + held(&corpus().join("packs/video-ladder-01/floor")) +} + +/// Pack the ladder golden's fixture under `policy` (its listing pinned to `floor`'s). +fn pack(policy: &str, floor: Files) -> Result { + let listing = wai_pack::floor::listing_sha256(&floor).unwrap(); + let at = policy.find("supplied_listing = \"").unwrap() + "supplied_listing = \"".len(); + let policy = format!("{}{listing}{}", &policy[..at], &policy[at + 64..]); + let mut o = wai_pack::pack::PackOpts::new(ed25519_dalek::SigningKey::from_bytes(&[0x5a; 32]), "did:key:test", floor); + let mut src = BTreeMap::new(); + src.insert("v".to_string(), wai_pack::fixture::generate("video-base-01").unwrap()); + wai_pack::pack::pack(policy.as_bytes(), &src, &mut o) +} + +fn code(r: Result) -> String { + r.map(|_| "ok".to_string()).unwrap_or_else(|e| e.code) +} + +/// One base per piece under two floors, in ladder order; the bases are `video-base-01`'s +/// objects (the same fixture and base rung); each floor object presents its piece's base; +/// the classical master lists one variant per floor, each its own size; and each floor's +/// fragments hold every frame of its piece. +#[test] +fn a_ladder_is_one_base_under_its_floors() { + let pkg = ladder_package(); + wai_pack::verify::verify_files(&pkg).unwrap(); + let ix = StageIndex::parse(&pkg["index-v.wsix"]).unwrap(); + let base_pkg = held(&corpus().join("packs/video-base-01/package")); + let base_ix = StageIndex::parse(&base_pkg["index-v.wsix"]).unwrap(); + for p in 0..ix.pieces.len() { + let es = ix.piece_entries(p); + assert_eq!(es.iter().map(|e| e.role).collect::>(), vec![Role::Base, Role::Floor, Role::Floor], "piece {p}"); + assert_eq!(es[0].content_hash, base_ix.piece_entries(p)[0].content_hash, "piece {p}: video-base-01's base"); + assert_ne!(es[1].content_hash, es[2].content_hash, "two renditions"); + for fe in &es[1..] { + let w = wai::container::Wai::from_bytes(&pkg[&wai_pack::objects::object_path(&fe.content_hash)]).unwrap(); + let df = wai::container::DerivedFrom::from_value(w.manifest.derived_from.as_ref().unwrap()).unwrap(); + assert_eq!(df.motif, wai_pack::hex(&es[0].content_hash), "piece {p}: the floor presents the piece's base"); + } + } + let master = String::from_utf8(pkg["hls/classic/master.m3u8"].clone()).unwrap(); + let variants: Vec<&str> = master.lines().filter(|l| !l.starts_with('#')).collect(); + assert_eq!(variants, vec!["../classic/floor-hi.m3u8", "../classic/floor-lo.m3u8"]); + assert!(master.contains("RESOLUTION=64x36") && master.contains("RESOLUTION=32x18"), "{master}"); + for c in ["tv", "mobile", "legacy"] { + let m = String::from_utf8(pkg[&format!("hls/{c}/master.m3u8")].clone()).unwrap(); + wai::http_binding::hls::classical_unchanged(&master, &m).unwrap(); + } + for name in ["hi", "lo"] { + let pl = String::from_utf8(pkg[&format!("hls/classic/floor-{name}.m3u8")].clone()).unwrap(); + let frags: Vec<&str> = pl.lines().filter(|l| !l.starts_with('#')).map(|l| l.trim_start_matches("../../")).collect(); + assert_eq!(frags.len(), ix.pieces.len()); + for (p, f) in frags.iter().enumerate() { + assert!(f.starts_with(&format!("floor/{name}/")), "{f}"); + let top = wai_pack::cmaf::boxes(&pkg[*f]).unwrap(); + let traf = wai_pack::cmaf::boxes(top[0].1).unwrap().into_iter().find(|(k, _)| k == b"traf").unwrap().1; + let trun = wai_pack::cmaf::boxes(traf).unwrap().into_iter().find(|(k, _)| k == b"trun").unwrap().1; + assert_eq!(u32::from_be_bytes(trun[4..8].try_into().unwrap()), ix.pieces[p].duration); + } + // A WAI media playlist is adjacent to every floor's, which share the pieces' + // durations. + wai::http_binding::hls::check_adjacent(std::str::from_utf8(&pkg["hls/tv/wai-v.m3u8"]).unwrap(), &pl).unwrap(); + } + let dash = String::from_utf8(pkg["dash/classic.mpd"].clone()).unwrap(); + assert!(dash.contains(" = moq["tracks"].as_array().unwrap().iter().filter(|t| t["packaging"] == "cmaf").map(|t| t["name"].as_str().unwrap()).collect(); + assert_eq!(floors, vec!["hi/floor", "lo/floor"]); + // The same inputs pack to the same bytes. + assert_eq!(golden::pack_golden(&corpus(), "video-ladder-01").unwrap().files, pkg); +} + +/// §7.1, §7.3, §11.1: with several floor rungs each stream is `.obu`, each is +/// checked as one floor is, and a floor name that cannot name a file, or two equal in any +/// case, is refused (`pack-id`); with one floor rung, the stream is the component's. +#[test] +fn each_floor_is_checked_and_named() { + let p = ladder_policy(); + let fl = ladder_floor(); + assert_eq!(code(pack(&p, fl.clone())), "ok"); + // A floor rung whose id names no file, and two that fold to one name. + assert_eq!(code(pack(&p.replace("id = \"lo\"", "id = \"l o\""), fl.clone())), "pack-id"); + assert_eq!(code(pack(&p.replace("id = \"lo\"", "id = \"HI\""), fl.clone())), "pack-id"); + // One floor rung: its stream is the component's, v.obu. + let one = p.replace("[[ladder]]\nid = \"lo\"\ncomponent = \"v\"\ncapability = \"wai.video.av1\"\nrole = \"floor\"\nparams = { source = \"supplied\" }\n\n", ""); + assert_ne!(one, p); + let only_hi: Files = [("hi.obu".to_string(), fl["hi.obu"].clone())].into(); + assert_eq!(code(pack(&one, only_hi)), "floor-stream-missing"); + let as_v: Files = [("v.obu".to_string(), fl["hi.obu"].clone())].into(); + assert_eq!(code(pack(&one, as_v)), "ok"); + // The second floor's stream: missing, a unit short, or a piece opening on an inter + // frame. + let mut no_lo = fl.clone(); + no_lo.remove("lo.obu"); + assert_eq!(code(pack(&p, no_lo)), "floor-stream-missing"); + let lo: Vec> = wai_pack::av1::temporal_units(&fl["lo.obu"]).unwrap().iter().map(|t| t.bytes()).collect(); + let mut short = fl.clone(); + short.insert("lo.obu".into(), lo[..lo.len() - 1].concat()); + assert_eq!(code(pack(&p, short)), "floor-frame-count"); + let mut inter = lo.clone(); + inter[85] = lo[86].clone(); + let mut off = fl.clone(); + off.insert("lo.obu".into(), inter.concat()); + assert_eq!(code(pack(&p, off)), "floor-keyframe-mismatch"); +} + +/// §11.3: a floor object at another floor rung's place is refused: piece 2's two floors +/// swapped in the index, the package re-sealed, gives the first floor an object whose +/// framing header is not its sequence header's size (`floor-object-mismatch`, which §11.3 +/// checks before the units' sequence headers). +#[test] +fn a_floor_at_another_rung_s_place_is_refused() { + let mut f = ladder_package(); + let mut ix = StageIndex::parse(&f["index-v.wsix"]).unwrap(); + let at = ix.pieces[2].first_entry as usize; + ix.entries.swap(at + 1, at + 2); + f.insert("index-v.wsix".into(), ix.to_bytes()); + let key = ed25519_dalek::SigningKey::from_bytes(&golden_key()); + golden::reseal(&mut f, &key).unwrap(); + let got: Vec = wai_pack::verify::verify_files(&f).err().unwrap_or_default().into_iter().map(|r| r.code).collect(); + assert_eq!(got, vec!["floor-object-mismatch"]); +} + +fn golden_key() -> [u8; 32] { + let t = std::fs::read_to_string(corpus().join("packs/video-ladder-01/key.hex")).unwrap(); + let b = wai_pack::unhex(t.trim()).unwrap(); + b.try_into().unwrap() +} diff --git a/wai/wai-rs/src/http_binding/dash.rs b/wai/wai-rs/src/http_binding/dash.rs index 6b2448c60..39a426c41 100644 --- a/wai/wai-rs/src/http_binding/dash.rs +++ b/wai/wai-rs/src/http_binding/dash.rs @@ -105,27 +105,30 @@ pub struct Descriptor { pub value: Option, } -/// A `Representation` with a `SegmentList`: its `@id`, `@dependencyId` and -/// `@bandwidth`, the list's timescale, an `Initialization`, the `S` elements (`t`, -/// `d`) and one `SegmentURL` per segment. +/// A `Representation` with a `SegmentList`: its `@id`, `@dependencyId`, `@bandwidth`, and +/// `@codecs`, `@width` and `@height` where the representations of its set differ in +/// them, the list's timescale, an `Initialization`, the `S` elements (`t`, `d`) and one +/// `SegmentURL` per segment. #[derive(Clone, Debug, PartialEq, Eq)] pub struct Representation { pub id: String, pub dependency_id: Option, pub bandwidth: u64, + pub codecs: Option, + pub size: Option<(u32, u32)>, pub timescale: u64, pub initialization: Option, pub timeline: Vec<(u64, u64)>, pub media: Vec, } -/// An `AdaptationSet`. +/// An `AdaptationSet`: `@codecs` where every representation of it shares it. #[derive(Clone, Debug, PartialEq, Eq)] pub struct AdaptationSet { pub id: u32, pub content_type: Option, pub mime_type: String, - pub codecs: String, + pub codecs: Option, pub size: Option<(u32, u32)>, pub segment_alignment: bool, pub start_with_sap: Option, @@ -186,7 +189,8 @@ fn id_ok(s: &str) -> bool { /// (`@id`, `@contentType`, `@mimeType`, `@codecs`, `@width`, `@height`, /// `@segmentAlignment`, `@startWithSAP`, those given, in that order) with its essential /// then supplemental descriptors and its representations (`@id`, `@dependencyId`, -/// `@bandwidth`), each a `SegmentList` (`@timescale`) of an `Initialization`, a +/// `@bandwidth`, `@codecs`, `@width`, `@height`, those given, in that order), each a +/// `SegmentList` (`@timescale`) of an `Initialization`, a /// `SegmentTimeline` of one `S` per segment with its `t` and `d`, and one `SegmentURL` /// per segment. Attribute values are escaped, elements are indented by two spaces a /// level, and lines end in LF. Refused (`playlist_malformed`) for no adaptation set or @@ -212,7 +216,10 @@ pub fn render_mpd(m: &Mpd) -> Result { if let Some(c) = &a.content_type { out.push_str(&format!(" contentType=\"{}\"", esc(c)?)); } - out.push_str(&format!(" mimeType=\"{}\" codecs=\"{}\"", esc(&a.mime_type)?, esc(&a.codecs)?)); + out.push_str(&format!(" mimeType=\"{}\"", esc(&a.mime_type)?)); + if let Some(c) = &a.codecs { + out.push_str(&format!(" codecs=\"{}\"", esc(c)?)); + } if let Some((w, h)) = a.size { out.push_str(&format!(" width=\"{w}\" height=\"{h}\"")); } @@ -240,7 +247,14 @@ pub fn render_mpd(m: &Mpd) -> Result { if let Some(d) = &r.dependency_id { out.push_str(&format!(" dependencyId=\"{}\"", esc(d)?)); } - out.push_str(&format!(" bandwidth=\"{}\">\n \n", r.bandwidth, r.timescale)); + out.push_str(&format!(" bandwidth=\"{}\"", r.bandwidth)); + if let Some(c) = &r.codecs { + out.push_str(&format!(" codecs=\"{}\"", esc(c)?)); + } + if let Some((w, h)) = r.size { + out.push_str(&format!(" width=\"{w}\" height=\"{h}\"")); + } + out.push_str(&format!(">\n \n", r.timescale)); if let Some(i) = &r.initialization { out.push_str(&format!(" \n", esc(i)?)); } @@ -285,7 +299,7 @@ pub fn wai_mpd(t: &DashTimeline, set_id: u32, union: &Element, floor: &Element, id: set_id, content_type: None, mime_type: super::MEDIA_TYPE.into(), - codecs: codecs::render(union), + codecs: Some(codecs::render(union)), size: None, segment_alignment: true, start_with_sap: None, @@ -297,7 +311,7 @@ pub fn wai_mpd(t: &DashTimeline, set_id: u32, union: &Element, floor: &Element, } let offered: Vec<(&(u64, u64), &String)> = t.segments.iter().zip(&r.media).filter_map(|(s, m)| m.as_ref().map(|m| (s, m))).collect(); Ok(Representation { - id: r.id.clone(), dependency_id: None, bandwidth: r.bandwidth, timescale: t.timescale, initialization: None, + id: r.id.clone(), dependency_id: None, bandwidth: r.bandwidth, codecs: None, size: None, timescale: t.timescale, initialization: None, timeline: offered.iter().map(|(s, _)| **s).collect(), media: offered.iter().map(|(_, m)| (*m).clone()).collect(), }) }).collect::>()?, diff --git a/wai/wai-rs/src/http_binding/tests_playlists.rs b/wai/wai-rs/src/http_binding/tests_playlists.rs index c6e315bb4..30d177ef9 100644 --- a/wai/wai-rs/src/http_binding/tests_playlists.rs +++ b/wai/wai-rs/src/http_binding/tests_playlists.rs @@ -748,11 +748,11 @@ fn multivariant_of_either_kind() { fn render_mpd_of_either_kind() { use super::dash::*; let rep = |id: &str, dep: Option<&str>, init: Option<&str>, tl: Vec<(u64, u64)>| Representation { - id: id.into(), dependency_id: dep.map(String::from), bandwidth: 100, timescale: 25, initialization: init.map(String::from), + id: id.into(), dependency_id: dep.map(String::from), bandwidth: 100, codecs: None, size: None, timescale: 25, initialization: init.map(String::from), media: tl.iter().map(|(t, _)| format!("s{t}.wai")).collect(), timeline: tl, }; let set = |mime: &str, align: bool, sap: Option, reps: Vec| AdaptationSet { - id: 1, content_type: Some("video".into()), mime_type: mime.into(), codecs: "c".into(), size: Some((64, 36)), segment_alignment: align, + id: 1, content_type: Some("video".into()), mime_type: mime.into(), codecs: Some("c".into()), size: Some((64, 36)), segment_alignment: align, start_with_sap: sap, essential: vec![], supplemental: vec![Descriptor { scheme: SCHEME_FLOOR.into(), value: Some("f&g".into()) }], representations: reps, }; let m = Mpd { duration_ms: 8000, min_buffer_s: 3, period_id: Some("p0".into()), period_start_ms: 0, adaptation_sets: vec![ @@ -765,6 +765,19 @@ fn render_mpd_of_either_kind() { rep("v-l0", None, None, vec![(0, 60), (60, 25), (85, 50)]), rep("v-l1", Some("v-l0"), None, vec![(0, 60), (85, 50)])])], ..m.clone() }; let t = render_mpd(&w).unwrap(); assert!(t.contains("") && !t.contains("segmentAlignment")); + // Representations that differ in codecs and size carry their own, and the set none. + let mut ladder = m.clone(); + ladder.adaptation_sets[0].codecs = None; + ladder.adaptation_sets[0].size = None; + let mut hi = rep("hi-floor", None, Some("../floor/hi/init.mp4"), vec![(0, 60), (60, 25)]); + (hi.codecs, hi.size) = (Some("av01.0.08M.10".into()), Some((1920, 1080))); + let mut lo = rep("lo-floor", None, Some("../floor/lo/init.mp4"), vec![(0, 60), (60, 25)]); + (lo.codecs, lo.size) = (Some("av01.0.01M.10".into()), Some((640, 360))); + ladder.adaptation_sets[0].representations = vec![hi, lo]; + let t = render_mpd(&ladder).unwrap(); + assert!(t.contains(""), "{t}"); + assert!(t.contains(""), "{t}"); + assert!(t.contains(""), "{t}"); let mut bad = w.clone(); bad.adaptation_sets[0].representations[1].media.pop(); assert_eq!(render_mpd(&bad).unwrap_err().code(), "playlist_malformed"); @@ -784,7 +797,7 @@ fn render_mpd_of_either_kind() { assert_eq!(sup.attr("value"), Some("a\tb\nc\rd")); for c in ['\u{0}', '\u{1}', '\u{b}', '\u{1f}', '\u{fffe}', '\u{ffff}'] { let mut bad = w.clone(); - bad.adaptation_sets[0].codecs = format!("a{c}b"); + bad.adaptation_sets[0].codecs = Some(format!("a{c}b")); assert_eq!(render_mpd(&bad).unwrap_err().code(), "playlist_malformed", "{c:?}"); } } -- 2.54.0 (Apple Git-157) From 90ac478f12cbe7e16068dacd0a0f7355c1e71fa1 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 19:59:41 -0400 Subject: [PATCH 02/50] =?UTF-8?q?packaging:=20a=20re-pack=20takes=20its=20?= =?UTF-8?q?bases=20from=20a=20parent=20package=20(=C2=A711.5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A packer may now take every piece's base and refinements from an earlier package instead of coding them, so a title's integer base is coded once and every later package of the same source takes it: wai-pack pack --base-from . Before it writes anything it verifies the parent as §11.3 does (repack-parent-invalid), matches it piece by piece (start, duration, flags, kind, the rungs and parameters of the base and refinements, the deadline; repack-parent-mismatch), and holds each reused prefix to this source by the SSE its entry states (repack-source-mismatch). The receipt names the parent with parent kind re-pack; every other file is a coding pack's. A verifier holding the parent checks a re-pack against it (wai-pack verify --parent; verify::verify_repack). - pack-conformance: packs/video-repack-01, the ladder golden re-packed from video-base-01, and pack_verify.py's check of a re-pack golden against the parent it names. - tests/repack.rs, and CI's test-count floor. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-pack.yml | 1 + wai/CHANGELOG.md | 16 +- wai/extensions/packaging.md | 46 ++++- wai/pack-conformance/README.md | 6 + wai/pack-conformance/pack_verify.py | 39 ++++ .../packs/video-repack-01/floor/hi.obu | Bin 0 -> 6575 bytes .../packs/video-repack-01/floor/lo.obu | Bin 0 -> 6243 bytes .../packs/video-repack-01/key.hex | 1 + .../packs/video-repack-01/package/LISTING | 46 +++++ .../video-repack-01/package/dash/classic.mpd | 41 ++++ .../video-repack-01/package/dash/mobile.mpd | 21 ++ .../packs/video-repack-01/package/dash/tv.mpd | 27 +++ ...2a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s | Bin 0 -> 981 bytes ...5de0902f941a3c6a000295714f7cab193aa6cf.m4s | Bin 0 -> 981 bytes ...b33fd445037d6538b445bcc76431f9c9f91c5b.m4s | Bin 0 -> 2400 bytes ...01dc69170ecb4240dffd2e86808ddf87baa12a.m4s | Bin 0 -> 2605 bytes ...7996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s | Bin 0 -> 2088 bytes .../video-repack-01/package/floor/hi/init.mp4 | Bin 0 -> 628 bytes ...846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s | Bin 0 -> 1127 bytes ...92fdd2aa86db43ccdc684b69c51a688856a0db.m4s | Bin 0 -> 1127 bytes ...659d88613f6d0d360485effe3751504cefbb74.m4s | Bin 0 -> 2248 bytes ...d45c4c0274b0460f6abc8f54940ac378165833.m4s | Bin 0 -> 2526 bytes ...7189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s | Bin 0 -> 1695 bytes .../video-repack-01/package/floor/lo/init.mp4 | Bin 0 -> 628 bytes .../package/hls/classic/floor-hi.m3u8 | 18 ++ .../package/hls/classic/floor-lo.m3u8 | 18 ++ .../package/hls/classic/master.m3u8 | 7 + .../package/hls/legacy/master.m3u8 | 7 + .../package/hls/mobile/master.m3u8 | 8 + .../package/hls/mobile/wai-v.m3u8 | 20 ++ .../package/hls/mobile/wai.m3u8 | 7 + .../package/hls/tv/master.m3u8 | 8 + .../video-repack-01/package/hls/tv/wai-v.m3u8 | 17 ++ .../video-repack-01/package/hls/tv/wai.m3u8 | 7 + .../video-repack-01/package/index-v.wsix | Bin 0 -> 2368 bytes .../video-repack-01/package/moq/catalog.json | 1 + ...371966b50573602a200dd7bb04e0d90889326d.wai | Bin 0 -> 39826 bytes ...269ea591df681ced90b05d97e0df106b49b08e.wai | Bin 0 -> 2569 bytes ...a8bb86c174409cb625157784e18c5e5559a381.wai | Bin 0 -> 2503 bytes ...19c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai | Bin 0 -> 25514 bytes ...a0240598b914dbf2cabe545aa001e8de12d365.wai | Bin 0 -> 9950 bytes ...ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai | Bin 0 -> 1380 bytes ...f66cbb814cde679bceb1ae37f0765308ddee72.wai | Bin 0 -> 2251 bytes ...d007436368e8d20467fdec2a1eebbb84b03bf2.wai | Bin 0 -> 35882 bytes ...75efdc77163602b4a1dabcff080e5ea28b9946.wai | Bin 0 -> 2648 bytes ...22fc0bed42baeb3488f00dfe3567056a7009c5.wai | Bin 0 -> 1858 bytes ...43dfb76fcc3884c607b744c8a53fa6a1728580.wai | Bin 0 -> 1234 bytes ...cb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai | Bin 0 -> 2351 bytes .../package/package.receipt.json | 1 + .../packs/video-repack-01/package/plan-v.txt | 5 + .../packs/video-repack-01/package/policy.json | 1 + .../packs/video-repack-01/package/policy.toml | 54 ++++++ .../package/stages/legacy.json | 1 + .../package/stages/mobile.json | 1 + .../video-repack-01/package/stages/tv.json | 1 + .../packs/video-repack-01/parent | 1 + .../packs/video-repack-01/policy.toml | 54 ++++++ wai/wai-pack/src/bin/wai_pack.rs | 25 ++- wai/wai-pack/src/golden.rs | 21 +- wai/wai-pack/src/pack.rs | 181 +++++++++++++++++- wai/wai-pack/src/verify.rs | 46 +++++ wai/wai-pack/tests/repack.rs | 135 +++++++++++++ 62 files changed, 872 insertions(+), 17 deletions(-) create mode 100644 wai/pack-conformance/packs/video-repack-01/floor/hi.obu create mode 100644 wai/pack-conformance/packs/video-repack-01/floor/lo.obu create mode 100644 wai/pack-conformance/packs/video-repack-01/key.hex create mode 100644 wai/pack-conformance/packs/video-repack-01/package/LISTING create mode 100644 wai/pack-conformance/packs/video-repack-01/package/dash/classic.mpd create mode 100644 wai/pack-conformance/packs/video-repack-01/package/dash/mobile.mpd create mode 100644 wai/pack-conformance/packs/video-repack-01/package/dash/tv.mpd create mode 100644 wai/pack-conformance/packs/video-repack-01/package/floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s create mode 100644 wai/pack-conformance/packs/video-repack-01/package/floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s create mode 100644 wai/pack-conformance/packs/video-repack-01/package/floor/hi/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s create mode 100644 wai/pack-conformance/packs/video-repack-01/package/floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s create mode 100644 wai/pack-conformance/packs/video-repack-01/package/floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s create mode 100644 wai/pack-conformance/packs/video-repack-01/package/floor/hi/init.mp4 create mode 100644 wai/pack-conformance/packs/video-repack-01/package/floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s create mode 100644 wai/pack-conformance/packs/video-repack-01/package/floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s create mode 100644 wai/pack-conformance/packs/video-repack-01/package/floor/lo/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s create mode 100644 wai/pack-conformance/packs/video-repack-01/package/floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s create mode 100644 wai/pack-conformance/packs/video-repack-01/package/floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s create mode 100644 wai/pack-conformance/packs/video-repack-01/package/floor/lo/init.mp4 create mode 100644 wai/pack-conformance/packs/video-repack-01/package/hls/classic/floor-hi.m3u8 create mode 100644 wai/pack-conformance/packs/video-repack-01/package/hls/classic/floor-lo.m3u8 create mode 100644 wai/pack-conformance/packs/video-repack-01/package/hls/classic/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-repack-01/package/hls/legacy/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-repack-01/package/hls/mobile/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-repack-01/package/hls/mobile/wai-v.m3u8 create mode 100644 wai/pack-conformance/packs/video-repack-01/package/hls/mobile/wai.m3u8 create mode 100644 wai/pack-conformance/packs/video-repack-01/package/hls/tv/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-repack-01/package/hls/tv/wai-v.m3u8 create mode 100644 wai/pack-conformance/packs/video-repack-01/package/hls/tv/wai.m3u8 create mode 100644 wai/pack-conformance/packs/video-repack-01/package/index-v.wsix create mode 100644 wai/pack-conformance/packs/video-repack-01/package/moq/catalog.json create mode 100644 wai/pack-conformance/packs/video-repack-01/package/objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai create mode 100644 wai/pack-conformance/packs/video-repack-01/package/objects/482fbbb9b39bdb9cbf00515f94269ea591df681ced90b05d97e0df106b49b08e.wai create mode 100644 wai/pack-conformance/packs/video-repack-01/package/objects/4ab8f747d181632f342a4887b0a8bb86c174409cb625157784e18c5e5559a381.wai create mode 100644 wai/pack-conformance/packs/video-repack-01/package/objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai create mode 100644 wai/pack-conformance/packs/video-repack-01/package/objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai create mode 100644 wai/pack-conformance/packs/video-repack-01/package/objects/6ce13c9ef6872caeb7fbe71661ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai create mode 100644 wai/pack-conformance/packs/video-repack-01/package/objects/b7bf0717e968d7b6be473785c9f66cbb814cde679bceb1ae37f0765308ddee72.wai create mode 100644 wai/pack-conformance/packs/video-repack-01/package/objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai create mode 100644 wai/pack-conformance/packs/video-repack-01/package/objects/cf842ef3058d3c54d56c0ea3e075efdc77163602b4a1dabcff080e5ea28b9946.wai create mode 100644 wai/pack-conformance/packs/video-repack-01/package/objects/d382ba093b0595c44a43dc3aad22fc0bed42baeb3488f00dfe3567056a7009c5.wai create mode 100644 wai/pack-conformance/packs/video-repack-01/package/objects/f525b4450c29153dde0b43e4d143dfb76fcc3884c607b744c8a53fa6a1728580.wai create mode 100644 wai/pack-conformance/packs/video-repack-01/package/objects/f7f7f4d6af777bfcce09cdda5ecb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai create mode 100644 wai/pack-conformance/packs/video-repack-01/package/package.receipt.json create mode 100644 wai/pack-conformance/packs/video-repack-01/package/plan-v.txt create mode 100644 wai/pack-conformance/packs/video-repack-01/package/policy.json create mode 100644 wai/pack-conformance/packs/video-repack-01/package/policy.toml create mode 100644 wai/pack-conformance/packs/video-repack-01/package/stages/legacy.json create mode 100644 wai/pack-conformance/packs/video-repack-01/package/stages/mobile.json create mode 100644 wai/pack-conformance/packs/video-repack-01/package/stages/tv.json create mode 100644 wai/pack-conformance/packs/video-repack-01/parent create mode 100644 wai/pack-conformance/packs/video-repack-01/policy.toml create mode 100644 wai/wai-pack/tests/repack.rs diff --git a/.github/workflows/wai-pack.yml b/.github/workflows/wai-pack.yml index 769989147..1c1022ca6 100644 --- a/.github/workflows/wai-pack.yml +++ b/.github/workflows/wai-pack.yml @@ -132,6 +132,7 @@ jobs: --test=packs 7 --test=review 9 --test=refusals 5 + --test=repack 3 --test=scenecut 3 --test=source_alloc 1 --test=staged 10 diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md index b6da01232..d48ffcd00 100644 --- a/wai/CHANGELOG.md +++ b/wai/CHANGELOG.md @@ -20,6 +20,16 @@ wire format may change and such changes are recorded here. variant per floor rung; with several, `dash/classic.mpd` carries each representation's codecs and size on the representation. The verifier holds the *k*-th floor entry of each piece to the *k*-th floor rung. +- **A re-pack from a parent** (§11.5). A packer may take every piece's base and + refinements from an earlier package instead of coding them (`wai-pack pack + --base-from `), so a title's integer base is coded once and taken by every + package made from the same source after it. It refuses a parent that does not verify + (`repack-parent-invalid`), one whose pieces, kinds, rungs, parameters or deadlines are + not this pack's (`repack-parent-mismatch`), and one whose prefixes do not reconstruct + this source with the SSE their entries state (`repack-source-mismatch`). Its receipt + names the parent with parent kind `re-pack`, and its other files are those of a pack + that codes. A verifier holding the parent checks the re-pack against it (`wai-pack + verify --parent`). - **The DASH renderer** (`wai::http_binding::dash`) writes a representation's own `@codecs`, `@width` and `@height` when given, and an adaptation set's `@codecs` only when every representation shares it. @@ -28,8 +38,10 @@ wire format may change and such changes are recorded here. made; a source that does not read the same twice is refused (`pack-source-changed`). - **Conformance.** `packs/video-ladder-01/` (two floors, one at half size, over `video-base-01`'s bases, which are the same objects), `ladder-mutations/`, - `tests/ladder.rs`, and the independent verifier `pack_verify.py`, which re-derives the - ladder golden from its sources. `supplied_floor.py` writes one stream per floor rung. + `packs/video-repack-01/` (the ladder re-packed from `video-base-01`), `tests/ladder.rs`, + `tests/repack.rs`, and the independent verifier `pack_verify.py`, which re-derives both + goldens from their sources and checks the re-pack against its parent. + `supplied_floor.py` writes one stream per floor rung. ### `wai.delivery.settlement`: delivery paid on what the party that received it signed - **The extension** ([settlement](extensions/settlement.md)) registers the record diff --git a/wai/extensions/packaging.md b/wai/extensions/packaging.md index 06e7c7c5b..2d54ec84f 100644 --- a/wai/extensions/packaging.md +++ b/wai/extensions/packaging.md @@ -6,7 +6,8 @@ > pieces (§4), the objects a packager writes, refinements and stills among them, and a > piece's ladder (§5), the stage index (§6), the floor (§7), what each class is offered > over HTTP and MoQ and how its delivery is simulated (§8), the package receipt and live -> windows (§9), and the package and its verification (§11). Reference impl: `wai-pack` — +> windows (§9), and the package, its verification and a re-pack from a parent (§11). +> Reference impl: `wai-pack` — > `policy`, `capcheck`, `source`, `scenecut`, `classify`, `plan`, `encode`, `png`, > `floor`, `cmaf`, `catalog`, `pack`, `live`, `delivery`, `verify`; in `wai-rs`, the > encoder `int_video_enc`, the refinement encoder `staged::wir1`, the stage index @@ -974,7 +975,8 @@ figure and class that do not cohere, or a legacy label (`receipt-energy`); a sig that does not verify (`receipt-signature`). **9.2** Live windows chain by the parent link with parent kind `live-window`. A re-pack -of an earlier package **MAY** name it with parent kind `re-pack`. +of an earlier package **MAY** name it with parent kind `re-pack`, and one that takes its +bases and refinements from it **MUST** (§11.5). The reference live packer (`wai-pack live`, `wai_pack::live`) takes a source a frame at a time, cuts it with the segmenter of §4.3, which decides a frame once `lookahead_frames` @@ -1076,7 +1078,10 @@ floor, signing key and packager identity, a conforming reference packager **MUST produce byte-identical package files on every machine, except the energy figure and measurement claim of a metered package and floor objects §7.5 covers. A verifier **MAY** pack again and compare listings. A packager whose identity differs is not held -to this. +to this. A re-pack from a parent (§11.5) is held to it with the parent among its inputs; +and where the parent was packed by a conforming packager from the same source under base +and refinement rungs of the same capabilities and parameters, its files are those of a +pack that codes every piece, but for its receipt's parent and so `LISTING`. **11.3** *Verification.* A verifier of a package, without its sources, applies these checks in this order and refuses at the first that fails; a check that reads files a @@ -1175,6 +1180,40 @@ writes a package only into a directory that is new or holds nothing, and refuses other before it packs (`pack-out-not-empty`): written among another package's files, it would leave behind the ones it does not write. +**11.5** *Re-pack from a parent.* A packager **MAY** take every piece's base and +refinements from an earlier package, its **parent**, instead of coding them, so a +component's integer base is coded once and taken by every package made from the same +source after it. It reads the source as for a pack that codes (§4: its pieces and their +kinds, §4.3, §4.6, are this source's), and then, before it writes anything, **MUST** +refuse: + +1. a parent that does not verify as §11.3 verifies a package (`repack-parent-invalid`, + with the reason the parent fails for); +2. a parent with no component of the component's id, media and timebase, or whose pieces + are not this source's, piece by piece: another number of pieces, or a piece of + another start, duration, flags or kind, or whose ladder (§5.7, under the parent's + policy) codes its base and refinements in rungs of other capabilities or other + parameters (§3.3) than this policy's ladder for the piece, in layer order, or with + another deadline (§8.6) (`repack-parent-mismatch`); +3. a piece whose prefixes, each the parent's base decoded and its refinements applied in + layer order by a staged-delivery §4 sink, do not reconstruct this source with the + `sse` the parent's entry states (§6.6) (`repack-source-mismatch`): a parent packed + from another source. + +It then writes, for each piece, the parent's base and refinement objects and their +entries' fields (§6.2: content hash, lengths, capability, role, layer, tier, prefix +digest, `sse`, deadline) in place of coding them, and the floors as it would; its +receipt names the parent's receipt with parent kind `re-pack` (§9.1). A verifier holding +the parent **MAY** check a re-pack against it: the parent verifies +(`repack-parent-invalid`), the re-pack's receipt names the parent's receipt with parent +kind `re-pack`, and each component's pieces are the parent's, piece by piece, of the same +start, duration, kind and flags, whose base and refinement entries are the parent's +entries, every field the same but the entry's place in its index: the entry it refines +counted from its piece's first entry, and the duplicate flag, which an index's own +entries decide (`repack-parent-mismatch`). A re-pack holds no source of its parent's +bases; what binds a reused base to this source is the third check, and what binds it to +the parent is the receipt. + ## 12. Reasons | Reason | Where | @@ -1194,3 +1233,4 @@ would leave behind the ones it does not write. | `unexpected-file`, `listing-missing`, `listing-mismatch`, `policy-digest-mismatch`, `policy-json-mismatch`, `policy-component-mismatch`, `index-missing`, `index-policy-mismatch`, `plan-mismatch`, `object-missing`, `object-manifest`, `prefix-digest`, `catalog-mismatch`, `catalog-unexpected`, `object-unlisted` | §11.3 | | `pack-id`, `pack-source-missing`, `pack-source-rate`, `pack-media-unsupported`, `pack-floor-encode-unsupported`, `pack-capability-unsupported` (naming the capability) | §11.1, §11.4 | | `pack-encode`, `pack-piece-length`, `pack-catalog`, `pack-meter`, `pack-measurement-claim`, `pack-listing`, `pack-source-changed`, `pack-out-not-empty` | §11.4 | +| `repack-parent-invalid`, `repack-parent-mismatch`, `repack-source-mismatch` | §11.5 | diff --git a/wai/pack-conformance/README.md b/wai/pack-conformance/README.md index 29c0d3817..d84e9d095 100644 --- a/wai/pack-conformance/README.md +++ b/wai/pack-conformance/README.md @@ -65,6 +65,12 @@ packages (§6–§11), and their delivery over a simulated link (§8.9). CMAF files under its floor name (`floor/hi/`, `floor/lo/`), its own floor playlist and MoQ track, and the classical master, every class's master and `dash/classic.mpd` list both. +- `packs/video-repack-01/` — a re-pack golden (§11.5): `video-ladder-01`'s policy under + another asset id and its supplied floor, packed with every piece's base taken from the + parent its file `parent` names, `video-base-01`, rather than coded. Its objects are + `video-ladder-01`'s; its receipt names `video-base-01`'s receipt as the package it + re-packs (parent kind `re-pack`); and each piece's base entry is the parent's, field for + field. Both verifiers check it against its parent. - `ladder-mutations/` — packages a verifier must refuse or accept (§11.3), each the ladder golden altered (re-sealed with its key where the receipt or `LISTING` alone would catch it), in `package-mutations/`'s layout: the golden itself (`ok`); piece 2's diff --git a/wai/pack-conformance/pack_verify.py b/wai/pack-conformance/pack_verify.py index 4b4006186..6b97e07d8 100644 --- a/wai/pack-conformance/pack_verify.py +++ b/wai/pack-conformance/pack_verify.py @@ -3034,6 +3034,14 @@ def verify_pack(rep, d, name, pkg=None, inputs=True): pk, sig = ed25519_from_seed(seed, r["payload"]) rep.check(pk.hex() == j["signer_pubkey"], f"{tag}: the receipt's signer is the package key") rep.check(sig.hex() == j["sig"], f"{tag}: the signature is the package key's over the payload (§11.2)") + # A re-pack golden names the golden it takes its bases from (§11.5); every other golden + # has no parent. + if inputs: + parent = os.path.join(root, "parent") + if os.path.exists(parent): + verify_repack(rep, d, tag, j, ixs, load(parent).decode().strip()) + else: + rep.check(j["parent_kind"] == "none", f"{tag}: the golden names no parent (§9.2)") named = {"LISTING", "policy.toml", "policy.json", "package.receipt.json"} | {c["index"] for c in j["components"]} for c, ix in zip(j["components"], ixs): @@ -3062,6 +3070,37 @@ def verify_pack(rep, d, name, pkg=None, inputs=True): rep.check(not other, f"{tag}: other files: {other} (unexpected-file)") +def repack_fields(ix, k): + """§11.5: piece k's base and refinement entries, every field but the entry's place in its + index: the entry it refines counted from its piece's first, its flags but the duplicate + flag.""" + pc = ix["pieces"][k] + out = [] + for e in ix["entries"][pc["first_entry"]:pc["first_entry"] + pc["n_entries"]]: + if e["role"] not in (BASE, REFINEMENT): + continue + out.append((e["hash"], e["byte_len"], e["cap"], e["role"], e["layer"], e["tier"], e["flags"] & ~ENTRY_DUP, + e["deadline"], e["prefix"], e["sse"], e["man_len"], e["payload_len"], + None if e["refines"] == NO_REFINES else e["refines"] - pc["first_entry"])) + return out + + +def verify_repack(rep, d, tag, j, ixs, parent): + """§11.5: a re-pack against its parent, the golden packs//: its receipt names the + parent's receipt as the package it re-packs, and each component's pieces are the + parent's, piece by piece, their base and refinement entries the parent's.""" + pdir = os.path.join(d, "packs", parent, "package") + pr = read_receipt(load(os.path.join(pdir, "package.receipt.json")))["json"] + rep.check(j["parent_kind"] == "re-pack" and j["parent_receipt_hash"] == pr["receipt_hash"], + f"{tag}: the receipt names packs/{parent}'s receipt as the package it re-packs (§11.5) (repack-parent-mismatch)") + for c, ix in zip(j["components"], ixs): + pix = parse_index(load(os.path.join(pdir, c["index"]))) + same = len(ix["pieces"]) == len(pix["pieces"]) and all( + (a["start"], a["duration"], a["kind"], a["flags"]) == (b["start"], b["duration"], b["kind"], b["flags"]) + and repack_fields(ix, k) == repack_fields(pix, k) for k, (a, b) in enumerate(zip(ix["pieces"], pix["pieces"]))) + rep.check(same, f"{tag} {c['id']}: every piece's base and refinements are packs/{parent}'s (§11.5) (repack-parent-mismatch)") + + class Capture(Report): """A report that keeps what fails, in order, and prints nothing.""" def __init__(self): diff --git a/wai/pack-conformance/packs/video-repack-01/floor/hi.obu b/wai/pack-conformance/packs/video-repack-01/floor/hi.obu new file mode 100644 index 0000000000000000000000000000000000000000..a75994f85ee7aae7ced1b3713dd2d8bf9514231f GIT binary patch literal 6575 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 LNB;T4GU@*TnaWI= literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/key.hex b/wai/pack-conformance/packs/video-repack-01/key.hex new file mode 100644 index 000000000..a96d52610 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/key.hex @@ -0,0 +1 @@ +8b961c20169b07e8cb3f95ffb999a577064ed11dafa170e74aee28902fc72b53 diff --git a/wai/pack-conformance/packs/video-repack-01/package/LISTING b/wai/pack-conformance/packs/video-repack-01/package/LISTING new file mode 100644 index 000000000..392e46d95 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/LISTING @@ -0,0 +1,46 @@ +c5203585fea0962de941d258789157a0590e18b62a2e5d1facbd11e1cfd1ddb9 dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6 floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b floor/hi/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s +58c598174eed554cd0d1bc8abedca8c9d51d992c8e3b963bcb7574da4983ed9f floor/hi/init.mp4 +589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s +6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s +acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74 floor/lo/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s +d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833 floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s +d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9 floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s +640cd81c83baefbe13e8ccc2bf577395c6602885cc73e201ca34dc267e7f0a48 floor/lo/init.mp4 +bfa98255d682517f58df4073bc71fdb3fcca120fc33d16e4aca873392476c586 hls/classic/floor-hi.m3u8 +ad81674ac359096ebed255a26a40e82858e53e9754702429e59d72898df33812 hls/classic/floor-lo.m3u8 +3fd88f9dcf835edf0fcca8dff8371d2b4e897ac097fc85901477c950c0da7996 hls/classic/master.m3u8 +3fd88f9dcf835edf0fcca8dff8371d2b4e897ac097fc85901477c950c0da7996 hls/legacy/master.m3u8 +09e75f55cb7ea829a4e630404d2ab540e8be0dbb1c4365dc30802359b658aed9 hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +09e75f55cb7ea829a4e630404d2ab540e8be0dbb1c4365dc30802359b658aed9 hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +4f7eb4c2a9e8b3d7dc271612457f50945ce6b2543ce7ba81c53b231f2c0182ad index-v.wsix +8fc573e6d71f2ed7d22bf048eea5cb3dba0a62cd441c24d9740fc1838b3812d1 moq/catalog.json +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +2f5bd830d841eb122c63ae57a15442075478fd522ce55b6f9bcbe41acd51d8ae objects/482fbbb9b39bdb9cbf00515f94269ea591df681ced90b05d97e0df106b49b08e.wai +0057633252a2c2ed5f71fe14ca78075c8e89fc6675a08335ac90f0e56032b825 objects/4ab8f747d181632f342a4887b0a8bb86c174409cb625157784e18c5e5559a381.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +1a6f30fdc000f258c948470386d84beef2ba5a84e922c355093837ae21fd573c objects/6ce13c9ef6872caeb7fbe71661ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai +b773dac63c9d2d9980d0d249ea956e03065c1ae40d17c512df29b690c0c820ef objects/b7bf0717e968d7b6be473785c9f66cbb814cde679bceb1ae37f0765308ddee72.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +cc8a6fc59be29bd33d96fb30ea9e5a30a5aa367a82da9c5784cbadce63396f62 objects/cf842ef3058d3c54d56c0ea3e075efdc77163602b4a1dabcff080e5ea28b9946.wai +01b596b672de3352adb3e01b34fcddfeff975f4ee1d0b88dde160ac10c9bf929 objects/d382ba093b0595c44a43dc3aad22fc0bed42baeb3488f00dfe3567056a7009c5.wai +9d9ae296558ce7f7d644ad0ca3af65eb4fc98d03b0bd6d7a8fc821fc952e86c1 objects/f525b4450c29153dde0b43e4d143dfb76fcc3884c607b744c8a53fa6a1728580.wai +3d573ee482f8187b0e3bc839aeea0f51a67144588d6d207e8466fea91a0c5b34 objects/f7f7f4d6af777bfcce09cdda5ecb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai +d7031e1c023b1329f38d3d3fe35a7f82801a0b0db0e777ae0738d6c9fc2cff18 package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +e82149a73c47b4616d2dfbb43d47b0f2e38f6044868ef27f171b5e310f10bd84 policy.json +f9944f8f431f512496fdba587d90cc9bad4801a98e28d95522123bc24cadb084 policy.toml +7ef94e8fe74a6e68543a965544cf440420020347b47e9c6f48d5e3b121bf627b stages/legacy.json +57d38e0987db1ca04fbb0dffb724b5237aa15e21247bc459c25f771070794fab stages/mobile.json +89ffbd0ef534b5c102a335a2de3ecdc9129180e975ba2af498f1c1c935bc862e stages/tv.json diff --git a/wai/pack-conformance/packs/video-repack-01/package/dash/classic.mpd b/wai/pack-conformance/packs/video-repack-01/package/dash/classic.mpd new file mode 100644 index 000000000..0bc509f7c --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/dash/classic.mpd @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/packs/video-repack-01/package/dash/mobile.mpd b/wai/pack-conformance/packs/video-repack-01/package/dash/mobile.mpd new file mode 100644 index 000000000..d3340daa2 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/dash/mobile.mpd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/packs/video-repack-01/package/dash/tv.mpd b/wai/pack-conformance/packs/video-repack-01/package/dash/tv.mpd new file mode 100644 index 000000000..f0817bb2c --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/dash/tv.mpd @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/packs/video-repack-01/package/floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s b/wai/pack-conformance/packs/video-repack-01/package/floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s new file mode 100644 index 0000000000000000000000000000000000000000..7e5a29203e5ad8907861e9d0bba3c074652aaabe GIT binary patch literal 981 zcmZQzU~I|F&rf4uU=YYn%SZvzAi%`Hz?f4~ln53t0f_@efPfK*MM~0AN`ZD>)ul4GzYNU-fRG!?;WVklSNXUqZ zp$V!GsKJ4u>kCkfnUTc-q8TFA02E_kV(UN>Yi}?TG-74pxS#;G1gx$VD8$CWE#ZO? zY61$e3-BgnG=rQ1Rs|B`VDMkji%?Z#q+-O$(EMQ|Se5GmpgS%J)G54YWIT4KVrj#d z%2VghNAk!6HF7bsR9r)7%mE5<10D7YVLV8P2k0()gsKdn5HHYO?g&*NAwE=hfrR)` z-IW3Kx4;9KyTGoW^T9~VNRW~F(*~gV0uBr!z*Ng{Wj&M1)4RscZ2gZ{3+?Z?FM9X> z1Gz+-I98y3Attt}D{!?e3=u#vVHS>4Kaj)%fMOyX+)_4ZVxj`PNhxSzVhsMPdeFqg SQQX7A5MU&1B!On{J_i6~LX$%P literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s b/wai/pack-conformance/packs/video-repack-01/package/floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s new file mode 100644 index 0000000000000000000000000000000000000000..3e21af5bfbf09877f851ca6abe777d4380b6af59 GIT binary patch literal 981 zcmZQzU~I|F&rf4uU=YYn%SZvzAi%=Fz?f4~ln53t0f{q##TkL5NJ&~s35Wp&?Lf5- zB}Juq3=HfbVM!pr2S|h1#t>~_wk9J)6NnTcf-Q`sh8VUQiRy_l6WN_QNaiDpQ^FR7 zn8_5Fo03?<#RUu*ru83Z#~W}MsfsWtJ1{Ub0ELVsY`6?w#U^-VKiU5G+e>L?^@sQ7 z%Ffa;+NNNnZp8QisEj!S7~ZZ8j1COvpWLszzD)k{YrQ(F8foJVl_z&I8Lka75;9_9 zXo4yPYH(oa`T`VVW@K@IXoiS20L56C*gBBJ+8c}njaXSYE+~L40jp~T3bAo;OSm9} znt(#=0=x+s%^;_MRe^*!82nfCB2?8FsTgrGG=JC#R^@sC=#EPQbqenp8IRqmSlaNV z^3?hBkv#H1ja-Z@71t0NbAUqJK!^Q87!MNS0lLc`p(+C?#0zwnJ35N03S2DSG@1F;!I7$KTKq!JPvSzH-OTo{Qhjl?EKTpovdSsdaj zIK<_M5Jy%ci9hQl0O;eg9t^&G831-aG8%wy#kV%$aZ0I58H;^ zl*AG)E?_ERTK{o&ya9*NR2Bh-*+4Eg1JhkSsZ(8N8l=i*ER)^%Ke~)_P5uS1Zn4&` zIcJNyKE0EFs%8Jm*Fd&OJ9XEL`faTNexYicUhLQ(Yn!p43}x zZr*LnxJ=OW=tqw|A66x`-zYCW60gMYl;?7Ko7Bv=aVPVOO?9doL)3Sjd%y2RAs>g7 zzhb5Na+7s4b0*p~)O==JU|Rhk*GoidLz`%;gv$3ES!wxgOQ!hSZ~mje`r*NfRmVSN zsPbvJ{16DLIlX7%^{>Y*t_2u>US+&3`jBhx+`TR9lCI?LI-DStcsN=2!s7)Gr4t`V zAKx%H%EGNMR%T*1m*-v6i{+1QALJ5{n6TaIU;0Cx2MfMEUYQ!&<5K$jg_QZX$BP~` z@4fohS=-_A<3PWRX{iUka&;-Q{+(MMJEh&VKCm|ShSrB&;%lxbbWOHqE@MpGDyeH` z>Hp?$*}^EZuKTa5RWA9@YO8zyGfZ33?b6?MhTh9;e%7SH8izH-NOsp}IN3NX9_% zAc|XWyE*GK9^_`c`|@2EP=gW^`_lx3J#9b@Dl9x-SAd1OL9ujCa{FZ&Lx~-mP3J= z!h?n9FOm@lwHO>sTc3sk6?<_A&P6gw0Vw2yYM+9Un1LUveVg9$CoXXS#zp|DRqJo{ z3YwXNf-MNuLIt3kL*O=bgR=6n*yK76>k}z%$EO3;hoRdkZV-WL=N8HRdy5l5p&W&3 zse+N5K@8kFa4O%_q`g8>b9UPDr*$8WMF6$L!R-d81W=G9CZL4s>4P7`X1&b^xjl(t Ln*9Vs_%#6l=bT(r literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s b/wai/pack-conformance/packs/video-repack-01/package/floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s new file mode 100644 index 0000000000000000000000000000000000000000..a246e72beae3b37d64c24c831a41f58e23f0cb74 GIT binary patch literal 2605 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 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/floor/hi/init.mp4 b/wai/pack-conformance/packs/video-repack-01/package/floor/hi/init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..0b3ade2588318c8374e2813c379f92328998bc05 GIT binary patch literal 628 zcmaJ(|3il#OZDrXHF*9Xt4iVyflo2Lr+O&i_bGHW)? zR{&~y95}iJXIX&p%jQpQGF?B~?~xj%c7FFx1BxQB@bmZMan=XA(#B}71zfv-;*cAH bzj}3s&}4iCt=&kQ??7UsT;x3O>uhg-8t^^c literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s b/wai/pack-conformance/packs/video-repack-01/package/floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s new file mode 100644 index 0000000000000000000000000000000000000000..78b5c886674e2dbd93fd45b08573c5214c082bb5 GIT binary patch literal 1127 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 J3Z`r-_#X%x5%B;3 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s b/wai/pack-conformance/packs/video-repack-01/package/floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s new file mode 100644 index 0000000000000000000000000000000000000000..6adf8fdfddb9f43c4eda7bcb3dc4a4a5518f1282 GIT binary patch literal 2526 zcmZ`(Yfuwc7+sbW!qWsWgd{+)fLH~07V4lzO>NbV4=Pp}WDp556kEb0#zzND*IGpy zsI(|*QL$<(T18Z#Qguv_Y6?D}7DXb8DB9YNf)4a)?YEnd{nDA{2l@E!`OZ1_+#C8YTu-NHMj$gr`edrK~Fxzy@0e)hSU zgG;lE=jKe>5-UxKo|4#7TKTtY`oxcVO0_3PXInJFU+)I&EFRa;lyc~o{3M2sq+Cr5 zLAbSnS0h0%M7^bewodQA-ewL?mQ>H45kE?P@skf}B_(hX4C5G*A>0mrplb6gj{o7O zOV?uB{!r3>lp868KFb7*3{g}|2T?+Sj|lZF@`3qBk3>CUXc^@x6z^5rgjvGi_KfI` z8!^YKO|+Eq7D=ehJXJ?Z%YE{}zDOYSRmx25{FJ<+aKPiqhHy1Kk`fVBi86kuxwvmm z8*ur#xZhpIPe`}59|#|;?4%`B04W?eVjtL`Bzle?DoH&KL=u6Ic#tQu{N~v{k5*7p zFl?|BZP-iP$+(r@o%?ZK&h?uWbRZ=I%Uk#%>y-n~4vW=vFr`3_A(mi4TIE)^HPj?Z zEnEUIggCpt#c0Ik9+gj{n_)D}%v*=iu=A76sq=D^u9+l%F?0YmigfQw=Os@^Bm_W0 z;R5f$YP(Gsl3PE|B=^s#>xUgg3dP&{ZAM4rk(Ad9o#S72*4!~2@G;K*EdIWS z!35>(FZiOOv-a!9E9FNGO4^^I9TvGu^nK7ST293wXKaM2dFNMo`PG_z8PK1AT!HQG zWtVgPyF7M7wDHc)6xWu$?(4oWVNn$5O!|+vx_mfzmBSh*emNv#V=C-pso(-|- zzgEV^Wg5Qj#>IjjpqQ?dsOIw-9jlNug+TiaV$Y>EzTMXv{)F{DlXUME*|UQ;;3XwC zHSbuT3@dL6yr0{6j0|jfWT}=EmNc1wYPL|k8&N$t5m#@3Sm!!~jSR$aOY!!L@^5xW z#qCiW;B6*2>s#)@jh&CgK_Vz#u=@QqY5*^AXmc^N48g5h=uqYS1Wjn~y1hKVh5>kz zL)n&E0z9o`hn@|dC63$7Kb|x>n6>i%#B=$ z12>xV;gmW02y;g4xe)RC&7hD$R7@-5lRo;^EJ!nxbh~P6a(L;`)5M9V>L}385_sRS zudq+z)5a4KBNnAuBM(GOg$I}|6ju$;L8w-Zbqpz~`q5a^UoZ|X*t}BAZ=OZ;(dU?rCb!_9kb$|A5g*lx= yi~F5!xUnfs`I14B4!hGkq_~7SzAZYO@~EmG7+3LP?C!#fdY7*730?O%TKz9K{6yUV literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s b/wai/pack-conformance/packs/video-repack-01/package/floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s new file mode 100644 index 0000000000000000000000000000000000000000..5c06ef47a465a0b1f6802d80907cf89f7a8c472a GIT binary patch literal 1695 zcmZQzV6w=~&rf4uU=YYn%SZvzAi&DNz@$)8ln53t0f{q##TkL5NJ&~s35Wp&3m6y} zzmyb}<}om^gM>AJdL4i?i2WR*4a}BcglGbhl1OY3B(@?FTO5gvtXBp}To?yi3P~K7 zIml{|%||v9Ssa;-tOgfb8p#dFYKSohIed`y;$kD4DTZV(G8;J@kj+6BM-G2vy~yT6 z*(~X~DTyUqT)^05Qh$_Nb3no92BQGOY#^7rfoWT(uGSs>wEWQUN1Ue1Dhy@k^6mfC zH7#0jFEeB8{qM2MSyO6 z49yA*4^;l`x@=%1ZotCGf-HVtJ87R~On{M)0UHxX155)$14E~Rk-Py13$Fk~tQ%xb z`4ZjY>{?lg*rScdJrB$?5;frB5M1DZu;reK@3MZNV<2b-t3W#JpyihgOP4@QCp0u1v5rJ#C%_O}6rgc#W$CL@HJj3f+1m^ePJK?q%5 z#U*NeWnlu)DPkc|POPYOI}^^AQfc20jl*NyNuAS7dJ3Lwf^p(c@2PGs=|Up|&O006TcZ;t=~ literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/floor/lo/init.mp4 b/wai/pack-conformance/packs/video-repack-01/package/floor/lo/init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..d419e7893b423b9190462bd07734f8d65d2f1cfc GIT binary patch literal 628 zcmaJ72wlj--P?G~v~>ZbEg8c>oz#gjkv{w=`HjkN|b0NVI}qD>5;-$JpC X@ML@i0XNF!FA&0NA34waI@sGks3|>p literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/hls/classic/floor-hi.m3u8 b/wai/pack-conformance/packs/video-repack-01/package/hls/classic/floor-hi.m3u8 new file mode 100644 index 000000000..d6ac7336d --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/hls/classic/floor-hi.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:3 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-MAP:URI="../../floor/hi/init.mp4" +#EXTINF:2.400, +../../floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +#EXTINF:1.000, +../../floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +#EXTINF:2.000, +../../floor/hi/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +#EXTINF:1.000, +../../floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +#EXTINF:1.600, +../../floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s +#EXT-X-ENDLIST diff --git a/wai/pack-conformance/packs/video-repack-01/package/hls/classic/floor-lo.m3u8 b/wai/pack-conformance/packs/video-repack-01/package/hls/classic/floor-lo.m3u8 new file mode 100644 index 000000000..628e70c2b --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/hls/classic/floor-lo.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:3 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-MAP:URI="../../floor/lo/init.mp4" +#EXTINF:2.400, +../../floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s +#EXTINF:1.000, +../../floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s +#EXTINF:2.000, +../../floor/lo/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s +#EXTINF:1.000, +../../floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s +#EXTINF:1.600, +../../floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s +#EXT-X-ENDLIST diff --git a/wai/pack-conformance/packs/video-repack-01/package/hls/classic/master.m3u8 b/wai/pack-conformance/packs/video-repack-01/package/hls/classic/master.m3u8 new file mode 100644 index 000000000..5fb4ccb7c --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/hls/classic/master.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=9055,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9016,AVERAGE-BANDWIDTH=8723,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/packs/video-repack-01/package/hls/legacy/master.m3u8 b/wai/pack-conformance/packs/video-repack-01/package/hls/legacy/master.m3u8 new file mode 100644 index 000000000..5fb4ccb7c --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/hls/legacy/master.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=9055,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9016,AVERAGE-BANDWIDTH=8723,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/packs/video-repack-01/package/hls/mobile/master.m3u8 b/wai/pack-conformance/packs/video-repack-01/package/hls/mobile/master.m3u8 new file mode 100644 index 000000000..5f049c978 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/hls/mobile/master.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.multivariant",VALUE="wai.m3u8" +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=9055,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9016,AVERAGE-BANDWIDTH=8723,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/packs/video-repack-01/package/hls/mobile/wai-v.m3u8 b/wai/pack-conformance/packs/video-repack-01/package/hls/mobile/wai-v.m3u8 new file mode 100644 index 000000000..949e945a2 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/hls/mobile/wai-v.m3u8 @@ -0,0 +1,20 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:3 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-GAP +#EXTINF:2.400, +../../objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai#n=39826 +#EXTINF:1.000, +../../objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai#n=9950 +#EXT-X-GAP +#EXTINF:2.000, +../../objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai#n=35882 +#EXTINF:1.000, +../../objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai#n=9950 +#EXT-X-GAP +#EXTINF:1.600, +../../objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai#n=25514 +#EXT-X-ENDLIST diff --git a/wai/pack-conformance/packs/video-repack-01/package/hls/mobile/wai.m3u8 b/wai/pack-conformance/packs/video-repack-01/package/hls/mobile/wai.m3u8 new file mode 100644 index 000000000..66fa8dc50 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/hls/mobile/wai.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.class",VALUE="mobile" +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.stages",URI="../../stages/mobile.json" +#EXT-X-STREAM-INF:BANDWIDTH=79600,AVERAGE-BANDWIDTH=79600,CODECS="wai1.video.int_motion",X-WAI-FLOOR="wai1.video.int_motion",RESOLUTION=64x36 +wai-v.m3u8 diff --git a/wai/pack-conformance/packs/video-repack-01/package/hls/tv/master.m3u8 b/wai/pack-conformance/packs/video-repack-01/package/hls/tv/master.m3u8 new file mode 100644 index 000000000..5f049c978 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/hls/tv/master.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.multivariant",VALUE="wai.m3u8" +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=9055,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9016,AVERAGE-BANDWIDTH=8723,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/packs/video-repack-01/package/hls/tv/wai-v.m3u8 b/wai/pack-conformance/packs/video-repack-01/package/hls/tv/wai-v.m3u8 new file mode 100644 index 000000000..8d1c2efe8 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/hls/tv/wai-v.m3u8 @@ -0,0 +1,17 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:3 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-INDEPENDENT-SEGMENTS +#EXTINF:2.400, +../../objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai#n=39826 +#EXTINF:1.000, +../../objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai#n=9950 +#EXTINF:2.000, +../../objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai#n=35882 +#EXTINF:1.000, +../../objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai#n=9950 +#EXTINF:1.600, +../../objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai#n=25514 +#EXT-X-ENDLIST diff --git a/wai/pack-conformance/packs/video-repack-01/package/hls/tv/wai.m3u8 b/wai/pack-conformance/packs/video-repack-01/package/hls/tv/wai.m3u8 new file mode 100644 index 000000000..47679d0e9 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/hls/tv/wai.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.class",VALUE="tv" +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.stages",URI="../../stages/tv.json" +#EXT-X-STREAM-INF:BANDWIDTH=143528,AVERAGE-BANDWIDTH=121122,CODECS="wai1.video.int_motion",X-WAI-FLOOR="wai1.video.int_motion",RESOLUTION=64x36 +wai-v.m3u8 diff --git a/wai/pack-conformance/packs/video-repack-01/package/index-v.wsix b/wai/pack-conformance/packs/video-repack-01/package/index-v.wsix new file mode 100644 index 0000000000000000000000000000000000000000..89d0ff7ae8b2fd2fa902b027934800cc5069c4a1 GIT binary patch literal 2368 zcmWF!_KaX;U|^60Vi3&=#QZ?a2E@!jta!VkdjZ4T7x%kDcnw-)3+g0(@6Fh{=isUA znf)IR1aJVAkOU&q|7bnpPERouFyC@lL@ZbIf#6P)#``LNH!T#~mpbbOF2ih~63k#% zAymP{LGA~+mzjYH0`K+REDvsSbQ( zJMWnj=hM{;=yK{kHHar+kq+_;a`^vup5|P7aBoog1firy!lqMG*2%J+hT+g(m9wO_Wd zsI}n|G@Oy`rzHG8!x9eE0XYwC=6!3|S-1W7bFsuz9ea)>pIhVpk@LjC(8t~zmwm2H z0cB_)pqBlupiG7Y4xN)^SB+wkvFQ5CcIE=Rb8^OuODySs-)PCb-rcgn`jb`% zTVG!N=N#wRTXCmLeV*;@J*&t3=8vQ4oV7D%i+8YI?y`?9!u?KBS`kH0#BWeW|b^>DM?bg_uKYWvf0^VW9} zU;|+3|3wmNpl#pJF8(s(`nG-U=B+2cWq$Vp94Os*7RC{N7PE6Yqt Z&DYD!D~Zp|FUic$<3$opEHeaI0|1aAH>v;t literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/moq/catalog.json b/wai/pack-conformance/packs/video-repack-01/package/moq/catalog.json new file mode 100644 index 000000000..406272968 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/moq/catalog.json @@ -0,0 +1 @@ +{"tracks":[{"altGroup":1,"isLive":false,"name":"v/l0","namespace":"video-repack-01","packaging":"wai","renderGroup":1,"role":"video","wai_capabilities":["wai.video.int_motion"],"wai_determinism":"decode-equivalence","wai_receipt_alias":4731536367675475,"wai_receipts":true,"wai_receipts_track":"v/l0/receipts","wai_staged":{"layer":0,"lead_ms":null,"set":"v"}},{"altGroup":1,"codec":"av01.0.00M.08","height":36,"name":"hi/floor","namespace":"video-repack-01","packaging":"cmaf","renderGroup":1,"width":64},{"altGroup":1,"codec":"av01.0.00M.08","height":18,"name":"lo/floor","namespace":"video-repack-01","packaging":"cmaf","renderGroup":1,"width":32},{"isLive":false,"name":"v/l0/receipts","namespace":"video-repack-01","packaging":"wai-receipts"}],"version":1} diff --git a/wai/pack-conformance/packs/video-repack-01/package/objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai b/wai/pack-conformance/packs/video-repack-01/package/objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai new file mode 100644 index 0000000000000000000000000000000000000000..b15b5310886cf0f3076b32c2b77264e58fd7b1d0 GIT binary patch literal 39826 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

YmH;T^6RA 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 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/objects/4ab8f747d181632f342a4887b0a8bb86c174409cb625157784e18c5e5559a381.wai b/wai/pack-conformance/packs/video-repack-01/package/objects/4ab8f747d181632f342a4887b0a8bb86c174409cb625157784e18c5e5559a381.wai new file mode 100644 index 0000000000000000000000000000000000000000..cf1710435b2925d643182d2b65e219d87159a714 GIT binary patch literal 2503 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 LNgU4&(V+hW7Cne_ literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/objects/6ce13c9ef6872caeb7fbe71661ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai b/wai/pack-conformance/packs/video-repack-01/package/objects/6ce13c9ef6872caeb7fbe71661ca88bcc463ceac47f109c8c155e34bb1a6f37d.wai new file mode 100644 index 0000000000000000000000000000000000000000..93381e7ad632b0c62b0c50b41f138aa51d44d249 GIT binary patch literal 1380 zcmZ{heQXnD9LJw_wJRGPUH9S`AmxS@an8Hv?s|7i39UL6`~#OvXJVv0ch7V5WNl~H zjp1l4!=jNfN9G@kQ4)g~#YAU;5aUZ~q6Ud38w_9Kkj9rpjll^CsL|-tyLk;J{_*5q zzMtRs_xt{y-smRotOI}%W+yV3PKN7XnRX^Yuz~2;kby~xejCXQNoMGeH0kd%G?XD_ zD1}L1EKMFAG}0tt>LZMX`jKk%8JS&_rj{M1MF$$WbBY8xLC`f?ggJx>7D6mi6-5>}3Fo<<2m zZK2rC#F#OqoNncWPK&krLW9Xo`IVgA73Ct`XrWR*bZ1fzC|BLdDaV{h+S5}PgE?>pG@^R4O4E9xAl zzdSPdlFNIddH&sR*YvNmD%Zj)hbv+?n*bNqpM3Ge=f!h{)mJ}&-D5XTHT310E!GcR zPWMw5O9zaACj+)}oy#*5Fh@3(eGyx6dum(mtSI9}TdDSWx5f9CW12PNxhAVmJ@kMr zuNk`FUZ3ZCXoH{jq2ood93=zSCYEF6>e3gOfJ|Q#V?sYv58E zabv~w6Xw{$(z?+?;pOMUlXqQgE7_ozCceAkcYb5nid9ob@}tMAKV109eYnMrS$FLM z_S?d;Yx6&Cugq8aH-Dsj0TVtuM7^Wx(sX4yZ&2I)?9`mQp)hylaqhmgR)_%fJKc}X zRj}F1SN3I(=YL%J!yBzvM|(~MEN&%iaCuJuw#d<)%x~I%>9z0v+8oYL=T=$Fa@gpp zZ4ECnjtH0;zvuN|A0Vfu?U|Zp5~Nf=IUytx`|5>ss4_Emdr7_a@Vwz#skNo-;GQ z@B2OO_szPcS;S}nhE?J&M!?NDp#^vCaFzR>{$686oh;%q4Ktn?3 zyGSSFD1vApl{oKUN+6;&fK>c>+^nZkaTji;3{_Qkf-o!v!?5}2WS|p|4w^I;D#Nfy zEF=Uy%1%r)Sb$vjV3q=Fz;8`^*{8WQ~{pitci=S%v_xafLlCfC>N&KboCGL4iQh!AR{e*1e!vc;v+Ky_=&RhIc*JaPlSfE8i{7JF18E9e-JI z)?B>4>#Gl%-zb>!+`HULPqwx9ldXO$qmN`g zy=`luhik)6VP9yAfBaGNnP#Z%+uo*C zS1&pw5%bJ6g^!C|3qZP*#>dtF&*Pz2x~Z0RBfZ}reS3DqnveEuztAVqERiC*yhEV$b7}~;;NA48zsSPbxgfj=k|tFFBAp;1ah#$r>7B|v7fHUX;Z}JrJeoo Me$}~43oG3J19W+`r2qf` literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai b/wai/pack-conformance/packs/video-repack-01/package/objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai new file mode 100644 index 0000000000000000000000000000000000000000..2ab2cbd490b9f5789d5eb043cffbb31dac0dda3c GIT binary patch literal 35882 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 bxgBY@5%KXhDVueAQ1qo2i}6y{*ZjOI^HwNn literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/objects/cf842ef3058d3c54d56c0ea3e075efdc77163602b4a1dabcff080e5ea28b9946.wai b/wai/pack-conformance/packs/video-repack-01/package/objects/cf842ef3058d3c54d56c0ea3e075efdc77163602b4a1dabcff080e5ea28b9946.wai new file mode 100644 index 0000000000000000000000000000000000000000..5b4b092ebb2bec1dc52fe1987b91ef15cd29ee73 GIT binary patch literal 2648 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 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/objects/f525b4450c29153dde0b43e4d143dfb76fcc3884c607b744c8a53fa6a1728580.wai b/wai/pack-conformance/packs/video-repack-01/package/objects/f525b4450c29153dde0b43e4d143dfb76fcc3884c607b744c8a53fa6a1728580.wai new file mode 100644 index 0000000000000000000000000000000000000000..f91d83f963f2032c6a6f7f40d71290e2af675b0d GIT binary patch literal 1234 zcmZ{h-ERz07{hL{HZy0wHx(<<2sdrq;DYU$IcMxdcekda)V9rr z2oe4PAD2WV(z@Y7f-9mo6&h|-D@uY3^$`(?#JjW1s8lj1Gw1x?=Xu}f%${vKg{L8e ziri6Rb16^)iUVliAq=wdrV}pGezTe=<=GnxOw03pJf}}B4XV3-7O4N1z+=8TO-pmoy-Bd}l0yqCN+uigp D%T*i5 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/objects/f7f7f4d6af777bfcce09cdda5ecb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai b/wai/pack-conformance/packs/video-repack-01/package/objects/f7f7f4d6af777bfcce09cdda5ecb754ce6bd8dcd2e03ecfc41359cad989b15f7.wai new file mode 100644 index 0000000000000000000000000000000000000000..ccf6489fc6a4df75c3b252aa792e7bce90cffe23 GIT binary patch literal 2351 zcmZ`(X;c$e7#$WN1+;(|6i~tl0ReMfCOcY1i-L*>xKxmWlUZ;oBr!w*(Karntik~o z+_2alT#tIRTB{z7#ky4Mg4&9rq7}6+)v8pjr^mjT!58__A9Hdh_ulWj_xs+wPezSX zUUb2*61S)}#_%LF&E(}+nK^Sg zE0ZtaB{)S|NF$fW*@__>mQ)BO6y!W5zAzT2%qE(%ab^=|%EjYK@Y$S+hP-Z+W~|&i zhR$KF=6oK_H`_QC!W2O(Npt)9`-1W;>rEX_~^ zsbm&57=YPz>bUA!4vk5Y-j0yT+tgvsvTnkLg(DAg+prKg<0SMNp zVO0dnD7AW$)aW%T6+vpW1~p0RXg#fC^hUkLz*0I|qa$?&B@6VF!N5%AECofhlB5}0tp%jfV9=|TI)c^Hlu<+KU>_PbFfd9&7^ID~ z<}z?0B{*v(^BGuH17h)6c$`unix=W?Dq`WnR8I^eFbwmDj|@Ho-~%^}J%f)w=H&%{ zTqAGiFL20+TQ0uXTKMXXx%PTKbyCHV1#M3jHF$^nCT@Ifo7Zr??uV-Vz2;k1r#)=H zm~|+s@NIEZOtaQuWdF58g@Xm&s(16z37i>ZDw#Sj$ zG1l7K!Gs&Inf=z(6~DQCP|=*zj$b%4={H?N+_ohidm0TfZwa=m>U2cwALYR{K~4Jro$grC$Jf0py?)u1r92cD0Q-e6X(C1EgKT+%le6bB_K~CH{NCbj_zl-NBN&qVP zSf_%&+cW>ljYVw|Bn@zt{I%UFrIBB$dvCukC(yF0qoU>?2h#P2aXxp#S*T?Y3{v9+ zP7SGdUvy`!*~cjj>6vCa+SMQwqtXtC+;4Zu=B)Z_fjI->q-!$lXvSej--Qw;S!F@J zaaYgIna4ifT%YtWd(-F>7`5T573}f6NZ>XOfRch^#Q6K-mOy12y-K zPuMp@r7F&@Cckm5_!)TvD55|-)|!>x_5Gnxu}&}`P)Iv}B+jipeLXPy!&ckMnP^CA zl+KPpLs#}Bk{!sc)|rjhhh~(v?n#i`d(t?4YXv|i^v+ED_Y$HgZ5=J&fF>Q+Gt94s zWp^^O4uHk&6>@)UN5*akTIq0S8h(_Q?;l9m6xi_5LOW_TqGzDX%Rajl(A(Z$%o_kk z)$*%yzzaagTR%+Wl#Z53ho^Q=9%cz&lxVn{+83Si1g!DQc>xxrbJ0N^>*{&k*SX)Q z-Mg-NKDc>eykqD?OG_@&C%OClE0!1ZsVLNViQjs$uy850r^Gm_%enFZ=NFxfoQYBy zCfpMtAmu$za5vXO>WA&xn5N$Dof;J+a-<*?*%S8H9(H&3S@TBaJnSg2^(j5+&#K{@R_;}q@MnsNnVW(UnX)UsJ#kL zES=IhE?4o@D|FXoA$tPl!rsOUM@nzaLf=6)a#qQ&w4>_6z( BnjioG literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-repack-01/package/package.receipt.json b/wai/pack-conformance/packs/video-repack-01/package/package.receipt.json new file mode 100644 index 000000000..695ca2459 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/package.receipt.json @@ -0,0 +1 @@ +{"asset_id":"video-repack-01","components":[{"id":"v","index":"index-v.wsix","index_digest":"df4e5e68edf28f11f0ba914f92f05d3d3dcdd4e5c2c808175e3aa45694a45592","media_class":"video","stage_root":"56ff2237e4654a894ebefb9d0588092806b71c58ee502aa43624bba633cd4bf2"}],"energy_provenance":null,"grant":{"capability":"wai.video.package","funds_ceiling":null,"grant_hash":"0000000000000000000000000000000000000000000000000000000000000000","joule_ceiling_micro":null},"joules_micro":0,"kind":"package","packager":"builtin:wai-pack@0.1.0","parent_kind":"re-pack","parent_receipt_hash":"22c6f558063499040127d58b062f08f9ec2a6cee54b51c97d42e8741d76ad728","policy_digest":"21db788ba0009de8df8a540d30841d707e18fbbd68b5bcc1ca6b998ff1c05008","receipt_hash":"82efcb204fb9f2be928a9217a2c39c55b8ccbc6345664c435bb44e22072bfed4","sig":"1d69fa0993386204d349f55f0a53499c2dcb7cde762f1d66e46ddd01e69d15e0f91b01404732e2cc4ab7f08be3ff86d5550070c7ca55477dec746e1c73268109","signer_id":"did:key:z6MkgBeQ3WGF1Gc5juV274JXu3VfVACXK93TwQY57g5jVYbx","signer_pubkey":"19b75ae888e816033d1436d72002d1a375ca87444efbb150d6cc2b32c8ef5f87","stored_bytes":127966,"total_bytes":140530,"total_entries":15,"unique_objects":12,"version":2,"work_units":15} \ No newline at end of file diff --git a/wai/pack-conformance/packs/video-repack-01/package/plan-v.txt b/wai/pack-conformance/packs/video-repack-01/package/plan-v.txt new file mode 100644 index 000000000..c7196c34c --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/plan-v.txt @@ -0,0 +1,5 @@ +0 +60 +85 +135 +160 diff --git a/wai/pack-conformance/packs/video-repack-01/package/policy.json b/wai/pack-conformance/packs/video-repack-01/package/policy.json new file mode 100644 index 000000000..98fbb8714 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/policy.json @@ -0,0 +1 @@ +{"asset_id":"video-repack-01","class":[{"floor_only":false,"id":"tv","max_layer":0},{"floor_only":false,"id":"mobile","max_kbps":100,"max_layer":0},{"floor_only":true,"id":"legacy","max_layer":0}],"classify":{"motion_high_milli":9000,"static_mad_milli":300,"static_permille":5,"synthetic_bins":12},"component":[{"id":"v","media":"video","source":"video-base-01.y4m","timebase":{"den":1,"num":25}}],"defaults":{"deadline_ms":1500},"floor":{"extra_keyframes":false,"supplied_listing":"d795df9202fb5f32fe168aa585332a5694ad7d8d7e8b859fc7d57a791f08c990"},"ladder":[{"capability":"wai.video.int_motion","component":"v","id":"b0","params":{"block":16,"max_sse_px_milli":30000,"mv_precision":1,"q_candidates":[16,12,8],"search":4},"role":"base"},{"capability":"wai.video.av1","component":"v","id":"hi","params":{"source":"supplied"},"role":"floor"},{"capability":"wai.video.av1","component":"v","id":"lo","params":{"source":"supplied"},"role":"floor"}],"lead":"v","live":{"layer_lag_ms":[0]},"moment":[],"royalty_free_only":true,"rule":[],"schema":"wai.pack.policy/1","segmentation":{"closed":true,"cut_abs_permille":300,"cut_rel_permille":3000,"cut_window":8,"lookahead_frames":6,"max_ms":4000,"min_ms":1000,"scene_cut":"wai.pack.scenecut/1","target_ms":2000}} \ No newline at end of file diff --git a/wai/pack-conformance/packs/video-repack-01/package/policy.toml b/wai/pack-conformance/packs/video-repack-01/package/policy.toml new file mode 100644 index 000000000..4492ee643 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/policy.toml @@ -0,0 +1,54 @@ +schema = "wai.pack.policy/1" +asset_id = "video-repack-01" +royalty_free_only = true +lead = "v" + +[[component]] +id = "v" +media = "video" +source = "video-base-01.y4m" + +[component.timebase] +num = 25 +den = 1 + +[segmentation] +target_ms = 2000 +min_ms = 1000 +max_ms = 4000 + +[[ladder]] +id = "b0" +component = "v" +capability = "wai.video.int_motion" +role = "base" +params = { block = 16, search = 4, mv_precision = 1, q_candidates = [16, 12, 8], max_sse_px_milli = 30000 } + +[[ladder]] +id = "hi" +component = "v" +capability = "wai.video.av1" +role = "floor" +params = { source = "supplied" } + +[[ladder]] +id = "lo" +component = "v" +capability = "wai.video.av1" +role = "floor" +params = { source = "supplied" } + +[floor] +supplied_listing = "d795df9202fb5f32fe168aa585332a5694ad7d8d7e8b859fc7d57a791f08c990" + +[[class]] +id = "tv" +max_layer = 0 + +[[class]] +id = "mobile" +max_kbps = 100 + +[[class]] +id = "legacy" +floor_only = true diff --git a/wai/pack-conformance/packs/video-repack-01/package/stages/legacy.json b/wai/pack-conformance/packs/video-repack-01/package/stages/legacy.json new file mode 100644 index 000000000..171fd7b89 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/stages/legacy.json @@ -0,0 +1 @@ +{"class":"legacy","components":{"v":{"pieces":[{"dur":60,"floor_only":true,"p":0,"stages":[],"start":0},{"dur":25,"floor_only":true,"p":1,"stages":[],"start":60},{"dur":50,"floor_only":true,"p":2,"stages":[],"start":85},{"dur":25,"floor_only":true,"p":3,"stages":[],"start":135},{"dur":40,"floor_only":true,"p":4,"stages":[],"start":160}]}},"policy_digest":"21db788ba0009de8df8a540d30841d707e18fbbd68b5bcc1ca6b998ff1c05008"} diff --git a/wai/pack-conformance/packs/video-repack-01/package/stages/mobile.json b/wai/pack-conformance/packs/video-repack-01/package/stages/mobile.json new file mode 100644 index 000000000..09649ed2c --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/stages/mobile.json @@ -0,0 +1 @@ +{"class":"mobile","components":{"v":{"media_playlist":"../hls/mobile/wai-v.m3u8","pieces":[{"dur":60,"floor_only":true,"p":0,"stages":[],"start":0},{"dur":25,"p":1,"stages":[{"bytes":9950,"h":"61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365","layer":0}],"start":60},{"dur":50,"floor_only":true,"p":2,"stages":[],"start":85},{"dur":25,"p":3,"stages":[{"bytes":9950,"h":"61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365","layer":0}],"start":135},{"dur":40,"floor_only":true,"p":4,"stages":[],"start":160}]}},"policy_digest":"21db788ba0009de8df8a540d30841d707e18fbbd68b5bcc1ca6b998ff1c05008"} diff --git a/wai/pack-conformance/packs/video-repack-01/package/stages/tv.json b/wai/pack-conformance/packs/video-repack-01/package/stages/tv.json new file mode 100644 index 000000000..30815e7af --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/package/stages/tv.json @@ -0,0 +1 @@ +{"class":"tv","components":{"v":{"media_playlist":"../hls/tv/wai-v.m3u8","pieces":[{"dur":60,"p":0,"stages":[{"bytes":39826,"h":"24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d","layer":0}],"start":0},{"dur":25,"p":1,"stages":[{"bytes":9950,"h":"61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365","layer":0}],"start":60},{"dur":50,"p":2,"stages":[{"bytes":35882,"h":"c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2","layer":0}],"start":85},{"dur":25,"p":3,"stages":[{"bytes":9950,"h":"61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365","layer":0}],"start":135},{"dur":40,"p":4,"stages":[{"bytes":25514,"h":"618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481","layer":0}],"start":160}]}},"policy_digest":"21db788ba0009de8df8a540d30841d707e18fbbd68b5bcc1ca6b998ff1c05008"} diff --git a/wai/pack-conformance/packs/video-repack-01/parent b/wai/pack-conformance/packs/video-repack-01/parent new file mode 100644 index 000000000..07b23b316 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/parent @@ -0,0 +1 @@ +video-base-01 diff --git a/wai/pack-conformance/packs/video-repack-01/policy.toml b/wai/pack-conformance/packs/video-repack-01/policy.toml new file mode 100644 index 000000000..4492ee643 --- /dev/null +++ b/wai/pack-conformance/packs/video-repack-01/policy.toml @@ -0,0 +1,54 @@ +schema = "wai.pack.policy/1" +asset_id = "video-repack-01" +royalty_free_only = true +lead = "v" + +[[component]] +id = "v" +media = "video" +source = "video-base-01.y4m" + +[component.timebase] +num = 25 +den = 1 + +[segmentation] +target_ms = 2000 +min_ms = 1000 +max_ms = 4000 + +[[ladder]] +id = "b0" +component = "v" +capability = "wai.video.int_motion" +role = "base" +params = { block = 16, search = 4, mv_precision = 1, q_candidates = [16, 12, 8], max_sse_px_milli = 30000 } + +[[ladder]] +id = "hi" +component = "v" +capability = "wai.video.av1" +role = "floor" +params = { source = "supplied" } + +[[ladder]] +id = "lo" +component = "v" +capability = "wai.video.av1" +role = "floor" +params = { source = "supplied" } + +[floor] +supplied_listing = "d795df9202fb5f32fe168aa585332a5694ad7d8d7e8b859fc7d57a791f08c990" + +[[class]] +id = "tv" +max_layer = 0 + +[[class]] +id = "mobile" +max_kbps = 100 + +[[class]] +id = "legacy" +floor_only = true diff --git a/wai/wai-pack/src/bin/wai_pack.rs b/wai/wai-pack/src/bin/wai_pack.rs index a0db30b7e..57520332b 100644 --- a/wai/wai-pack/src/bin/wai_pack.rs +++ b/wai/wai-pack/src/bin/wai_pack.rs @@ -11,6 +11,7 @@ //! supplied floor //! wai-pack pack --policy --out

--key [--source =]... //! [--floor ] [--signer-id ] [--royalty-free-only] [--meter none|model:] +//! [--base-from ] //! pack the policy's components into : objects, stage indexes, the floor's CMAF //! files, catalogs, the receipt (and, metered, its measurement claim) and LISTING; //! is new or empty (`pack-out-not-empty` otherwise, before any work), and a @@ -18,7 +19,10 @@ //! component's `source`, and the floor to `floor/`, beside the policy; the signer id //! defaults to the key's did:key. A meter that gives no figure (a pack too short to //! reach a microjoule at , or a figure past 2^64 - 1) refuses the pack -//! (`pack-meter`); it never writes an unmetered package in its place +//! (`pack-meter`); it never writes an unmetered package in its place. With +//! --base-from, a re-pack (packaging §11.5): every piece's base and refinements are +//! taken from that package, verified and matched to this one piece by piece, instead +//! of coded, and the receipt names it as the package it re-packs //! wai-pack live --policy --out --key [--signer-id ] [--window ] //! pack a Y4M stream read from standard input as it arrives (packaging §9.2): each //! piece coded as the segmenter closes it, and its objects written to /objects/ @@ -35,8 +39,9 @@ //! the objects it lists, removes the objects only unsealed pieces published, writes //! no plan file or LISTING, and exits 1 saying what it kept. No floor: a supplied //! floor is the on-demand package's (§7.3). is new or empty -//! wai-pack verify -//! verify a package (packaging §9): every reason, or its counts and pack digest +//! wai-pack verify [--parent ] +//! verify a package (packaging §9): every reason, or its counts and pack digest; with +//! --parent, a re-pack against the parent its receipt names (packaging §11.5) //! wai-pack listing [--primary] //! the listing (SPEC §3.1) of every file of but LISTING; with --primary, of the //! plan files and the objects the directory's stage indexes (index-*.wsix, and @@ -86,9 +91,9 @@ fn usage() -> ExitCode { eprintln!( "usage:\n wai-pack policy [--royalty-free-only]\n \ wai-pack plan --policy --component [--source ] [--out ]\n \ - wai-pack pack --policy --out --key [--source =]... [--floor ] [--signer-id ] [--royalty-free-only] [--meter none|model:]\n \ + wai-pack pack --policy --out --key [--source =]... [--floor ] [--signer-id ] [--royalty-free-only] [--meter none|model:] [--base-from ]\n \ wai-pack live --policy --out --key [--signer-id ] [--window ]\n \ - wai-pack verify \n \ + wai-pack verify [--parent ]\n \ wai-pack listing [--primary]\n \ wai-pack sim --policy --class --rate --startup [--source ] [--rtt ] [--chunk ] [--enc ] [--cap ] [--fifo]\n \ wai-pack stage-json\n \ @@ -189,6 +194,7 @@ fn cmd_pack(args: &[String]) -> Result<(), String> { let signer_id = opt(args, "--signer-id").map(str::to_string).unwrap_or_else(|| wai::signer_id::did_key(&key.verifying_key().to_bytes())); let mut o = wai_pack::pack::PackOpts::new(key, signer_id, floor); o.overrides = Overrides { royalty_free_only: args.iter().any(|a| a == "--royalty-free-only") }; + o.base_from = opt(args, "--base-from").map(|d| wai_pack::files::FileSet::Dir(d.into())); match opt(args, "--meter").unwrap_or("none") { "none" => {} m => { @@ -210,7 +216,14 @@ fn cmd_pack(args: &[String]) -> Result<(), String> { fn cmd_verify(args: &[String]) -> Result<(), String> { let dir = args.first().ok_or("verify: a package directory")?; - match wai_pack::verify::verify_dir(Path::new(dir)) { + let verdict = match opt(args, "--parent") { + None => wai_pack::verify::verify_dir(Path::new(dir)), + Some(parent) => { + let read = |d: &str| wai_pack::verify::read_strict(Path::new(d)).map_err(|e| vec![wai_pack::verify::Reason { code: "unexpected-file".into(), detail: e }]); + read(dir).and_then(|f| read(parent).and_then(|p| wai_pack::verify::verify_repack(&f, &p))) + } + }; + match verdict { Ok(r) => { println!("ok {dir}"); println!("receipt {}", hex(&r.receipt_hash)); diff --git a/wai/wai-pack/src/golden.rs b/wai/wai-pack/src/golden.rs index 71f2980c8..8eb6adb7d 100644 --- a/wai/wai-pack/src/golden.rs +++ b/wai/wai-pack/src/golden.rs @@ -31,7 +31,7 @@ use wai::stage_index::{self as wsix, ClassRec, EntryRec, Header, MediaClass, Pie use wai::wai_video_manifest::EnergyProvenance; /// The golden packs. -pub const PACKS: &[&str] = &["video-base-01", "video-staged-01", "video-ladder-01"]; +pub const PACKS: &[&str] = &["video-base-01", "video-staged-01", "video-ladder-01", "video-repack-01"]; type Files = BTreeMap>; @@ -66,9 +66,22 @@ pub fn pack_golden(dir: &Path, name: &str) -> std::io::Result std::io::Result> { + match std::fs::read_to_string(dir.join("packs").join(name).join("parent")) { + Ok(t) => Ok(Some(t.trim().to_string())), + Err(e) if e.kind() == std::io::ErrorKind::NotFound => Ok(None), + Err(e) => Err(e), + } +} + // ─────────────────────────────── mutations ─────────────────────────────── fn env(cap: &str, refines: Option<(&[u8; 32], &[u8; 32], u8)>, derived: bool, payload: &[u8]) -> Vec { @@ -1735,7 +1748,11 @@ pub fn check(dir: &Path) -> std::io::Result> { Ok(p) => same_tree(&format!("packs/{name}/package"), &p.files, &held, &mut out), Err(e) => out.push(format!("packs/{name}: {e}")), } - if let Err(v) = crate::verify::verify_files(&held) { + let verdict = match parent_of(dir, name)? { + None => crate::verify::verify_files(&held), + Some(parent) => crate::verify::verify_repack(&held, &read_tree(&dir.join("packs").join(parent).join("package"))?), + }; + if let Err(v) = verdict { for r in v { out.push(format!("packs/{name}/package: {r}")); } diff --git a/wai/wai-pack/src/pack.rs b/wai/wai-pack/src/pack.rs index c45d484c8..45ddb938a 100644 --- a/wai/wai-pack/src/pack.rs +++ b/wai/wai-pack/src/pack.rs @@ -106,6 +106,9 @@ pub struct PackOpts { /// How many pieces are coded at once, each alone (§4.1: a piece references nothing /// outside itself), so the package is the same for any value; at least 1. pub jobs: usize, + /// An earlier package whose bases and refinements this pack takes instead of coding + /// them (§11.5): a re-pack, whose receipt names it (parent kind `re-pack`). + pub base_from: Option, } impl PackOpts { @@ -127,6 +130,7 @@ impl PackOpts { issued_at: String::new(), grant: GrantRef::unbounded("wai.video.package"), jobs: 1, + base_from: None, } } } @@ -562,6 +566,161 @@ pub fn window_index(policy: &Policy, comp: &crate::policy::Component, pieces: &[ Ok(Window { index, objects }) } +/// One piece of a parent package (§11.5): where it lies and what it is, the rungs its +/// ladder codes its base and refinements in (capability and parameters), and those +/// entries, each with its object. +struct ParentPiece { + start: u64, + duration: u64, + flags: u8, + kind: u8, + rungs: Vec<(String, serde_json::Map)>, + deadline_ms: u64, + entries: Vec<(EntryRec, Vec)>, +} + +/// A parent package, verified, as a re-pack reads it (§11.5). +struct ParentPack { + receipt_hash: [u8; 32], + pieces: Vec, +} + +/// The rungs a piece's ladder codes its base and refinements in: each one's capability +/// and parameters, in layer order. +fn coded_rungs(l: &crate::plan::PieceLadder<'_>) -> Vec<(String, serde_json::Map)> { + std::iter::once(l.base).chain(l.refinements.iter().copied()).map(|r| (r.capability.clone(), r.params.clone())).collect() +} + +/// Read and verify a parent package (§11.5): it verifies as §11.3 verifies a package +/// (`repack-parent-invalid`, with its reason), and its component `comp` is this one's, of +/// one media and timebase (`repack-parent-mismatch`). +fn load_parent(set: &FileSet, comp: &crate::policy::Component) -> Result { + let invalid = |why: String| PackError::new("repack-parent-invalid", why); + let files: BTreeMap> = match set { + FileSet::Memory(m) => m.clone(), + FileSet::Dir(d) => crate::verify::read_strict(d).map_err(invalid)?, + }; + crate::verify::verify_files(&files).map_err(|v| invalid(v.iter().map(|r| r.to_string()).collect::>().join("; ")))?; + let text = std::str::from_utf8(&files["package.receipt.json"]).map_err(|_| invalid("a receipt that is not UTF-8".into()))?; + let r = PackageReceiptV2::from_json(text).map_err(|e| invalid(e.to_string()))?; + let mismatch = |why: String| PackError::new("repack-parent-mismatch", why); + let pp = Policy::parse_bytes(&files["policy.toml"]).map_err(|e| invalid(e.to_string()))?; + let pc = pp.component(&comp.id).ok_or_else(|| mismatch(format!("the parent has no component {}", comp.id)))?; + if pc.media != comp.media || pc.timebase != comp.timebase { + return Err(mismatch(format!("the parent's component {} is of another media or timebase", comp.id))); + } + let ix = StageIndex::parse(&files[&wai::package::index_file(&comp.id)]).map_err(|e| invalid(e.detail))?; + let mut pieces = Vec::with_capacity(ix.pieces.len()); + for (p, rec) in ix.pieces.iter().enumerate() { + let kind = PieceKind::from_code(rec.kind).ok_or_else(|| mismatch(format!("parent piece {p}: a kind a video piece does not have")))?; + let plan = plan_piece(&pp, pc.timebase, rec.start, rec.duration as u64, kind); + let ladder = crate::plan::piece_ladder(&pp, &comp.id, &plan).ok_or_else(|| mismatch(format!("parent piece {p}: no base rung")))?; + let mut entries = Vec::new(); + for e in ix.piece_entries(p).iter().filter(|e| matches!(e.role, Role::Base | Role::Refinement)) { + let b = files.get(&objects::object_path(&e.content_hash)).ok_or_else(|| invalid(format!("parent piece {p}: an object it does not hold")))?; + let mut e = e.clone(); + // The entry it refines, counted from its piece's first entry. + if e.refines != wsix::NO_REFINES { + e.refines -= rec.first_entry; + } + e.capability = 0; + entries.push((e, b.clone())); + } + pieces.push(ParentPiece { + start: rec.start, + duration: rec.duration as u64, + flags: rec.flags, + kind: rec.kind, + rungs: coded_rungs(&ladder), + deadline_ms: plan.deadline_ms, + entries, + }); + } + Ok(ParentPack { receipt_hash: r.receipt_hash(), pieces }) +} + +/// A re-pack's checks of its pieces against its parent's, before anything is written +/// (§11.5): one piece per piece, at the same start, of the same duration, flags and kind, +/// whose ladder codes its base and refinements in rungs of the same capabilities and +/// parameters, with the same deadline (`repack-parent-mismatch`). +fn match_parent(parent: &ParentPack, policy: &Policy, comp: &crate::policy::Component, pieces: &[crate::scenecut::Piece]) -> Result<(), PackError> { + let mismatch = |why: String| PackError::new("repack-parent-mismatch", why); + if parent.pieces.len() != pieces.len() { + return Err(mismatch(format!("the parent has {} pieces, the source {}", parent.pieces.len(), pieces.len()))); + } + for (p, (pc, piece)) in parent.pieces.iter().zip(pieces).enumerate() { + let kind = classify::classify(&piece.stats, &policy.classify); + if (pc.start, pc.duration, pc.flags, pc.kind) != (piece.start, piece.len, piece.flags, kind as u8) { + return Err(mismatch(format!("piece {p}: not the parent's piece (its start, duration, flags or kind)"))); + } + let plan = plan_piece(policy, comp.timebase, piece.start, piece.len, kind); + let ladder = crate::plan::piece_ladder(policy, &comp.id, &plan).ok_or_else(|| mismatch(format!("piece {p}: no base rung")))?; + if coded_rungs(&ladder) != pc.rungs || (!ladder.refinements.is_empty() && plan.deadline_ms != pc.deadline_ms) { + return Err(mismatch(format!("piece {p}: its base and refinements are coded in other rungs, parameters or deadline than the parent's"))); + } + } + Ok(()) +} + +/// A piece taken from its parent (§11.5): the parent's base and refinement objects and +/// entries, each prefix reconstructed by the reference sink and held to this source by the +/// SSE its entry states (`repack-source-mismatch`). +fn reuse_piece(pc: &ParentPiece, piece: &crate::scenecut::Piece, policy: &Policy, comp: &crate::policy::Component, src: &[Vec]) -> Result { + let kind = classify::classify(&piece.stats, &policy.classify); + let plan = plan_piece(policy, comp.timebase, piece.start, piece.len, kind); + let ladder = crate::plan::piece_ladder(policy, &comp.id, &plan).ok_or_else(|| PackError::new("policy-no-base", format!("component {}", comp.id)))?; + let wrong = |k: usize| PackError::new("repack-source-mismatch", format!("piece at {}: the parent's entry {k} does not reconstruct this source with the SSE it states", piece.start)); + let caps: Vec<&str> = std::iter::once(ladder.base.capability.as_str()).chain(ladder.refinements.iter().map(|r| r.capability.as_str())).collect(); + let (base, base_env) = &pc.entries[0]; + let recon: Vec> = if caps[0] == CAP_PNG { + let w = wai::container::Wai::from_bytes(base_env).map_err(|e| PackError::new("repack-parent-invalid", e.to_string()))?; + let (_, _, rgb) = crate::png::decode(&w.payload).map_err(|e| PackError::new("repack-parent-invalid", e))?; + vec![rgb; src.len()] + } else { + let w = wai::container::Wai::from_bytes(base_env).map_err(|e| PackError::new("repack-parent-invalid", e.to_string()))?; + match wai::int_payload::decode_int(caps[0], &w.payload, &wai::int_payload::IntParams::none()) { + Ok(wai::int_payload::IntDecoded::Video { frames, .. }) => frames, + _ => return Err(PackError::new("repack-parent-invalid", "a parent base that does not decode to frames")), + } + }; + if recon.len() != src.len() || crate::encode::sse(&recon, src) != base.sse { + return Err(wrong(0)); + } + let stage = |e: &EntryRec, env: &[u8], cap: &str| Stage { + lens: Lens { byte_len: e.byte_len, manifest_len: e.manifest_len, payload_len: e.payload_len }, + envelope: env.to_vec(), + hash: e.content_hash, + capability: cap.to_string(), + role: e.role, + layer: e.layer, + prefix_tier: e.prefix_tier, + prefix_digest: e.prefix_digest, + sse: e.sse, + deadline_ms: e.deadline_ms, + flags: 0, + }; + let mut stages = vec![stage(base, base_env, caps[0])]; + if pc.entries.len() > 1 { + let (info, units) = wai::staged::decode_base(base_env, &BTreeMap::new(), None, None).map_err(|e| PackError::new("repack-parent-invalid", e.to_string()))?; + let mut chain = wai::staged::StageChain::new(info, units, sink_config()); + for (k, (e, env)) in pc.entries.iter().enumerate().skip(1) { + let applied = chain.offer(env, 0, wai::staged::ReceiptEvidence::None).map_err(|e| PackError::new("repack-parent-invalid", e.to_string()))?; + if applied.iter().any(|r| r.envelope.is_some()) { + return Err(PackError::new("repack-parent-invalid", format!("piece at {}: a parent layer that does not apply", piece.start))); + } + let frames: Vec> = chain.units().iter().filter_map(|u| match &u.buf.samples { + wai::staged::Samples::U8(v) => Some(v.clone()), + wai::staged::Samples::I16(_) => None, + }).collect(); + if frames.len() != src.len() || crate::encode::sse(&frames, src) != e.sse { + return Err(wrong(k)); + } + stages.push(stage(e, env, caps[k])); + } + } + Ok(CodedPiece { piece: piece.clone(), kind, plan, stages }) +} + /// Pack `policy_bytes` over `sources` (each component's source bytes, by id), into /// memory: [`pack_into`] with a [`MemSink`]. pub fn pack(policy_bytes: &[u8], sources: &BTreeMap>, opts: &mut PackOpts) -> Result { @@ -695,6 +854,16 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt fins.push(FloorIn { rung, name: name.clone(), check, sha256 }); } + // A re-pack's parent, verified and matched piece by piece (§11.5), before anything is + // written. + let parent = match &opts.base_from { + None => None, + Some(set) => { + let pp = load_parent(set, comp)?; + match_parent(&pp, &policy, comp, &pieces)?; + Some(pp) + } + }; if let Some(m) = opts.meter.as_mut() { m.start(); } @@ -726,13 +895,17 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt } srcs.push(fr); } + let one = |p: usize, fr: &[Vec]| match &parent { + None => coder.code(&pieces[p], fr), + Some(pp) => reuse_piece(&pp.pieces[p], &pieces[p], &policy, comp, fr), + }; let results: Vec> = if batch.len() == 1 { - vec![coder.code(&pieces[batch[0]], &srcs[0])] + vec![one(batch[0], &srcs[0])] } else { std::thread::scope(|s| { let hs: Vec<_> = batch.iter().zip(&srcs).map(|(&p, fr)| { - let (coder, piece) = (&coder, &pieces[p]); - s.spawn(move || coder.code(piece, fr)) + let one = &one; + s.spawn(move || one(p, fr)) }).collect(); hs.into_iter().map(|h| h.join().unwrap_or_else(|_| Err(PackError::new("pack-encode", "a coding thread panicked")))).collect() }) @@ -834,7 +1007,7 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt &packager_id(), energy, opts.grant.clone(), - Parent::None, + parent.as_ref().map_or(Parent::None, |pp| Parent::RePack(pp.receipt_hash)), ) .map_err(|r| PackError::new(r.code, r.detail))?; let put = |sink: &mut dyn Sink, p: &str, b: &[u8]| sink.put(p, b).map_err(|e| io_err(p, e)); diff --git a/wai/wai-pack/src/verify.rs b/wai/wai-pack/src/verify.rs index a72ce8511..b018afef2 100644 --- a/wai/wai-pack/src/verify.rs +++ b/wai/wai-pack/src/verify.rs @@ -252,6 +252,52 @@ pub fn verify_files(files: &BTreeMap>) -> Result>, parent: &BTreeMap>) -> Result> { + let rep = verify_files(files)?; + let one = |r: Reason| vec![r]; + verify_files(parent).map_err(|v| one(reason("repack-parent-invalid", v.iter().map(|r| r.to_string()).collect::>().join("; "))))?; + let receipt = |f: &BTreeMap>| PackageReceiptV2::from_json(std::str::from_utf8(&f["package.receipt.json"]).unwrap_or_default()).ok(); + let (Some(r), Some(pr)) = (receipt(files), receipt(parent)) else { return Err(one(reason("receipt-json", "a receipt that does not read"))) }; + let mismatch = |why: String| one(reason("repack-parent-mismatch", why)); + if r.parent != wai::package::Parent::RePack(pr.receipt_hash()) { + return Err(mismatch("the receipt does not name this parent as the package it re-packs".into())); + } + for c in &r.components { + let ix = StageIndex::parse(&files[&c.index_file()]).map_err(|e| one(reason(e.code, e.detail)))?; + let pix = parent.get(&c.index_file()).and_then(|b| StageIndex::parse(b).ok()).ok_or_else(|| mismatch(format!("the parent has no component {}", c.id)))?; + if ix.pieces.len() != pix.pieces.len() { + return Err(mismatch(format!("component {}: {} pieces, the parent's {}", c.id, ix.pieces.len(), pix.pieces.len()))); + } + // An entry's fields, with the entry it refines counted from its piece's first and + // its capability by name. + let fields = |x: &StageIndex, p: usize| -> Vec<(wsix::EntryRec, String)> { + let first = x.pieces[p].first_entry; + x.piece_entries(p).iter().filter(|e| matches!(e.role, Role::Base | Role::Refinement)).map(|e| { + let mut e = e.clone(); + if e.refines != wsix::NO_REFINES { + e.refines -= first; + } + let cap = x.capability(&e).to_string(); + e.capability = 0; + e.flags &= !wsix::ENTRY_DUP; + (e, cap) + }).collect() + }; + for p in 0..ix.pieces.len() { + let (a, b) = (&ix.pieces[p], &pix.pieces[p]); + if (a.start, a.duration, a.kind, a.flags) != (b.start, b.duration, b.kind, b.flags) || fields(&ix, p) != fields(&pix, p) { + return Err(mismatch(format!("component {} piece {p}: its base and refinements are not the parent's", c.id))); + } + } + } + Ok(rep) +} + /// The index against its component's policy (§11.3 step 6): `None` when it holds. pub fn index_against_policy(policy: &Policy, comp: &Component, ix: &StageIndex) -> Option { let bad = |why: String| Some(reason("index-policy-mismatch", format!("component {}: {why}", comp.id))); diff --git a/wai/wai-pack/tests/repack.rs b/wai/wai-pack/tests/repack.rs new file mode 100644 index 000000000..36fa919ac --- /dev/null +++ b/wai/wai-pack/tests/repack.rs @@ -0,0 +1,135 @@ +//! A re-pack from a parent (packaging §11.5): a pack that takes every piece's base and +//! refinements from an earlier package instead of coding them. The golden +//! `video-repack-01` takes `video-base-01`'s bases under two floors; its files are those of +//! a pack that codes, but for its receipt's parent and `LISTING`; a parent that does not +//! verify, is not this source's, or is coded in other rungs is refused by name; and a +//! verifier holding the parent checks the re-pack against it. + +use std::collections::BTreeMap; +use std::path::{Path, PathBuf}; +use wai_pack::files::FileSet; + +type Files = BTreeMap>; + +fn corpus() -> PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")).join("../pack-conformance") +} + +fn held(p: &Path) -> Files { + wai::pin::read_dir_set(p).unwrap() +} + +fn package(name: &str) -> Files { + held(&corpus().join("packs").join(name).join("package")) +} + +fn policy() -> String { + String::from_utf8(std::fs::read(corpus().join("packs/video-repack-01/policy.toml")).unwrap()).unwrap() +} + +/// Pack `policy` over `source` with the re-pack golden's floor and key, taking the bases +/// from `parent` when given. +fn pack(policy: &str, source: Vec, parent: Option) -> Result { + let d = corpus().join("packs/video-repack-01"); + let key = ed25519_dalek::SigningKey::from_bytes(&wai_pack::unhex(std::fs::read_to_string(d.join("key.hex")).unwrap().trim()).unwrap().try_into().unwrap()); + let id = wai::signer_id::did_key(&key.verifying_key().to_bytes()); + let mut o = wai_pack::pack::PackOpts::new(key, id, held(&d.join("floor"))); + o.base_from = parent.map(FileSet::Memory); + let mut src = BTreeMap::new(); + src.insert("v".to_string(), source); + wai_pack::pack::pack(policy.as_bytes(), &src, &mut o) +} + +fn fixture() -> Vec { + wai_pack::fixture::generate("video-base-01").unwrap() +} + +fn code(r: Result) -> String { + r.map(|_| "ok".to_string()).unwrap_or_else(|e| e.code) +} + +fn receipt(f: &Files) -> wai::package::PackageReceiptV2 { + wai::package::PackageReceiptV2::from_json(std::str::from_utf8(&f["package.receipt.json"]).unwrap()).unwrap() +} + +/// The re-pack takes the parent's objects: its files are a coding pack's of the same +/// policy, but for the receipt, which names the parent, and `LISTING`; and it verifies +/// against its parent, and against no other package. +#[test] +fn a_repack_is_a_coding_pack_with_its_parent_named() { + let parent = package("video-base-01"); + let re = pack(&policy(), fixture(), Some(parent.clone())).unwrap(); + assert_eq!(re.files, package("video-repack-01"), "the golden"); + let coded = pack(&policy(), fixture(), None).unwrap(); + let differ: Vec<&String> = re.files.keys().filter(|k| coded.files.get(*k) != Some(&re.files[*k])).collect(); + assert_eq!(differ, vec!["LISTING", "package.receipt.json"]); + assert_eq!(re.files.keys().collect::>(), coded.files.keys().collect::>()); + assert_eq!(re.receipt.parent, wai::package::Parent::RePack(receipt(&parent).receipt_hash())); + assert_eq!(coded.receipt.parent, wai::package::Parent::None); + wai_pack::verify::verify_repack(&re.files, &parent).unwrap(); + let codes = |r: Result>| r.err().unwrap_or_default().into_iter().map(|x| x.code).collect::>(); + assert_eq!(codes(wai_pack::verify::verify_repack(&re.files, &package("video-ladder-01"))), vec!["repack-parent-mismatch"], "a parent it does not name"); + assert_eq!(codes(wai_pack::verify::verify_repack(&coded.files, &parent)), vec!["repack-parent-mismatch"], "a pack that names no parent"); +} + +/// §11.5's refusals, each before anything is written: a parent that does not verify, one +/// whose pieces are another source's, one coded under other base parameters, and a source +/// one sample from the parent's. +#[test] +fn a_parent_that_is_not_this_source_s_is_refused() { + let parent = package("video-base-01"); + // An object of the parent altered, its LISTING written again: it does not verify. + let mut corrupt = parent.clone(); + let obj = corrupt.keys().find(|k| k.starts_with("objects/")).unwrap().clone(); + let b = corrupt.get_mut(&obj).unwrap(); + let last = b.len() - 1; + b[last] ^= 1; + corrupt.remove("LISTING"); + let view: BTreeMap = corrupt.iter().map(|(k, v)| (k.clone(), v.as_slice())).collect(); + let l = wai::pin::listing_from(&view).unwrap(); + corrupt.insert("LISTING".into(), l); + assert_eq!(code(pack(&policy(), fixture(), Some(corrupt))), "repack-parent-invalid"); + // Another fixture's package: other pieces. + assert_eq!(code(pack(&policy(), fixture(), Some(package("video-staged-01")))), "repack-parent-mismatch"); + // This policy's base under other parameters than the parent's. + let other = policy().replace("q_candidates = [16, 12, 8]", "q_candidates = [16, 12]"); + assert_ne!(other, policy()); + assert_eq!(code(pack(&other, fixture(), Some(parent.clone()))), "repack-parent-mismatch"); + // One luma sample of frame 30 changed: the same pieces and kinds, another source. + let mut src = fixture(); + let head = src.iter().position(|&c| c == b'\n').unwrap() + 1; + let frame = 64 * 36 + 2 * 32 * 18; + let at = head + 30 * (6 + frame) + 6 + 64 * 10 + 20; + src[at] = src[at].wrapping_add(40); + assert_eq!(code(pack(&policy(), src, Some(parent))), "repack-source-mismatch"); +} + +/// The command line: `pack --base-from` writes the re-pack, and `verify --parent` checks it +/// against the parent it names. +#[test] +fn the_command_line_repacks_and_verifies_against_the_parent() { + let dir = std::env::temp_dir().join(format!("wai-pack-repack-{}", std::process::id())); + let _ = std::fs::remove_dir_all(&dir); + std::fs::create_dir_all(&dir).unwrap(); + let g = corpus().join("packs/video-repack-01"); + std::fs::write(dir.join("v.y4m"), fixture()).unwrap(); + let bin = env!("CARGO_BIN_EXE_wai-pack"); + let out = std::process::Command::new(bin) + .args(["pack", "--policy"]).arg(g.join("policy.toml")) + .arg("--out").arg(dir.join("out")) + .arg("--key").arg(g.join("key.hex")) + .arg("--source").arg(format!("v={}", dir.join("v.y4m").display())) + .arg("--floor").arg(g.join("floor")) + .arg("--base-from").arg(corpus().join("packs/video-base-01/package")) + .output() + .unwrap(); + assert!(out.status.success(), "{}", String::from_utf8_lossy(&out.stderr)); + assert_eq!(held(&dir.join("out")), package("video-repack-01")); + let verify = |parent: &str| { + std::process::Command::new(bin).arg("verify").arg(dir.join("out")).arg("--parent").arg(corpus().join("packs").join(parent).join("package")).output().unwrap() + }; + assert!(verify("video-base-01").status.success()); + let wrong = verify("video-ladder-01"); + assert!(!wrong.status.success() && String::from_utf8_lossy(&wrong.stderr).contains("repack-parent-mismatch")); + let _ = std::fs::remove_dir_all(&dir); +} -- 2.54.0 (Apple Git-157) From cd23bf8db5c6eace09c20409a3483abdce582575 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 20:28:21 -0400 Subject: [PATCH 03/50] =?UTF-8?q?packaging:=20a=20floor=20that=20is=20the?= =?UTF-8?q?=20ladder's=20own=20CMAF=20segments=20(=C2=A77.7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With floor.supplied_form = "cmaf" (absent, the OBU form; existing policy digests are unchanged), a supplied floor is an existing ladder's init.mp4 and media segments, one per piece. The packer reads them box by box (wai-pack cmaf_read): the floor's temporal units are the samples, each with a temporal delimiter before it, held to §7.3 as a stream is. The package's floor files are the ladder's files byte for byte under their SHA-256, not rewritten, and the package carries the supplied floor's listing (floor.listing), whose SHA-256 the policy pins: the receipt binds every byte of the ladder, and a segment of the same samples that is not the supplied one is refused. New refusals: floor-cmaf-malformed, floor-cmaf-timing, floor-cmaf-pieces. wai-pack pack --link-supplied writes the floor's files as hard links to the supplied ones. - pack-conformance: packs/video-cmaf-01 (video-ladder-01's streams muxed by ffmpeg's HLS muxer, -c copy, by supplied_cmaf.py) and cmaf-mutations; pack_verify.py reads the CMAF form with a box reader of its own, field reads bounded by their boxes as wai-pack's are. - tests/cmaf.rs, cmaf_read's unit tests, CI's test-count floor and the media probe of the CMAF golden's floors. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-pack.yml | 3 +- wai/CHANGELOG.md | 20 +- wai/extensions/packaging.md | 80 +++- wai/pack-conformance/README.md | 10 + .../cmaf-mutations/expected.json | 30 ++ .../floor-listing-altered/LISTING | 47 ++ .../floor-listing-altered/floor.listing | 12 + .../floor-listing-missing/LISTING | 46 ++ .../segment-not-the-supplied-one/LISTING | 46 ++ .../dash/classic.mpd | 24 + ...b93d0fcd58511bb34550b2f4d7b29431df9ad9.m4s | Bin 0 -> 2225 bytes .../hls/classic/master.m3u8 | 5 + .../hls/legacy/master.m3u8 | 5 + .../hls/mobile/master.m3u8 | 6 + .../hls/tv/master.m3u8 | 6 + .../moq/catalog.json | 1 + wai/pack-conformance/pack_verify.py | 383 +++++++++++++++- .../packs/video-cmaf-01/floor/hi/init.mp4 | Bin 0 -> 788 bytes .../packs/video-cmaf-01/floor/hi/seg_0000.m4s | Bin 0 -> 2217 bytes .../packs/video-cmaf-01/floor/hi/seg_0001.m4s | Bin 0 -> 873 bytes .../packs/video-cmaf-01/floor/hi/seg_0002.m4s | Bin 0 -> 2092 bytes .../packs/video-cmaf-01/floor/hi/seg_0003.m4s | Bin 0 -> 873 bytes .../packs/video-cmaf-01/floor/hi/seg_0004.m4s | Bin 0 -> 1860 bytes .../packs/video-cmaf-01/floor/lo/init.mp4 | Bin 0 -> 788 bytes .../packs/video-cmaf-01/floor/lo/seg_0000.m4s | Bin 0 -> 2138 bytes .../packs/video-cmaf-01/floor/lo/seg_0001.m4s | Bin 0 -> 1019 bytes .../packs/video-cmaf-01/floor/lo/seg_0002.m4s | Bin 0 -> 1940 bytes .../packs/video-cmaf-01/floor/lo/seg_0003.m4s | Bin 0 -> 1019 bytes .../packs/video-cmaf-01/floor/lo/seg_0004.m4s | Bin 0 -> 1467 bytes .../packs/video-cmaf-01/key.hex | 1 + .../packs/video-cmaf-01/package/LISTING | 47 ++ .../video-cmaf-01/package/dash/classic.mpd | 41 ++ .../video-cmaf-01/package/dash/mobile.mpd | 21 + .../packs/video-cmaf-01/package/dash/tv.mpd | 27 ++ .../packs/video-cmaf-01/package/floor.listing | 12 + ...bf6669ce8edec06fd7cd0961a01d2aaf720889.m4s | Bin 0 -> 2217 bytes ...9c039141d261dd65212035e96bb157783423c1.m4s | Bin 0 -> 1860 bytes ...d0f6263b9e06ee0af1e8269ce4f20d5cb3653d.m4s | Bin 0 -> 2092 bytes ...84fadf8c165c5e16e864629b194dc46290387e.m4s | Bin 0 -> 873 bytes ...2abbabad528b294b15a1d7bf9b635761c584f8.m4s | Bin 0 -> 873 bytes .../video-cmaf-01/package/floor/hi/init.mp4 | Bin 0 -> 788 bytes ...df17537e5c31accca37390c391a7c1d27353af.m4s | Bin 0 -> 2138 bytes ...f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s | Bin 0 -> 1940 bytes ...dec11761813f995d11dc9779c5f9b039d59b73.m4s | Bin 0 -> 1467 bytes ...fc023f911b4e9e94b65770393c4df6d705b5e8.m4s | Bin 0 -> 1019 bytes ...e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s | Bin 0 -> 1019 bytes .../video-cmaf-01/package/floor/lo/init.mp4 | Bin 0 -> 788 bytes .../package/hls/classic/floor-hi.m3u8 | 18 + .../package/hls/classic/floor-lo.m3u8 | 18 + .../package/hls/classic/master.m3u8 | 7 + .../package/hls/legacy/master.m3u8 | 7 + .../package/hls/mobile/master.m3u8 | 8 + .../package/hls/mobile/wai-v.m3u8 | 20 + .../video-cmaf-01/package/hls/mobile/wai.m3u8 | 7 + .../video-cmaf-01/package/hls/tv/master.m3u8 | 8 + .../video-cmaf-01/package/hls/tv/wai-v.m3u8 | 17 + .../video-cmaf-01/package/hls/tv/wai.m3u8 | 7 + .../packs/video-cmaf-01/package/index-v.wsix | Bin 0 -> 2368 bytes .../video-cmaf-01/package/moq/catalog.json | 1 + ...95df64b7e216f3a0c9ba82006133bb9b6d7f16.wai | Bin 0 -> 2648 bytes ...371966b50573602a200dd7bb04e0d90889326d.wai | Bin 0 -> 39826 bytes ...eaf207cfa63f490212b69389fba4d72f62c60f.wai | Bin 0 -> 2569 bytes ...19c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai | Bin 0 -> 25514 bytes ...a0240598b914dbf2cabe545aa001e8de12d365.wai | Bin 0 -> 9950 bytes ...973edd35e5266cf850fe2f38f77536ac803912.wai | Bin 0 -> 2251 bytes ...56e9dca50c327423fcfd2a98f4c342d1dbfaf9.wai | Bin 0 -> 1380 bytes ...d007436368e8d20467fdec2a1eebbb84b03bf2.wai | Bin 0 -> 35882 bytes ...0c01f2570ba4be1c0af26105e092dfccf90d30.wai | Bin 0 -> 2503 bytes ...b9b53cfbd4b3f058730e62512ca9f0f6ef2ea3.wai | Bin 0 -> 2351 bytes ...aba164078a1bd4780e21d72cbf2234928272ec.wai | Bin 0 -> 1234 bytes ...cc14fd00abbf601c61286a612089b4a53a195a.wai | Bin 0 -> 1858 bytes .../package/package.receipt.json | 1 + .../packs/video-cmaf-01/package/plan-v.txt | 5 + .../packs/video-cmaf-01/package/policy.json | 1 + .../packs/video-cmaf-01/package/policy.toml | 55 +++ .../video-cmaf-01/package/stages/legacy.json | 1 + .../video-cmaf-01/package/stages/mobile.json | 1 + .../video-cmaf-01/package/stages/tv.json | 1 + .../packs/video-cmaf-01/policy.toml | 55 +++ wai/pack-conformance/supplied_cmaf.py | 64 +++ wai/wai-pack/src/bin/wai_pack.rs | 9 +- wai/wai-pack/src/cmaf_read.rs | 416 ++++++++++++++++++ wai/wai-pack/src/floor.rs | 201 +++++++-- wai/wai-pack/src/golden.rs | 58 ++- wai/wai-pack/src/lib.rs | 1 + wai/wai-pack/src/pack.rs | 146 ++++-- wai/wai-pack/src/policy.rs | 29 +- wai/wai-pack/src/verify.rs | 89 +++- wai/wai-pack/tests/cmaf.rs | 174 ++++++++ 89 files changed, 2180 insertions(+), 118 deletions(-) create mode 100644 wai/pack-conformance/cmaf-mutations/expected.json create mode 100644 wai/pack-conformance/cmaf-mutations/floor-listing-altered/LISTING create mode 100644 wai/pack-conformance/cmaf-mutations/floor-listing-altered/floor.listing create mode 100644 wai/pack-conformance/cmaf-mutations/floor-listing-missing/LISTING create mode 100644 wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/LISTING create mode 100644 wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/dash/classic.mpd create mode 100644 wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/floor/hi/103573aca98afc526a45518dc6b93d0fcd58511bb34550b2f4d7b29431df9ad9.m4s create mode 100644 wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/classic/master.m3u8 create mode 100644 wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/legacy/master.m3u8 create mode 100644 wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/mobile/master.m3u8 create mode 100644 wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/tv/master.m3u8 create mode 100644 wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/moq/catalog.json create mode 100644 wai/pack-conformance/packs/video-cmaf-01/floor/hi/init.mp4 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/floor/hi/seg_0000.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/floor/hi/seg_0001.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/floor/hi/seg_0002.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/floor/hi/seg_0003.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/floor/hi/seg_0004.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/floor/lo/init.mp4 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0000.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0001.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0002.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0003.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0004.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/key.hex create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/LISTING create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/dash/classic.mpd create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/dash/mobile.mpd create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/dash/tv.mpd create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor.listing create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor/hi/14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor/hi/759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor/hi/d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor/hi/e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor/hi/eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor/hi/init.mp4 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/init.mp4 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/hls/classic/floor-hi.m3u8 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/hls/classic/floor-lo.m3u8 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/hls/classic/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/hls/legacy/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/hls/mobile/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/hls/mobile/wai-v.m3u8 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/hls/mobile/wai.m3u8 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/hls/tv/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/hls/tv/wai-v.m3u8 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/hls/tv/wai.m3u8 create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/index-v.wsix create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/moq/catalog.json create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/objects/08797901ff55d0bb4afba5cffe95df64b7e216f3a0c9ba82006133bb9b6d7f16.wai create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/objects/399048a078b0f2983149266a44eaf207cfa63f490212b69389fba4d72f62c60f.wai create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/objects/a236e9070d10fd09342cafdbf6973edd35e5266cf850fe2f38f77536ac803912.wai create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/objects/a3ae43406f9966487b6c5f5a4d56e9dca50c327423fcfd2a98f4c342d1dbfaf9.wai create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/objects/c5253efe2949669bb9df01d9f60c01f2570ba4be1c0af26105e092dfccf90d30.wai create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/objects/c81171fa53998cfe94207ad66ab9b53cfbd4b3f058730e62512ca9f0f6ef2ea3.wai create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/objects/dea0f6415f639fca99d91a0341aba164078a1bd4780e21d72cbf2234928272ec.wai create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/objects/f467872fe8d3cd1f60f832c997cc14fd00abbf601c61286a612089b4a53a195a.wai create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/package.receipt.json create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/plan-v.txt create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/policy.json create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/policy.toml create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/stages/legacy.json create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/stages/mobile.json create mode 100644 wai/pack-conformance/packs/video-cmaf-01/package/stages/tv.json create mode 100644 wai/pack-conformance/packs/video-cmaf-01/policy.toml create mode 100644 wai/pack-conformance/supplied_cmaf.py create mode 100644 wai/wai-pack/src/cmaf_read.rs create mode 100644 wai/wai-pack/tests/cmaf.rs diff --git a/.github/workflows/wai-pack.yml b/.github/workflows/wai-pack.yml index 1c1022ca6..8591776aa 100644 --- a/.github/workflows/wai-pack.yml +++ b/.github/workflows/wai-pack.yml @@ -127,6 +127,7 @@ jobs: [ "$n" -ge "$floor" ] || { echo "::error::$target lists $n tests, under its floor of $floor"; fail=1; } done <<'EOF' --lib 34 + --test=cmaf 4 --test=conformance 1 --test=ladder 3 --test=packs 7 @@ -243,7 +244,7 @@ jobs: working-directory: wai/pack-conformance/packs run: | set -euo pipefail - for g in video-base-01 video-staged-01 video-ladder-01; do + for g in video-base-01 video-staged-01 video-ladder-01 video-cmaf-01; do ( cd "$g/package" for pl in hls/classic/floor-*.m3u8; do f=$(basename "$pl" .m3u8); f=${f#floor-} diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md index d48ffcd00..aaa550aa8 100644 --- a/wai/CHANGELOG.md +++ b/wai/CHANGELOG.md @@ -30,6 +30,16 @@ wire format may change and such changes are recorded here. names the parent with parent kind `re-pack`, and its other files are those of a pack that codes. A verifier holding the parent checks the re-pack against it (`wai-pack verify --parent`). +- **A floor that is the ladder's own CMAF segments** (§7.7). With + `floor.supplied_form = "cmaf"` (absent, the OBU form; existing policy digests are + unchanged), a supplied floor is an existing ladder's `init.mp4` and media segments, one + segment per piece, read box by box: the floor's temporal units are the samples, each + with a temporal delimiter before it. The package's floor files are the ladder's files, + byte for byte, named by their SHA-256, and the package carries the supplied floor's + listing (`floor.listing`), whose SHA-256 the policy pins, so the receipt binds every + byte of the ladder. A server can hold those files once for the classic site and the + package. New refusals: `floor-cmaf-malformed`, `floor-cmaf-timing`, `floor-cmaf-pieces`. + `wai-pack pack --link-supplied` writes them as hard links to the supplied files. - **The DASH renderer** (`wai::http_binding::dash`) writes a representation's own `@codecs`, `@width` and `@height` when given, and an adaptation set's `@codecs` only when every representation shares it. @@ -38,10 +48,12 @@ wire format may change and such changes are recorded here. made; a source that does not read the same twice is refused (`pack-source-changed`). - **Conformance.** `packs/video-ladder-01/` (two floors, one at half size, over `video-base-01`'s bases, which are the same objects), `ladder-mutations/`, - `packs/video-repack-01/` (the ladder re-packed from `video-base-01`), `tests/ladder.rs`, - `tests/repack.rs`, and the independent verifier `pack_verify.py`, which re-derives both - goldens from their sources and checks the re-pack against its parent. - `supplied_floor.py` writes one stream per floor rung. + `packs/video-repack-01/` (the ladder re-packed from `video-base-01`), + `packs/video-cmaf-01/` and `cmaf-mutations/` (the ladder's streams as a muxer's fMP4 + segments), `tests/ladder.rs`, `tests/repack.rs`, `tests/cmaf.rs`, and the independent + verifier `pack_verify.py`, with a box reader of its own, which re-derives every golden + from its sources and checks the re-pack against its parent. `supplied_floor.py` writes + one stream per floor rung; `supplied_cmaf.py` the CMAF form. ### `wai.delivery.settlement`: delivery paid on what the party that received it signed - **The extension** ([settlement](extensions/settlement.md)) registers the record diff --git a/wai/extensions/packaging.md b/wai/extensions/packaging.md index 2d54ec84f..b9ef8898f 100644 --- a/wai/extensions/packaging.md +++ b/wai/extensions/packaging.md @@ -4,12 +4,14 @@ > this extension fixes what a verifier recomputes. This revision defines the policy, > its digest and what it may ask a packager to emit (§3), how a source is cut into > pieces (§4), the objects a packager writes, refinements and stills among them, and a -> piece's ladder (§5), the stage index (§6), the floor (§7), what each class is offered +> piece's ladder (§5), the stage index (§6), the floor, one or several, supplied as OBU +> streams or as an existing ladder's CMAF files (§7), what each class is offered > over HTTP and MoQ and how its delivery is simulated (§8), the package receipt and live > windows (§9), and the package, its verification and a re-pack from a parent (§11). > Reference impl: `wai-pack` — > `policy`, `capcheck`, `source`, `scenecut`, `classify`, `plan`, `encode`, `png`, -> `floor`, `cmaf`, `catalog`, `pack`, `live`, `delivery`, `verify`; in `wai-rs`, the +> `floor`, `cmaf`, `cmaf_read`, `catalog`, `files`, `pack`, `live`, `delivery`, `verify`; +> in `wai-rs`, the > encoder `int_video_enc`, the refinement encoder `staged::wir1`, the stage index > `stage_index`, the receipt `package` and the delivery simulator `stage_measure::sim`; > the corpus [`pack-conformance/`](../pack-conformance/). Keywords **MUST**, **MUST NOT**, @@ -103,6 +105,7 @@ absent table reads as empty. | `ladder.params` | table | empty | by capability, below | | `floor.supplied_listing` | string | absent | 64 lowercase hexadecimal digits | | `floor.extra_keyframes` | boolean | `false` | | +| `floor.supplied_form` | string | absent | `cmaf` (§7.7); absent, the OBU form (§7.3) | | `live.layer_lag_ms` | array of integers | one 0 per layer | §3.4 | | `class` | array of tables | empty | | | `class.id` | string | required | 1 to 255 bytes | @@ -704,6 +707,67 @@ with the AV1 binding's sample entry; every integer is big-endian and every time The codecs string of the floor is the AV1 binding's short form, `av01...`. +**7.7** *A supplied CMAF floor.* With `floor.supplied_form = "cmaf"`, a supplied floor is +an existing ladder's CMAF files rather than OBU streams: per floor rung of floor name *f* +(§7.1), a directory `/` holding `init.mp4` and the floor's media segments, which are +every other file of `/`, each named `*.m4s` and in no directory below it, in byte order +of their names, at least one. The floor's temporal units are the segments' samples, in +order, each a temporal unit without its temporal delimiter: a unit is the two bytes +`0x12 0x00` (a temporal delimiter OBU with its size field and no extension) followed by the +sample. Boxes are ISO/IEC 14496-12's; a box's 32-bit size is at least 8, a size of 1 is the +64-bit size that follows its type (at least 16), and a size of 0 is refused; a box's +children tile its body: + +- `init.mp4`: its top-level boxes tile the file; one `moov`, holding one `trak` and one + `mvex`; the `trak`'s `tkhd` names the track, its `mdia`'s `mdhd` gives the timescale + *T*, its `hdlr` is of handler type `vide`, and its `stsd` holds one sample entry, of type + `av01`; an `edts`, where the `trak` has one, holds an `elst` of one entry, at media + time 0 and rate 1; and the `mvex` holds one `trex`, of the track, whose defaults a + sample takes. +- a media segment: its top-level boxes tile the file: boxes of the types `styp`, `sidx`, + `prft`, `emsg`, `free` and `skip`, then one or more `moof`, each followed by an `mdat`, + and nothing else. A `moof` holds an `mfhd` and one `traf`, and nothing else; the `traf` + holds one `tfhd` of the track, one `tfdt` and one or more `trun`, and nothing else; the + `tfhd`'s flags are among `0x2`, `0x8`, `0x10`, `0x20` and `0x20000` (no base data + offset, no empty duration); each `trun`'s are among `0x1`, `0x4`, `0x100`, `0x200`, + `0x400` and `0x800`, `0x1` (its data offset) among them. A sample's duration, size and + flags are its `trun`'s (the first sample's flags its first-sample flags where the `trun` + gives them), else the `tfhd`'s defaults, else the `trex`'s; its bytes start at the + `moof`'s first byte plus its `trun`'s data offset, a run's samples one after another, + and lie in the `mdat` after the `moof`. + +A packager **MUST** refuse, before it writes anything, after the directory's listing +(§7.3), floor rung by floor rung in ladder order and segment by segment in order: + +1. a floor rung with no `/init.mp4` (`floor-stream-missing`); another file of `/` + that is not a media segment, or no media segment (`floor-cmaf-malformed`); +2. an `init.mp4` that is not the above (`floor-cmaf-malformed`), or whose timescale is 0 + or whose edit list is another (`floor-cmaf-timing`); +3. a media segment that is not the above, or that holds a sample of no bytes + (`floor-cmaf-malformed`), or a sample with a composition offset other than 0 or a + `moof` whose decode time is not where the one before it ended (`floor-cmaf-timing`), + each where it is read; then one whose first sample is not a sync sample + (`sample_is_non_sync_sample` set) (`floor-cmaf-malformed`); then a sample that does + not last one frame (`duration · num = T · den`), or a segment whose first decode time + is not the frame where the segment before it ended, the first at frame 0 + (`dts · num = frame · T · den`) (`floor-cmaf-timing`); then its units, as §7.3 reads a + stream's (`floor-av1-malformed`, a unit's own faults held to the end); +4. then, as §7.3: a unit count other than the source's frames (`floor-frame-count`), and + the faults held back (`floor-av1-malformed`); +5. other than one media segment per piece of the plan, each holding exactly its piece's + frames (`floor-cmaf-pieces`); +6. a key frame §7.3 refuses (`floor-keyframe-mismatch`). + +The floor's CMAF files are then the supplied ones, byte for byte: `floor//init.mp4` +the supplied `init.mp4`, and per piece `floor//.m4s` its media segment (§7.6's +writer is not used), which §8.3's playlists and MPDs list. The package also carries the +supplied floor's listing as `floor.listing`: its SHA-256 is `floor.supplied_listing`, which +the policy digest, and so the receipt, binds, and it names each of the ladder's files by +its SHA-256, so the receipt binds the ladder's bytes. A server may hold those files once, +for the ladder and the package alike (by a hard link, or by their content address): they +are the same bytes. The floor objects carry the units as §7.2 frames them, as in the OBU +form. + ## 8. Classes, catalogs and delivery **8.1** *What a class lists.* The stages listed for a class are a pure function of the @@ -1062,6 +1126,7 @@ royalty-free by its standards body"; it is not a freedom-to-operate opinion. policy.toml policy.json plan-.txt index-.wsix package.receipt.json objects/.wai … floor//init.mp4 floor//.m4s … (per floor rung, of floor name f) + floor.listing (a supplied CMAF floor's listing, §7.7) hls/classic/… hls//… dash/… moq/catalog.json stages/.json claims/.measurement.json (a metered package) LISTING @@ -1145,7 +1210,13 @@ failed check names is not applied: (`floor-av1-malformed`); each piece opening on a shown key frame, and no other unit being one unless the policy allows extra key frames (`floor-keyframe-mismatch`); and the rung's CMAF files are the ones its temporal units give (§7.6, - `floor-cmaf-mismatch`); + `floor-cmaf-mismatch`); or, for a supplied floor in the CMAF form (§7.7), `floor.listing` + is a listing that hashes to `floor.supplied_listing`, `floor//init.mp4` is the file + of its line `/init.mp4` and reads as §7.7's initialization segment, and the + listing's media segments of `/`, in its order, are one per piece, piece *k*'s + `floor//.m4s`, reading as §7.7's media segment, opening on a sync + sample, each sample one frame and the first at the piece's start, its samples the + piece's floor units without their temporal delimiters (`floor-cmaf-mismatch`); - then the catalogs are the ones the index, the objects and the floor give, and an index no catalog can be written for (a start past `2^53 − 1`) is refused (`catalog-mismatch`). @@ -1158,7 +1229,7 @@ failed check names is not applied: bases of `wai.video.int_motion` (§5.5, §5.6) and stills of `wai.image.png` (§5.7); refinements of `wai.video.int_refine` over an `int_motion` base (§5.4); each piece by its ladder, a rule's ladder subset included (§5.7); and a supplied AV1 floor per floor rung, -one or several (§7.1, §7.3). Its live +one or several (§7.1), in the OBU form (§7.3) or the CMAF form (§7.7). Its live packer packs the same pieces in windows, without a floor (§9.2). It refuses by name, before writing anything, what it does not pack yet: another medium (`pack-media-unsupported`), a floor to encode (`pack-floor-encode-unsupported`), and a rung @@ -1227,6 +1298,7 @@ the parent is the receipt. | `index-timebase`, `window-start`, `piece-order`, `piece-entries`, `piece-kind`, `entry-flags`, `entry-order`, `layer-role`, `refines-outside-window`, `refines-mismatch`, `layer-gap`, `tier-entropy-passthrough`, `tier-weakest`, `tier-mismatch`, `digest-without-tier`, `deadline-role`, `floor-derived-from`, `dup-length`, `dup-flag`, `class-plan`, `class-flags` | §6.3, §6.4 | | `object-length`, `object-hash`, `non-envelope-entry`, `object-lengths`, `object-capability`, `object-refines`, `object-derived-from` | §6.3 | | `floor-missing`, `floor-listing-mismatch`, `floor-stream-missing`, `floor-av1-malformed`, `floor-frame-count`, `floor-keyframe-mismatch` | §7.1, §7.3 | +| `floor-stream-missing`, `floor-cmaf-malformed`, `floor-cmaf-timing`, `floor-cmaf-pieces` | §7.7 | | `floor-object-mismatch`, `floor-motif-mismatch`, `floor-av1-malformed`, `floor-keyframe-mismatch`, `floor-cmaf-mismatch`, against a package | §11.3 | | `receipt-json`, `receipt-version`, `receipt-index-count`, `receipt-index-digest`, `receipt-stage-root`, `receipt-component`, `receipt-policy-digest`, `receipt-counts`, `receipt-parent-kind`, `receipt-energy`, `receipt-signature` | §9.1 | | `measurement-claim-missing`, `measurement-claim-invalid` | §9.4 | diff --git a/wai/pack-conformance/README.md b/wai/pack-conformance/README.md index d84e9d095..b1605988b 100644 --- a/wai/pack-conformance/README.md +++ b/wai/pack-conformance/README.md @@ -71,6 +71,16 @@ packages (§6–§11), and their delivery over a simulated link (§8.9). `video-ladder-01`'s; its receipt names `video-base-01`'s receipt as the package it re-packs (parent kind `re-pack`); and each piece's base entry is the parent's, field for field. Both verifiers check it against its parent. +- `packs/video-cmaf-01/` — a golden whose supplied floor is in the CMAF form (§7.7): + `video-ladder-01`'s policy with `floor.supplied_form = "cmaf"`, and its two streams as a + media muxer wrote them, `floor//init.mp4` and `floor//seg_.m4s`, one + segment per piece, by `supplied_cmaf.py` (ffmpeg's HLS muxer, `-c copy`). The package's + floor files are those files, byte for byte, under their SHA-256; `floor.listing` is the + supplied floor's listing; and each floor object holds its piece's samples, which are the + OBU form's temporal units of the same streams. +- `cmaf-mutations/` — the CMAF golden altered, in `package-mutations/`'s layout: itself + (`ok`); a segment replaced by one of the same samples, a `free` box before it, under its + own SHA-256; `floor.listing` altered; and without it (each `floor-cmaf-mismatch`). - `ladder-mutations/` — packages a verifier must refuse or accept (§11.3), each the ladder golden altered (re-sealed with its key where the receipt or `LISTING` alone would catch it), in `package-mutations/`'s layout: the golden itself (`ok`); piece 2's diff --git a/wai/pack-conformance/cmaf-mutations/expected.json b/wai/pack-conformance/cmaf-mutations/expected.json new file mode 100644 index 000000000..b6544e5fb --- /dev/null +++ b/wai/pack-conformance/cmaf-mutations/expected.json @@ -0,0 +1,30 @@ +{ + "pack": "video-cmaf-01", + "cases": [ + { + "name": "ok", + "reason": "ok", + "remove": [] + }, + { + "name": "segment-not-the-supplied-one", + "reason": "floor-cmaf-mismatch", + "remove": [ + "floor/hi/14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889.m4s", + "hls/classic/floor-hi.m3u8" + ] + }, + { + "name": "floor-listing-altered", + "reason": "floor-cmaf-mismatch", + "remove": [] + }, + { + "name": "floor-listing-missing", + "reason": "floor-cmaf-mismatch", + "remove": [ + "floor.listing" + ] + } + ] +} diff --git a/wai/pack-conformance/cmaf-mutations/floor-listing-altered/LISTING b/wai/pack-conformance/cmaf-mutations/floor-listing-altered/LISTING new file mode 100644 index 000000000..cd376b57e --- /dev/null +++ b/wai/pack-conformance/cmaf-mutations/floor-listing-altered/LISTING @@ -0,0 +1,47 @@ +688cb303ccb16fcdd21c8cb681f936ba813829e71fbf15df0ccb28b04c134447 dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +4e4d6d55b352c17da028bcbf8d314cdd1f9bb1406367008710788665727dcffa floor.listing +14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889 floor/hi/14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889.m4s +759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1 floor/hi/759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1.m4s +d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d floor/hi/d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d.m4s +e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e floor/hi/e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e.m4s +eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8 floor/hi/eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8.m4s +a8a19ef9cd4d540037ef298097bbc5317de6a99690c8c4a745cc867c034208d6 floor/hi/init.mp4 +0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af floor/lo/0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af.m4s +10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8 floor/lo/10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s +2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73 floor/lo/2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73.m4s +a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8 floor/lo/a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8.m4s +c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc floor/lo/c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s +6dd501e27365ce9ef90576771aad73de4d200362e6974551847afc3c90604344 floor/lo/init.mp4 +ebdc7e40aecbe8b61124ac78f233b0dfaf2a8c5674d3fc9bb023935de1d9b6cb hls/classic/floor-hi.m3u8 +66f5eb8b89b80e7da839b23f39665eb85480c6a725fa29d93556efee673c1b9e hls/classic/floor-lo.m3u8 +d793737b69231eface4951001e65b3c52cba864f231246a41e64d49c77ebdc97 hls/classic/master.m3u8 +d793737b69231eface4951001e65b3c52cba864f231246a41e64d49c77ebdc97 hls/legacy/master.m3u8 +8c3b5e2b18192b383c8df8675acd435b861a2585bc6eaf0c09292754f44a8cef hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +8c3b5e2b18192b383c8df8675acd435b861a2585bc6eaf0c09292754f44a8cef hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +649330bcfaaee54f802f6b4ddf6e459daca8bb0e8df86c87a9d6bd0d65cd09ea index-v.wsix +68f00abff5ef19f074d510f8cce4592afc2a1d4981a87663965a46dc8bcbe1d3 moq/catalog.json +9f381e2ab764b5e14770b00503c1c90b9c22ba22f87464b2869a70644af11939 objects/08797901ff55d0bb4afba5cffe95df64b7e216f3a0c9ba82006133bb9b6d7f16.wai +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +d5f9cdd996920e07339b79093b9e4e5cb4237f1780f268220cc6f89c79aea90a objects/399048a078b0f2983149266a44eaf207cfa63f490212b69389fba4d72f62c60f.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +d03f0813c266294f84483cfe4db177d094c06b95ab3a8471d6b2ec53401f05a7 objects/a236e9070d10fd09342cafdbf6973edd35e5266cf850fe2f38f77536ac803912.wai +2316616549f7f92dc29e34fe656c332c9f4a1e20f4be26396976407acc792ba4 objects/a3ae43406f9966487b6c5f5a4d56e9dca50c327423fcfd2a98f4c342d1dbfaf9.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +6d665f1bef3784cbb428abc28724f74fa83c8f2bc812828621c93c5514b6dc0e objects/c5253efe2949669bb9df01d9f60c01f2570ba4be1c0af26105e092dfccf90d30.wai +0acecba00acc28e313805189fd826ad3a9fab1fe69727ef2d5999fc543426289 objects/c81171fa53998cfe94207ad66ab9b53cfbd4b3f058730e62512ca9f0f6ef2ea3.wai +f3bd9cbe3c2518c997a4d1d3a32145a04f55ef53e0b5760a6ce6aa5e14fe06a7 objects/dea0f6415f639fca99d91a0341aba164078a1bd4780e21d72cbf2234928272ec.wai +d22c4f8ac8a5de43bbec6be04ea8b6da72f2bd133f8f57a31607362670178c68 objects/f467872fe8d3cd1f60f832c997cc14fd00abbf601c61286a612089b4a53a195a.wai +f1f4e32ba9f76e36431d97e0fd52b9025075f553bf6b9f63c484d60573c8ea90 package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +428e24f9e1c62fc5590ce3d3a6239a5c274dcfc1391a2ea2abe8dc0562da7d20 policy.json +9d2b4c15ac17ee074f646d0b1ed11ef56557f633ff67a3e6a6d0eb4dd1596548 policy.toml +2f5807b891b8eb0a44b76c4303487be1dcf19e111f06f6c642e14b81c85d7c4d stages/legacy.json +8695fff48ca86321c5198e3a8cf660ccba208df4f40fd1907e76c64a52674cf5 stages/mobile.json +6ae56077cfc368a59489233eeee6ee7fd97437821822637ac62096ab93c85286 stages/tv.json diff --git a/wai/pack-conformance/cmaf-mutations/floor-listing-altered/floor.listing b/wai/pack-conformance/cmaf-mutations/floor-listing-altered/floor.listing new file mode 100644 index 000000000..1875b8922 --- /dev/null +++ b/wai/pack-conformance/cmaf-mutations/floor-listing-altered/floor.listing @@ -0,0 +1,12 @@ +a8a19ef9cd4d540037ef298097bbc5317de6a99690c8c4a745cc867c034208d6 hi/init.mp4 +14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889 hi/seg_0000.m4s +e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e hi/seg_0001.m4s +d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d hi/seg_0002.m4s +eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8 hi/seg_0003.m4s +759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1 hi/seg_0004.m4s +6dd501e27365ce9ef90576771aad73de4d200362e6974551847afc3c90604344 lo/init.mp4 +0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af lo/seg_0000.m4s +c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc lo/seg_0001.m4s +10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8 lo/seg_0002.m4s +a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8 lo/seg_0003.m4s +20484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73 lo/seg_0004.m4s diff --git a/wai/pack-conformance/cmaf-mutations/floor-listing-missing/LISTING b/wai/pack-conformance/cmaf-mutations/floor-listing-missing/LISTING new file mode 100644 index 000000000..3efd7408d --- /dev/null +++ b/wai/pack-conformance/cmaf-mutations/floor-listing-missing/LISTING @@ -0,0 +1,46 @@ +688cb303ccb16fcdd21c8cb681f936ba813829e71fbf15df0ccb28b04c134447 dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889 floor/hi/14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889.m4s +759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1 floor/hi/759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1.m4s +d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d floor/hi/d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d.m4s +e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e floor/hi/e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e.m4s +eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8 floor/hi/eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8.m4s +a8a19ef9cd4d540037ef298097bbc5317de6a99690c8c4a745cc867c034208d6 floor/hi/init.mp4 +0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af floor/lo/0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af.m4s +10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8 floor/lo/10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s +2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73 floor/lo/2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73.m4s +a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8 floor/lo/a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8.m4s +c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc floor/lo/c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s +6dd501e27365ce9ef90576771aad73de4d200362e6974551847afc3c90604344 floor/lo/init.mp4 +ebdc7e40aecbe8b61124ac78f233b0dfaf2a8c5674d3fc9bb023935de1d9b6cb hls/classic/floor-hi.m3u8 +66f5eb8b89b80e7da839b23f39665eb85480c6a725fa29d93556efee673c1b9e hls/classic/floor-lo.m3u8 +d793737b69231eface4951001e65b3c52cba864f231246a41e64d49c77ebdc97 hls/classic/master.m3u8 +d793737b69231eface4951001e65b3c52cba864f231246a41e64d49c77ebdc97 hls/legacy/master.m3u8 +8c3b5e2b18192b383c8df8675acd435b861a2585bc6eaf0c09292754f44a8cef hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +8c3b5e2b18192b383c8df8675acd435b861a2585bc6eaf0c09292754f44a8cef hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +649330bcfaaee54f802f6b4ddf6e459daca8bb0e8df86c87a9d6bd0d65cd09ea index-v.wsix +68f00abff5ef19f074d510f8cce4592afc2a1d4981a87663965a46dc8bcbe1d3 moq/catalog.json +9f381e2ab764b5e14770b00503c1c90b9c22ba22f87464b2869a70644af11939 objects/08797901ff55d0bb4afba5cffe95df64b7e216f3a0c9ba82006133bb9b6d7f16.wai +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +d5f9cdd996920e07339b79093b9e4e5cb4237f1780f268220cc6f89c79aea90a objects/399048a078b0f2983149266a44eaf207cfa63f490212b69389fba4d72f62c60f.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +d03f0813c266294f84483cfe4db177d094c06b95ab3a8471d6b2ec53401f05a7 objects/a236e9070d10fd09342cafdbf6973edd35e5266cf850fe2f38f77536ac803912.wai +2316616549f7f92dc29e34fe656c332c9f4a1e20f4be26396976407acc792ba4 objects/a3ae43406f9966487b6c5f5a4d56e9dca50c327423fcfd2a98f4c342d1dbfaf9.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +6d665f1bef3784cbb428abc28724f74fa83c8f2bc812828621c93c5514b6dc0e objects/c5253efe2949669bb9df01d9f60c01f2570ba4be1c0af26105e092dfccf90d30.wai +0acecba00acc28e313805189fd826ad3a9fab1fe69727ef2d5999fc543426289 objects/c81171fa53998cfe94207ad66ab9b53cfbd4b3f058730e62512ca9f0f6ef2ea3.wai +f3bd9cbe3c2518c997a4d1d3a32145a04f55ef53e0b5760a6ce6aa5e14fe06a7 objects/dea0f6415f639fca99d91a0341aba164078a1bd4780e21d72cbf2234928272ec.wai +d22c4f8ac8a5de43bbec6be04ea8b6da72f2bd133f8f57a31607362670178c68 objects/f467872fe8d3cd1f60f832c997cc14fd00abbf601c61286a612089b4a53a195a.wai +f1f4e32ba9f76e36431d97e0fd52b9025075f553bf6b9f63c484d60573c8ea90 package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +428e24f9e1c62fc5590ce3d3a6239a5c274dcfc1391a2ea2abe8dc0562da7d20 policy.json +9d2b4c15ac17ee074f646d0b1ed11ef56557f633ff67a3e6a6d0eb4dd1596548 policy.toml +2f5807b891b8eb0a44b76c4303487be1dcf19e111f06f6c642e14b81c85d7c4d stages/legacy.json +8695fff48ca86321c5198e3a8cf660ccba208df4f40fd1907e76c64a52674cf5 stages/mobile.json +6ae56077cfc368a59489233eeee6ee7fd97437821822637ac62096ab93c85286 stages/tv.json diff --git a/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/LISTING b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/LISTING new file mode 100644 index 000000000..2da60b651 --- /dev/null +++ b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/LISTING @@ -0,0 +1,46 @@ +489923f27fa22f927813026d34acb69177b5eb042a513e8855b6bfaca1c80a1a dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +03ab06e026880875581952f91232405077be9a522dbf739b6a9d093458369710 floor.listing +103573aca98afc526a45518dc6b93d0fcd58511bb34550b2f4d7b29431df9ad9 floor/hi/103573aca98afc526a45518dc6b93d0fcd58511bb34550b2f4d7b29431df9ad9.m4s +759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1 floor/hi/759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1.m4s +d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d floor/hi/d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d.m4s +e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e floor/hi/e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e.m4s +eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8 floor/hi/eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8.m4s +a8a19ef9cd4d540037ef298097bbc5317de6a99690c8c4a745cc867c034208d6 floor/hi/init.mp4 +0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af floor/lo/0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af.m4s +10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8 floor/lo/10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s +2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73 floor/lo/2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73.m4s +a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8 floor/lo/a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8.m4s +c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc floor/lo/c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s +6dd501e27365ce9ef90576771aad73de4d200362e6974551847afc3c90604344 floor/lo/init.mp4 +66f5eb8b89b80e7da839b23f39665eb85480c6a725fa29d93556efee673c1b9e hls/classic/floor-lo.m3u8 +9329fd005fc0e4926a3bc3d19f35b67fb6990c916b8a39cde128d8cf8b3dcf25 hls/classic/master.m3u8 +9329fd005fc0e4926a3bc3d19f35b67fb6990c916b8a39cde128d8cf8b3dcf25 hls/legacy/master.m3u8 +b650f6ffe5e31f29507e563fe104d5d45bf063fe553021047c35a6e0e35e9333 hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +b650f6ffe5e31f29507e563fe104d5d45bf063fe553021047c35a6e0e35e9333 hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +649330bcfaaee54f802f6b4ddf6e459daca8bb0e8df86c87a9d6bd0d65cd09ea index-v.wsix +f56f7b8a585c4e85c4382eb163d8d6639284ddb2e7f2799715fa63120e7c0036 moq/catalog.json +9f381e2ab764b5e14770b00503c1c90b9c22ba22f87464b2869a70644af11939 objects/08797901ff55d0bb4afba5cffe95df64b7e216f3a0c9ba82006133bb9b6d7f16.wai +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +d5f9cdd996920e07339b79093b9e4e5cb4237f1780f268220cc6f89c79aea90a objects/399048a078b0f2983149266a44eaf207cfa63f490212b69389fba4d72f62c60f.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +d03f0813c266294f84483cfe4db177d094c06b95ab3a8471d6b2ec53401f05a7 objects/a236e9070d10fd09342cafdbf6973edd35e5266cf850fe2f38f77536ac803912.wai +2316616549f7f92dc29e34fe656c332c9f4a1e20f4be26396976407acc792ba4 objects/a3ae43406f9966487b6c5f5a4d56e9dca50c327423fcfd2a98f4c342d1dbfaf9.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +6d665f1bef3784cbb428abc28724f74fa83c8f2bc812828621c93c5514b6dc0e objects/c5253efe2949669bb9df01d9f60c01f2570ba4be1c0af26105e092dfccf90d30.wai +0acecba00acc28e313805189fd826ad3a9fab1fe69727ef2d5999fc543426289 objects/c81171fa53998cfe94207ad66ab9b53cfbd4b3f058730e62512ca9f0f6ef2ea3.wai +f3bd9cbe3c2518c997a4d1d3a32145a04f55ef53e0b5760a6ce6aa5e14fe06a7 objects/dea0f6415f639fca99d91a0341aba164078a1bd4780e21d72cbf2234928272ec.wai +d22c4f8ac8a5de43bbec6be04ea8b6da72f2bd133f8f57a31607362670178c68 objects/f467872fe8d3cd1f60f832c997cc14fd00abbf601c61286a612089b4a53a195a.wai +f1f4e32ba9f76e36431d97e0fd52b9025075f553bf6b9f63c484d60573c8ea90 package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +428e24f9e1c62fc5590ce3d3a6239a5c274dcfc1391a2ea2abe8dc0562da7d20 policy.json +9d2b4c15ac17ee074f646d0b1ed11ef56557f633ff67a3e6a6d0eb4dd1596548 policy.toml +2f5807b891b8eb0a44b76c4303487be1dcf19e111f06f6c642e14b81c85d7c4d stages/legacy.json +8695fff48ca86321c5198e3a8cf660ccba208df4f40fd1907e76c64a52674cf5 stages/mobile.json +6ae56077cfc368a59489233eeee6ee7fd97437821822637ac62096ab93c85286 stages/tv.json diff --git a/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/dash/classic.mpd b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/dash/classic.mpd new file mode 100644 index 000000000..844c42e97 --- /dev/null +++ b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/dash/classic.mpd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/floor/hi/103573aca98afc526a45518dc6b93d0fcd58511bb34550b2f4d7b29431df9ad9.m4s b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/floor/hi/103573aca98afc526a45518dc6b93d0fcd58511bb34550b2f4d7b29431df9ad9.m4s new file mode 100644 index 0000000000000000000000000000000000000000..ed7fdd945510a301870020c0306f09bae7bd864e GIT binary patch literal 2225 zcmZ8hX;4#F6uyZ8o(LtO7$9tMM^yTFMXOAJh^W*uhzeG5BLyNTI}u?<^tF{31ccF% zRTjY_BBMo%=ukAMAmhj)h@j$tS{&<$D-;lAdTw|jAwN#;$@iUezVDv*5`+*TjSUGw z2wB9*5~CyHf71POMuilE-W~Kg+YW^$aFoe%BFq*P3%C6KB5VdwIw1dN(v?1 z2x(|AQwlXKu`E`CacddI*=RZBfY;J+Sgu0 zQHx+RNj$jg=E#2&6%<(>ptN)!U2-TfWntmc0{eBPXN2u3qM)0010nOA>YF1K17?;( zt0m+44F{jc>_~1&t|L8K6zj^jeT z01RhL)Z^XNgztUqlS4wi^;EmpqSH5ZgCW~Vqbfs}yLVT3^}!}*)lV_nwgHK|#K%Nc zhuJi2ayHwbKTspyS!9*8#lN}_=FR084V7#3E5|k@JQRcce1doKy{4mDYX9jb*tO^K zof9;0<^H2~(`Oa~;UE;;Zqg84!}VEjzN0BKaxp6Mx6lyhUEd#ta>q$Ss%zAcADjAD zJqLo+@&m6^a^kLx-}OhpC^gm4ljI*g^o9U;o^+Io7kHMubfT{k@MTjC^|T~=4~4BvkSj%tB;I1^u z%K~bFx5#$e&T-g-Cn~(x2E4kh{`-!tf8$5FhHdbat3_NK^o$8p#6yc0$LOnOB!QaJ z+vj=qQ37%u!7ISCuokv(Irn6ye({Kh9M+V9yJR=45z=%*!3!1x}QKYiVd`xAlMtfO37I_B{6oBud)$1OVIUPkk7 z|FOdw-KD!1z+5m}zg3&-?d*`ONUs1BQjSrtHsf+J z_vUNtI+WlQX%nY%j+H0@-=iZVn%j6GAMkJ;iIOkLyNf|Ok`Yip$PV_-it%9z)*sC% tsF_09qxmo>R!5-LYwa)=mgxxO)vmcp!!wE3x&eM%-TNws(_We@{|C<=Yo-7I literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/classic/master.m3u8 b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/classic/master.m3u8 new file mode 100644 index 000000000..3bd645250 --- /dev/null +++ b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/classic/master.m3u8 @@ -0,0 +1,5 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=8152,AVERAGE-BANDWIDTH=7583,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/legacy/master.m3u8 b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/legacy/master.m3u8 new file mode 100644 index 000000000..3bd645250 --- /dev/null +++ b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/legacy/master.m3u8 @@ -0,0 +1,5 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=8152,AVERAGE-BANDWIDTH=7583,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/mobile/master.m3u8 b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/mobile/master.m3u8 new file mode 100644 index 000000000..560e7e8ed --- /dev/null +++ b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/mobile/master.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.multivariant",VALUE="wai.m3u8" +#EXT-X-STREAM-INF:BANDWIDTH=8152,AVERAGE-BANDWIDTH=7583,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/tv/master.m3u8 b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/tv/master.m3u8 new file mode 100644 index 000000000..560e7e8ed --- /dev/null +++ b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/hls/tv/master.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-SESSION-DATA:DATA-ID="science.transaction.wai.multivariant",VALUE="wai.m3u8" +#EXT-X-STREAM-INF:BANDWIDTH=8152,AVERAGE-BANDWIDTH=7583,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/moq/catalog.json b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/moq/catalog.json new file mode 100644 index 000000000..0c04f421b --- /dev/null +++ b/wai/pack-conformance/cmaf-mutations/segment-not-the-supplied-one/moq/catalog.json @@ -0,0 +1 @@ +{"tracks":[{"altGroup":1,"isLive":false,"name":"v/l0","namespace":"video-cmaf-01","packaging":"wai","renderGroup":1,"role":"video","wai_capabilities":["wai.video.int_motion"],"wai_determinism":"decode-equivalence","wai_receipt_alias":2923025889890445,"wai_receipts":true,"wai_receipts_track":"v/l0/receipts","wai_staged":{"layer":0,"lead_ms":null,"set":"v"}},{"altGroup":1,"codec":"av01.0.00M.08","height":18,"name":"lo/floor","namespace":"video-cmaf-01","packaging":"cmaf","renderGroup":1,"width":32},{"isLive":false,"name":"v/l0/receipts","namespace":"video-cmaf-01","packaging":"wai-receipts"}],"version":1} diff --git a/wai/pack-conformance/pack_verify.py b/wai/pack-conformance/pack_verify.py index 6b97e07d8..f08d388a4 100644 --- a/wai/pack-conformance/pack_verify.py +++ b/wai/pack-conformance/pack_verify.py @@ -364,7 +364,7 @@ def read_policy(doc): ladder.append(m) P["ladder"] = ladder f = top.table("floor") - f.keys(["supplied_listing", "extra_keyframes"]) + f.keys(["supplied_listing", "extra_keyframes", "supplied_form"]) fl = {} sl = f.string("supplied_listing") if sl is not None: @@ -372,6 +372,12 @@ def read_policy(doc): raise f.err("policy-value", "supplied_listing") fl["supplied_listing"] = sl fl["extra_keyframes"] = f.boolean("extra_keyframes", False) + # §7.7: "cmaf", the supplied floor in the CMAF form; absent, the OBU form (§7.3). + sf = f.string("supplied_form") + if sf is not None: + if sf != "cmaf": + raise f.err("policy-value", "supplied_form") + fl["supplied_form"] = sf P["floor"] = fl lv = top.table("live") lv.keys(["layer_lag_ms"]) @@ -2495,6 +2501,219 @@ def without_delimiters(obu_list): return b"".join(whole for t, whole, _ in obu_list if t != OBU_TD) +# ---------------------------------------------------------------- a supplied CMAF floor (§7.7) + + +class CmafFault(Exception): + """§7.7: floor-cmaf-malformed (its boxes) or floor-cmaf-timing (its times).""" + def __init__(self, code, why): + super().__init__(f"{why} ({code})") + self.code = code + + +def cm_bad(why): + return CmafFault("floor-cmaf-malformed", why) + + +def bmff_boxes(b, start, end): + """ISO/IEC 14496-12's boxes tiling b[start:end]: (type, box start, body start, box end). + A size of 0 and a size below its header are refused; a size of 1 is the 64-bit size.""" + out, at = [], start + while at < end: + if at + 8 > end: + raise cm_bad(f"a box header runs past the end at byte {at}") + size, kind, head = int.from_bytes(b[at:at + 4], "big"), b[at + 4:at + 8], 8 + if size == 1: + if at + 16 > end: + raise cm_bad("a 64-bit box size runs past the end") + size, head = int.from_bytes(b[at + 8:at + 16], "big"), 16 + if size < 16: + raise cm_bad(f"a 64-bit box size below 16 at byte {at}") + elif size == 0: + raise cm_bad(f"a box of size 0 at byte {at}") + elif size < 8: + raise cm_bad(f"a box size below 8 at byte {at}") + if at + size > end: + raise cm_bad(f"a box runs past its parent at byte {at}") + out.append((kind, at, at + head, at + size)) + at += size + return out + + +def bmff_one(bs, kind, within): + v = [x for x in bs if x[0] == kind] + if len(v) != 1: + raise cm_bad(f"{within} holds {len(v)} {kind.decode('latin-1')} boxes, not one") + return v[0] + + +def be_at(b, at, n, end): + if at + n > end: + raise cm_bad(f"a field runs past its box at byte {at}") + return int.from_bytes(b[at:at + n], "big") + + +def version(b, body, end): + """A full box's version, its first byte, read inside the box.""" + return be_at(b, body, 4, end) >> 24 + + +def cmaf_init(b): + """§7.7's init.mp4: one moov of one trak and an mvex; tkhd's track, mdhd's timescale (at + least 1), a vide handler, one av01 sample entry, an edit list (if any) of one entry at + media time 0 and rate 1, and trex's defaults for that track. Returns (track, timescale, + (duration, size, flags)).""" + top = bmff_boxes(b, 0, len(b)) + _, _, mb, me = bmff_one(top, b"moov", "init.mp4") + mv = bmff_boxes(b, mb, me) + _, _, tb, te = bmff_one(mv, b"trak", "moov") + _, _, xb, xe = bmff_one(mv, b"mvex", "moov") + tk = bmff_boxes(b, tb, te) + _, _, hb, he = bmff_one(tk, b"tkhd", "trak") + track = be_at(b, hb + 4 + (16 if version(b, hb, he) == 1 else 8), 4, he) + ed = [x for x in tk if x[0] == b"edts"] + if ed: + _, _, eb, ee = bmff_one(bmff_boxes(b, ed[0][2], ed[0][3]), b"elst", "edts") + n = be_at(b, eb + 4, 4, ee) + if version(b, eb, ee) == 1: + mt, rate = be_at(b, eb + 16, 8, ee), be_at(b, eb + 24, 4, ee) + mt = mt - (1 << 64) if mt >> 63 else mt + else: + mt, rate = be_at(b, eb + 12, 4, ee), be_at(b, eb + 16, 4, ee) + mt = mt - (1 << 32) if mt >> 31 else mt + if n != 1 or mt != 0 or rate != 0x00010000: + raise CmafFault("floor-cmaf-timing", "an edit list other than one entry at media time 0 and rate 1") + _, _, db, de = bmff_one(tk, b"mdia", "trak") + md = bmff_boxes(b, db, de) + _, _, kb, ke = bmff_one(md, b"mdhd", "mdia") + ts = be_at(b, kb + 4 + (16 if version(b, kb, ke) == 1 else 8), 4, ke) + if ts == 0: + raise CmafFault("floor-cmaf-timing", "a timescale of 0") + _, _, lb, le_ = bmff_one(md, b"hdlr", "mdia") + if lb + 12 > le_ or b[lb + 8:lb + 12] != b"vide": + raise cm_bad("the track's handler is not vide") + _, _, ib, ie = bmff_one(md, b"minf", "mdia") + _, _, sb, se = bmff_one(bmff_boxes(b, ib, ie), b"stbl", "minf") + _, _, db2, de2 = bmff_one(bmff_boxes(b, sb, se), b"stsd", "stbl") + if be_at(b, db2 + 4, 4, de2) != 1: + raise cm_bad("a sample description of other than one entry") + entries = bmff_boxes(b, db2 + 8, de2) + if len(entries) != 1 or entries[0][0] != b"av01": + raise cm_bad("the sample description is not one av01 entry") + _, _, rb, re_ = bmff_one(bmff_boxes(b, xb, xe), b"trex", "mvex") + version(b, rb, re_) + if be_at(b, rb + 4, 4, re_) != track: + raise cm_bad("trex names another track than tkhd") + return track, ts, (be_at(b, rb + 12, 4, re_), be_at(b, rb + 16, 4, re_), be_at(b, rb + 20, 4, re_)) + + +PRELUDE = (b"styp", b"sidx", b"prft", b"emsg", b"free", b"skip") + + +def cmaf_segment(b, init): + """§7.7's media segment: prelude boxes, then moof/mdat pairs; each moof an mfhd and one + traf of tfhd (the init's track, no base data offset or empty duration), tfdt and truns + with data offsets; each sample's duration, size and flags its trun's, else tfhd's, else + trex's, its bytes in the mdat after its moof, no composition offset but 0, no sample of + no bytes; each moof's decode time where the one before it ended. Returns the samples as + (offset, length, duration, flags, decode time).""" + track, _, (dd, ds, df) = init + top = bmff_boxes(b, 0, len(b)) + first = next((i for i, x in enumerate(top) if x[0] == b"moof"), None) + if first is None: + raise cm_bad("a segment with no moof") + if any(x[0] not in PRELUDE for x in top[:first]): + raise cm_bad("a box before the first moof that is not a prelude box") + rest = top[first:] + if len(rest) % 2 or any(rest[i][0] != b"moof" or rest[i + 1][0] != b"mdat" for i in range(0, len(rest), 2)): + raise cm_bad("after the first moof, other than moof and mdat pairs") + out, nxt = [], None + for i in range(0, len(rest), 2): + (_, ms, mb, me), (_, _, ab, ae) = rest[i], rest[i + 1] + mo = bmff_boxes(b, mb, me) + bmff_one(mo, b"mfhd", "moof") + if any(x[0] not in (b"mfhd", b"traf") for x in mo): + raise cm_bad("a moof holding other than mfhd and traf") + _, _, fb, fe = bmff_one(mo, b"traf", "moof") + tr = bmff_boxes(b, fb, fe) + if any(x[0] not in (b"tfhd", b"tfdt", b"trun") for x in tr): + raise cm_bad("a traf holding other than tfhd, tfdt and trun") + _, _, hb, he = bmff_one(tr, b"tfhd", "traf") + tf = be_at(b, hb, 4, he) & 0xFFFFFF + if tf & ~(0x02 | 0x08 | 0x10 | 0x20 | 0x020000): + raise cm_bad(f"tfhd flags {tf:#x}") + if be_at(b, hb + 4, 4, he) != track: + raise cm_bad("a tfhd of another track") + at = hb + 8 + vals = {} + for bit, name in ((0x02, "sdi"), (0x08, "dur"), (0x10, "size"), (0x20, "flags")): + if tf & bit: + vals[name] = be_at(b, at, 4, he) + at += 4 + d_dur, d_size, d_flags = vals.get("dur", dd), vals.get("size", ds), vals.get("flags", df) + _, _, tb, te = bmff_one(tr, b"tfdt", "traf") + dts = be_at(b, tb + 4, 8 if version(b, tb, te) == 1 else 4, te) + if nxt is not None and nxt != dts: + raise CmafFault("floor-cmaf-timing", "a moof whose decode time is not where the one before it ended") + runs = [x for x in tr if x[0] == b"trun"] + if not runs: + raise cm_bad("a traf with no trun") + for _, _, rb, re_ in runs: + rf = be_at(b, rb, 4, re_) & 0xFFFFFF + if rf & ~(0x01 | 0x04 | 0x100 | 0x200 | 0x400 | 0x800) or not rf & 0x01: + raise cm_bad(f"trun flags {rf:#x}") + n = be_at(b, rb + 4, 4, re_) + off = be_at(b, rb + 8, 4, re_) + off = off - (1 << 32) if off >> 31 else off + at = rb + 12 + first_flags = None + if rf & 0x04: + first_flags, at = be_at(b, at, 4, re_), at + 4 + per = sum(1 for bit in (0x100, 0x200, 0x400, 0x800) if rf & bit) + if at + 4 * per * n > re_: + raise cm_bad("trun shorter than its samples") + data = ms + off + for k in range(n): + def f(bit): + nonlocal at + if not rf & bit: + return None + v = be_at(b, at, 4, re_) + at += 4 + return v + dur, size, own, cto = f(0x100), f(0x200), f(0x400), f(0x800) + dur = d_dur if dur is None else dur + size = d_size if size is None else size + flags = (first_flags if first_flags is not None else own) if k == 0 else own + flags = d_flags if flags is None else flags + if cto: + raise CmafFault("floor-cmaf-timing", "a sample whose composition time is not its decode time") + if size == 0: + raise cm_bad("a sample of no bytes") + if data < ab or data + size > ae: + raise cm_bad("a sample's bytes outside the mdat after its moof") + out.append((data, size, dur, flags, dts)) + data += size + dts += dur + nxt = dts + if not out: + raise cm_bad("a segment with no sample") + return out + + +def cmaf_times(samples, timescale, num, den, start): + """§7.7: every sample one frame long, the first at frame `start`'s decode time.""" + if any(s[2] * num != timescale * den for s in samples): + raise CmafFault("floor-cmaf-timing", "a sample that does not last one frame") + if samples[0][4] * num != start * timescale * den: + raise CmafFault("floor-cmaf-timing", f"a segment that does not start at frame {start}") + + +def cmaf_units(b, samples): + """§7.7: each sample a temporal unit without its temporal delimiter.""" + return [b"\x12\x00" + b[at:at + n] for at, n, _, _, _ in samples] + + # ---------------------------------------------------------------- classes and catalogs (§8) @@ -3390,14 +3609,21 @@ def verify_component(rep, tag, root, pkg, files, P, j, c, ix, inputs=True): if not ok: return named | unreached(files, c['id']) units_of[fname].append(fp[5]) - frag = fragment(ix["first_piece"] + k, pc["start"], den, [(without_delimiters(o), shown_key(o, seq)) for o in units]) - frags.append((hashlib.sha256(frag).hexdigest() + ".m4s", frag)) - init = init_mp4(num, seq["max_w"], seq["max_h"], av1c(seq, seq_obu)) - for p, want in [("init.mp4", init)] + frags: - path = f"floor/{fname}/{p}" - named.add(path) - rep.check(path in files and load(os.path.join(pkg, path)) == want, - f"{t}: {path} is the one the floor's temporal units give (floor-cmaf-mismatch)") + if not P["floor"].get("supplied_form"): + frag = fragment(ix["first_piece"] + k, pc["start"], den, [(without_delimiters(o), shown_key(o, seq)) for o in units]) + frags.append((hashlib.sha256(frag).hexdigest() + ".m4s", frag)) + if P["floor"].get("supplied_form") == "cmaf": + # §7.7: the ladder's own files, read, not rebuilt. + frags = cmaf_package_files(rep, t, pkg, files, P, fname, pieces, units_of[fname], num, den, named) + if frags is None: + return named | unreached(files, c['id']) + else: + init = init_mp4(num, seq["max_w"], seq["max_h"], av1c(seq, seq_obu)) + for p, want in [("init.mp4", init)] + frags: + path = f"floor/{fname}/{p}" + named.add(path) + rep.check(path in files and load(os.path.join(pkg, path)) == want, + f"{t}: {path} is the one the floor's temporal units give (floor-cmaf-mismatch)") floors.append((fname, av1_codecs(seq), seq["max_w"], seq["max_h"], frags)) # The catalogs (§8.3–§8.8). @@ -3418,6 +3644,79 @@ def verify_component(rep, tag, root, pkg, files, P, j, c, ix, inputs=True): return named +def read_listing(b): + """SPEC §3.1: a listing's lines as (path, SHA-256 hex), or None when it is not one.""" + if not b or not b.endswith(b"\n"): + return None + out = [] + for line in b[:-1].split(b"\n"): + if len(line) < 67 or line[64:66] != b" " or not re.fullmatch(rb"[0-9a-f]{64}", line[:64]): + return None + try: + out.append((line[66:].decode("ascii"), line[:64].decode())) + except UnicodeError: + return None + paths = [p for p, _ in out] + if not all(all(segment_ok(x) for x in p.split("/")) for p in paths) or paths != sorted(paths, key=lambda p: p.encode()) \ + or len(set(paths)) != len(paths) or len({p.lower() for p in paths}) != len(paths) \ + or any(q.startswith(p + "/") for p in paths for q in paths): + return None + return out + + +def cmaf_package_files(rep, t, pkg, files, P, fname, pieces, units_of, num, den, named): + """§7.7, §11.3: a floor rung's CMAF files in the CMAF form, bound to the receipt by the + supplied floor's listing: floor.listing hashes to floor.supplied_listing and is a + listing; floor//init.mp4 is its line for /init.mp4 and an initialization segment + §7.7 reads; the listing's media segments of /, in its order, one per piece, piece k's + floor//.m4s, §7.7's boxes, opening on a sync sample, a frame a sample from + the piece's start, its samples the piece's floor units without their temporal + delimiters (floor-cmaf-mismatch). Returns each piece's (fragment name, bytes), or None + at the first that fails.""" + named.add("floor.listing") + lb = load(os.path.join(pkg, "floor.listing")) if "floor.listing" in files else b"" + lines = read_listing(lb) + ok = lines is not None and hashlib.sha256(lb).hexdigest() == P["floor"].get("supplied_listing") + rep.check(ok, f"{t}: floor.listing is a listing hashing to floor.supplied_listing (§7.7) (floor-cmaf-mismatch)") + if not ok: + return None + shas = dict(lines) + init_name = f"{fname}/init.mp4" + segs = [p for p, _ in lines if p.startswith(f"{fname}/") and p != init_name] + init_path = f"floor/{fname}/init.mp4" + named.add(init_path) + try: + ib = load(os.path.join(pkg, init_path)) if init_path in files else None + init = cmaf_init(ib) if ib is not None and shas.get(init_name) == hashlib.sha256(ib).hexdigest() else None + except CmafFault: + init = None + rep.check(init is not None, f"{t}: {init_path} is the supplied {init_name}, an initialization segment §7.7 reads (floor-cmaf-mismatch)") + if init is None: + return None + ok = len(segs) == len(pieces) and all(p.endswith(".m4s") and "/" not in p[len(fname) + 1:] for p in segs) + rep.check(ok, f"{t}: {fname}/ holds one media segment per piece in floor.listing (floor-cmaf-mismatch)") + if not ok: + return None + frags = [] + for k, (pc, seg) in enumerate(zip(pieces, segs)): + path = f"floor/{fname}/{shas[seg]}.m4s" + named.add(path) + b = load(os.path.join(pkg, path)) if path in files else None + try: + sm = cmaf_segment(b, init) if b is not None and hashlib.sha256(b).hexdigest() == shas[seg] else None + if sm is not None: + cmaf_times(sm, init[1], num, den, pc["start"]) + except CmafFault: + sm = None + ok = sm is not None and not sm[0][3] & 0x00010000 and cmaf_units(b, sm) == units_of[k] + rep.check(ok, f"{t}: {path}: the supplied {seg}, opening on a sync sample, a frame a sample from piece {k}'s start, " + f"its samples the piece's floor units (§7.7) (floor-cmaf-mismatch)") + if not ok: + return None + frags.append((path.rsplit("/", 1)[1], b)) + return frags + + def http_views(rep, t, c, first_floor, cats, objmap): """§8.3 read by http-delivery's own verifier (http_verify.py): each class's WAI media playlist adjacent to the classical one (the first floor's; every floor's has the @@ -3536,6 +3835,9 @@ def verify_sources(rep, t, root, P, comp, ix, stage, units_of, objs): rep.check(hashlib.sha256(listing(sup, names)).hexdigest() == P["floor"].get("supplied_listing"), f"{t}: the supplied floor's listing hashes to floor.supplied_listing (floor-listing-mismatch)") for _, fname in floor_names(P, comp["id"]): + if P["floor"].get("supplied_form") == "cmaf": + verify_supplied_cmaf(rep, t, sup, names, fname, ix, frames, num, den, P, units_of) + continue stream = f"{fname}.obu" if stream not in names: rep.check(False, f"{t}: no {stream} in the supplied floor (floor-stream-missing)") @@ -3566,6 +3868,67 @@ def verify_sources(rep, t, root, P, comp, ix, stage, units_of, objs): f"{t}: each floor object of {fname} holds its piece's temporal units of {stream} (§7.2)") +def verify_supplied_cmaf(rep, t, sup, names, fname, ix, frames, num, den, P, units_of): + """§7.7, the supplied floor in the CMAF form: /init.mp4 (floor-stream-missing), the + other files of / media segments in byte order (floor-cmaf-malformed); each segment's + boxes, a sync sample first (floor-cmaf-malformed), every sample one frame and each + segment starting where the one before ended (floor-cmaf-timing); the samples as + temporal units (floor-av1-malformed), one per source frame (floor-frame-count); one + segment per piece, holding its frames (floor-cmaf-pieces); the key frames + (floor-keyframe-mismatch); and each floor object holding its piece's segment's units.""" + init_name = f"{fname}/init.mp4" + if init_name not in names: + rep.check(False, f"{t}: no {init_name} in the supplied floor (floor-stream-missing)") + return + segs = [n for n in names if n.startswith(f"{fname}/") and n != init_name] + bad = [n for n in segs if "/" in n[len(fname) + 1:] or not n.endswith(".m4s")] + rep.check(segs and not bad, f"{t}: {fname}/ holds init.mp4 and media segments only: {bad} (floor-cmaf-malformed)") + if not segs or bad: + return + try: + init = cmaf_init(load(os.path.join(sup, init_name))) + per_seg, at = [], 0 + for n in segs: + b = load(os.path.join(sup, n)) + sm = cmaf_segment(b, init) + if sm[0][3] & 0x00010000: + raise CmafFault("floor-cmaf-malformed", f"{n}: a segment that does not open on a sync sample") + cmaf_times(sm, init[1], num, den, at) + per_seg.append((n, at, cmaf_units(b, sm))) + at += len(sm) + rep.check(True, f"{t}: {fname}/'s CMAF files read as §7.7's (floor-cmaf-malformed, floor-cmaf-timing)") + except CmafFault as x: + rep.check(False, f"{t}: {fname}/: {x}") + return + units = [u for _, _, us in per_seg for u in us] + try: + parsed = [obus(u) for u in units] + if any(not o or o[0][0] != OBU_TD or sum(x[0] == OBU_TD for x in o) != 1 or unit_frame(o) is None for o in parsed): + raise Malformed("a sample that is not one temporal unit holding a frame") + first = next((whole for typ, whole, _ in parsed[0] if typ == OBU_SEQ), None) + if first is None: + raise Malformed("the first unit holds no sequence header") + seq = sequence_header(obus(first)[0][2]) + for o in parsed: + if any(typ == OBU_SEQ and whole != first for typ, whole, _ in o): + raise Malformed("a sequence header other than the first") + if shown_key(o, seq) and not any(typ == OBU_SEQ for typ, _, _ in o): + raise Malformed("a shown key frame without a sequence header") + rep.check(True, f"{t}: {fname}/'s samples are temporal units, each a frame (floor-av1-malformed)") + except Malformed as x: + rep.check(False, f"{t}: {fname}/'s samples ({x}) (floor-av1-malformed)") + return + rep.check(len(units) == len(frames), f"{t}: {fname}/: one sample per source frame (floor-frame-count)") + starts = [pc["start"] for pc in ix["pieces"]] + rep.check([(a, len(us)) for _, a, us in per_seg] == [(pc["start"], pc["duration"]) for pc in ix["pieces"]], + f"{t}: {fname}/: one media segment per piece, holding its frames (floor-cmaf-pieces)") + keys = [f for f, o in enumerate(parsed) if shown_key(o, seq)] + ok = set(starts) <= set(keys) and (P["floor"]["extra_keyframes"] or keys == starts) + rep.check(ok, f"{t}: {fname}/: shown key frames at the piece starts {starts}, and only there: {keys} (floor-keyframe-mismatch)") + rep.check([us for _, _, us in per_seg] == units_of[fname], + f"{t}: each floor object of {fname} holds its piece's media segment's samples (§7.7)") + + def mutation_verdict(m, c, used): """A case of mutations/: the index's verdict (§6.2, §6.3), then each entry's object's (§6.3), or the receipt's (§9.1).""" @@ -3882,6 +4245,8 @@ def verify(d): verify_package_mutations(rep, d, "staged-mutations") # ladder-mutations/: the ladder golden altered (§7.1: several floor rungs). verify_package_mutations(rep, d, "ladder-mutations") + # cmaf-mutations/: the CMAF golden altered (§7.7: the receipt binds the supplied bytes). + verify_package_mutations(rep, d, "cmaf-mutations") return rep diff --git a/wai/pack-conformance/packs/video-cmaf-01/floor/hi/init.mp4 b/wai/pack-conformance/packs/video-cmaf-01/floor/hi/init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..af7fc6d9dc1201185942fa2d43659adcbca8bc7d GIT binary patch literal 788 zcmaJ;%}N6?5T4eHlpc!oP^5yHkxY*w%za9wEC3|Z zjyYl(TW60>Q~>ZP3lCS^w^EbD1f6S9?*#m6MMZpO#P^$r(@D)S*^GRek-KUw1c=HBzQiMCwDUp^dvvq%KhFVIdHksP8>Z6g@-b<#weN zx2OY?Iiyn2-?IUmal6U(CFV5#2z8FP^wmEZ~=>RxocGNrU JM4hO6@D04WTgd|^S%E+gAg)}k;O-a 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 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/floor/hi/seg_0003.m4s b/wai/pack-conformance/packs/video-cmaf-01/floor/hi/seg_0003.m4s new file mode 100644 index 0000000000000000000000000000000000000000..ac02ab23e272a47b2c108501e3683748b9190b9d GIT binary patch literal 873 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 R>B5Q!))e@JZhjgg{~xLLQIG%t literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0001.m4s b/wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0001.m4s new file mode 100644 index 0000000000000000000000000000000000000000..74171d12cf37630911486c49494280811c03c617 GIT binary patch literal 1019 zcmZQzV2~&-sVvAXPRU>Z0uY^BoLK>6niOZIR4{@B85kHDg!~)8EbUKV3Q7Q_nb(8l zAd(Dca`W@kfN}!4X&EU{HB3NyOG!~8NL;1_B+kTO0b~R9?rs3mhKvwPL`u?9N}%>J zFhK07DJd$=V_;xn1*($-;wvD-fWQ!lb%EFfh}D2t1Pu!V`HDcS0i~6JGzf#lK^UYS zB(DU-azHE%<-_EGG}GhUl*AG)E}#sP`lH;M0}4jUA`Hq73=9oGAyM;+kXjA4yW8*o zx3K+??`@;*7$O??lr6zX+lcW2P!TgQI2m0JI9_0Q5a^s1cxk6W<;96idhh3Lo|kyQ z#<+KJOMKb^BO@awh9pK7xV;A5}$Y=(60j#dC!AQ`EgTa4AFGAg1BY7iE zhUO0&!OC0@0Ii75$~f67(myLZ*7D~*vnxhwMqG?671zLezzWW0801cVcY~2T&Pl4G z=ODjDxbYnmTcAPQK)3#a8ss>E;a>P29d?^djY)#)ljYR&jTDV|fDX4u7<5Ky^9LTj zrcIlc&9Ry6_D=Z$Pzf*4AMOYW^+#Ieht)s=vL5M%IP)dN-li7lXzINZH(Aqlt( H!9ptmp!5D3 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0002.m4s b/wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0002.m4s new file mode 100644 index 0000000000000000000000000000000000000000..537675bb8b0778d248e219010d0f66ec0f021573 GIT binary patch literal 1940 zcmY*Z2~d+q6yAggDOVGWA%r6VLqJew=NBV_^(qP~LO65;QrrWys&zW{?Vp%HX5Q@Xd*6HC_ulRwgpf$5 z&(~^n>TCo*vTAfW2H1w{a?}PEaU#S*9tkwFn=#w6G6(P@r&uJbLl!3sYjSh5AjH#T zWveX^}JLo5r4K%b@7Tlo;O@R;>^>((N~9s@WEQX<%} zf!`3AKbROS089Yp1?CAxd}G0UtSj-4Jd-?vCvk$8fe}nFm=tV07&-fbk+>9$oC%KP zkiF2llDeec$ohV87J*5u{}?AF4I*wM$B}Uy`GhAQvV}#NKkEd z&wuuKW3Rkd9v65Txlmb5KL~dk@CdOT>e+H z7(&L^p*BZ_95+zouq#i9i>!eyQgnNV<4_y$yGzB!Yj%96UrxY!*Sj)`k9nvrQEZRo zQDW@DavI2FT%|;8r}wu_8+vXP^l||%U~~UEW{0ami;&~SAGW(%cbQ8n{xt$t1R_7P z2UJj64Du@MuFeV7oPxW1b6pACXSBwpFjqgDxKbL1Gp=#tAyxHF&*ff`!ab=p%*Mav ztyE?XWm@0}U^@-2uydSWjvnl2rsU0gU_3I8>+m6KjEqMRnlhFOz;Z5s#}MOYI(F%Z z-=FqSvi6o- zmrb6WpI)BvHM`^|(13078AzK+l{Ea_Im#PTwg#9vT-kf6-!uJPlYZw4Xgb`coJK(0 z(-f0o20aS9ZgS0%)Iw8JH240~+NDQIFpx#q^^%wA6IN)NBd>#LMUEEw>$Gim(^O~i z=DrfS2RfeGXoO3cZdXc%a{a;C=!2d$?|n)`;TfaFUf=dnx4@021bB8O8L<&QBc_Y$ zs3``{F~5<;6M00`hgl*|@E69~?h|6{gwmQyq2k zKw|hY7iBOd#7dh0X4ZZF_f{vHDPNp4nz!dMJy%k<ST7AcDK-sO9$&n~M$Ozc zSF!Lww&T5)?c=+u%#g8kgbbL95*|UCjho4EUf;eoWpMtgurFW2KY+?6fC*kZReSA1 z;XpRLyL20ODH*)k&=Ms{x*c@B-eIQhh4zDV_{=g^yuAWOUhym{1b>Kj&aAYInxy$x d9UU?#=9ihhVrwP^=XyRG)bR$BaMrS-{{i%-AIJaz literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0003.m4s b/wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0003.m4s new file mode 100644 index 0000000000000000000000000000000000000000..90c0b6fca9da987db67ab71168d964f8216d7550 GIT binary patch literal 1019 zcmZQzV2~&-sVvAXPRU>Z0uY^BoLK>6niOZIR4{@B85kHDg!~)8tfU7J8q5KTGcd0Q z$w39rfPM{qzxG%mWY(3rIbMJ zV_<;TQ&Un@n#aJv#0pd=3B*^JfCLa20xYVN!pTTXR6cNLhqI*@1zf0VpJDUJ+8O!FG51 z{r?uWAM(9z)Ez@ajB3L3=aaG(*iH;G^o5dkxB3Uyv_3x z57-#@E^diWJ78pF#Kh19SIp?Za7n3WcOz%~#Rs7R6GPtU7I{hYF`l})v~&pz?^dxp zdmk$n7^xUBGqO0qEttS?Uu*lqt=A7+-6a40h*4mV<_zJS1|uOO7ACe1h$^6S92nXa zfMTpH92XS8P6LazIRM4jIJhNT5Mq4?fMVj9t@(ODTMTSfY3Wyf0n+-G*hNX>|gk)`4qSPxji*$ji+$?tA3a>qGI zRrDO>w+J`BV`2+5h#TnEUr>V_CotR#-=o8Bv#BvjP<^tTdcKjO5f9Me_6UQ{C~f}0 z!`HNF)3P}>lil7aKL9G>1^UAsVa8p1S83T9OIw?^upj;Kifyq3&EWn!zkf>3br^S8Fz zEv+wQUaXh;-V}1eNXAH*h2zu@s0yGT?|629TK(j&mrd)21|vx$5e{xC8>lQW&@c3P ztos<2dSV06Zczc=q!fh4+p8+BHWdGHOp7>n`Lntb&<|n^{;PVx3Lvos6cUHK7cL|L JcOh74B>+Y4|7HLH literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0004.m4s b/wai/pack-conformance/packs/video-cmaf-01/floor/lo/seg_0004.m4s new file mode 100644 index 0000000000000000000000000000000000000000..1948711274de584a9063db08f1762ed597159934 GIT binary patch literal 1467 zcmZ9K2}~1d6vw|A2B=uIMS2Z~#V8V1a2Q#(f-$IQ)S%X*y3r+;TDl^XVbv)oHh_Ecpo`68A`iB@z+> zcpif(!Bk*TVDVrIFwA1WhWm^L@8>wid7Q)EANy;g19E%KoqpS9#^-mnPHG-^ zuVg;^RwHZtv}}38j>eqM_fKzx>VMD3SA}q_oC)DMgu<@D_Bgabje16XJav;{6%0jC zf!zI#;p~JTv}`03Mv6H90=PSsYIX!8qJ~Jk%!&J~I+$!NS`(|xy;OF2CST9WmanOnrxdD-K|Uow9;#KhntSrGJQFOBwb-xa6--*N{QdWb4BO>+dHRM-F7c z@13HSPt^LhiEGipR;-qd>aScAcE1xUr<39LB|_!h2TT4eg1bC3Tl~S>z;pLzyjXWa z6y4!geaFoyzM}!%St9ZO)j}&*YEvf6o}-r4`YGt%X-$tz=>a|m)&CO6`Tt(ovpxgh C<9&w! literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/key.hex b/wai/pack-conformance/packs/video-cmaf-01/key.hex new file mode 100644 index 000000000..f1f5c260b --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/key.hex @@ -0,0 +1 @@ +dd0a68c39958d90953634b6c1070e75dc5a5900d134e53f6b0dd35f0cec7abaa diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/LISTING b/wai/pack-conformance/packs/video-cmaf-01/package/LISTING new file mode 100644 index 000000000..117677835 --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/LISTING @@ -0,0 +1,47 @@ +688cb303ccb16fcdd21c8cb681f936ba813829e71fbf15df0ccb28b04c134447 dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +03ab06e026880875581952f91232405077be9a522dbf739b6a9d093458369710 floor.listing +14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889 floor/hi/14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889.m4s +759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1 floor/hi/759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1.m4s +d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d floor/hi/d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d.m4s +e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e floor/hi/e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e.m4s +eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8 floor/hi/eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8.m4s +a8a19ef9cd4d540037ef298097bbc5317de6a99690c8c4a745cc867c034208d6 floor/hi/init.mp4 +0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af floor/lo/0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af.m4s +10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8 floor/lo/10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s +2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73 floor/lo/2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73.m4s +a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8 floor/lo/a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8.m4s +c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc floor/lo/c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s +6dd501e27365ce9ef90576771aad73de4d200362e6974551847afc3c90604344 floor/lo/init.mp4 +ebdc7e40aecbe8b61124ac78f233b0dfaf2a8c5674d3fc9bb023935de1d9b6cb hls/classic/floor-hi.m3u8 +66f5eb8b89b80e7da839b23f39665eb85480c6a725fa29d93556efee673c1b9e hls/classic/floor-lo.m3u8 +d793737b69231eface4951001e65b3c52cba864f231246a41e64d49c77ebdc97 hls/classic/master.m3u8 +d793737b69231eface4951001e65b3c52cba864f231246a41e64d49c77ebdc97 hls/legacy/master.m3u8 +8c3b5e2b18192b383c8df8675acd435b861a2585bc6eaf0c09292754f44a8cef hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +8c3b5e2b18192b383c8df8675acd435b861a2585bc6eaf0c09292754f44a8cef hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +649330bcfaaee54f802f6b4ddf6e459daca8bb0e8df86c87a9d6bd0d65cd09ea index-v.wsix +68f00abff5ef19f074d510f8cce4592afc2a1d4981a87663965a46dc8bcbe1d3 moq/catalog.json +9f381e2ab764b5e14770b00503c1c90b9c22ba22f87464b2869a70644af11939 objects/08797901ff55d0bb4afba5cffe95df64b7e216f3a0c9ba82006133bb9b6d7f16.wai +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +d5f9cdd996920e07339b79093b9e4e5cb4237f1780f268220cc6f89c79aea90a objects/399048a078b0f2983149266a44eaf207cfa63f490212b69389fba4d72f62c60f.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +d03f0813c266294f84483cfe4db177d094c06b95ab3a8471d6b2ec53401f05a7 objects/a236e9070d10fd09342cafdbf6973edd35e5266cf850fe2f38f77536ac803912.wai +2316616549f7f92dc29e34fe656c332c9f4a1e20f4be26396976407acc792ba4 objects/a3ae43406f9966487b6c5f5a4d56e9dca50c327423fcfd2a98f4c342d1dbfaf9.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +6d665f1bef3784cbb428abc28724f74fa83c8f2bc812828621c93c5514b6dc0e objects/c5253efe2949669bb9df01d9f60c01f2570ba4be1c0af26105e092dfccf90d30.wai +0acecba00acc28e313805189fd826ad3a9fab1fe69727ef2d5999fc543426289 objects/c81171fa53998cfe94207ad66ab9b53cfbd4b3f058730e62512ca9f0f6ef2ea3.wai +f3bd9cbe3c2518c997a4d1d3a32145a04f55ef53e0b5760a6ce6aa5e14fe06a7 objects/dea0f6415f639fca99d91a0341aba164078a1bd4780e21d72cbf2234928272ec.wai +d22c4f8ac8a5de43bbec6be04ea8b6da72f2bd133f8f57a31607362670178c68 objects/f467872fe8d3cd1f60f832c997cc14fd00abbf601c61286a612089b4a53a195a.wai +f1f4e32ba9f76e36431d97e0fd52b9025075f553bf6b9f63c484d60573c8ea90 package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +428e24f9e1c62fc5590ce3d3a6239a5c274dcfc1391a2ea2abe8dc0562da7d20 policy.json +9d2b4c15ac17ee074f646d0b1ed11ef56557f633ff67a3e6a6d0eb4dd1596548 policy.toml +2f5807b891b8eb0a44b76c4303487be1dcf19e111f06f6c642e14b81c85d7c4d stages/legacy.json +8695fff48ca86321c5198e3a8cf660ccba208df4f40fd1907e76c64a52674cf5 stages/mobile.json +6ae56077cfc368a59489233eeee6ee7fd97437821822637ac62096ab93c85286 stages/tv.json diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/dash/classic.mpd b/wai/pack-conformance/packs/video-cmaf-01/package/dash/classic.mpd new file mode 100644 index 000000000..737f43910 --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/dash/classic.mpd @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/dash/mobile.mpd b/wai/pack-conformance/packs/video-cmaf-01/package/dash/mobile.mpd new file mode 100644 index 000000000..d3340daa2 --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/dash/mobile.mpd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/dash/tv.mpd b/wai/pack-conformance/packs/video-cmaf-01/package/dash/tv.mpd new file mode 100644 index 000000000..f0817bb2c --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/dash/tv.mpd @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/floor.listing b/wai/pack-conformance/packs/video-cmaf-01/package/floor.listing new file mode 100644 index 000000000..1e4f809b4 --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/floor.listing @@ -0,0 +1,12 @@ +a8a19ef9cd4d540037ef298097bbc5317de6a99690c8c4a745cc867c034208d6 hi/init.mp4 +14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889 hi/seg_0000.m4s +e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e hi/seg_0001.m4s +d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d hi/seg_0002.m4s +eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8 hi/seg_0003.m4s +759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1 hi/seg_0004.m4s +6dd501e27365ce9ef90576771aad73de4d200362e6974551847afc3c90604344 lo/init.mp4 +0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af lo/seg_0000.m4s +c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc lo/seg_0001.m4s +10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8 lo/seg_0002.m4s +a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8 lo/seg_0003.m4s +2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73 lo/seg_0004.m4s diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/floor/hi/14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889.m4s b/wai/pack-conformance/packs/video-cmaf-01/package/floor/hi/14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889.m4s new file mode 100644 index 0000000000000000000000000000000000000000..3d6538a6af6748967bd9291736570490687c81b0 GIT binary patch literal 2217 zcmZ8h3pA8z82;vO@F&)=8jRa?m&*SBRa?%uB$aI)sc1_#vo2AtnZ!A%e|MQih*Kxm zT%wia)T)&_R*j0BPA-wCbf{LR?W8M|^S%E+gAg)}k;O-a z#{`BT_``d6OlTY&9b!TQ<9HZEh=+{UGvlYJ|9~cUphX|i1j*YH9vK-750%dAu-&mxq@_~b*v~|=J$55SMW#q zakoIBUQnAxwWL_~mu*$jmee#Q zgOGMB%ma1?wY=4@emLg;tX6)OcBRcIK98?XH_1&l`nvSlyV4evHbF9KmG^9Y7dk3_ z=<;{!E~8B;lCLjNV_W(yW7NiMKs05{_4JPR1dQy93~jogtr zZH^GYm>@q?aQe1Lg^q3#1B8&TZ#c*m)T|hOvT2%N0Q4dVoIat) zv#So<``9a+0=>o5xYwf6Hg!QDtI43_fi8FLF8An#NzSU960~&#a_w|ICaFv$7?|X2 zLZ{E4Gw&!gPuSvH)eHUR^7RJGIRA>#4RH@$!G1nzc=A10Q59_S=_bUr5eOaPIJn}# zQS0e5i-52di*7e^MCVXl=9}*r+L&653VlsE;=I%Qqae4N3^aa?YU*QS->T<8P-=PL zbxMlgmHxZ-Fa)Ki26~e8qnp+s;0}|CQt$xJQkPEjRsgt*(I}br9A_US7zXeDG{dO_ZnqS3u~mUC^xZC;tgZ@jcweSDt(zxFYuID zZQD5pb8trm_gaBhmDPRUzV&bXDAy1=PX%hk#R2!|P(>`1c<}YUaxF>JnASGWy_XhI z>qx_V+zWf*2$yqCW@r};yUAfpo@zNTcja|>U>V?E8vf-L+5`A~@z$`f^S$;$4A&f2eJueg>UEkEA~1v}XQD&kyQVj=_I7pecm{8f3IKfAXd|6&wz z@Ny$e>=%^jlA$)_rdY|Hu6390UVw0cgm#NM*VEB1U6ED}A%gjOJ?f0(#hjb3aq1A# zuuz>im3^#O3HTlj8_C>;3weNtX;>70N!ncm))B0M>Or;>JIlw0Xc&JK>!4x^WRK=U mqkS3%H6Ck+u(3?TAh%}CRR*3(tlACmSfG+U~z zbTLb_vZ*#pZ8aa@t}`)dKC^a6DK9bEs`n0)U@}8y`ZGOA_Vgc>s*hX^?Nr*a|sV4<3|I@G!wN z@QV$@2?h%tQb z4Gahh!&REg_NSv1B4b<5$ssV!y_lO9U-ndQcv1c6ye)5#>MQ5H5>X8yl25FSgW|4q z4(6u7}5d;!QvpztH@;Wf;8G7 z|8CL+fz#h<{rGdt=I6=xbhw?X4_imh?KrB>^~!rb6vr!#T9bd@sx;K-es;c7T1>ql0>XDby`ZB(6 z##l$dK+>?-x;w3fo_^A$@xTt%a)Th=yPEX+m}h6&iyUdoNztvxWM_zIlWC@_x?2H;W@rEfAO1 z{S?~nm$I?>$(70z(POHS`_AN~?r_l^$#X;0}>M_mEnr7!Fvv#v7#~1RP;Xv9K9+L~QUR zC8hv)s8oVNCCWue1bfOjR)oP_di~2k2fps1pJjrn0g2$jVgif$`Fj^o@XhbC>GNIjE z3mOH9ENJ&<3)DJ7r$M6YREJS0196-1W%^wjS5aB6HVW z9PlWjcy{gZkjtaceX_>f4z#|uWP&O+`y z4y#=^nM*_FgX3$N7N|8?ZiGayNhV+i1VYGE0|@#Zf=-MsQo`4)jpLGtxtY3u`-FxH z(G}UvBPl9&*k*M-Wvl+Ep9=Qyu^7X41#2sqYDt9hkwp`hOxvSAcst!saQFl0{nGU+`VL+9DXwf6Vgn}m>JXzl8oBtF`BSUOBRXIMwXOeOq?~uOp;pOvQ$GYwxl#s z+e(h4l%x{|VuVV{!u6oSZBq;V4?g;b)@_(9OPk6MwmJ|1wi0UrSp0U1m% z4frtv!$MOnLH!I2(@*Mb&Dva3F&)O6HKk&6mS#OsO*Cuv|5SzspV)VThwaS-V`86) z{=}N2(P{WP)iQ}#p{EB>^09&9H82&~MWI2(V5tw0I~K58l&vT`xv0$i_`hMv(<&3% zd~+CC%6-2kDPQ-^?zVM*z6>_c;6>LLrPpSO{DZ7d^wia}oCl6Ocx*3dxmoGq+ZC3p zva@HE__V(7%Ms^#XNI`+wGZ{J+jfDMdc5+AenI@jxf?B=z0t3RTaClhcAxsC^T}W7 zf||^;Uy#b^{3`?A=lUxmw>;P&zr4l*>NdEuHk-YtclGrIIo~ez`xSHRZ@y~iNi?Lg z1GpO(9(JtS6PNFXZhoUv%HO1x`5LjSvyHQuR>N`Trn74g?F?|Q`M}ZcSC>~bzmAz> zXyf^owtVxAbNTlNn+5G6hc^`twP6>R$W-TlsEWKRtG^V%7GH{*-_}*yX)5jtYpzy> z3cM1-&GK{fd^-5IHvIXhNsq?NJMH{&ZKs{Obg1h{bWpD6`jH;?!lAB%>df=^Mm>1K zJ6(bPF@@2MgL+C!?NQZ+@SR(hqz8T%{=l}s-lXy_NBNVBRx(L^iZ$P9QNYX5y6>-K1s{n9emcj>xCJI?HX(n2Z>k4qT5%3qmKm}EFY>YP#6 zp!#siWJgMD?cJ=u19gjeA9M9m2n0V)a=Wg;AyLZVE?9N|{cZg0)q) zAAt0oO+61q^3Wb$MIAzi^{DhxA#RqAuwVlk1Kx^5E%RS^%X_~QHUhRGhuwG!ZzTgZ z4Jrv_<52U-10$05qpo>?J(Hx{8HKmv5OdgwOdY5khfwf(mxW7Nqow86rP11bPC&t+ zOs5axiWtNcW`cleIMlI~_w#yIp@-ll3ixag^+&uJgIK_3lM!<;hYlYtyZEFVsp5Il zjLgx;!zd=3Ma&$6n8Dm8Le@uK9-ot%^hq7h`jkLmLDub#z+~HnduCk?->nUFt*P`~{kY&tw7ZARZ=F>yKIU@~6WE5va7@9w9nxAqH3bW1%VA%> zhBrijYX_ACF>&beo`2#KB^Y-BF_Q=}hT+LfV>jnfEZtPHjes0L&=VvGpH2wt3r9Yo{g zRi{a90P#x>!&QX8avHb=p3wf*HXN$S^j>M;ck<%R_sL(wRKfjFs06^Vo`2YX_ literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/floor/hi/e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e.m4s b/wai/pack-conformance/packs/video-cmaf-01/package/floor/hi/e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e.m4s new file mode 100644 index 0000000000000000000000000000000000000000..7385852449e2f4b49345f9fdc6b5f563b472b1a3 GIT binary patch literal 873 zcmZQzV2~&-sVvAXPRU>Z0uY^BoLK>6niOZIR4{@B85kHDg!~)8EbUKV3Q7Q_nPow8 z5J`qJx%v5NKskZjw2Ty}8YUpUrKBhkBra0|5@%wt0J4F4cQ*iOV@8N2A|+`lB~beq z7$El4loXZbF)%Q(0@XHahRfhpY=T$zlkI=My_9BFe|T@M>?|Fl zZ3;%}MvM=D%9w!x%IMm_=)iFP$^E+P%j6%w)~mCskv85?d2%h9%tpiD{y}?M(h?Rxof&$nQu)0>D5E}=#gbPBb2`I!a zz?+cK3~~xs6-bDK!GA?BLRF2CiV-J6^M{RKRjvns?zkjSr|_PU@z|Y;r43&yPn|y> z$s-Tc$i>J~aSfp{2Pni1bl5M1@gN}{pu6l5sxp8=yg+xkBUFKe_)y&i65>a7R|e4E z0uNyB0=s_B2O}*bK}P0J8-V5uIDn#GgyG71CY7gmji1^2AFmeL-*I2`?)?XHi8gVp zK>b2YY*km_YFQW}fMUWd9H)LDi3I?~L^!ymY|z9+1$dKE(8RZ0uY^BoLK>6niOZIR4{@B85kHDg!~)8tfU7J8q5KTGce17 zvsVONc&0}C-Vg;&`1mY`9KmrJifmjoWMUb#Ckd2Jh(D=x5AbmPWdXdcmu|0Z~j#0MQH)YXFL|FtK$YiM2Nv2^z7oa9mITTLMxPcD)g)kl@!~=AfJwjCmP>2`kE_Z|~kPsiLyFfzxsP4)D z`di=u%w1sD&-q}aWhBVR{AmNwd;teg^ouZDS5N03S2DyHkxY*w%za9wEC3|Z zjyYl(TW60>Q~>ZP3lCS^w^EbD1f6S9?*#m6MMZpO#P^$r(@D)S*^GRek-KUw1c=HBzQiMCwDUp^dvvq%KhFVIdHksP8>Z6g@-b<#weN zx2OY?Iiyn2-?IUmal6U(CFV5#2z8FP^wmEZ~=>RxocGNrU JM4hO6@D04WTgdC-zYpnte zR9Y0Zs93cXts*K=DLN)dH3dIViy{$4EZW+R0uJq9j$`rQL%fB8wSi>?3D9M#bXFIl^pC~SY1idq7(O1hGH6lY)K+M6h5m6hl2|k7l7f zGUVHFP>mf2@j+O2UT8%;P(PY$kE1>6LoquqREIbrT(qJ*_-;*Vl~U*F2|Ik!fO?Zr zLVm^KV%4zq!tfiO5i(-=?3dGuro0fm*Yjsi%c-N<{Gz^wxY)M36J<%~m-Ome4;Acr zy!&y6?#uegPt;?R1`NvUhTT10>dRWw=Q7#3=4Q>J1^pX*a*qi|E<`>^*;jj>)gIFJ zpLWH4V^r9bmVvTsJFa$kOiQ@9V02AZ>EfK3JK_YXF|(7}%d7t#rNEwX@M{z1$A^oqeEJb7 zA=oUoy^g{u%KxZxa#qe(E4!iww3AcDj8;X1|4qTyvH zPeebVNFm|L;T@D)fziO=u8f%O+p(u=jii9^=JJUWW>j}-`_K5JLs2l$S0XfaF)d$WB zJgXlT`&RZ=kfB60moF`}HG&-Xt`sTu44$r(Ycm@ax8#8LxO)PM7Io#>=qLi!V=gCc#2ehAt}iU_F_ zGbCYJ-lg?ke)T3_3h<{pu>#tCYp><{_j>FHY2#g)iEplb%h!Ed;>u{infVI01`T|8 znS&Y)ek~+pTN<2Wjw`3{pN}E+->g7#8SU5Iu!`LeBj!o?vSo}$r>gj^ArO8WJ8-p= z2@iHeJVV?U;O>1~n|AO9yad?xwmn-?AoC8}`-OFmfr2AXELY>4vQ{IEO5pJJJB@mD zM%t(cSr^i>~x{cC+cVw3JbrdzH{fsImOSD79kY08MZ7{c390tgvc)!Yh3>61$rf|@Ga z?S?f-*9*o*l4hK1AOJg)?S0>tK~Lhd<};BKR;F8`jzrFZ2bjg-)!6$$REyFw8Rysh zWT+d;p9&Z3eJ3nP-^rS=vv@AA!}B62kmCv|$*x=8VFv2C3?TZjjlwrJ`Q`5&px~No zoX{Zk+UmXXxaNnO{~p*0eOd<={eQaY_V#qics*YMr_(v0Xob4JD?Xn3q-F>vu4ll| R>B5Q!))e@JZhjgg{~xLLQIG%t literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s b/wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s new file mode 100644 index 0000000000000000000000000000000000000000..537675bb8b0778d248e219010d0f66ec0f021573 GIT binary patch literal 1940 zcmY*Z2~d+q6yAggDOVGWA%r6VLqJew=NBV_^(qP~LO65;QrrWys&zW{?Vp%HX5Q@Xd*6HC_ulRwgpf$5 z&(~^n>TCo*vTAfW2H1w{a?}PEaU#S*9tkwFn=#w6G6(P@r&uJbLl!3sYjSh5AjH#T zWveX^}JLo5r4K%b@7Tlo;O@R;>^>((N~9s@WEQX<%} zf!`3AKbROS089Yp1?CAxd}G0UtSj-4Jd-?vCvk$8fe}nFm=tV07&-fbk+>9$oC%KP zkiF2llDeec$ohV87J*5u{}?AF4I*wM$B}Uy`GhAQvV}#NKkEd z&wuuKW3Rkd9v65Txlmb5KL~dk@CdOT>e+H z7(&L^p*BZ_95+zouq#i9i>!eyQgnNV<4_y$yGzB!Yj%96UrxY!*Sj)`k9nvrQEZRo zQDW@DavI2FT%|;8r}wu_8+vXP^l||%U~~UEW{0ami;&~SAGW(%cbQ8n{xt$t1R_7P z2UJj64Du@MuFeV7oPxW1b6pACXSBwpFjqgDxKbL1Gp=#tAyxHF&*ff`!ab=p%*Mav ztyE?XWm@0}U^@-2uydSWjvnl2rsU0gU_3I8>+m6KjEqMRnlhFOz;Z5s#}MOYI(F%Z z-=FqSvi6o- zmrb6WpI)BvHM`^|(13078AzK+l{Ea_Im#PTwg#9vT-kf6-!uJPlYZw4Xgb`coJK(0 z(-f0o20aS9ZgS0%)Iw8JH240~+NDQIFpx#q^^%wA6IN)NBd>#LMUEEw>$Gim(^O~i z=DrfS2RfeGXoO3cZdXc%a{a;C=!2d$?|n)`;TfaFUf=dnx4@021bB8O8L<&QBc_Y$ zs3``{F~5<;6M00`hgl*|@E69~?h|6{gwmQyq2k zKw|hY7iBOd#7dh0X4ZZF_f{vHDPNp4nz!dMJy%k<ST7AcDK-sO9$&n~M$Ozc zSF!Lww&T5)?c=+u%#g8kgbbL95*|UCjho4EUf;eoWpMtgurFW2KY+?6fC*kZReSA1 z;XpRLyL20ODH*)k&=Ms{x*c@B-eIQhh4zDV_{=g^yuAWOUhym{1b>Kj&aAYInxy$x d9UU?#=9ihhVrwP^=XyRG)bR$BaMrS-{{i%-AIJaz literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73.m4s b/wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73.m4s new file mode 100644 index 0000000000000000000000000000000000000000..1948711274de584a9063db08f1762ed597159934 GIT binary patch literal 1467 zcmZ9K2}~1d6vw|A2B=uIMS2Z~#V8V1a2Q#(f-$IQ)S%X*y3r+;TDl^XVbv)oHh_Ecpo`68A`iB@z+> zcpif(!Bk*TVDVrIFwA1WhWm^L@8>wid7Q)EANy;g19E%KoqpS9#^-mnPHG-^ zuVg;^RwHZtv}}38j>eqM_fKzx>VMD3SA}q_oC)DMgu<@D_Bgabje16XJav;{6%0jC zf!zI#;p~JTv}`03Mv6H90=PSsYIX!8qJ~Jk%!&J~I+$!NS`(|xy;OF2CST9WmanOnrxdD-K|Uow9;#KhntSrGJQFOBwb-xa6--*N{QdWb4BO>+dHRM-F7c z@13HSPt^LhiEGipR;-qd>aScAcE1xUr<39LB|_!h2TT4eg1bC3Tl~S>z;pLzyjXWa z6y4!geaFoyzM}!%St9ZO)j}&*YEvf6o}-r4`YGt%X-$tz=>a|m)&CO6`Tt(ovpxgh C<9&w! literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8.m4s b/wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8.m4s new file mode 100644 index 0000000000000000000000000000000000000000..90c0b6fca9da987db67ab71168d964f8216d7550 GIT binary patch literal 1019 zcmZQzV2~&-sVvAXPRU>Z0uY^BoLK>6niOZIR4{@B85kHDg!~)8tfU7J8q5KTGcd0Q z$w39rfPM{qzxG%mWY(3rIbMJ zV_<;TQ&Un@n#aJv#0pd=3B*^JfCLa20xYVN!pTTXR6cNLhqI*@1zf0VpJDUJ+8O!FG51 z{r?uWAM(9z)Ez@ajB3L3=aaG(*iH;G^o5dkxB3Uyv_3x z57-#@E^diWJ78pF#Kh19SIp?Za7n3WcOz%~#Rs7R6GPtU7I{hYF`l})v~&pz?^dxp zdmk$n7^xUBGqO0qEttS?Uu*lqt=A7+-6a40h*4mV<_zJS1|uOO7ACe1h$^6S92nXa zfMTpH92XS8P6LazIRM4jIJhNT5Mq4?fMVj9t@(ODTMTSfY3Wyf0n+-G*hNX>|gk)`4qSPxji*$ji+$?tA3a>qGI zRrDO>w+J`BV`2+5h#TnEUr>V_CotR#-=o8Bv#BvjP<^tTdcKjO5f9Me_6UQ{C~f}0 z!`HNF)3P}>lil7aKL9G>1^UAsVa8p1S83T9OIw?^upj;Kifyq3&EWn!zkf>3br^S8Fz zEv+wQUaXh;-V}1eNXAH*h2zu@s0yGT?|629TK(j&mrd)21|vx$5e{xC8>lQW&@c3P ztos<2dSV06Zczc=q!fh4+p8+BHWdGHOp7>n`Lntb&<|n^{;PVx3Lvos6cUHK7cL|L JcOh74B>+Y4|7HLH literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s b/wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s new file mode 100644 index 0000000000000000000000000000000000000000..74171d12cf37630911486c49494280811c03c617 GIT binary patch literal 1019 zcmZQzV2~&-sVvAXPRU>Z0uY^BoLK>6niOZIR4{@B85kHDg!~)8EbUKV3Q7Q_nb(8l zAd(Dca`W@kfN}!4X&EU{HB3NyOG!~8NL;1_B+kTO0b~R9?rs3mhKvwPL`u?9N}%>J zFhK07DJd$=V_;xn1*($-;wvD-fWQ!lb%EFfh}D2t1Pu!V`HDcS0i~6JGzf#lK^UYS zB(DU-azHE%<-_EGG}GhUl*AG)E}#sP`lH;M0}4jUA`Hq73=9oGAyM;+kXjA4yW8*o zx3K+??`@;*7$O??lr6zX+lcW2P!TgQI2m0JI9_0Q5a^s1cxk6W<;96idhh3Lo|kyQ z#<+KJOMKb^BO@awh9pK7xV;A5}$Y=(60j#dC!AQ`EgTa4AFGAg1BY7iE zhUO0&!OC0@0Ii75$~f67(myLZ*7D~*vnxhwMqG?671zLezzWW0801cVcY~2T&Pl4G z=ODjDxbYnmTcAPQK)3#a8ss>E;a>P29d?^djY)#)ljYR&jTDV|fDX4u7<5Ky^9LTj zrcIlc&9Ry6_D=Z$Pzf*4AMOYW^+#Ieht)s=vL5M%IP)dN-li7lXzINZH(Aqlt( H!9ptmp!5D3 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/init.mp4 b/wai/pack-conformance/packs/video-cmaf-01/package/floor/lo/init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..2f94c3ac72712cf4e59f6bcae567664aede847ef GIT binary patch literal 788 zcmaJ;%}N6?5T4ds=|M^lMS6%((1Vt)KRp+`^dNXr5WK`DrAs%>vPpxAh`xaD;ahm{ zDLncNg2y_O?YglRhs}Q9H}hq(n*jhewzp|)^f5pc2yykf>qRO(iZJ)7v~~cHC^r#^ zWi-wny{G`-Q^qfW=@mUFo$FW?H+ ziLpKteyQJE(MrS|YfOpt|9<}FckWL_k}Z3Hi-jyW;RR|vI4|JR2ivI^~;& zpV<+4tt~Q19tx`0=UKv*{N32=1o^YErWgo$9%yKY6k*Ri!|=C#W--C8VA zw782-o}do38mj8fhq`}d$Tm}MQbg)QYtvYNok)G4HlsoyHc{UNnkafkI>_xRCvQ+Q zn|Y*C(Lb;Op9{+|ajB$7s%?iOz_DdKP3e|?VlU3;+7VSm~Xi&B9<%qKyar?<9(ICn-+@gOP%!smti(g31+aX z5UOC}AoqjZ%gn$8@&+7)LRm&Y8saBr6!~_jJV-w$5Tol~0F~DO(mY^!RQ)PtQqDdT zkEwr@+MASWE}6EKwKzdbf%p1umIpUEI*oEC&4wBPrTzl}3y{qO<$vQT(h{6v$=WjY zo%hU%^K7q3t0;lx1U+f{+986G;hrU71kL$ zMQ(pOwJ#)U0pp8%LYGtTsX^Qei*%4*ki-AK^EBtugL{L@CkQ1y5;mQhvQC!mM9j-I zD-BfYG=lYYCNxQb4Sw`)6&-~;yI1b9xK!9vNCE@>q9bz7gJRw;4 zD|lwlzbOh;*RpnQwfTKz^M{CHzNA2%l^?#n*ITSlW%~or>?bz;!=eoy{?GuSSNcb` z9~}Om!k7pEaxVzL${%vmKeg;fPydO1T%G%R>O!+EnAJ8(9{TqCPZZD2@{kvW2M<}z z+`FZ5RWihru;Lcv7v%D%HAt-a_GNMR+G!p>9)EQL%N80=>)~d(>0%Le)%K_1=B@7{ zzy`q5|BEElKwD(?lATxJFQEL(4N*D8R}! z7$20ZQ(zn*4UBhmB@7JzK@bdpl4VQ`C1q?3x%o+%IjL+6IjQN1$(14u<%yYkWtl0d Y`FfdoCGolWC7Jnoyhx&nWriSY0Dbf>DF6Tf literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/moq/catalog.json b/wai/pack-conformance/packs/video-cmaf-01/package/moq/catalog.json new file mode 100644 index 000000000..a1f4775a6 --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/moq/catalog.json @@ -0,0 +1 @@ +{"tracks":[{"altGroup":1,"isLive":false,"name":"v/l0","namespace":"video-cmaf-01","packaging":"wai","renderGroup":1,"role":"video","wai_capabilities":["wai.video.int_motion"],"wai_determinism":"decode-equivalence","wai_receipt_alias":2923025889890445,"wai_receipts":true,"wai_receipts_track":"v/l0/receipts","wai_staged":{"layer":0,"lead_ms":null,"set":"v"}},{"altGroup":1,"codec":"av01.0.00M.08","height":36,"name":"hi/floor","namespace":"video-cmaf-01","packaging":"cmaf","renderGroup":1,"width":64},{"altGroup":1,"codec":"av01.0.00M.08","height":18,"name":"lo/floor","namespace":"video-cmaf-01","packaging":"cmaf","renderGroup":1,"width":32},{"isLive":false,"name":"v/l0/receipts","namespace":"video-cmaf-01","packaging":"wai-receipts"}],"version":1} diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/objects/08797901ff55d0bb4afba5cffe95df64b7e216f3a0c9ba82006133bb9b6d7f16.wai b/wai/pack-conformance/packs/video-cmaf-01/package/objects/08797901ff55d0bb4afba5cffe95df64b7e216f3a0c9ba82006133bb9b6d7f16.wai new file mode 100644 index 0000000000000000000000000000000000000000..65f62269aea73787a501fbeec0ac428bbca5d7bc GIT binary patch literal 2648 zcmZ{kdr%Ws6vmerF(Q;l5hNhQtq-I~?{1P!!thd2(J~Yt_*U3tH?j%|gorYTOCJ_+gWV-sYUy>*X<&7bgEhdq8B5b(w=5F{q_i4PEFdYR z5-1gNxsp)HNv(F5CRa)+m4dKLG=nu7Vbd8f zEg@GhN*O5!Dj?S?3Av0?5^61}f}tc$(KKMyas{l$$Ve8}Q;=##Nl4XFH3e9Lkx`aG z8fn8K7A_F~2V zH?ZsCE!UzkPI>q||5uyO41Tz^^O@$x%cI3d2hA{-dTNAh*2cIU;N!$?CDr-grn@%p zTkYgICZr~$D}F}V>e7NL-IlnVYTq+I5u;YfRsAn6!|F;_h6^&HJzl4z&AfR)mS0%a zRrSy4$2GsOeX%j>Q8bhk|})6NWinhf{&?ChXcvm+D*HNe^rC z_LEUVttKBJbP(E`8uGlSB}BFpQ4*`c4>$@$Cc7+Gf)YlD<||r~!dol+tezo2By@4J z^IU7c{c-NDEKgsn?hTwo?qyLt$)yC>t&guKAqHnRFObj6b?ch(VDI-sg95DazTg{) z*nERGoZl1vNlQOCl}N^mtrjofhLuhg^Oo9od2S&lqI~K z8f)1>b;^>vaa#b2_4~T9Q)z|MTM)EAYN-eMc*~-LF>MlSSwAqW_N$hzPsO5cN39P# zx=LU|d%*<*+LL&+=2G9B*$Gu`sKRieb4LYFSJ^dn`K>4fH&W!j`86M1r44*{4mB3& z<|SLsi(WR$|d_jvr7<?C-Dl4 zhlBmqR_gXT`pHgmRBV|4yoKFphSAurE7zf`H$|~oy*Te z;W0wzFMJUZR$tgSBD&4r${+?)MD9B+*)0qfz~fstZ*VO8FfI=bI@XTT;yCdvm8n2# zTpzlFeva??I~(5zt~TM+V+k70G#grPXZr{FUO@jdGwi@buxxASAMp_`?ODh$vkzB! zc~{V^=l=@P4{CNFv>4|R7k*#hhtTKR;3T%)>|-O2twVF0Z-X0a8_XnOdfuUW6ui)e z*DD`rT(!z1u};+w&`H+K_I7slQ*_hD&mOuJ$LrDL)mU-l2D`;IWQJX8nR4v%VblO4 zaJ**kc+lKLs|pVyM6J;IfxRAjWb3(Se1FLz_fmU#$CmYb%&39IeaeRozj$~%Qd9br z-t#$kQ5gc$*$VewnkK=*gWa7ZT5OuFa<9J2cxNO^ZRk_@bj+kq9?RIL@V3(vPnyuq TGwnLIT#A;Zm7VLJc$@zN6b$1i literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai b/wai/pack-conformance/packs/video-cmaf-01/package/objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai new file mode 100644 index 0000000000000000000000000000000000000000..b15b5310886cf0f3076b32c2b77264e58fd7b1d0 GIT binary patch literal 39826 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

YmH;T^6RA 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 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai b/wai/pack-conformance/packs/video-cmaf-01/package/objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai new file mode 100644 index 0000000000000000000000000000000000000000..04de3f1885449c337a118064bc77123ef3814311 GIT binary patch literal 25514 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 LNgU4&(V+hW7Cne_ literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/objects/a236e9070d10fd09342cafdbf6973edd35e5266cf850fe2f38f77536ac803912.wai b/wai/pack-conformance/packs/video-cmaf-01/package/objects/a236e9070d10fd09342cafdbf6973edd35e5266cf850fe2f38f77536ac803912.wai new file mode 100644 index 0000000000000000000000000000000000000000..cb34695f2dda5026c7ee1917e92a753c01890855 GIT binary patch literal 2251 zcmZ`&dsGxv7#~)IjfZD>EiYG=$&^~$?#%AY&Ms*9I2egQ$5g_{GP8S^24xqPmCb|5 zrpFgVZ4Xm|Gzg1Mnj}z~Jj-+BB!Wm!P05p%nH5;1SXOs;Y8L+Jk9*F{{J!t^xZgLc z7iJK{ei&AcJ6Rq#;Dj3B$#@Yo^DKHR+v9TsooO{@cYifm@M(P)Py zn|M1c^5W&Vi7jS1ek1SLjH(f(+DoBk%Lu$888_LiX5PWuth}`VHp3&0WeBfVL}mORb10qBqh+(AN;|Y7AJC3;OE(pxw9uReG%N>b2uPY? z0HdQQhR{=_MNg0#QVS@c({WJGQY2~SEIN&zqglNf=rvl3(a?Gw;knUL=y0IWrHGcG zbY@0NQa}$V3qw#^njts~sYk6OOS3G19Hm2QW-SSko{r?q458sP91S30*3zDfbg=dU zhz3%QTkLERM6_Cvj6a1NG;}iV#0|8zqT*%%h9zMbHXEHZbYjs#lg5H27#5BN1))dD z(Xl!skdk+&$*?+X8-^)cFy$px-petHuGKI2mmF)$GQD*9GF_GB?mia!X09`Tytm?w ztJr-BHFzake{FQ^M)Nm^gOWxfC`Z!G{D`r1%O7!TM&Lk6B3Qp_Xx6%|$HyAO>oa$J zowsG%!gtzTHQ0w=sPOL|IJ9~GqjjI1iB2sVnbwzJIUl;fH7jBCFutm?%%;P|#-!TZ6+16Xt6e&t@OE;PvFnSARBWv40914~o|(I+ z-4y=&EQMcELDv2T5KXNwys+%V+4VK%XhqYOPxmDDS~^=++#dZq>OnY>mX|#*INp#q zR6R(wRtAq)G6zGxeQl>-%Q@=mk>hByFI(lT+hKPHi9Z%LBdrtY{&+~H*X<%*JGfPhy3fFXe z`+no=c@ys27n=3s&8-az)%yB(kN*|6s-V0g+vymT564>FiJ!O5lwzk-mhO5&k^Ek3 zuQSltcq;+zK{!UngK0f33=25tSp&2-Qf%;QU7zz->Y^1yv``WO{Qdl=lvH)d1t=T@ zNTe=LHzq+WF09HmM?i2O^$(Q^NVNwX7#;obhE}R$4fBatvA!6gvu}wBn^8# z&BsykfB+_)LE1_j&d!*a!@I27!8AJBDM9w|1>oSG#!UQmh#v&016+vuL@ z=F32fIElpGDgJ9^o*y4gI11pBz-#&cs%=+d-(=U!*)Our_753v_E{OeFXOSzoAO0B zbEIK=M}2UP*q0=eYo8VX&uqF?S2VYq-WK~FQpTO?o75*pPsR?ejPU_oOB~~3lX{X- z#0f+IOf?BKLbQhgDcY-cp(X1v;?lsaWqp4SXO1=Gzh8R(l|r{7 zedaw|>l31<+RlGi5K;j~wC&yIo?jRD|M`J)?e8I9s|$boP4%T}pyj9ThUJ&e*+mh< z)HL}I30!kPs+h*h)%($r;ESDf)9Rt_Uk<%BJ#6JCJGY$e5os2P5nUdy`QpGAx;+!< z`R~`;Pt6ttlwgrko|@ymW3NE}?tSf72>Rl9biFZt$Js8CdI@%*|D10YN)bqx1YVL& z0+I#hB#^Nr!_1 z8`{!ebU(X1XvsQJFjE;-E7Z9>A(e9l!TUiLcHqP$f|IrrWmzq<=$w>OAKs}reSU74 F>mR0bu}=U1 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/objects/a3ae43406f9966487b6c5f5a4d56e9dca50c327423fcfd2a98f4c342d1dbfaf9.wai b/wai/pack-conformance/packs/video-cmaf-01/package/objects/a3ae43406f9966487b6c5f5a4d56e9dca50c327423fcfd2a98f4c342d1dbfaf9.wai new file mode 100644 index 0000000000000000000000000000000000000000..47c02f7c0adcdd04a24a1b2823f5706528ad0381 GIT binary patch literal 1380 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 bxgBY@5%KXhDVueAQ1qo2i}6y{*ZjOI^HwNn literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/objects/c5253efe2949669bb9df01d9f60c01f2570ba4be1c0af26105e092dfccf90d30.wai b/wai/pack-conformance/packs/video-cmaf-01/package/objects/c5253efe2949669bb9df01d9f60c01f2570ba4be1c0af26105e092dfccf90d30.wai new file mode 100644 index 0000000000000000000000000000000000000000..f09447b3f922c9f1dec0de9f4d9b1cf378eb5211 GIT binary patch literal 2503 zcmZ{ke^?WB9LH~nvXF4|5o7~$JCV#y`rd7KyG@fBMxZ9sQb{AY+udYOu*sO9BCsS# zfeI-JGZf8?e8^Okh|<6xVM<16_CqmM=AGo;H8Fnk}=Da~pmdi+W zaan8ZE-rIK&qJ;BYMQZU*xl=3G)x&Yk|KuA!O(myYIQnTyW8$`*d41-Qy%(^-NC}R ze^r)q*>gBH)#h?$deuy)+iruh6}NJj5g2fSpn)E<>L`k~v4FH%SpW=r9jPNJj$(13 zCk-~1v*I+yaSX#ydIsni8$QAcQ>Fe79PBRDTg&NykuJ^wIXD-ro4sZ=?3QEAKu0rx z?1uVBQnW=G<=B zbT&+j5eAmh;{-4Q!bV|)o}@5HX@pjsCTSXQ3}JxPSUt|cdIp?fDNM)c7!q(8t0%n& z>84$)I5?0z)aIfyIhd9JS~MLs=}0Y_i<(G%etus7g5U^(M8V4pF9p2dq>*Sp1eu5g z2ExC7?+$KH1yX#gzYN(9Z^t8koiWNYrR^SNPW9f%gMY8gxu@RQF~2Odxb*c;U8TSG zPwAZzd-X98xlzM4R~I%GTNW*iKGfILtS}88)Wy9}dFEVw-29%EBq*;Hk{?zzN$MO5uO*JKW9=+Kfl2Y*MkvF@q{7^_W6n*fJWUrh! zHJI?>z&_^ruXD3crlLr1(D_v*%5B%4{=}J0XxBgc#Qn|ZemmBe6)aUIsn;3a((m7v zv1N{D!}W2sL|#|s{7K3KB_YLOQ8zOp!>2Uvc_k^f;f`wTKv&(qw%^mI1y7%MOSWXg z*$=mTHPl93wCJwy(>1O<{zzuc(dYIv7c!eqq$%kW)|nkWwcX)#&&sv~H7lt2tdxi? zWr2yE#OJx+Uuq4Mg;l&~y1S}d+f{p`=WT9j`Mfo^`;>+oJ-fS#j(#~Dr!k-JS-dE{ zifb7PES)-bxF$E{mFFKRT%4cs^^Ae$$@Ldhr7zDKlOv&zC}xtzq+f?~cC8>wzq^_j z^+nQaB?Z6zxlE&o|6+JQwqWnwi2}R}*|})9%E-{7!Fntte4HUQT_GXb-VXyL$rIjE^-U--boLv$l6(C|r?=2tE;v zY4IS)xDL1>@YjP>7kPIIDk|VF@gJ>Rek$u3b<>2YH=~qKenRxi_zdIxq@Gb3ND5~P9Up>5637dLJ z2uY9jc~KC-H&f=V+?hB=>u{Z2Pd{+aq)5-@n;s#>ed6wtRlXDvK;0_p>Qa2%gOb+q zlFpy|OZob!UqEk~P``vXNBIX0)r|;c-d(t&c<+1!7S_~2%<14`qNVb!1A_S!7aKSI zv+n)B+})xM_d!es(`BLhwL(m%t#M(OzW_f&r963BkS)AVi|kw)CJ2|e{o%-B1z(Jq z+v5G|!A%VTfamsjxi2xVvuS*{xERXxV>=_?pRLqQi=hj%KF`Q(PfNQlY+1?gLNpFe7j2p^ch4^#j{&Z}k=o ne4NaeeVQlpcz04bS~^WMud}U#%U-+Y6nbTls@Mu)CL8|&oDcD%)B`lk1xSz@@5wDx=@z0 z@pCvf$7HkQ3uwN@&YK`?B#fL|4|D`cGC->~YG|4iKX_$c7h7d~*)*i-lfVBX&F z$35y+{ye9GxasDHt%a{Xn0xnUlT*tN&ue|Wpw1`4FLBc=`<%LK%YLZb*L|*a^@Im) z7qSjU7rrUp7~5cdIc{spS>w$Q8sm~;cb(AYfBC4nN?EZ@Hl(AjIxMiI=DDdLdHbU% zYLuFP`i8f+NSt)03L5m+vWZHv6>v zGWwCzI?F$TOZ`n(7r%XxXVV6K>>I+=S$Qh5<&UzE>fnugRmKTh?}r?I)1I>U`ICv2 z1=XJPFz<-h!)LUxf6Ke2W-aVl{On;#tFl#@9Jv?kIY3NJgn@2O2Zni`gJ~-qm;>w4 zaK)HAwENYb4M%rTOB|sRtq<^U^XQ^Mx&u4zr5xCaDM5sUD}blF%+XZ_b9Z1-{a%&G z8<>j&zRd&scw4Dl;spSiM-M-VC)O!*hDb;d@Rs?1JzO**A}84P!7)3Fge?VNL~r2h zCkLfn@FE3vV}<9FqsU!PMX>X{OM9|Ej~Dvhj_56k{ed4=KOxwK+xkmDFbHt-x@i=F z3L)0Xknfu2UcSDdRfeR2?y|pjxTGxdEBEN(-{}IHSGAW{|KmiuJ}}PbE;tLd42D6f zUBJnKwH^y@ueJEPq@nMpnTmGRAH}F}z#;c;EZLG(do?JhZ@hd>h6Bww{K(r-;v_4r zs5kEJ)iK@G`%n&cZ^Z#Zd0-71bA*R)=aw#pFy_G6NxhWPv~Zx5`LB2)g5tD%PNb~Q zydSpwi&c>uOEa2(AD@JV6YVG07P*)|CHxt=M-~wy6;gs2MexxR5-bEcGt*L)7r*Z5 zYHH&6fTFg8%P(f6X((J`_XlxU{p3DfZ0PBFjLlkO{P@T0zyL1!Sfs=X2P%|JG}n*3 zdu-g^X&Oy&b`|rDd->1E8$c07;?b6@^v>@OhDmio0D(d}gd=fw?Wt=)*&nvpS58Mm z(xP+@3>v!Jl*qIrx0EZJpbyJf($bV5yZd;<)NSPenV?;ngzqI(wWMXFvK~!3{{1k& z>X+Wm%-RnYwv{Ubu$>u=PPEb?t~A0ZFWuXpusNviqxlZhYUulcE-n4+VqgzPA1QAj z7*Qjv$_Xz3F>mc)(j^_KkPk`gnmo)Bu^>@@C#@Gc;|bV?)8|B3l+H#6b+o(JH9yyW zqZ@Z$^}2uK_*mzl2iE3Xq)+nj{Z}e4>eEoDu`>VlQep8@YD?I&4XLLfW8&$OQR6nv@Vs+m`GC{Q+L3zdJ0=A+I((VPnW*+I zJid5R$CzBzS1-|Bmxb(!l=FKwoIkwe<_z>5WFu!4!b;nVjtmYBdt#;5x#8ulOk$NWqaSGxCBX7-%56W!gKj#8`5 zh6oY<0Uwt{B+|O!LV_!zHx(Lg(2A1aLVZL;BJu7nGb)wr$k%nSYx{&9#YZvl%e!r9`N(bybhq>RB3&$Q1Je6?@xiZZa zTss3;C21`!TUt78T38bt6P{rf=33gsRKd*9ErTfB%1{^(Okt*pF%dc!gmPJBm0iIq z^`GUSU8dnRMX(tkQJuOs-cnc8|@da3#I$PmN1R$3T4>9ETa>qs5*h&4Uke(h24e4G)UtL z6_BSB-?|S6W|xhz}=@t&~RxAKng<>pPZK$D=fe zj{hD9SrVQ3>XDj2C|NbCl9ES4!P?V*kyEASs#_zS7YaXWtAtlHCp}Obu5a1mgX12U zA8FW^JyBk_qVPc&bzeQ_D~_$JX0+1<=)}y8ilXZtZ2UMf-1adLxc~gf<;^tqJi9^Gdw-FsKMg9K zFV4iP-PY5_K+We-NRK2@6N2BwNU;6Q3;FHF?gz!_-P4oJFD9o}o1J^-d0x?A?a>KO z5kk8>vLqB9`~DZ{@kmp+ensb;q&d=H@j1y-)P3#joMhRookOT+S+&g)+VanCcapyV DKF1hx literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/objects/f467872fe8d3cd1f60f832c997cc14fd00abbf601c61286a612089b4a53a195a.wai b/wai/pack-conformance/packs/video-cmaf-01/package/objects/f467872fe8d3cd1f60f832c997cc14fd00abbf601c61286a612089b4a53a195a.wai new file mode 100644 index 0000000000000000000000000000000000000000..37b7e5f13399a4f274df111ebb1d372150576596 GIT binary patch literal 1858 zcmZ{jeNYr-9LM*L11>^^OU~nX>D&w*Lwt7k_U&*SFm%Krhf1`m9N4{mRyW{|j^ltq z>`-z*EMF#?h(wtjB}i!|r!l9O(`;%=8&k{|Fq9@IoHVUeYBYQ94xfc)`s10Kz0dRg z{=UE8Z+BIGA$8h75DjFlq>(O?$^m3HSqT+QLQerrfnM~idHm4hM}PQWRfXo3{4jjU ztH6p3Em4I6o zd7gDbfv4P*n`R_Yloi=2P?4<2s`P)tq3%k#LT%mGL#PA)u1zvNp3 z(Lx$X)hAU#Wa|Xk0;={Mt3Yh%pnNEf{p{7RCLg$iBWVcL_z}kG0q;T zTo-cC=L|_iCwhE1X#A*k-rS-2s<&j-$V2SjIx1u5)X)Fk{N@YEpT-zg58qk6&tzKi zlbQ>I%0S*19qp}gTNq>8N)uQ{UCViQZf9mzf$&J|2TS`qTMX5kOJ*~+_cmSW_+iDh zL;Z>Kf9y)+k>Pp;PXD_45w6v_6Hg+22x)I3Aq7E-$J zm%6idbQhh!J9;X%>>C$MjS1Q#&C*s76ABVU+)31Akl5%TF3tMq@M(}1r89uZV46sW zpO8NjUo5spu?55#&A|s^B1p749*dGkf!Q=ADN5SH&b52yRhKtr*j9hp^i^S~D?D-w zL8pKObMo#yz50*Nr}l2e(Gruaphbs6he9e`lo^%U!BmGm^nHXzD$G3C{cA?u)->ad zl<19QkVNcy+CHvF={8|tF~nbX>tI8ARAB?tjpm#0>)>>6LQ3vHcNvarHBCvrHO|qn zhEjh&m|yuMc*yKB6dlE(O-%k-ir2JgHzEr?BLnG$dH==3=ZvdqctH*`>i!JH(k zvrY%a8PUO|g1HX+v9BYbEr`}_-F|r5q0o+%E3h(~*i~ZFl~p)m&V-0anR=$@64WDt z$r1G=^nW7aH`X~h;>ElBUJ?CI096cAmA z1FM!8<1Z%Zs&kj0|E?T=i-iS=_o9}OFJhszF literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/package.receipt.json b/wai/pack-conformance/packs/video-cmaf-01/package/package.receipt.json new file mode 100644 index 000000000..a3c5c253b --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/package.receipt.json @@ -0,0 +1 @@ +{"asset_id":"video-cmaf-01","components":[{"id":"v","index":"index-v.wsix","index_digest":"826e8554322dd535930f822c863f9fd51b609a82006f4ae14cfcdb6b97c4d0d2","media_class":"video","stage_root":"e31fe8e71bd0afaaa9a6a9294203d9a57d9a2925d9bf761ca7acd22e047ae34e"}],"energy_provenance":null,"grant":{"capability":"wai.video.package","funds_ceiling":null,"grant_hash":"0000000000000000000000000000000000000000000000000000000000000000","joule_ceiling_micro":null},"joules_micro":0,"kind":"package","packager":"builtin:wai-pack@0.1.0","parent_kind":"none","parent_receipt_hash":null,"policy_digest":"e12e58d39aa275ce422973435ff58aa70c4a7f1dca1958aee507fad458743adb","receipt_hash":"9e8eb989cbf451c8c17f4cce653a385cf80ab38ed10cf0e29d6e14bba51e760f","sig":"690967e5c99530f332714137e515551c9ce9deada03ed91a13b08149967918429455b04dd15e4c90b015c88eb1a0754f916de57f049094af409cd2439a6a180f","signer_id":"did:key:z6MkfikoLLY6JqXALCaUNmhSCdjtb8Nc3JQU4CioucVJcWS4","signer_pubkey":"12d3e959dc5e44fa2706d7eaf13f0a08af19209accae28933c2e8c512bfb3a89","stored_bytes":127966,"total_bytes":140530,"total_entries":15,"unique_objects":12,"version":2,"work_units":15} \ No newline at end of file diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/plan-v.txt b/wai/pack-conformance/packs/video-cmaf-01/package/plan-v.txt new file mode 100644 index 000000000..c7196c34c --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/plan-v.txt @@ -0,0 +1,5 @@ +0 +60 +85 +135 +160 diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/policy.json b/wai/pack-conformance/packs/video-cmaf-01/package/policy.json new file mode 100644 index 000000000..65f7012a8 --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/policy.json @@ -0,0 +1 @@ +{"asset_id":"video-cmaf-01","class":[{"floor_only":false,"id":"tv","max_layer":0},{"floor_only":false,"id":"mobile","max_kbps":100,"max_layer":0},{"floor_only":true,"id":"legacy","max_layer":0}],"classify":{"motion_high_milli":9000,"static_mad_milli":300,"static_permille":5,"synthetic_bins":12},"component":[{"id":"v","media":"video","source":"video-base-01.y4m","timebase":{"den":1,"num":25}}],"defaults":{"deadline_ms":1500},"floor":{"extra_keyframes":false,"supplied_form":"cmaf","supplied_listing":"03ab06e026880875581952f91232405077be9a522dbf739b6a9d093458369710"},"ladder":[{"capability":"wai.video.int_motion","component":"v","id":"b0","params":{"block":16,"max_sse_px_milli":30000,"mv_precision":1,"q_candidates":[16,12,8],"search":4},"role":"base"},{"capability":"wai.video.av1","component":"v","id":"hi","params":{"source":"supplied"},"role":"floor"},{"capability":"wai.video.av1","component":"v","id":"lo","params":{"source":"supplied"},"role":"floor"}],"lead":"v","live":{"layer_lag_ms":[0]},"moment":[],"royalty_free_only":true,"rule":[],"schema":"wai.pack.policy/1","segmentation":{"closed":true,"cut_abs_permille":300,"cut_rel_permille":3000,"cut_window":8,"lookahead_frames":6,"max_ms":4000,"min_ms":1000,"scene_cut":"wai.pack.scenecut/1","target_ms":2000}} \ No newline at end of file diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/policy.toml b/wai/pack-conformance/packs/video-cmaf-01/package/policy.toml new file mode 100644 index 000000000..3d37355bd --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/policy.toml @@ -0,0 +1,55 @@ +schema = "wai.pack.policy/1" +asset_id = "video-cmaf-01" +royalty_free_only = true +lead = "v" + +[[component]] +id = "v" +media = "video" +source = "video-base-01.y4m" + +[component.timebase] +num = 25 +den = 1 + +[segmentation] +target_ms = 2000 +min_ms = 1000 +max_ms = 4000 + +[[ladder]] +id = "b0" +component = "v" +capability = "wai.video.int_motion" +role = "base" +params = { block = 16, search = 4, mv_precision = 1, q_candidates = [16, 12, 8], max_sse_px_milli = 30000 } + +[[ladder]] +id = "hi" +component = "v" +capability = "wai.video.av1" +role = "floor" +params = { source = "supplied" } + +[[ladder]] +id = "lo" +component = "v" +capability = "wai.video.av1" +role = "floor" +params = { source = "supplied" } + +[floor] +supplied_form = "cmaf" +supplied_listing = "03ab06e026880875581952f91232405077be9a522dbf739b6a9d093458369710" + +[[class]] +id = "tv" +max_layer = 0 + +[[class]] +id = "mobile" +max_kbps = 100 + +[[class]] +id = "legacy" +floor_only = true diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/stages/legacy.json b/wai/pack-conformance/packs/video-cmaf-01/package/stages/legacy.json new file mode 100644 index 000000000..0a7faedee --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/stages/legacy.json @@ -0,0 +1 @@ +{"class":"legacy","components":{"v":{"pieces":[{"dur":60,"floor_only":true,"p":0,"stages":[],"start":0},{"dur":25,"floor_only":true,"p":1,"stages":[],"start":60},{"dur":50,"floor_only":true,"p":2,"stages":[],"start":85},{"dur":25,"floor_only":true,"p":3,"stages":[],"start":135},{"dur":40,"floor_only":true,"p":4,"stages":[],"start":160}]}},"policy_digest":"e12e58d39aa275ce422973435ff58aa70c4a7f1dca1958aee507fad458743adb"} diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/stages/mobile.json b/wai/pack-conformance/packs/video-cmaf-01/package/stages/mobile.json new file mode 100644 index 000000000..d1e9b65fe --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/stages/mobile.json @@ -0,0 +1 @@ +{"class":"mobile","components":{"v":{"media_playlist":"../hls/mobile/wai-v.m3u8","pieces":[{"dur":60,"floor_only":true,"p":0,"stages":[],"start":0},{"dur":25,"p":1,"stages":[{"bytes":9950,"h":"61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365","layer":0}],"start":60},{"dur":50,"floor_only":true,"p":2,"stages":[],"start":85},{"dur":25,"p":3,"stages":[{"bytes":9950,"h":"61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365","layer":0}],"start":135},{"dur":40,"floor_only":true,"p":4,"stages":[],"start":160}]}},"policy_digest":"e12e58d39aa275ce422973435ff58aa70c4a7f1dca1958aee507fad458743adb"} diff --git a/wai/pack-conformance/packs/video-cmaf-01/package/stages/tv.json b/wai/pack-conformance/packs/video-cmaf-01/package/stages/tv.json new file mode 100644 index 000000000..dfd23b59c --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/package/stages/tv.json @@ -0,0 +1 @@ +{"class":"tv","components":{"v":{"media_playlist":"../hls/tv/wai-v.m3u8","pieces":[{"dur":60,"p":0,"stages":[{"bytes":39826,"h":"24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d","layer":0}],"start":0},{"dur":25,"p":1,"stages":[{"bytes":9950,"h":"61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365","layer":0}],"start":60},{"dur":50,"p":2,"stages":[{"bytes":35882,"h":"c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2","layer":0}],"start":85},{"dur":25,"p":3,"stages":[{"bytes":9950,"h":"61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365","layer":0}],"start":135},{"dur":40,"p":4,"stages":[{"bytes":25514,"h":"618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481","layer":0}],"start":160}]}},"policy_digest":"e12e58d39aa275ce422973435ff58aa70c4a7f1dca1958aee507fad458743adb"} diff --git a/wai/pack-conformance/packs/video-cmaf-01/policy.toml b/wai/pack-conformance/packs/video-cmaf-01/policy.toml new file mode 100644 index 000000000..3d37355bd --- /dev/null +++ b/wai/pack-conformance/packs/video-cmaf-01/policy.toml @@ -0,0 +1,55 @@ +schema = "wai.pack.policy/1" +asset_id = "video-cmaf-01" +royalty_free_only = true +lead = "v" + +[[component]] +id = "v" +media = "video" +source = "video-base-01.y4m" + +[component.timebase] +num = 25 +den = 1 + +[segmentation] +target_ms = 2000 +min_ms = 1000 +max_ms = 4000 + +[[ladder]] +id = "b0" +component = "v" +capability = "wai.video.int_motion" +role = "base" +params = { block = 16, search = 4, mv_precision = 1, q_candidates = [16, 12, 8], max_sse_px_milli = 30000 } + +[[ladder]] +id = "hi" +component = "v" +capability = "wai.video.av1" +role = "floor" +params = { source = "supplied" } + +[[ladder]] +id = "lo" +component = "v" +capability = "wai.video.av1" +role = "floor" +params = { source = "supplied" } + +[floor] +supplied_form = "cmaf" +supplied_listing = "03ab06e026880875581952f91232405077be9a522dbf739b6a9d093458369710" + +[[class]] +id = "tv" +max_layer = 0 + +[[class]] +id = "mobile" +max_kbps = 100 + +[[class]] +id = "legacy" +floor_only = true diff --git a/wai/pack-conformance/supplied_cmaf.py b/wai/pack-conformance/supplied_cmaf.py new file mode 100644 index 000000000..b10f7bc50 --- /dev/null +++ b/wai/pack-conformance/supplied_cmaf.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 +"""Write a golden's supplied floor in the CMAF form (extensions/packaging.md §7.7) from +another golden's supplied floor in the OBU form (§7.3). + +A CMAF floor is a ladder's own initialization segment and media segments, as a media +muxer wrote them, so this golden's are written by one: each `.obu` of the source +golden's floor is muxed, without re-encoding (`-c copy`), by ffmpeg's HLS muxer into fMP4 +segments, cutting at every key frame (`-hls_time` of one frame), so each media segment +holds one piece of the plan; its `init.mp4` and `seg_.m4s` files, `` four digits, are +`floor//`. The policy's `floor.supplied_listing` is set to the SHA-256 of the floor +directory's listing (SPEC §3.1), which `wai-pack listing` prints. + +A muxer is not a pure function of its input across versions, so the files are committed +and pinned by the listing: a packer reads them and checks them against the plan, and +never writes them. This script is how the committed files were written, not a step of +verification. + + python3 supplied_cmaf.py > > +""" +import hashlib +import os +import re +import shutil +import subprocess +import sys +import tempfile + + +def main(argv): + if len(argv) != 6: + print(__doc__) + return 2 + ffmpeg, wai_pack, src, dst, rate = argv[1:] + num, den = (int(x) for x in rate.split("/")) + floor_in, floor_out = os.path.join(src, "floor"), os.path.join(dst, "floor") + if os.path.isdir(floor_out): + shutil.rmtree(floor_out) + os.makedirs(floor_out) + for f in sorted(os.listdir(floor_in)): + if not f.endswith(".obu"): + continue + name = f[:-len(".obu")] + with tempfile.TemporaryDirectory() as tmp: + subprocess.run([ffmpeg, "-nostdin", "-v", "error", "-f", "obu", "-framerate", f"{num}/{den}", + "-i", os.path.join(floor_in, f), "-c", "copy", "-f", "hls", "-hls_time", f"{den / num:.6f}", + "-hls_segment_type", "fmp4", "-hls_fmp4_init_filename", "init.mp4", + "-hls_segment_filename", os.path.join(tmp, "seg_%04d.m4s"), "-hls_playlist_type", "vod", + os.path.join(tmp, "index.m3u8")], check=True) + out = os.path.join(floor_out, name) + os.makedirs(out) + for g in sorted(os.listdir(tmp)): + if g == "init.mp4" or g.endswith(".m4s"): + shutil.copyfile(os.path.join(tmp, g), os.path.join(out, g)) + print(f"{out}: {sorted(os.listdir(out))}") + listing = hashlib.sha256(subprocess.run([wai_pack, "listing", floor_out], check=True, capture_output=True).stdout).hexdigest() + p = os.path.join(dst, "policy.toml") + policy = open(p, encoding="utf-8").read() + open(p, "w", encoding="utf-8").write(re.sub(r'supplied_listing = "[0-9a-f]{64}"', f'supplied_listing = "{listing}"', policy)) + print(f"listing {listing}") + return 0 + + +if __name__ == "__main__": + sys.exit(main(sys.argv)) diff --git a/wai/wai-pack/src/bin/wai_pack.rs b/wai/wai-pack/src/bin/wai_pack.rs index 57520332b..6ad78b5f5 100644 --- a/wai/wai-pack/src/bin/wai_pack.rs +++ b/wai/wai-pack/src/bin/wai_pack.rs @@ -11,7 +11,7 @@ //! supplied floor //! wai-pack pack --policy --out

--key [--source =]... //! [--floor ] [--signer-id ] [--royalty-free-only] [--meter none|model:] -//! [--base-from ] +//! [--base-from ] [--link-supplied] //! pack the policy's components into : objects, stage indexes, the floor's CMAF //! files, catalogs, the receipt (and, metered, its measurement claim) and LISTING; //! is new or empty (`pack-out-not-empty` otherwise, before any work), and a @@ -22,7 +22,9 @@ //! (`pack-meter`); it never writes an unmetered package in its place. With //! --base-from, a re-pack (packaging §11.5): every piece's base and refinements are //! taken from that package, verified and matched to this one piece by piece, instead -//! of coded, and the receipt names it as the package it re-packs +//! of coded, and the receipt names it as the package it re-packs. With +//! --link-supplied, a supplied CMAF floor's files (packaging §7.7) are written as hard +//! links to the supplied ones where the file system allows //! wai-pack live --policy --out --key [--signer-id ] [--window ] //! pack a Y4M stream read from standard input as it arrives (packaging §9.2): each //! piece coded as the segmenter closes it, and its objects written to /objects/ @@ -91,7 +93,7 @@ fn usage() -> ExitCode { eprintln!( "usage:\n wai-pack policy [--royalty-free-only]\n \ wai-pack plan --policy --component [--source ] [--out ]\n \ - wai-pack pack --policy --out --key [--source =]... [--floor ] [--signer-id ] [--royalty-free-only] [--meter none|model:] [--base-from ]\n \ + wai-pack pack --policy --out --key [--source =]... [--floor ] [--signer-id ] [--royalty-free-only] [--meter none|model:] [--base-from ] [--link-supplied]\n \ wai-pack live --policy --out --key [--signer-id ] [--window ]\n \ wai-pack verify [--parent ]\n \ wai-pack listing [--primary]\n \ @@ -195,6 +197,7 @@ fn cmd_pack(args: &[String]) -> Result<(), String> { let mut o = wai_pack::pack::PackOpts::new(key, signer_id, floor); o.overrides = Overrides { royalty_free_only: args.iter().any(|a| a == "--royalty-free-only") }; o.base_from = opt(args, "--base-from").map(|d| wai_pack::files::FileSet::Dir(d.into())); + o.link_supplied = args.iter().any(|a| a == "--link-supplied"); match opt(args, "--meter").unwrap_or("none") { "none" => {} m => { diff --git a/wai/wai-pack/src/cmaf_read.rs b/wai/wai-pack/src/cmaf_read.rs new file mode 100644 index 000000000..f437afb0d --- /dev/null +++ b/wai/wai-pack/src/cmaf_read.rs @@ -0,0 +1,416 @@ +//! The reader of a supplied CMAF floor ([packaging] §7.7): an initialization segment and +//! media segments as an existing ladder holds them, read box by box (ISO/IEC 14496-12), +//! so the floor's CMAF files are the ladder's own bytes and its temporal units are read +//! out of them. +//! +//! - `init.mp4`: its top-level boxes tile the file; one `moov`, holding one `trak` and an +//! `mvex` with one `trex` for that track; the track's `tkhd` names it, its `mdhd` gives +//! the timescale (version 0 or 1, at least 1), its `hdlr` is `vide`, its sample +//! description is one `av01` entry, and an `edts`, where there is one, is one `elst` +//! entry that starts at media time 0 at rate 1. +//! - a media segment: its top-level boxes tile the file: any of `styp`, `sidx`, `prft`, +//! `emsg`, `free` and `skip` first, then one or more `moof` each followed by its `mdat`, +//! and nothing else. A `moof` holds an `mfhd` and one `traf`: a `tfhd` of the init's +//! track, with no base data offset and no empty duration; a `tfdt`; and one or more +//! `trun`, each with its data offset. Each sample's duration, size and flags are its +//! `trun`'s, else the `tfhd`'s defaults, else the `trex`'s; its bytes lie in the `mdat` +//! after its `moof`, from the `moof`'s first byte plus the data offset, the samples of +//! a run one after another. +//! +//! Anything else is refused with what failed. Every read is bounds-checked and integer. +//! +//! [packaging]: ../../../extensions/packaging.md + +/// Why a supplied CMAF file is refused: its boxes (`floor-cmaf-malformed`), or its times +/// (`floor-cmaf-timing`). +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum CmafFault { + Malformed(String), + Timing(String), +} + +impl CmafFault { + pub fn code(&self) -> &'static str { + match self { + CmafFault::Malformed(_) => "floor-cmaf-malformed", + CmafFault::Timing(_) => "floor-cmaf-timing", + } + } + pub fn detail(&self) -> &str { + match self { + CmafFault::Malformed(d) | CmafFault::Timing(d) => d, + } + } +} + +fn bad(why: impl Into) -> Result { + Err(CmafFault::Malformed(why.into())) +} + +/// One box: its type, and the offsets of its body and end in the bytes it was read from. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Bx { + pub kind: [u8; 4], + pub start: usize, + pub body: usize, + pub end: usize, +} + +/// The boxes that tile `b[from..to]`: each a 32-bit size of at least 8 (or 1, with a +/// 64-bit size after the type, of at least 16), its type, and its body; a size of 0 (to +/// the end) is refused, as is a box past `to`. +pub fn boxes_in(b: &[u8], from: usize, to: usize) -> Result, CmafFault> { + let mut out = Vec::new(); + let mut at = from; + while at < to { + let size32 = b.get(at..at + 4).map(|x| u32::from_be_bytes(x.try_into().expect("4"))).ok_or_else(|| CmafFault::Malformed(format!("a box header runs past the end at byte {at}")))?; + let kind: [u8; 4] = b.get(at + 4..at + 8).and_then(|x| x.try_into().ok()).ok_or_else(|| CmafFault::Malformed(format!("a box header runs past the end at byte {at}")))?; + let (size, head) = match size32 { + 0 => return bad(format!("a box of size 0 at byte {at}")), + 1 => { + let s = b.get(at + 8..at + 16).map(|x| u64::from_be_bytes(x.try_into().expect("8"))).ok_or_else(|| CmafFault::Malformed("a 64-bit box size runs past the end".into()))?; + if s < 16 { + return bad(format!("a 64-bit box size below 16 at byte {at}")); + } + (s, 16usize) + } + s if s < 8 => return bad(format!("a box size below 8 at byte {at}")), + s => (s as u64, 8usize), + }; + let end = (at as u64).checked_add(size).filter(|&e| e <= to as u64).ok_or_else(|| CmafFault::Malformed(format!("a box runs past its parent at byte {at}")))? as usize; + out.push(Bx { kind, start: at, body: at + head, end }); + at = end; + } + Ok(out) +} + +fn only<'a>(bs: &'a [Bx], kind: &[u8; 4], within: &str) -> Result<&'a Bx, CmafFault> { + let v: Vec<&Bx> = bs.iter().filter(|x| &x.kind == kind).collect(); + match v.as_slice() { + [one] => Ok(one), + _ => bad(format!("{within} holds {} {} boxes, not one", v.len(), String::from_utf8_lossy(kind))), + } +} + +/// A 32-bit field at `at` of a box that ends at `end`: a field past its box is refused. +fn u32_at(b: &[u8], at: usize, end: usize) -> Result { + if at + 4 > end { + return bad(format!("a field runs past its box at byte {at}")); + } + Ok(u32::from_be_bytes(b[at..at + 4].try_into().expect("4"))) +} + +fn u64_at(b: &[u8], at: usize, end: usize) -> Result { + if at + 8 > end { + return bad(format!("a field runs past its box at byte {at}")); + } + Ok(u64::from_be_bytes(b[at..at + 8].try_into().expect("8"))) +} + +/// A full box's version and flags. +fn full(b: &[u8], x: &Bx) -> Result<(u8, u32), CmafFault> { + let v = u32_at(b, x.body, x.end)?; + Ok(((v >> 24) as u8, v & 0x00ff_ffff)) +} + +/// What `trex` gives a track's samples by default. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub struct Defaults { + pub duration: u32, + pub size: u32, + pub flags: u32, +} + +/// A supplied initialization segment, read. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Init { + pub track_id: u32, + pub timescale: u32, + pub defaults: Defaults, +} + +/// Read a supplied `init.mp4` (§7.7). +pub fn read_init(b: &[u8]) -> Result { + let top = boxes_in(b, 0, b.len())?; + let moov = only(&top, b"moov", "init.mp4")?; + let mb = boxes_in(b, moov.body, moov.end)?; + let trak = only(&mb, b"trak", "moov")?; + let mvex = only(&mb, b"mvex", "moov")?; + let tb = boxes_in(b, trak.body, trak.end)?; + let tkhd = only(&tb, b"tkhd", "trak")?; + let (tv, _) = full(b, tkhd)?; + let track_id = u32_at(b, tkhd.body + 4 + if tv == 1 { 16 } else { 8 }, tkhd.end)?; + if let Some(edts) = tb.iter().find(|x| &x.kind == b"edts") { + let eb = boxes_in(b, edts.body, edts.end)?; + let elst = only(&eb, b"elst", "edts")?; + let (ev, _) = full(b, elst)?; + let n = u32_at(b, elst.body + 4, elst.end)?; + let (mt, rate) = if ev == 1 { (u64_at(b, elst.body + 8 + 8, elst.end)? as i64, u32_at(b, elst.body + 8 + 16, elst.end)?) } else { (u32_at(b, elst.body + 8 + 4, elst.end)? as i32 as i64, u32_at(b, elst.body + 8 + 8, elst.end)?) }; + if n != 1 || mt != 0 || rate != 0x0001_0000 { + return Err(CmafFault::Timing("an edit list other than one entry at media time 0 and rate 1".into())); + } + } + let mdia = only(&tb, b"mdia", "trak")?; + let md = boxes_in(b, mdia.body, mdia.end)?; + let mdhd = only(&md, b"mdhd", "mdia")?; + let (mv, _) = full(b, mdhd)?; + let timescale = u32_at(b, mdhd.body + 4 + if mv == 1 { 16 } else { 8 }, mdhd.end)?; + if timescale == 0 { + return Err(CmafFault::Timing("a timescale of 0".into())); + } + let hdlr = only(&md, b"hdlr", "mdia")?; + if hdlr.body + 12 > hdlr.end || b.get(hdlr.body + 8..hdlr.body + 12) != Some(b"vide") { + return bad("the track's handler is not vide"); + } + let minf = only(&md, b"minf", "mdia")?; + let mi = boxes_in(b, minf.body, minf.end)?; + let stbl = only(&mi, b"stbl", "minf")?; + let st = boxes_in(b, stbl.body, stbl.end)?; + let stsd = only(&st, b"stsd", "stbl")?; + if u32_at(b, stsd.body + 4, stsd.end)? != 1 { + return bad("a sample description of other than one entry"); + } + let entries = boxes_in(b, stsd.body + 8, stsd.end)?; + match entries.as_slice() { + [e] if &e.kind == b"av01" => {} + _ => return bad("the sample description is not one av01 entry"), + } + let xb = boxes_in(b, mvex.body, mvex.end)?; + let trex = only(&xb, b"trex", "mvex")?; + full(b, trex)?; + if u32_at(b, trex.body + 4, trex.end)? != track_id { + return bad("trex names another track than tkhd"); + } + let defaults = Defaults { duration: u32_at(b, trex.body + 12, trex.end)?, size: u32_at(b, trex.body + 16, trex.end)?, flags: u32_at(b, trex.body + 20, trex.end)? }; + Ok(Init { track_id, timescale, defaults }) +} + +/// A sample of a media segment: where its bytes are, how long it lasts and its flags. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct SampleRef { + pub at: usize, + pub len: usize, + pub duration: u32, + pub flags: u32, + /// Its decode time, in the track's timescale. + pub dts: u64, +} + +/// A sample whose flags carry `sample_is_non_sync_sample` is not a sync sample. +pub const NON_SYNC_BIT: u32 = 0x0001_0000; + +const PRELUDE: [&[u8; 4]; 6] = [b"styp", b"sidx", b"prft", b"emsg", b"free", b"skip"]; + +/// Read a supplied media segment (§7.7) against its initialization segment: every sample, +/// in order. +pub fn read_segment(b: &[u8], init: &Init) -> Result, CmafFault> { + let top = boxes_in(b, 0, b.len())?; + let first = top.iter().position(|x| &x.kind == b"moof").ok_or_else(|| CmafFault::Malformed("a segment with no moof".into()))?; + if let Some(x) = top[..first].iter().find(|x| !PRELUDE.contains(&&x.kind)) { + return bad(format!("a {} box before the first moof", String::from_utf8_lossy(&x.kind))); + } + let rest = &top[first..]; + if rest.len() % 2 != 0 || rest.chunks(2).any(|p| &p[0].kind != b"moof" || &p[1].kind != b"mdat") { + return bad("after the first moof, other than moof and mdat pairs"); + } + let mut out = Vec::new(); + let mut next_dts: Option = None; + for pair in rest.chunks(2) { + let (moof, mdat) = (&pair[0], &pair[1]); + let mb = boxes_in(b, moof.body, moof.end)?; + only(&mb, b"mfhd", "moof")?; + if let Some(x) = mb.iter().find(|x| &x.kind != b"mfhd" && &x.kind != b"traf") { + return bad(format!("a {} box in a moof", String::from_utf8_lossy(&x.kind))); + } + let traf = only(&mb, b"traf", "moof")?; + let tb = boxes_in(b, traf.body, traf.end)?; + if let Some(x) = tb.iter().find(|x| ![b"tfhd", b"tfdt", b"trun"].contains(&&x.kind)) { + return bad(format!("a {} box in a traf", String::from_utf8_lossy(&x.kind))); + } + let tfhd = only(&tb, b"tfhd", "traf")?; + let (_, tf) = full(b, tfhd)?; + if tf & !(0x02 | 0x08 | 0x10 | 0x20 | 0x02_0000) != 0 { + return bad(format!("tfhd flags {tf:#x}: a base data offset, an empty duration or an unknown flag")); + } + if u32_at(b, tfhd.body + 4, tfhd.end)? != init.track_id { + return bad("a tfhd of another track"); + } + let mut at = tfhd.body + 8; + let mut field = |set: bool| -> Result, CmafFault> { + if !set { + return Ok(None); + } + let v = u32_at(b, at, tfhd.end)?; + at += 4; + Ok(Some(v)) + }; + let _sdi = field(tf & 0x02 != 0)?; + let d_dur = field(tf & 0x08 != 0)?.unwrap_or(init.defaults.duration); + let d_size = field(tf & 0x10 != 0)?.unwrap_or(init.defaults.size); + let d_flags = field(tf & 0x20 != 0)?.unwrap_or(init.defaults.flags); + if at > tfhd.end { + return bad("tfhd shorter than its flags say"); + } + let tfdt = only(&tb, b"tfdt", "traf")?; + let (dv, _) = full(b, tfdt)?; + let mut dts = if dv == 1 { u64_at(b, tfdt.body + 4, tfdt.end)? } else { u32_at(b, tfdt.body + 4, tfdt.end)? as u64 }; + if let Some(n) = next_dts + && n != dts + { + return Err(CmafFault::Timing("a moof whose decode time is not where the one before it ended".into())); + } + let runs: Vec<&Bx> = tb.iter().filter(|x| &x.kind == b"trun").collect(); + if runs.is_empty() { + return bad("a traf with no trun"); + } + for trun in runs { + let (_, rf) = full(b, trun)?; + if rf & !(0x01 | 0x04 | 0x100 | 0x200 | 0x400 | 0x800) != 0 || rf & 0x01 == 0 { + return bad(format!("trun flags {rf:#x}: no data offset, or an unknown flag")); + } + let n = u32_at(b, trun.body + 4, trun.end)? as usize; + let off = u32_at(b, trun.body + 8, trun.end)? as i32 as i64; + let mut at = trun.body + 12; + let first_flags = if rf & 0x04 != 0 { + let v = u32_at(b, at, trun.end)?; + at += 4; + Some(v) + } else { + None + }; + let per = [rf & 0x100 != 0, rf & 0x200 != 0, rf & 0x400 != 0, rf & 0x800 != 0].iter().filter(|&&x| x).count(); + // The run's fields fit its box before any sample is read; a sample of no bytes + // is refused, so a run's samples are at most its mdat's bytes. + let need = n.checked_mul(4 * per).and_then(|x| at.checked_add(x)).ok_or_else(|| CmafFault::Malformed("a sample count past the box".into()))?; + if need > trun.end { + return bad("trun shorter than its samples"); + } + let mut data = moof.start as i64 + off; + for i in 0..n { + let mut f = |set: bool| -> Result, CmafFault> { + if !set { + return Ok(None); + } + let v = u32_at(b, at, trun.end)?; + at += 4; + Ok(Some(v)) + }; + let duration = f(rf & 0x100 != 0)?.unwrap_or(d_dur); + let size = f(rf & 0x200 != 0)?.unwrap_or(d_size) as i64; + let own_flags = f(rf & 0x400 != 0)?; + let cto = f(rf & 0x800 != 0)?; + let flags = if i == 0 { first_flags.or(own_flags).unwrap_or(d_flags) } else { own_flags.unwrap_or(d_flags) }; + if cto.is_some_and(|c| c != 0) { + return Err(CmafFault::Timing("a sample whose composition time is not its decode time".into())); + } + if size == 0 { + return bad("a sample of no bytes"); + } + if data < mdat.body as i64 || data + size > mdat.end as i64 { + return bad("a sample's bytes outside the mdat after its moof"); + } + out.push(SampleRef { at: data as usize, len: size as usize, duration, flags, dts }); + data += size; + dts = dts.checked_add(duration as u64).ok_or_else(|| CmafFault::Timing("a decode time past 2^64 - 1".into()))?; + } + } + next_dts = Some(dts); + } + if out.is_empty() { + return bad("a segment with no sample"); + } + Ok(out) +} + +/// The temporal delimiter a sample leaves out (an OBU of type 2 with its size field and an +/// empty payload, [AV1] §5.6): a sample is a temporal unit without it. +pub const TEMPORAL_DELIMITER: [u8; 2] = [0x12, 0x00]; + +/// A segment's samples as temporal units (§7.7): each the temporal delimiter, then the +/// sample's bytes. +pub fn units(b: &[u8], samples: &[SampleRef]) -> Vec> { + samples.iter().map(|s| [&TEMPORAL_DELIMITER[..], &b[s.at..s.at + s.len]].concat()).collect() +} + +/// A segment's times against the component's timebase `num/den` (§7.7): each sample lasts +/// one frame (`duration · num = timescale · den`), and its first sample's decode time is +/// frame `start`'s (`dts · num = start · timescale · den`) (`floor-cmaf-timing`). +pub fn check_times(samples: &[SampleRef], timescale: u32, num: u32, den: u32, start: u64) -> Result<(), CmafFault> { + let frame = |d: u64| d as u128 * num as u128 == timescale as u128 * den as u128; + if let Some(s) = samples.iter().find(|s| !frame(s.duration as u64)) { + return Err(CmafFault::Timing(format!("a sample lasting {} ticks of {timescale}, not one frame", s.duration))); + } + let first = samples.first().map_or(0, |s| s.dts); + if first as u128 * num as u128 != start as u128 * timescale as u128 * den as u128 { + return Err(CmafFault::Timing(format!("a segment starting at decode time {first}, not frame {start}'s"))); + } + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::cmaf::{write_fragment, write_init_av1, Sample}; + + fn seq() -> crate::av1::SequenceHeader { + crate::av1::SequenceHeader { + seq_profile: 0, + still_picture: false, + reduced_still_picture_header: false, + seq_level_idx_0: 0, + seq_tier_0: 0, + max_frame_width: 64, + max_frame_height: 36, + high_bitdepth: false, + twelve_bit: false, + mono_chrome: false, + chroma_subsampling_x: true, + chroma_subsampling_y: true, + chroma_sample_position: 0, + } + } + + /// §7.6's own files read back: the writer's init and fragment are a supplied CMAF floor + /// too, their samples and times recovered exactly. + #[test] + fn the_writer_s_files_read_back() { + let init = write_init_av1(&seq(), &[0x0a, 0x01, 0x00], 64, 36, 25); + let i = read_init(&init).unwrap(); + assert_eq!((i.track_id, i.timescale), (1, 25)); + let s = vec![Sample { data: vec![1, 2, 3], duration: 1, sync: true }, Sample { data: vec![4, 5], duration: 1, sync: false }]; + let f = write_fragment(3, 50, &s); + let got = read_segment(&f, &i).unwrap(); + assert_eq!(got.len(), 2); + assert_eq!(&f[got[0].at..got[0].at + got[0].len], &[1, 2, 3]); + assert_eq!(&f[got[1].at..got[1].at + got[1].len], &[4, 5]); + assert_eq!((got[0].dts, got[1].dts), (50, 51)); + assert_eq!(got[0].flags & NON_SYNC_BIT, 0); + assert_ne!(got[1].flags & NON_SYNC_BIT, 0); + check_times(&got, 25, 25, 1, 50).unwrap(); + assert_eq!(check_times(&got, 25, 25, 1, 49).unwrap_err().code(), "floor-cmaf-timing"); + assert_eq!(check_times(&got, 25, 30, 1, 50).unwrap_err().code(), "floor-cmaf-timing", "another rate"); + assert_eq!(units(&f, &got)[1], vec![0x12, 0x00, 4, 5]); + } + + /// What a segment may not be: a box of size 0, a sample past its mdat, a box the + /// reader does not take in a traf, and an mdat that does not follow its moof. + #[test] + fn a_malformed_segment_is_refused() { + let i = read_init(&write_init_av1(&seq(), &[0x0a, 0x01, 0x00], 64, 36, 25)).unwrap(); + let f = write_fragment(1, 0, &[Sample { data: vec![9; 10], duration: 1, sync: true }]); + let code = |b: &[u8]| read_segment(b, &i).unwrap_err().code(); + let mut zero = f.clone(); + zero[..4].copy_from_slice(&0u32.to_be_bytes()); + assert_eq!(code(&zero), "floor-cmaf-malformed"); + // The mdat cut short: its box no longer holds the sample. + let mut short = f[..f.len() - 3].to_vec(); + let n = short.len(); + let mdat_at = n - (8 + 7); + short[mdat_at..mdat_at + 4].copy_from_slice(&15u32.to_be_bytes()); + assert_eq!(code(&short), "floor-cmaf-malformed"); + assert_eq!(code(&[&f[..], &f[..f.len() - 18]].concat()), "floor-cmaf-malformed", "a moof with no mdat after it"); + let free = [&8u32.to_be_bytes()[..], b"free"].concat(); + assert!(read_segment(&[&free[..], &f[..]].concat(), &i).is_ok(), "a free box before the moof"); + assert_eq!(code(&[&f[..], &free[..]].concat()), "floor-cmaf-malformed", "and none after it"); + } +} diff --git a/wai/wai-pack/src/floor.rs b/wai/wai-pack/src/floor.rs index 92e6db95f..bb55c9e1a 100644 --- a/wai/wai-pack/src/floor.rs +++ b/wai/wai-pack/src/floor.rs @@ -75,58 +75,179 @@ pub struct StreamCheck { pub key: Vec, } -/// §7.3's checks of one supplied stream that need no plan, read a unit at a time: it -/// splits into temporal units each holding a frame, the first carrying a sequence -/// header, every sequence header the first's bytes, and every unit that starts at a shown -/// key frame carrying one (`floor-av1-malformed`); then it holds one unit per source -/// frame (`floor-frame-count`). A fault of the stream's structure is refused where it is -/// read; a unit's other faults are refused after the count, in unit order, as a reader -/// of the whole stream refuses them. An I/O failure is `io`. +/// §7.3's checks of a floor's temporal units that need no plan, a unit at a time: each a +/// temporal unit holding a frame, the first carrying a sequence header, every sequence +/// header the first's bytes, and every unit that starts at a shown key frame carrying one +/// (`floor-av1-malformed`). A unit that is not one temporal unit, or a first unit without +/// a sequence header, is refused when it is offered; a unit's other faults are refused at +/// [`UnitChecker::finish`], after the unit count, in unit order, as a reader of the whole +/// stream refuses them. +#[derive(Debug, Default)] +pub struct UnitChecker { + seq: Option<(SequenceHeader, Vec)>, + key: Vec, + later: Option, +} + +impl UnitChecker { + /// The next unit, as the stream holds it. + pub fn push(&mut self, u: &[u8]) -> Result<(), FloorReason> { + let malformed = |e: av1::Av1Error| FloorReason { code: "floor-av1-malformed", detail: e.0 }; + let i = self.key.len(); + let tus = av1::temporal_units(u).map_err(malformed)?; + let [tu] = tus.as_slice() else { return refuse("floor-av1-malformed", format!("unit {i} is not one temporal unit")) }; + if self.seq.is_none() { + let first = tu.sequence_header().ok_or_else(|| FloorReason { code: "floor-av1-malformed", detail: "the first temporal unit carries no sequence header".into() })?; + self.seq = Some((SequenceHeader::parse(first.payload).map_err(malformed)?, first.bytes.to_vec())); + } + let (s, obu) = self.seq.as_ref().expect("set"); + let mut k = false; + if self.later.is_none() { + if let Some(h) = tu.sequence_header() + && h.bytes != obu.as_slice() + { + self.later = Some(FloorReason { code: "floor-av1-malformed", detail: format!("temporal unit {i} carries another sequence header") }); + } else { + match av1::starts_with_shown_key_frame(tu, s) { + Err(e) => self.later = Some(malformed(e)), + Ok(true) if tu.sequence_header().is_none() => { + self.later = Some(FloorReason { code: "floor-av1-malformed", detail: format!("temporal unit {i} starts a key frame without a sequence header") }) + } + Ok(x) => k = x, + } + } + } + self.key.push(k); + Ok(()) + } + + /// The units offered so far. + pub fn count(&self) -> u64 { + self.key.len() as u64 + } + + /// One unit per source frame (`floor-frame-count`), then the faults held back. + pub fn finish(self, frames: u64) -> Result { + let (seq, seq_obu) = self.seq.ok_or_else(|| FloorReason { code: "floor-av1-malformed", detail: "no temporal unit".into() })?; + if self.key.len() as u64 != frames { + return refuse("floor-frame-count", format!("{} temporal units for {frames} source frames", self.key.len())); + } + if let Some(r) = self.later { + return Err(r); + } + Ok(StreamCheck { seq, seq_obu, key: self.key }) + } +} + +/// §7.3's checks of one supplied stream that need no plan, read a unit at a time +/// ([`UnitChecker`]), and its unit count (`floor-frame-count`). An I/O failure is `io`. pub fn check_stream(r: R, frames: u64) -> Result { let mut rd = av1::TuReader::new(r); let read = |e: av1::ReadError| match e { av1::ReadError::Malformed(m) => FloorReason { code: "floor-av1-malformed", detail: m.0 }, av1::ReadError::Io(e) => FloorReason { code: "io", detail: e.to_string() }, }; - let malformed = |e: av1::Av1Error| FloorReason { code: "floor-av1-malformed", detail: e.0 }; - let mut seq: Option<(SequenceHeader, Vec)> = None; - let mut key = Vec::new(); - let mut later: Option = None; + let mut c = UnitChecker::default(); while let Some(u) = rd.next_unit().map_err(read)? { - let i = key.len(); - let tus = av1::temporal_units(&u).map_err(malformed)?; - let tu = &tus[0]; - if seq.is_none() { - let first = tu.sequence_header().ok_or_else(|| FloorReason { code: "floor-av1-malformed", detail: "the first temporal unit carries no sequence header".into() })?; - seq = Some((SequenceHeader::parse(first.payload).map_err(malformed)?, first.bytes.to_vec())); + c.push(&u)?; + } + c.finish(frames) +} + +/// One media segment of a supplied CMAF floor (§7.7): its file in the supplied floor, its +/// SHA-256, its first frame and its frames. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct CmafSegment { + pub file: String, + pub sha256: String, + pub start: u64, + pub frames: u64, +} + +/// A floor rung's supplied CMAF floor, checked (§7.7): its units' check, its +/// initialization segment's file and SHA-256, and its media segments. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct CmafCheck { + pub units: StreamCheck, + pub init: crate::cmaf_read::Init, + pub init_file: String, + pub init_sha256: String, + pub segments: Vec, +} + +fn cmaf_fault(f: crate::cmaf_read::CmafFault, file: &str) -> FloorReason { + FloorReason { code: f.code(), detail: format!("{file}: {}", f.detail()) } +} + +/// The files of a supplied CMAF floor of floor name `name` (§7.7): `/init.mp4` +/// (`floor-stream-missing` without it) and its media segments, the other files of +/// `/`, each `*.m4s` and in no directory below it (`floor-cmaf-malformed`), in byte +/// order of their names, at least one. +pub fn cmaf_files_of(shas: &BTreeMap, name: &str) -> Result<(String, Vec), FloorReason> { + let init = format!("{name}/init.mp4"); + if !shas.contains_key(&init) { + return refuse("floor-stream-missing", format!("no {init} in the supplied floor")); + } + let prefix = format!("{name}/"); + let mut segs = Vec::new(); + for f in shas.keys().filter(|k| k.starts_with(&prefix) && **k != init) { + let rest = &f[prefix.len()..]; + if rest.contains('/') || !rest.ends_with(".m4s") { + return refuse("floor-cmaf-malformed", format!("{f}: not a media segment of {prefix}")); } - let (s, obu) = seq.as_ref().expect("set"); - let mut k = false; - if later.is_none() { - if let Some(h) = tu.sequence_header() - && h.bytes != obu.as_slice() - { - later = Some(FloorReason { code: "floor-av1-malformed", detail: format!("temporal unit {i} carries another sequence header") }); - } else { - match av1::starts_with_shown_key_frame(tu, s) { - Err(e) => later = Some(malformed(e)), - Ok(true) if tu.sequence_header().is_none() => { - later = Some(FloorReason { code: "floor-av1-malformed", detail: format!("temporal unit {i} starts a key frame without a sequence header") }) - } - Ok(x) => k = x, - } - } + segs.push(f.clone()); + } + if segs.is_empty() { + return refuse("floor-cmaf-malformed", format!("no media segment in {prefix}")); + } + Ok((init, segs)) +} + +/// §7.7's checks of one floor rung's supplied CMAF floor that need no plan, a segment at a +/// time: the initialization segment's boxes; each media segment's boxes, its first sample +/// a sync sample (`floor-cmaf-malformed`), every sample one frame long and the segment +/// starting where the one before it ended, the first at frame 0 (`floor-cmaf-timing`); +/// and its samples, each a temporal unit without its temporal delimiter, as §7.3's +/// stream ([`UnitChecker`]). `frames` is the source's frame count, or `None` for a floor +/// whose units decide it (§7.8). +pub fn check_cmaf(set: &crate::files::FileSet, shas: &BTreeMap, name: &str, num: u32, den: u32, frames: Option) -> Result { + let io = |f: &str, e: std::io::Error| FloorReason { code: "io", detail: format!("{f}: {e}") }; + let (init_file, segs) = cmaf_files_of(shas, name)?; + let ib = set.read(&init_file).map_err(|e| io(&init_file, e))?; + let init = crate::cmaf_read::read_init(&ib).map_err(|f| cmaf_fault(f, &init_file))?; + let mut c = UnitChecker::default(); + let mut segments = Vec::with_capacity(segs.len()); + for f in segs { + let b = set.read(&f).map_err(|e| io(&f, e))?; + let samples = crate::cmaf_read::read_segment(&b, &init).map_err(|x| cmaf_fault(x, &f))?; + if samples[0].flags & crate::cmaf_read::NON_SYNC_BIT != 0 { + return refuse("floor-cmaf-malformed", format!("{f}: a segment that does not open on a sync sample")); } - key.push(k); + let start = c.count(); + crate::cmaf_read::check_times(&samples, init.timescale, num, den, start).map_err(|x| cmaf_fault(x, &f))?; + for u in crate::cmaf_read::units(&b, &samples) { + c.push(&u)?; + } + segments.push(CmafSegment { sha256: shas[&f].clone(), file: f, start, frames: samples.len() as u64 }); } - let (seq, seq_obu) = seq.ok_or_else(|| FloorReason { code: "floor-av1-malformed", detail: "no temporal unit".into() })?; - if key.len() as u64 != frames { - return refuse("floor-frame-count", format!("{} temporal units for {frames} source frames", key.len())); + let n = c.count(); + let units = c.finish(frames.unwrap_or(n))?; + Ok(CmafCheck { units, init, init_sha256: shas[&init_file].clone(), init_file, segments }) +} + +/// §7.7: one media segment per piece of the plan `starts` (of a source of `frames` +/// frames), each holding exactly its piece's frames (`floor-cmaf-pieces`). +pub fn check_cmaf_pieces(segments: &[CmafSegment], starts: &[u64], frames: u64) -> Result<(), FloorReason> { + if segments.len() != starts.len() { + return refuse("floor-cmaf-pieces", format!("{} media segments for {} pieces", segments.len(), starts.len())); } - if let Some(r) = later { - return Err(r); + for (k, (s, &start)) in segments.iter().zip(starts).enumerate() { + let end = starts.get(k + 1).copied().unwrap_or(frames); + if (s.start, s.frames) != (start, end - start) { + return refuse("floor-cmaf-pieces", format!("{}: frames {} to {}, piece {k} is {start} to {end}", s.file, s.start, s.start + s.frames)); + } } - Ok(StreamCheck { seq, seq_obu, key }) + Ok(()) } /// §7.3: a unit starts at a shown key frame at every piece start of the plan `starts`, diff --git a/wai/wai-pack/src/golden.rs b/wai/wai-pack/src/golden.rs index 8eb6adb7d..d6b5e4b6b 100644 --- a/wai/wai-pack/src/golden.rs +++ b/wai/wai-pack/src/golden.rs @@ -31,7 +31,7 @@ use wai::stage_index::{self as wsix, ClassRec, EntryRec, Header, MediaClass, Pie use wai::wai_video_manifest::EnergyProvenance; /// The golden packs. -pub const PACKS: &[&str] = &["video-base-01", "video-staged-01", "video-ladder-01", "video-repack-01"]; +pub const PACKS: &[&str] = &["video-base-01", "video-staged-01", "video-ladder-01", "video-repack-01", "video-cmaf-01"]; type Files = BTreeMap>; @@ -556,7 +556,12 @@ pub fn reseal_as(files: &mut Files, key: &SigningKey, policy_json: Option<&[u8]> } } } - files.retain(|k, _| !k.starts_with("floor/")); + // A supplied CMAF floor's files are the ladder's own (§7.7): kept as they are. The OBU + // form's are rebuilt from the floor objects (§7.6). + let cmaf = policy.floor.cmaf(); + if !cmaf { + files.retain(|k, _| !k.starts_with("floor/")); + } files.retain(|k, _| !["hls/", "dash/", "moq/", "stages/"].iter().any(|d| k.starts_with(d))); // Each floor rung's floor, from the k-th floor entry of each piece (§5.7). let mut floor_views = Vec::new(); @@ -581,6 +586,12 @@ pub fn reseal_as(files: &mut Files, key: &SigningKey, policy_json: Option<&[u8]> } if let Some((s, obu)) = seq { let fl = crate::floor::Floor { seq: s, seq_obu: obu, pieces }; + if cmaf { + if let Ok((_, frags)) = crate::verify::cmaf_supplied(files, &policy, &name, &ix, tb, &fl.pieces) { + floor_views.push(FloorView { name: name.clone(), codec: fl.seq.codec_string(), w: fl.seq.max_frame_width, h: fl.seq.max_frame_height, init: format!("floor/{name}/init.mp4"), fragments: frags }); + } + continue; + } let starts: Vec = ix.pieces.iter().map(|p| p.start).collect(); let (ip, init, frags) = crate::pack::cmaf_files(&name, &fl, &starts, tb.den, tb.num)?; floor_views.push(FloorView { name, codec: fl.seq.codec_string(), w: fl.seq.max_frame_width, h: fl.seq.max_frame_height, init: ip.clone(), fragments: frags.iter().map(|(p, b)| (p.clone(), b.len() as u64)).collect() }); @@ -1268,6 +1279,47 @@ pub fn ladder_overlays(g: &Files, key: &SigningKey) -> (Files, Value) { overlays("ladder-mutations", LADDER_PACK, g, ladder_mutations(g, key)) } +/// The golden of a supplied floor in the CMAF form (§7.7), which the CMAF mutations alter. +pub const CMAF_PACK: &str = "video-cmaf-01"; + +/// CMAF packages a verifier must refuse or accept (§7.7, §11.3), each the CMAF golden +/// altered and re-sealed with its key where the receipt or `LISTING` alone would catch it: +/// the golden itself (`ok`); a media segment replaced by one of the same samples, a `free` +/// box before it, under its own SHA-256, which is not the supplied segment +/// (`floor-cmaf-mismatch`); `floor.listing` with a line's digest altered, and without it +/// (`floor-cmaf-mismatch`): the receipt binds the ladder's bytes through it. +pub fn cmaf_mutations(g: &Files, key: &SigningKey) -> Vec { + let mut out: Vec = Vec::new(); + let mut add = |name: &'static str, reason: &str, files: Files| out.push(PackageMutation { name, reason: reason.into(), files, empty_dirs: Vec::new(), unreadable_dirs: Vec::new() }); + add("ok", "ok", g.clone()); + let mut f = g.clone(); + let seg = f.keys().find(|k| k.starts_with("floor/hi/") && k.ends_with(".m4s")).expect("a segment").clone(); + let mut b = vec![0, 0, 0, 8, b'f', b'r', b'e', b'e']; + b.extend_from_slice(&f[&seg]); + f.remove(&seg); + f.insert(format!("floor/hi/{}.m4s", crate::sha256_hex(&b)), b); + reseal(&mut f, key).expect("the alteration re-seals"); + add("segment-not-the-supplied-one", "floor-cmaf-mismatch", f); + let mut f = g.clone(); + let mut l = f["floor.listing"].clone(); + let at = l.len() - 2 - "lo/seg_0004.m4s".len() - 64; + l[at] = if l[at] == b'0' { b'1' } else { b'0' }; + f.insert("floor.listing".into(), l); + relist(&mut f); + add("floor-listing-altered", "floor-cmaf-mismatch", f); + let mut f = g.clone(); + f.remove("floor.listing"); + relist(&mut f); + add("floor-listing-missing", "floor-cmaf-mismatch", f); + out +} + +/// The CMAF mutations as overlays on the CMAF golden (`cmaf-mutations/`), in the layout of +/// [`package_overlays`]. +pub fn cmaf_overlays(g: &Files, key: &SigningKey) -> (Files, Value) { + overlays("cmaf-mutations", CMAF_PACK, g, cmaf_mutations(g, key)) +} + fn overlays(dir: &str, pack: &str, g: &Files, mutations: Vec) -> (Files, Value) { let mut files = BTreeMap::new(); let mut cases = Vec::new(); @@ -1709,6 +1761,7 @@ pub fn regen(dir: &Path) -> std::io::Result<()> { for (sub, pack, f) in [ ("staged-mutations", STAGED_PACK, staged_overlays as fn(&Files, &SigningKey) -> (Files, Value)), ("ladder-mutations", LADDER_PACK, ladder_overlays), + ("cmaf-mutations", CMAF_PACK, cmaf_overlays), ] { let golden = read_tree(&dir.join("packs").join(pack).join("package"))?; let key = read_key(&dir.join("packs").join(pack).join("key.hex"))?; @@ -1842,6 +1895,7 @@ pub fn check(dir: &Path) -> std::io::Result> { ("package-mutations", MUTATED_PACK, package_overlays as fn(&Files, &SigningKey) -> (Files, Value)), ("staged-mutations", STAGED_PACK, staged_overlays), ("ladder-mutations", LADDER_PACK, ladder_overlays), + ("cmaf-mutations", CMAF_PACK, cmaf_overlays), ] { let golden = read_tree(&dir.join("packs").join(pack).join("package"))?; let key = read_key(&dir.join("packs").join(pack).join("key.hex"))?; diff --git a/wai/wai-pack/src/lib.rs b/wai/wai-pack/src/lib.rs index d9dabfdba..fbd97740d 100644 --- a/wai/wai-pack/src/lib.rs +++ b/wai/wai-pack/src/lib.rs @@ -22,6 +22,7 @@ pub mod capcheck; pub mod catalog; pub mod classify; pub mod cmaf; +pub mod cmaf_read; pub mod conformance; pub mod delivery; pub mod encode; diff --git a/wai/wai-pack/src/pack.rs b/wai/wai-pack/src/pack.rs index 45ddb938a..7be75f9cf 100644 --- a/wai/wai-pack/src/pack.rs +++ b/wai/wai-pack/src/pack.rs @@ -109,6 +109,10 @@ pub struct PackOpts { /// An earlier package whose bases and refinements this pack takes instead of coding /// them (§11.5): a re-pack, whose receipt names it (parent kind `re-pack`). pub base_from: Option, + /// A supplied CMAF floor's files (§7.7) are written into a directory package as hard + /// links to the supplied ones where the file system allows, so a server holds the + /// ladder's bytes once; every byte is the same either way. + pub link_supplied: bool, } impl PackOpts { @@ -131,6 +135,7 @@ impl PackOpts { grant: GrantRef::unbounded("wai.video.package"), jobs: 1, base_from: None, + link_supplied: false, } } } @@ -730,13 +735,28 @@ pub fn pack(policy_bytes: &[u8], sources: &BTreeMap>, opts: &mut Ok(PackOutput { files: sink.files, receipt }) } -/// One floor rung as the packer reads it: the rung, its floor name, and its stream's check. +/// One floor rung as the packer reads it: the rung, its floor name, its units' check, and +/// its supplied files. struct FloorIn<'a> { rung: &'a Rung, name: String, check: floor::StreamCheck, - /// The stream's SHA-256, as the supplied floor's listing gives it. - sha256: String, + form: FloorForm, +} + +/// A floor rung's supplied files. +enum FloorForm { + /// §7.3: one stream, `.obu`, and its SHA-256 as the listing gives it. + Obu { file: String, sha256: String }, + /// §7.7: an initialization segment and one media segment per piece, the ladder's own. + Cmaf(floor::CmafCheck), +} + +/// Where the second read of a floor rung is: a stream a unit at a time, or the next media +/// segment. +enum FloorRead<'s> { + Obu(Box>>>), + Cmaf(usize), } fn io_err(what: &str, e: impl std::fmt::Display) -> PackError { @@ -845,13 +865,23 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt } let listing = listing.expect("checked"); let mut fins: Vec = Vec::new(); + // A supplied CMAF floor's listing travels in the package (§7.7): it names each of the + // ladder's files by its SHA-256, and the policy, which the receipt signs, pins it. + let floor_listing = if policy.floor.cmaf() { Some(wai::pin::listing_from_sha256(&shas).map_err(|e| PackError::new("floor-listing-mismatch", e.to_string()))?) } else { None }; for (rung, name) in &floors { - let file = format!("{name}.obu"); - let sha256 = shas.get(&file).cloned().ok_or_else(|| PackError::new("floor-stream-missing", format!("no {file} in the supplied floor")))?; - let r = opts.floor.open(&file).map_err(|e| io_err(&file, e))?; - let check = floor::check_stream(r, n_frames).map_err(floor_reason)?; - floor::check_keyframes(&check.key, &starts, policy.floor.extra_keyframes).map_err(floor_reason)?; - fins.push(FloorIn { rung, name: name.clone(), check, sha256 }); + if policy.floor.cmaf() { + let c = floor::check_cmaf(&opts.floor, &shas, name, tb.num, tb.den, Some(n_frames)).map_err(floor_reason)?; + floor::check_cmaf_pieces(&c.segments, &starts, n_frames).map_err(floor_reason)?; + floor::check_keyframes(&c.units.key, &starts, policy.floor.extra_keyframes).map_err(floor_reason)?; + fins.push(FloorIn { rung, name: name.clone(), check: c.units.clone(), form: FloorForm::Cmaf(c) }); + } else { + let file = format!("{name}.obu"); + let sha256 = shas.get(&file).cloned().ok_or_else(|| PackError::new("floor-stream-missing", format!("no {file} in the supplied floor")))?; + let r = opts.floor.open(&file).map_err(|e| io_err(&file, e))?; + let check = floor::check_stream(r, n_frames).map_err(floor_reason)?; + floor::check_keyframes(&check.key, &starts, policy.floor.extra_keyframes).map_err(floor_reason)?; + fins.push(FloorIn { rung, name: name.clone(), check, form: FloorForm::Obu { file, sha256 } }); + } } // A re-pack's parent, verified and matched piece by piece (§11.5), before anything is @@ -870,18 +900,36 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt let coder = Coder::new(&policy, comp, w, h)?; // The second read: each piece coded, and each floor rung's units for it. let mut rd = crate::source::y4m::Y4mReader::new(src.open().map_err(|e| io_err("the source", e))?).map_err(source_err)?; - let mut streams = Vec::with_capacity(fins.len()); - for f in &fins { - let r = crate::files::HashingReader::new(opts.floor.open(&format!("{}.obu", f.name)).map_err(|e| io_err(&f.name, e))?); - streams.push(crate::av1::TuReader::new(r)); + if let Some(l) = &floor_listing { + sink.put(crate::verify::FLOOR_LISTING, l).map_err(|e| io_err(crate::verify::FLOOR_LISTING, e))?; } + let mut streams: Vec = Vec::with_capacity(fins.len()); let mut frag_views: Vec> = vec![Vec::new(); fins.len()]; let mut inits: Vec = Vec::with_capacity(fins.len()); for f in &fins { - let c = &f.check; - let init = crate::cmaf::write_init_av1(&c.seq, &c.seq_obu, c.seq.max_frame_width, c.seq.max_frame_height, tb.num); let path = format!("floor/{}/init.mp4", f.name); - sink.put(&path, &init).map_err(|e| io_err(&path, e))?; + match &f.form { + FloorForm::Obu { file, .. } => { + let r = crate::files::HashingReader::new(opts.floor.open(file).map_err(|e| io_err(file, e))?); + streams.push(FloorRead::Obu(Box::new(crate::av1::TuReader::new(r)))); + let c = &f.check; + let init = crate::cmaf::write_init_av1(&c.seq, &c.seq_obu, c.seq.max_frame_width, c.seq.max_frame_height, tb.num); + sink.put(&path, &init).map_err(|e| io_err(&path, e))?; + } + // The ladder's own initialization segment, as supplied (§7.7). + FloorForm::Cmaf(c) => { + streams.push(FloorRead::Cmaf(0)); + if opts.link_supplied { + sink.put_from(&path, &opts.floor, &c.init_file, &c.init_sha256, true).map_err(|e| PackError::new("floor-listing-mismatch", format!("{path}: {e}")))?; + } else { + let b = opts.floor.read(&c.init_file).map_err(|e| io_err(&c.init_file, e))?; + if crate::sha256_hex(&b) != c.init_sha256 { + return Err(PackError::new("floor-listing-mismatch", format!("{} changed while it was read", c.init_file))); + } + sink.put(&path, &b).map_err(|e| io_err(&path, e))?; + } + } + } inits.push(path); } let jobs = opts.jobs.max(1); @@ -919,20 +967,45 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt let df = objects::supplied_derived_from(&base_hash, &base_cap, &listing); for (fi, f) in fins.iter().enumerate() { let (fw, fh) = (f.check.seq.max_frame_width, f.check.seq.max_frame_height); - let mut units = Vec::with_capacity(piece.len as usize); - for _ in 0..piece.len { - match streams[fi].next_unit() { - Ok(Some(u)) => units.push(u), - Ok(None) => return Err(PackError::new("floor-listing-mismatch", format!("{}.obu changed while it was read", f.name))), - Err(crate::av1::ReadError::Io(e)) => return Err(io_err(&f.name, e)), - Err(crate::av1::ReadError::Malformed(e)) => return Err(PackError::new("floor-listing-mismatch", format!("{}.obu changed while it was read: {e}", f.name))), + let changed = |what: &str| PackError::new("floor-listing-mismatch", format!("{what} changed while it was read")); + let units: Vec> = match (&mut streams[fi], &f.form) { + (FloorRead::Obu(rd), FloorForm::Obu { file, .. }) => { + let mut units = Vec::with_capacity(piece.len as usize); + for _ in 0..piece.len { + match rd.next_unit() { + Ok(Some(u)) => units.push(u), + Ok(None) | Err(crate::av1::ReadError::Malformed(_)) => return Err(changed(file)), + Err(crate::av1::ReadError::Io(e)) => return Err(io_err(file, e)), + } + } + let at = piece.start as usize; + let key = &f.check.key[at..at + piece.len as usize]; + let (path, frag) = cmaf_fragment(&f.name, p as u64, piece.start, &units, key, tb.den).map_err(|e| PackError::new("floor-av1-malformed", e))?; + sink.put(&path, &frag).map_err(|e| io_err(&path, e))?; + frag_views[fi].push((path, frag.len() as u64)); + units } - } - let at = piece.start as usize; - let key = &f.check.key[at..at + piece.len as usize]; - let (path, frag) = cmaf_fragment(&f.name, p as u64, piece.start, &units, key, tb.den).map_err(|e| PackError::new("floor-av1-malformed", e))?; - sink.put(&path, &frag).map_err(|e| io_err(&path, e))?; - frag_views[fi].push((path, frag.len() as u64)); + // The piece's media segment, the ladder's own bytes under its SHA-256 + // (§7.7), and its samples as the piece's units. + (FloorRead::Cmaf(next), FloorForm::Cmaf(c)) => { + let seg = &c.segments[*next]; + *next += 1; + let b = opts.floor.read(&seg.file).map_err(|e| io_err(&seg.file, e))?; + if crate::sha256_hex(&b) != seg.sha256 { + return Err(changed(&seg.file)); + } + let samples = crate::cmaf_read::read_segment(&b, &c.init).map_err(|_| changed(&seg.file))?; + let path = format!("floor/{}/{}.m4s", f.name, seg.sha256); + if opts.link_supplied { + sink.put_from(&path, &opts.floor, &seg.file, &seg.sha256, true).map_err(|e| PackError::new("floor-listing-mismatch", format!("{path}: {e}")))?; + } else if !sink.has(&path) { + sink.put(&path, &b).map_err(|e| io_err(&path, e))?; + } + frag_views[fi].push((path, b.len() as u64)); + crate::cmaf_read::units(&b, &samples) + } + _ => unreachable!("a floor's read is of its form"), + }; let payload = floor::av1_payload(&units, fh, fw, tb.num, tb.den); let env = objects::floor_envelope(comp.media.label(), &f.rung.capability, payload, piece.len, fh, fw, &df); cp.stages.push(Stage { @@ -962,13 +1035,14 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt } // Each stream read again whole is the one the listing pinned. for (f, s) in fins.iter().zip(streams) { - let mut s = s; - if !matches!(s.next_unit(), Ok(None)) { - return Err(PackError::new("floor-listing-mismatch", format!("{}.obu changed while it was read", f.name))); - } - let got = s.into_inner().finish().map_err(|e| io_err(&f.name, e))?; - if got != f.sha256 { - return Err(PackError::new("floor-listing-mismatch", format!("{}.obu changed while it was read", f.name))); + if let (FloorRead::Obu(mut rd), FloorForm::Obu { file, sha256 }) = (s, &f.form) { + if !matches!(rd.next_unit(), Ok(None)) { + return Err(PackError::new("floor-listing-mismatch", format!("{file} changed while it was read"))); + } + let got = (*rd).into_inner().finish().map_err(|e| io_err(file, e))?; + if got != *sha256 { + return Err(PackError::new("floor-listing-mismatch", format!("{file} changed while it was read"))); + } } } if rd.next_frame().is_some() { diff --git a/wai/wai-pack/src/policy.rs b/wai/wai-pack/src/policy.rs index 56946cc6e..5e100e0be 100644 --- a/wai/wai-pack/src/policy.rs +++ b/wai/wai-pack/src/policy.rs @@ -333,8 +333,21 @@ impl Rung { pub struct Floor { pub supplied_listing: Option, pub extra_keyframes: bool, + /// `"cmaf"`: the supplied floor is CMAF files, an existing ladder's (§7.7); absent, it + /// is the OBU form (§7.3). + pub supplied_form: Option, } +impl Floor { + /// Whether the supplied floor is in the CMAF form (§7.7). + pub fn cmaf(&self) -> bool { + self.supplied_form.as_deref() == Some(SUPPLIED_CMAF) + } +} + +/// The one value of `floor.supplied_form`: the CMAF form of a supplied floor (§7.7). +pub const SUPPLIED_CMAF: &str = "cmaf"; + /// One delivery class. #[derive(Debug, Clone, PartialEq, Eq)] pub struct Class { @@ -749,12 +762,17 @@ fn read(doc: &toml::Table) -> R<(Policy, Option>)> { } let f = top.table("floor")?; - f.keys(&["supplied_listing", "extra_keyframes"])?; + f.keys(&["supplied_listing", "extra_keyframes", "supplied_form"])?; let supplied_listing = f.string("supplied_listing")?; if supplied_listing.as_deref().is_some_and(|s| !is_hex64(s)) { return Err(f.err(PolicyReason::Value, "supplied_listing")); } - let floor = Floor { supplied_listing, extra_keyframes: f.boolean("extra_keyframes", false)? }; + let extra_keyframes = f.boolean("extra_keyframes", false)?; + let supplied_form = f.string("supplied_form")?; + if supplied_form.as_deref().is_some_and(|s| s != SUPPLIED_CMAF) { + return Err(f.err(PolicyReason::Value, "supplied_form")); + } + let floor = Floor { supplied_listing, extra_keyframes, supplied_form }; let l = top.table("live")?; l.keys(&["layer_lag_ms"])?; @@ -1033,8 +1051,8 @@ impl Policy { /// The effective policy as JSON ([packaging] §3.2): every member the schema /// defines, defaults written in; an optional member with no default (`source`, - /// `supplied_listing`, `max_kbps`, `refines`, and a rule's `when` and `then` keys) is - /// omitted when absent. Arrays of tables keep their file order. + /// `supplied_listing`, `supplied_form`, `max_kbps`, `refines`, and a rule's `when` and + /// `then` keys) is omitted when absent. Arrays of tables keep their file order. /// /// [packaging]: ../../../extensions/packaging.md pub fn to_value(&self) -> Value { @@ -1095,6 +1113,9 @@ impl Policy { floor.insert("supplied_listing".into(), l.clone().into()); } floor.insert("extra_keyframes".into(), self.floor.extra_keyframes.into()); + if let Some(f) = &self.floor.supplied_form { + floor.insert("supplied_form".into(), f.clone().into()); + } top.insert("floor".into(), floor.into()); let mut live = Map::new(); live.insert("layer_lag_ms".into(), self.layer_lag_ms.clone().into()); diff --git a/wai/wai-pack/src/verify.rs b/wai/wai-pack/src/verify.rs index b018afef2..4881ed6fc 100644 --- a/wai/wai-pack/src/verify.rs +++ b/wai/wai-pack/src/verify.rs @@ -431,7 +431,10 @@ fn verify_component( if !errs.is_empty() { return Err(errs); } - let (floors, produced) = floor_view(policy, comp, ix, &objects).map_err(|e| vec![e])?; + let (floors, produced) = floor_view(files, policy, comp, ix, &objects).map_err(|e| vec![e])?; + if policy.floor.cmaf() { + expected.insert(FLOOR_LISTING.to_string()); + } for (p, b) in &produced { expected.insert(p.clone()); if files.get(p) != Some(b) { @@ -575,22 +578,76 @@ type FloorFiles = (Vec, Vec<(String, Vec)>); /// every sequence header is the first's bytes, and a shown key frame carries one /// (`floor-av1-malformed`); each piece's first unit is a shown key frame, and no other is /// unless the policy allows extra key frames (`floor-keyframe-mismatch`). -fn floor_view(policy: &Policy, comp: &Component, ix: &StageIndex, objects: &BTreeMap<[u8; 32], Vec>) -> Result { +fn floor_view(files: &BTreeMap>, policy: &Policy, comp: &Component, ix: &StageIndex, objects: &BTreeMap<[u8; 32], Vec>) -> Result { let mut views = Vec::new(); let mut produced = Vec::new(); for (k, (rung, name)) in crate::pack::floor_rungs(policy, &comp.id).into_iter().enumerate() { - let (v, files) = one_floor(policy, comp, ix, objects, rung, &name, k)?; + let (v, got) = one_floor(files, policy, comp, ix, objects, rung, &name, k)?; views.push(v); - produced.extend(files); + produced.extend(got); } Ok((views, produced)) } +/// The package file that carries a supplied CMAF floor's listing (§7.7, §11.1). +pub const FLOOR_LISTING: &str = "floor.listing"; + +/// A floor rung's CMAF files in the CMAF form (§7.7, §11.3), bound to the receipt through +/// the supplied floor's listing: `floor.listing` hashes to the policy's +/// `floor.supplied_listing` and is a listing; `floor//init.mp4` is its line for +/// `/init.mp4` and an initialization segment §7.7 reads; and the listing's media +/// segments of `/`, in its order, are one per piece, piece *k*'s +/// `floor//.m4s`, §7.7's boxes, opening on a sync sample, every sample +/// one frame and the first at the piece's start, its samples the piece's floor units +/// without their temporal delimiters (`floor-cmaf-mismatch`). Returns the files, so they +/// are the package's expected ones, and each piece's fragment. +#[allow(clippy::type_complexity)] +pub fn cmaf_supplied(files: &BTreeMap>, policy: &Policy, name: &str, ix: &StageIndex, tb: Timebase, pieces: &[crate::floor::FloorPiece]) -> Result<(Vec<(String, Vec)>, Vec<(String, u64)>), Reason> { + let bad = |why: String| reason("floor-cmaf-mismatch", why); + let lb = files.get(FLOOR_LISTING).ok_or_else(|| bad(format!("no {FLOOR_LISTING}")))?; + if Some(crate::sha256_hex(lb)) != policy.floor.supplied_listing { + return Err(bad(format!("{FLOOR_LISTING} does not hash to the policy's floor.supplied_listing"))); + } + let lines = wai::pin::parse_listing(lb).map_err(|e| bad(format!("{FLOOR_LISTING}: {e}")))?; + let shas: BTreeMap = lines.iter().map(|(p, d)| (p.clone(), crate::hex(d))).collect(); + let (init_file, segs) = crate::floor::cmaf_files_of(&shas, name).map_err(|r| bad(r.detail))?; + let init_path = format!("floor/{name}/init.mp4"); + let ib = files.get(&init_path).ok_or_else(|| bad(format!("no {init_path}")))?; + if crate::sha256_hex(ib) != shas[&init_file] { + return Err(bad(format!("{init_path} is not the supplied {init_file}"))); + } + let init = crate::cmaf_read::read_init(ib).map_err(|f| bad(format!("{init_path}: {}", f.detail())))?; + if segs.len() != pieces.len() { + return Err(bad(format!("{} media segments of {name}/ for {} pieces", segs.len(), pieces.len()))); + } + let mut produced = vec![(init_path, ib.clone())]; + let mut frags = Vec::with_capacity(pieces.len()); + for (p, (piece, file)) in pieces.iter().zip(&segs).enumerate() { + let path = format!("floor/{name}/{}.m4s", shas[file]); + let b = files.get(&path).ok_or_else(|| bad(format!("piece {p}: no {path}, the supplied {file}")))?; + if crate::sha256_hex(b) != shas[file] { + return Err(bad(format!("{path}: not named by its SHA-256"))); + } + let samples = crate::cmaf_read::read_segment(b, &init).map_err(|f| bad(format!("{path}: {}", f.detail())))?; + if samples[0].flags & crate::cmaf_read::NON_SYNC_BIT != 0 { + return Err(bad(format!("{path}: a segment that does not open on a sync sample"))); + } + crate::cmaf_read::check_times(&samples, init.timescale, tb.num, tb.den, ix.pieces[p].start).map_err(|f| bad(format!("{path}: {}", f.detail())))?; + if crate::cmaf_read::units(b, &samples) != piece.units { + return Err(bad(format!("{path}: its samples are not piece {p}'s floor units"))); + } + produced.push((path.clone(), b.clone())); + frags.push((path, b.len() as u64)); + } + Ok((produced, frags)) +} + /// One floor's view and the CMAF files it gives. type OneFloor = (FloorView, Vec<(String, Vec)>); /// [`floor_view`] for the `k`-th floor rung, `rung`, of floor name `name`. -fn one_floor(policy: &Policy, comp: &Component, ix: &StageIndex, objects: &BTreeMap<[u8; 32], Vec>, rung: &crate::policy::Rung, name: &str, k: usize) -> Result { +#[allow(clippy::too_many_arguments)] +fn one_floor(files: &BTreeMap>, policy: &Policy, comp: &Component, ix: &StageIndex, objects: &BTreeMap<[u8; 32], Vec>, rung: &crate::policy::Rung, name: &str, k: usize) -> Result { let tb = comp.timebase; let object = |why: String| reason("floor-object-mismatch", why); let listing = policy.floor.supplied_listing.clone().ok_or_else(|| object("a supplied floor with no listing in the policy".into()))?; @@ -665,17 +722,19 @@ fn one_floor(policy: &Policy, comp: &Component, ix: &StageIndex, objects: &BTree let (s, obu) = seq.ok_or_else(|| object("a component with no piece".into()))?; let fl = crate::floor::Floor { seq: s, seq_obu: obu, pieces }; let starts: Vec = ix.pieces.iter().map(|p| p.start).collect(); - let (init_path, init, frags) = crate::pack::cmaf_files(name, &fl, &starts, tb.den, tb.num).map_err(|e| reason("floor-cmaf-mismatch", e))?; - let view = FloorView { - name: name.to_string(), - codec: fl.seq.codec_string(), - w: fl.seq.max_frame_width, - h: fl.seq.max_frame_height, - init: init_path.clone(), - fragments: frags.iter().map(|(p, b)| (p.clone(), b.len() as u64)).collect(), + let init_path = format!("floor/{name}/init.mp4"); + // The CMAF form's files are the ladder's own, read (§7.7); the OBU form's, rebuilt + // from the units (§7.6). + let (produced, fragments) = if policy.floor.cmaf() { + cmaf_supplied(files, policy, name, ix, tb, &fl.pieces)? + } else { + let (init_path, init, frags) = crate::pack::cmaf_files(name, &fl, &starts, tb.den, tb.num).map_err(|e| reason("floor-cmaf-mismatch", e))?; + let fragments = frags.iter().map(|(p, b)| (p.clone(), b.len() as u64)).collect(); + let mut produced = vec![(init_path, init)]; + produced.extend(frags); + (produced, fragments) }; - let mut produced = vec![(init_path, init)]; - produced.extend(frags); + let view = FloorView { name: name.to_string(), codec: fl.seq.codec_string(), w: fl.seq.max_frame_width, h: fl.seq.max_frame_height, init: init_path, fragments }; Ok((view, produced)) } diff --git a/wai/wai-pack/tests/cmaf.rs b/wai/wai-pack/tests/cmaf.rs new file mode 100644 index 000000000..acf48c32a --- /dev/null +++ b/wai/wai-pack/tests/cmaf.rs @@ -0,0 +1,174 @@ +//! A supplied floor in the CMAF form (packaging §7.7): the golden `video-cmaf-01` takes +//! `video-ladder-01`'s two AV1 streams as a media muxer wrote them into fMP4 segments, and +//! its floor's CMAF files are those segments, byte for byte, bound to the receipt by the +//! supplied floor's listing, which the package carries. Each fault of a supplied CMAF floor +//! is refused by name, and a package whose segments are not the supplied ones is refused. + +use std::collections::BTreeMap; +use std::path::{Path, PathBuf}; +use wai::stage_index::{Role, StageIndex}; + +type Files = BTreeMap>; + +fn corpus() -> PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")).join("../pack-conformance") +} + +fn held(p: &Path) -> Files { + wai::pin::read_dir_set(p).unwrap() +} + +fn golden() -> Files { + held(&corpus().join("packs/video-cmaf-01/package")) +} + +fn supplied() -> Files { + held(&corpus().join("packs/video-cmaf-01/floor")) +} + +fn policy() -> String { + String::from_utf8(std::fs::read(corpus().join("packs/video-cmaf-01/policy.toml")).unwrap()).unwrap() +} + +/// Pack the golden's fixture under `policy` over the supplied floor `floor` (its listing +/// pinned in the policy). +fn pack(policy: &str, floor: Files) -> Result { + let listing = wai_pack::floor::listing_sha256(&floor).unwrap(); + let at = policy.find("supplied_listing = \"").unwrap() + "supplied_listing = \"".len(); + let policy = format!("{}{listing}{}", &policy[..at], &policy[at + 64..]); + let mut o = wai_pack::pack::PackOpts::new(ed25519_dalek::SigningKey::from_bytes(&[0x5a; 32]), "did:key:test", floor); + let mut src = BTreeMap::new(); + src.insert("v".to_string(), wai_pack::fixture::generate("video-base-01").unwrap()); + wai_pack::pack::pack(policy.as_bytes(), &src, &mut o) +} + +fn code(r: Result) -> String { + r.map(|_| "ok".to_string()).unwrap_or_else(|e| e.code) +} + +/// Where box `kind` begins in `b` (its size field). +fn box_at(b: &[u8], kind: &[u8; 4]) -> usize { + b.windows(4).position(|w| w == kind).unwrap() - 4 +} + +/// The floor's CMAF files are the supplied ones, byte for byte, and `floor.listing` is the +/// supplied listing; each floor object holds its piece's samples as temporal units, which +/// are exactly the OBU form's units of the same streams (`video-ladder-01`'s). +#[test] +fn a_cmaf_floor_is_the_ladder_s_own_bytes() { + let pkg = golden(); + wai_pack::verify::verify_files(&pkg).unwrap(); + let sup = supplied(); + let view: BTreeMap = sup.iter().map(|(k, v)| (k.clone(), v.as_slice())).collect(); + assert_eq!(pkg["floor.listing"], wai::pin::listing_from(&view).unwrap()); + let ix = StageIndex::parse(&pkg["index-v.wsix"]).unwrap(); + let ladder = held(&corpus().join("packs/video-ladder-01/floor")); + for (k, name) in ["hi", "lo"].iter().enumerate() { + assert_eq!(pkg[&format!("floor/{name}/init.mp4")], sup[&format!("{name}/init.mp4")]); + let segs: Vec<&String> = sup.keys().filter(|p| p.starts_with(&format!("{name}/seg_"))).collect(); + assert_eq!(segs.len(), ix.pieces.len()); + let tus: Vec> = wai_pack::av1::temporal_units(&ladder[&format!("{name}.obu")]).unwrap().iter().map(|t| t.bytes()).collect(); + for (p, seg) in segs.iter().enumerate() { + let b = &sup[*seg]; + assert_eq!(&pkg[&format!("floor/{name}/{}.m4s", wai_pack::sha256_hex(b))], b, "{seg}, as supplied"); + let fe = ix.piece_entries(p).iter().filter(|e| e.role == Role::Floor).nth(k).unwrap(); + let w = wai::container::Wai::from_bytes(&pkg[&wai_pack::objects::object_path(&fe.content_hash)]).unwrap(); + let (units, _) = wai_pack::floor::av1_units(&w.payload).unwrap(); + let (s, n) = (ix.pieces[p].start as usize, ix.pieces[p].duration as usize); + assert_eq!(units, tus[s..s + n].to_vec(), "piece {p} of {name}: the stream's own units"); + } + } + let master = String::from_utf8(pkg["hls/classic/master.m3u8"].clone()).unwrap(); + assert!(master.contains("../classic/floor-hi.m3u8") && master.contains("../classic/floor-lo.m3u8")); +} + +/// §7.7's refusals, each before anything is written. +#[test] +fn a_supplied_cmaf_floor_s_faults_are_refused() { + let p = policy(); + let sup = supplied(); + assert_eq!(code(pack(&p, sup.clone())), "ok"); + let with = |edit: &dyn Fn(&mut Files)| { + let mut f = sup.clone(); + edit(&mut f); + code(pack(&p, f)) + }; + assert_eq!(with(&|f| { f.remove("lo/init.mp4"); }), "floor-stream-missing"); + assert_eq!(with(&|f| { f.insert("hi/index.m3u8".into(), b"#EXTM3U\n".to_vec()); }), "floor-cmaf-malformed"); + assert_eq!(with(&|f| { f.insert("hi/x/seg.m4s".into(), Vec::new()); }), "floor-cmaf-malformed", "a segment in a directory below"); + assert_eq!(with(&|f| { + let b = f.get_mut("hi/seg_0002.m4s").unwrap(); + b[..4].copy_from_slice(&0u32.to_be_bytes()); + }), "floor-cmaf-malformed", "a box of size 0"); + assert_eq!(with(&|f| { + let b = f.get_mut("hi/seg_0002.m4s").unwrap(); + let t = box_at(b, b"trun"); + b[t + 24..t + 28].copy_from_slice(&0x0101_0000u32.to_be_bytes()); + }), "floor-cmaf-malformed", "a segment that does not open on a sync sample"); + assert_eq!(with(&|f| { + let b = f.get_mut("hi/seg_0002.m4s").unwrap(); + let t = box_at(b, b"tfhd"); + let d = u32::from_be_bytes(b[t + 16..t + 20].try_into().unwrap()); + b[t + 16..t + 20].copy_from_slice(&(d + 1).to_be_bytes()); + }), "floor-cmaf-timing", "a sample longer than one frame"); + assert_eq!(with(&|f| { f.remove("lo/seg_0004.m4s"); }), "floor-frame-count"); + // Pieces of at most two seconds: the first segment holds two pieces. + let short = p.replace("max_ms = 4000", "max_ms = 2000").replace("target_ms = 2000", "target_ms = 1000"); + assert_eq!(code(pack(&short, sup.clone())), "floor-cmaf-pieces"); + // Without supplied_form, the floor is read in the OBU form, which holds no stream. + assert_eq!(code(pack(&p.replace("supplied_form = \"cmaf\"\n", ""), sup)), "floor-stream-missing"); +} + +/// A package whose segment is not the supplied one is refused, though it is a segment of +/// the same samples: the receipt binds the supplied bytes through `floor.listing`. +#[test] +fn the_package_binds_the_supplied_bytes() { + let mut f = golden(); + let seg = f.keys().find(|k| k.starts_with("floor/hi/") && k.ends_with(".m4s")).unwrap().clone(); + let mut b = vec![0, 0, 0, 8, b'f', b'r', b'e', b'e']; + b.extend_from_slice(&f[&seg]); + f.remove(&seg); + f.insert(format!("floor/hi/{}.m4s", wai_pack::sha256_hex(&b)), b); + let key = wai_pack::unhex(std::fs::read_to_string(corpus().join("packs/video-cmaf-01/key.hex")).unwrap().trim()).unwrap(); + wai_pack::golden::reseal(&mut f, &ed25519_dalek::SigningKey::from_bytes(&key.try_into().unwrap())).unwrap(); + let got: Vec = wai_pack::verify::verify_files(&f).err().unwrap_or_default().into_iter().map(|r| r.code).collect(); + assert_eq!(got.first().map(String::as_str), Some("floor-cmaf-mismatch"), "{got:?}"); +} + +/// Packed into a directory with `link_supplied`, the floor's CMAF files are the supplied +/// files themselves (hard links where the file system allows): the package verifies, and +/// on a file system of inodes each shares the supplied file's. +#[test] +fn a_linked_floor_is_the_supplied_files() { + let dir = std::env::temp_dir().join(format!("wai-pack-cmaf-link-{}", std::process::id())); + let _ = std::fs::remove_dir_all(&dir); + let policy = std::fs::read(corpus().join("packs/video-cmaf-01/policy.toml")).unwrap(); + let key = wai_pack::unhex(std::fs::read_to_string(corpus().join("packs/video-cmaf-01/key.hex")).unwrap().trim()).unwrap(); + let key = ed25519_dalek::SigningKey::from_bytes(&key.try_into().unwrap()); + let id = wai::signer_id::did_key(&key.verifying_key().to_bytes()); + // The supplied floor copied beside the output, so a link is on one file system. + let sup = dir.join("floor"); + for (p, b) in supplied() { + std::fs::create_dir_all(sup.join(&p).parent().unwrap()).unwrap(); + std::fs::write(sup.join(&p), b).unwrap(); + } + let mut o = wai_pack::pack::PackOpts::with_floor(key, id, wai_pack::files::FileSet::Dir(sup.clone())); + o.link_supplied = true; + let fixture = wai_pack::fixture::generate("video-base-01").unwrap(); + let mut src = BTreeMap::new(); + src.insert("v".to_string(), wai_pack::files::Input::Bytes(&fixture)); + let out = dir.join("out"); + let mut sink = wai_pack::files::DirSink::new(&out).unwrap(); + wai_pack::pack::pack_into(&policy, &src, &mut o, &mut sink).unwrap(); + sink.keep(); + assert_eq!(held(&out), golden(), "the golden, byte for byte"); + #[cfg(unix)] + { + use std::os::unix::fs::MetadataExt as _; + let ino = |p: &Path| std::fs::metadata(p).unwrap().ino(); + assert_eq!(ino(&out.join("floor/hi/init.mp4")), ino(&sup.join("hi/init.mp4"))); + let s0 = std::fs::read(sup.join("lo/seg_0000.m4s")).unwrap(); + assert_eq!(ino(&out.join(format!("floor/lo/{}.m4s", wai_pack::sha256_hex(&s0)))), ino(&sup.join("lo/seg_0000.m4s"))); + } + let _ = std::fs::remove_dir_all(&dir); +} -- 2.54.0 (Apple Git-157) From b3b596192598a14d77d646a74a1469f7adac175c Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 20:33:48 -0400 Subject: [PATCH 04/50] =?UTF-8?q?packaging:=20a=20streaming=20on-demand=20?= =?UTF-8?q?pack=20(=C2=A711.4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit wai-pack pack now reads its source from its file a frame at a time (twice: once to cut, once to code) and the supplied floor from its directory a file and a temporal unit at a time, writes each package file into the output directory as it is made (files::DirSink, which removes what it wrote on a refusal), and reads objects back one at a time for the catalogs. What it holds no longer grows with the title's length, but for a record per piece and per entry and a byte per frame per floor. --jobs codes n pieces at once, each alone, so the package is the same for any n. - packaging §11.4: what the packer holds, and that a refusal leaves nothing written. - tests/pack_alloc.rs: a source eight times as long packs in the same peak allocation (a counting allocator), give or take its records; tests/packs.rs: every golden packs byte for byte into a directory on three threads. CI's test-count floors. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-pack.yml | 3 +- wai/CHANGELOG.md | 11 +++- wai/extensions/packaging.md | 10 +++- wai/wai-pack/src/bin/wai_pack.rs | 41 +++++++++----- wai/wai-pack/src/golden.rs | 12 +++- wai/wai-pack/tests/pack_alloc.rs | 95 ++++++++++++++++++++++++++++++++ wai/wai-pack/tests/packs.rs | 25 +++++++++ 7 files changed, 176 insertions(+), 21 deletions(-) create mode 100644 wai/wai-pack/tests/pack_alloc.rs diff --git a/.github/workflows/wai-pack.yml b/.github/workflows/wai-pack.yml index 8591776aa..12a734813 100644 --- a/.github/workflows/wai-pack.yml +++ b/.github/workflows/wai-pack.yml @@ -130,7 +130,8 @@ jobs: --test=cmaf 4 --test=conformance 1 --test=ladder 3 - --test=packs 7 + --test=pack_alloc 1 + --test=packs 8 --test=review 9 --test=refusals 5 --test=repack 3 diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md index aaa550aa8..533fed4f9 100644 --- a/wai/CHANGELOG.md +++ b/wai/CHANGELOG.md @@ -43,9 +43,14 @@ wire format may change and such changes are recorded here. - **The DASH renderer** (`wai::http_binding::dash`) writes a representation's own `@codecs`, `@width` and `@height` when given, and an adaptation set's `@codecs` only when every representation shares it. -- **The packer reads its inputs as streams.** It reads the source twice, a frame at a - time, and each floor stream a temporal unit at a time, and writes each file as it is - made; a source that does not read the same twice is refused (`pack-source-changed`). +- **A streaming on-demand packer** (§11.4). The packer reads the source twice, a frame + at a time, once to cut it and once to code it, and each floor stream a temporal unit at + a time, and `wai-pack pack` writes each file into its directory as it is made, reading + objects back for the catalogs. What it holds no longer grows with the title, but for a + record per piece and per entry and a byte per frame per floor; a refusal removes what it + wrote. `--jobs ` codes n pieces at once, each alone, so the package is the same for + any n. A source that does not read the same twice is refused (`pack-source-changed`). + `tests/pack_alloc.rs` packs a source eight times as long in the same peak memory. - **Conformance.** `packs/video-ladder-01/` (two floors, one at half size, over `video-base-01`'s bases, which are the same objects), `ladder-mutations/`, `packs/video-repack-01/` (the ladder re-packed from `video-base-01`), diff --git a/wai/extensions/packaging.md b/wai/extensions/packaging.md index b9ef8898f..adef10db7 100644 --- a/wai/extensions/packaging.md +++ b/wai/extensions/packaging.md @@ -1237,7 +1237,8 @@ of a capability it does not encode, or a refinement over a base it does not refi (`pack-capability-unsupported:`, every one naming the capability of the rung it does not pack); and a component with no source (`pack-source-missing`) or whose source's frame rate is not its timebase (`pack-source-rate`). Where its own work fails it -refuses by name too, and writes nothing: an encode the encoder refuses, such as a piece +refuses by name too, and leaves nothing written (a file it wrote before the refusal is +removed): an encode the encoder refuses, such as a piece past the samples it holds, or an object it wrote that does not count (`pack-encode`); a piece past `2^32 − 1` units (`pack-piece-length`); catalogs it cannot write, the case §11.3 refuses as `catalog-mismatch` (`pack-catalog`); a meter that was asked for and @@ -1246,7 +1247,12 @@ gives no figure, a span too short to reach a microjoule or a figure past `2^64 write (`pack-measurement-claim`); a listing it cannot write (`pack-listing`); and a source that does not read the same twice (`pack-source-changed`) or a supplied floor stream that does not (`floor-listing-mismatch`): it reads each a frame or a temporal unit at a time, -once to cut and check it and once to code it, and holds neither whole. It +once to cut and check it and once to code it, and holds neither whole. What it holds is +not a function of the source's length but for a record per piece and per entry and a byte +per frame of each floor (whether it starts at a key frame): the frames of the pieces it +codes at once, which it chooses, each piece coded alone (§4.1), so the package is the same +for any number; one piece of each floor; and, for the catalogs, one object at a time, +read back from where it wrote it. Each file is written whole as it is made. It writes a package only into a directory that is new or holds nothing, and refuses any other before it packs (`pack-out-not-empty`): written among another package's files, it would leave behind the ones it does not write. diff --git a/wai/wai-pack/src/bin/wai_pack.rs b/wai/wai-pack/src/bin/wai_pack.rs index 6ad78b5f5..a24890d56 100644 --- a/wai/wai-pack/src/bin/wai_pack.rs +++ b/wai/wai-pack/src/bin/wai_pack.rs @@ -11,11 +11,14 @@ //! supplied floor //! wai-pack pack --policy --out --key [--source =]... //! [--floor ] [--signer-id ] [--royalty-free-only] [--meter none|model:] -//! [--base-from ] [--link-supplied] +//! [--base-from ] [--link-supplied] [--jobs ] //! pack the policy's components into : objects, stage indexes, the floor's CMAF //! files, catalogs, the receipt (and, metered, its measurement claim) and LISTING; -//! is new or empty (`pack-out-not-empty` otherwise, before any work), and a -//! refusal writes nothing and prints its reason. Sources default to each +//! is new or empty (`pack-out-not-empty` otherwise, before any work). Each file +//! is written as it is made, the source read a frame at a time and the floor a unit +//! at a time (packaging §11.4), so what the packer holds does not grow with the +//! source's length; a refusal removes what it wrote and prints its reason. --jobs +//! codes that many pieces at once, each alone, so the package is the same for any n. Sources default to each //! component's `source`, and the floor to `floor/`, beside the policy; the signer id //! defaults to the key's did:key. A meter that gives no figure (a pack too short to //! reach a microjoule at , or a figure past 2^64 - 1) refuses the pack @@ -93,7 +96,7 @@ fn usage() -> ExitCode { eprintln!( "usage:\n wai-pack policy [--royalty-free-only]\n \ wai-pack plan --policy --component [--source ] [--out ]\n \ - wai-pack pack --policy --out --key [--source =]... [--floor ] [--signer-id ] [--royalty-free-only] [--meter none|model:] [--base-from ] [--link-supplied]\n \ + wai-pack pack --policy --out --key [--source =]... [--floor ] [--signer-id ] [--royalty-free-only] [--meter none|model:] [--base-from ] [--link-supplied] [--jobs ]\n \ wai-pack live --policy --out --key [--signer-id ] [--window ]\n \ wai-pack verify [--parent ]\n \ wai-pack listing [--primary]\n \ @@ -183,18 +186,27 @@ fn cmd_pack(args: &[String]) -> Result<(), String> { let bytes = std::fs::read(path).map_err(|e| format!("{path}: {e}"))?; let base = Path::new(path).parent().unwrap_or(Path::new(".")); let p = Policy::parse_bytes(&bytes).map_err(|e| e.to_string())?; + // Each source is a file the packer reads a frame at a time, and the supplied floor a + // directory it reads a file at a time: neither is held whole. let mut sources = std::collections::BTreeMap::new(); for c in &p.components { let given = args.iter().zip(args.iter().skip(1)).filter(|(f, _)| *f == "--source").find_map(|(_, v)| v.strip_prefix(&format!("{}=", c.id))); let file = given.map(std::path::PathBuf::from).or_else(|| c.source.as_ref().map(|s| base.join(s))); if let Some(f) = file { - sources.insert(c.id.clone(), std::fs::read(&f).map_err(|e| format!("{}: {e}", f.display()))?); + if !f.is_file() { + return Err(format!("{}: no such file", f.display())); + } + sources.insert(c.id.clone(), wai_pack::files::Input::Path(f)); } } let floor_dir = opt(args, "--floor").map(std::path::PathBuf::from).unwrap_or_else(|| base.join("floor")); - let floor = if floor_dir.is_dir() { wai::pin::read_dir_set(&floor_dir).map_err(|e| e.to_string())? } else { Default::default() }; + let floor = if floor_dir.is_dir() { wai_pack::files::FileSet::Dir(floor_dir) } else { wai_pack::files::FileSet::default() }; let signer_id = opt(args, "--signer-id").map(str::to_string).unwrap_or_else(|| wai::signer_id::did_key(&key.verifying_key().to_bytes())); - let mut o = wai_pack::pack::PackOpts::new(key, signer_id, floor); + let mut o = wai_pack::pack::PackOpts::with_floor(key, signer_id, floor); + o.jobs = match opt(args, "--jobs") { + None => 1, + Some(j) => j.parse().ok().filter(|&n: &usize| n >= 1).ok_or_else(|| format!("pack: --jobs {j}: a count of at least 1"))?, + }; o.overrides = Overrides { royalty_free_only: args.iter().any(|a| a == "--royalty-free-only") }; o.base_from = opt(args, "--base-from").map(|d| wai_pack::files::FileSet::Dir(d.into())); o.link_supplied = args.iter().any(|a| a == "--link-supplied"); @@ -208,12 +220,15 @@ fn cmd_pack(args: &[String]) -> Result<(), String> { o.issued_at = wai::claim_receipt::rfc3339_utc(now); } } - let pk = wai_pack::pack::pack(&bytes, &sources, &mut o).map_err(|e| e.to_string())?; - pk.write(Path::new(out)).map_err(|e| format!("{out}: {e}"))?; - println!("receipt {}", hex(&pk.receipt.receipt_hash())); - println!("pack digest {}", pk.pack_digest()); - println!("entries {} ({} distinct, {} bytes referenced, {} stored)", pk.receipt.total_entries, pk.receipt.unique_objects, pk.receipt.total_bytes, pk.receipt.stored_bytes); - println!("energy {}", if pk.receipt.energy_provenance.is_some() { format!("{} uJ ({})", pk.receipt.joules_micro, pk.receipt.energy_provenance.as_ref().map(|p| p.label()).unwrap_or("")) } else { "not metered".into() }); + // Every file is written as it is made; a refusal removes what was written. + let mut sink = wai_pack::files::DirSink::new(Path::new(out)).map_err(|e| format!("{out}: {e}"))?; + let receipt = wai_pack::pack::pack_into(&bytes, &sources, &mut o, &mut sink).map_err(|e| e.to_string())?; + sink.keep(); + let listing = std::fs::read(Path::new(out).join("LISTING")).map_err(|e| format!("{out}: {e}"))?; + println!("receipt {}", hex(&receipt.receipt_hash())); + println!("pack digest {}", wai_pack::sha256_hex(&listing)); + println!("entries {} ({} distinct, {} bytes referenced, {} stored)", receipt.total_entries, receipt.unique_objects, receipt.total_bytes, receipt.stored_bytes); + println!("energy {}", if receipt.energy_provenance.is_some() { format!("{} uJ ({})", receipt.joules_micro, receipt.energy_provenance.as_ref().map(|p| p.label()).unwrap_or("")) } else { "not metered".into() }); Ok(()) } diff --git a/wai/wai-pack/src/golden.rs b/wai/wai-pack/src/golden.rs index d6b5e4b6b..9f3436100 100644 --- a/wai/wai-pack/src/golden.rs +++ b/wai/wai-pack/src/golden.rs @@ -52,8 +52,10 @@ fn read_key(p: &Path) -> std::io::Result { Ok(SigningKey::from_bytes(&seed)) } -/// Pack golden `name` from its inputs under `dir/packs/`. -pub fn pack_golden(dir: &Path, name: &str) -> std::io::Result { +/// A golden's inputs under `dir/packs/`: its policy's bytes, each component's +/// fixture by id, and the options it packs with (its key, its supplied floor, the parent +/// its file `parent` names). +pub fn golden_inputs(dir: &Path, name: &str) -> std::io::Result<(Vec, Files, crate::pack::PackOpts)> { let d = dir.join("packs").join(name); let policy = std::fs::read(d.join("policy.toml"))?; let floor = wai::pin::read_dir_set(&d.join("floor")).map_err(io)?; @@ -70,6 +72,12 @@ pub fn pack_golden(dir: &Path, name: &str) -> std::io::Result`. +pub fn pack_golden(dir: &Path, name: &str) -> std::io::Result { + let (policy, sources, mut o) = golden_inputs(dir, name)?; crate::pack::pack(&policy, &sources, &mut o).map_err(io) } diff --git a/wai/wai-pack/tests/pack_alloc.rs b/wai/wai-pack/tests/pack_alloc.rs new file mode 100644 index 000000000..cda015d30 --- /dev/null +++ b/wai/wai-pack/tests/pack_alloc.rs @@ -0,0 +1,95 @@ +//! What the packer holds does not grow with the source (packaging §11.4): a source eight +//! times as long, read from a file and packed into a directory, allocates at its peak what +//! the short one does, give or take the records of its pieces, though it is millions of +//! bytes longer. Its own binary: it installs a counting global allocator. + +use std::alloc::{GlobalAlloc, Layout, System}; +use std::collections::BTreeMap; +use std::path::{Path, PathBuf}; +use std::sync::atomic::{AtomicUsize, Ordering}; + +struct Peak; +static LIVE: AtomicUsize = AtomicUsize::new(0); +static PEAK: AtomicUsize = AtomicUsize::new(0); + +unsafe impl GlobalAlloc for Peak { + unsafe fn alloc(&self, l: Layout) -> *mut u8 { + let p = unsafe { System.alloc(l) }; + if !p.is_null() { + let now = LIVE.fetch_add(l.size(), Ordering::SeqCst) + l.size(); + PEAK.fetch_max(now, Ordering::SeqCst); + } + p + } + unsafe fn dealloc(&self, p: *mut u8, l: Layout) { + unsafe { System.dealloc(p, l) }; + LIVE.fetch_sub(l.size(), Ordering::SeqCst); + } +} + +#[global_allocator] +static A: Peak = Peak; + +fn corpus() -> PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")).join("../pack-conformance") +} + +/// The golden `video-base-01`'s fixture and supplied floor played `k` times over, written +/// below `dir`: the source as one Y4M, and the floor as one stream of the golden's units +/// repeated, so its key frames fall on the repeated plan; the golden's policy pinned to +/// that floor. Returns the policy, the source's path and the floor's directory. +fn repeated(dir: &Path, k: usize) -> (Vec, PathBuf, PathBuf) { + let y = wai_pack::fixture::generate("video-base-01").unwrap(); + let head = y.iter().position(|&c| c == b'\n').unwrap() + 1; + let mut src = y[..head].to_vec(); + for _ in 0..k { + src.extend_from_slice(&y[head..]); + } + let units: Vec> = wai_pack::av1::temporal_units(&std::fs::read(corpus().join("packs/video-base-01/floor/v.obu")).unwrap()).unwrap().iter().map(|t| t.bytes()).collect(); + let floor_dir = dir.join(format!("floor-{k}")); + std::fs::create_dir_all(&floor_dir).unwrap(); + std::fs::write(floor_dir.join("v.obu"), units.iter().cycle().take(k * units.len()).flatten().copied().collect::>()).unwrap(); + let src_path = dir.join(format!("v-{k}.y4m")); + std::fs::write(&src_path, &src).unwrap(); + let listing = wai_pack::floor::listing_sha256(&wai::pin::read_dir_set(&floor_dir).unwrap()).unwrap(); + let p = String::from_utf8(std::fs::read(corpus().join("packs/video-base-01/policy.toml")).unwrap()).unwrap(); + let at = p.find("supplied_listing = \"").unwrap() + "supplied_listing = \"".len(); + (format!("{}{listing}{}", &p[..at], &p[at + 64..]).into_bytes(), src_path, floor_dir) +} + +/// Pack into `out` from files, and give the peak allocated beyond what was live before. +fn pack_peak(policy: &[u8], src: &Path, floor: &Path, out: &Path) -> (wai::package::PackageReceiptV2, usize) { + let mut o = wai_pack::pack::PackOpts::with_floor(ed25519_dalek::SigningKey::from_bytes(&[0x5a; 32]), "did:key:test", wai_pack::files::FileSet::Dir(floor.to_path_buf())); + let mut sources = BTreeMap::new(); + sources.insert("v".to_string(), wai_pack::files::Input::Path(src.to_path_buf())); + let base = LIVE.load(Ordering::SeqCst); + PEAK.store(base, Ordering::SeqCst); + let mut sink = wai_pack::files::DirSink::new(out).unwrap(); + let r = wai_pack::pack::pack_into(policy, &sources, &mut o, &mut sink).unwrap(); + sink.keep(); + (r, PEAK.load(Ordering::SeqCst) - base) +} + +#[test] +fn a_longer_source_takes_no_more_memory() { + let dir = std::env::temp_dir().join(format!("wai-pack-alloc-{}", std::process::id())); + let _ = std::fs::remove_dir_all(&dir); + std::fs::create_dir_all(&dir).unwrap(); + let (p1, s1, f1) = repeated(&dir, 1); + let (p8, s8, f8) = repeated(&dir, 8); + let (r1, peak1) = pack_peak(&p1, &s1, &f1, &dir.join("out-1")); + let (r8, peak8) = pack_peak(&p8, &s8, &f8, &dir.join("out-8")); + // The long pack is the short one eight times: eight times the entries, its repeated + // pieces stored once. + assert_eq!(r8.total_entries, 8 * r1.total_entries); + assert_eq!(r8.unique_objects, r1.unique_objects, "every repetition's pieces are the first's objects"); + wai_pack::verify::verify_dir(&dir.join("out-8")).unwrap(); + let grown = std::fs::metadata(&s8).unwrap().len() - std::fs::metadata(&s1).unwrap().len(); + assert!(grown > 4_000_000, "the long source is {grown} bytes longer"); + // Its records grow with its pieces (a few hundred bytes each); nothing grows with its + // frames. + eprintln!("peak allocated: {} entries {peak1} B; {} entries {peak8} B", r1.total_entries, r8.total_entries); + let slack = 256 * 1024; + assert!(peak8 < peak1 + slack, "the long pack's peak {peak8} B is past the short one's {peak1} B by more than {slack} B"); + let _ = std::fs::remove_dir_all(&dir); +} diff --git a/wai/wai-pack/tests/packs.rs b/wai/wai-pack/tests/packs.rs index 8529b7f50..d1b9a110e 100644 --- a/wai/wai-pack/tests/packs.rs +++ b/wai/wai-pack/tests/packs.rs @@ -301,3 +301,28 @@ fn the_receipts_json_round_trips() { assert!(expected["cases"].as_array().unwrap().iter().any(|c| c["receipt_hash"] == "71a9da59a3202abb2c3fd22ee692b1485a9c674bb8c311f4c82455e6be29ae2b"), "the legacy pin is unchanged"); assert_eq!(expected["cases"].as_array().unwrap().iter().filter(|c| c["signature"] == "refused").count(), 3, "a key of small order, its second spelling, an R of small order"); } + +/// The packer into a directory, coding three pieces at once, writes every golden's +/// package byte for byte (§11.2: a piece is coded alone, so the order work is done in +/// changes nothing), the files read a frame and a unit at a time. +#[test] +fn every_golden_packs_alike_into_a_directory_on_several_threads() { + let base = std::env::temp_dir().join(format!("wai-pack-dir-{}", std::process::id())); + let _ = std::fs::remove_dir_all(&base); + for name in golden::PACKS { + let (policy, sources, mut o) = golden::golden_inputs(&corpus(), name).unwrap(); + o.jobs = 3; + o.floor = wai_pack::files::FileSet::Dir(corpus().join("packs").join(name).join("floor")); + let src = base.join(format!("{name}.y4m")); + std::fs::create_dir_all(&base).unwrap(); + std::fs::write(&src, &sources["v"]).unwrap(); + let mut inputs = BTreeMap::new(); + inputs.insert("v".to_string(), wai_pack::files::Input::Path(src)); + let out = base.join(name); + let mut sink = wai_pack::files::DirSink::new(&out).unwrap(); + wai_pack::pack::pack_into(&policy, &inputs, &mut o, &mut sink).unwrap(); + sink.keep(); + assert_eq!(held(&out), held(&corpus().join("packs").join(name).join("package")), "{name}"); + } + let _ = std::fs::remove_dir_all(&base); +} -- 2.54.0 (Apple Git-157) From 081b19fc29b19436bd355351ce0591d8ae60d574 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 20:36:21 -0400 Subject: [PATCH 05/50] wai-pack: a re-pack reads its parent's objects one at a time MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The parent's objects were held for the whole pack, so a re-pack's memory grew with the title. The parent is still verified whole (§11.3's verifier reads a package whole); after that only its entries are kept, and each piece's objects are read from the parent when the piece is coded, held to the content hashes the verified index names. Co-Authored-By: Claude Opus 5.5 --- wai/wai-pack/src/pack.rs | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/wai/wai-pack/src/pack.rs b/wai/wai-pack/src/pack.rs index 7be75f9cf..d1486d8d8 100644 --- a/wai/wai-pack/src/pack.rs +++ b/wai/wai-pack/src/pack.rs @@ -573,7 +573,7 @@ pub fn window_index(policy: &Policy, comp: &crate::policy::Component, pieces: &[ /// One piece of a parent package (§11.5): where it lies and what it is, the rungs its /// ladder codes its base and refinements in (capability and parameters), and those -/// entries, each with its object. +/// entries; their objects are read from the parent when the piece is coded. struct ParentPiece { start: u64, duration: u64, @@ -581,15 +581,28 @@ struct ParentPiece { kind: u8, rungs: Vec<(String, serde_json::Map)>, deadline_ms: u64, - entries: Vec<(EntryRec, Vec)>, + entries: Vec, } -/// A parent package, verified, as a re-pack reads it (§11.5). +/// A parent package, verified, as a re-pack reads it (§11.5): its files, which it reads an +/// object at a time, its receipt's hash and its pieces. struct ParentPack { + files: FileSet, receipt_hash: [u8; 32], pieces: Vec, } +impl ParentPack { + fn object(&self, e: &EntryRec) -> Result, PackError> { + let path = objects::object_path(&e.content_hash); + let b = self.files.read(&path).map_err(|x| PackError::new("repack-parent-invalid", format!("{path}: {x}")))?; + if objects::object_hash(&b) != e.content_hash { + return Err(PackError::new("repack-parent-invalid", format!("{path} changed since the parent was verified"))); + } + Ok(b) + } +} + /// The rungs a piece's ladder codes its base and refinements in: each one's capability /// and parameters, in layer order. fn coded_rungs(l: &crate::plan::PieceLadder<'_>) -> Vec<(String, serde_json::Map)> { @@ -598,7 +611,8 @@ fn coded_rungs(l: &crate::plan::PieceLadder<'_>) -> Vec<(String, serde_json::Map /// Read and verify a parent package (§11.5): it verifies as §11.3 verifies a package /// (`repack-parent-invalid`, with its reason), and its component `comp` is this one's, of -/// one media and timebase (`repack-parent-mismatch`). +/// one media and timebase (`repack-parent-mismatch`). The verifier reads the parent whole; +/// what is kept after is its entries, and its objects are read again one at a time. fn load_parent(set: &FileSet, comp: &crate::policy::Component) -> Result { let invalid = |why: String| PackError::new("repack-parent-invalid", why); let files: BTreeMap> = match set { @@ -622,14 +636,13 @@ fn load_parent(set: &FileSet, comp: &crate::policy::Component) -> Result Result FileSet::Memory(files), + FileSet::Dir(d) => FileSet::Dir(d.clone()), + }; + Ok(ParentPack { files, receipt_hash: r.receipt_hash(), pieces }) } /// A re-pack's checks of its pieces against its parent's, before anything is written @@ -670,13 +687,14 @@ fn match_parent(parent: &ParentPack, policy: &Policy, comp: &crate::policy::Comp /// A piece taken from its parent (§11.5): the parent's base and refinement objects and /// entries, each prefix reconstructed by the reference sink and held to this source by the /// SSE its entry states (`repack-source-mismatch`). -fn reuse_piece(pc: &ParentPiece, piece: &crate::scenecut::Piece, policy: &Policy, comp: &crate::policy::Component, src: &[Vec]) -> Result { +fn reuse_piece(parent: &ParentPack, pc: &ParentPiece, piece: &crate::scenecut::Piece, policy: &Policy, comp: &crate::policy::Component, src: &[Vec]) -> Result { + let objs: Vec> = pc.entries.iter().map(|e| parent.object(e)).collect::>()?; let kind = classify::classify(&piece.stats, &policy.classify); let plan = plan_piece(policy, comp.timebase, piece.start, piece.len, kind); let ladder = crate::plan::piece_ladder(policy, &comp.id, &plan).ok_or_else(|| PackError::new("policy-no-base", format!("component {}", comp.id)))?; let wrong = |k: usize| PackError::new("repack-source-mismatch", format!("piece at {}: the parent's entry {k} does not reconstruct this source with the SSE it states", piece.start)); let caps: Vec<&str> = std::iter::once(ladder.base.capability.as_str()).chain(ladder.refinements.iter().map(|r| r.capability.as_str())).collect(); - let (base, base_env) = &pc.entries[0]; + let (base, base_env) = (&pc.entries[0], &objs[0]); let recon: Vec> = if caps[0] == CAP_PNG { let w = wai::container::Wai::from_bytes(base_env).map_err(|e| PackError::new("repack-parent-invalid", e.to_string()))?; let (_, _, rgb) = crate::png::decode(&w.payload).map_err(|e| PackError::new("repack-parent-invalid", e))?; @@ -708,7 +726,7 @@ fn reuse_piece(pc: &ParentPiece, piece: &crate::scenecut::Piece, policy: &Policy if pc.entries.len() > 1 { let (info, units) = wai::staged::decode_base(base_env, &BTreeMap::new(), None, None).map_err(|e| PackError::new("repack-parent-invalid", e.to_string()))?; let mut chain = wai::staged::StageChain::new(info, units, sink_config()); - for (k, (e, env)) in pc.entries.iter().enumerate().skip(1) { + for (k, (e, env)) in pc.entries.iter().zip(&objs).enumerate().skip(1) { let applied = chain.offer(env, 0, wai::staged::ReceiptEvidence::None).map_err(|e| PackError::new("repack-parent-invalid", e.to_string()))?; if applied.iter().any(|r| r.envelope.is_some()) { return Err(PackError::new("repack-parent-invalid", format!("piece at {}: a parent layer that does not apply", piece.start))); @@ -945,7 +963,7 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt } let one = |p: usize, fr: &[Vec]| match &parent { None => coder.code(&pieces[p], fr), - Some(pp) => reuse_piece(&pp.pieces[p], &pieces[p], &policy, comp, fr), + Some(pp) => reuse_piece(pp, &pp.pieces[p], &pieces[p], &policy, comp, fr), }; let results: Vec> = if batch.len() == 1 { vec![one(batch[0], &srcs[0])] -- 2.54.0 (Apple Git-157) From 5fd8425d7c1411eedd81f04a8a2cc1574c0255ff Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 20:50:55 -0400 Subject: [PATCH 06/50] =?UTF-8?q?packaging:=20a=20floor-only=20profile=20(?= =?UTF-8?q?=C2=A77.8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A component of profile = "floor-only" is its floor rungs alone: no integer base, no refinement and no source (policy-floor-only otherwise). Its pieces are its first floor rung's media segments (the CMAF form) or shown key frames (the OBU form), each at most max_ms (floor-piece-length); each piece is its floor objects, which present no base and so carry no derived_from, of kind none (stage index kind 6). Every class lists only the floor. It attests delivery: the receipt binds every floor object and the supplied floor's bytes, and the verifier holds them to the AV1 stream's structure and to the CMAF files; it states no decoded output, no fidelity to a source and no primary. - wai-rs stage_index: piece kind 6; a floor carries derived_from exactly when its piece has a base (floor-derived-from). - wai-pack: policy (component.profile; the rule ladder of a floor-only component is its floors), the packer's floor-only path, the verifier's index and floor checks; pack_verify.py mirrors each. - pack-conformance: packs/video-floor-only-01 (CMAF form) and -02 (OBU form), and index cases of a piece of floors alone. - tests/floor_only.rs; wai-rs stage_index test; CI floors and the media probe of the OBU floor-only golden. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-pack.yml | 3 +- wai/CHANGELOG.md | 14 +- wai/extensions/packaging.md | 77 ++++++++--- wai/pack-conformance/README.md | 7 + wai/pack-conformance/mutations/expected.json | 18 +++ .../floor-only-piece-with-derived-from.wsix | Bin 0 -> 960 bytes .../mutations/index/floor-only-piece.wsix | Bin 0 -> 960 bytes .../mutations/index/piece-kind-none.wsix | Bin 0 -> 1088 bytes wai/pack-conformance/pack_verify.py | 97 +++++++++---- .../video-floor-only-01/floor/hi/init.mp4 | Bin 0 -> 788 bytes .../video-floor-only-01/floor/hi/seg_0000.m4s | Bin 0 -> 2217 bytes .../video-floor-only-01/floor/hi/seg_0001.m4s | Bin 0 -> 873 bytes .../video-floor-only-01/floor/hi/seg_0002.m4s | Bin 0 -> 2092 bytes .../video-floor-only-01/floor/hi/seg_0003.m4s | Bin 0 -> 873 bytes .../video-floor-only-01/floor/hi/seg_0004.m4s | Bin 0 -> 1860 bytes .../video-floor-only-01/floor/lo/init.mp4 | Bin 0 -> 788 bytes .../video-floor-only-01/floor/lo/seg_0000.m4s | Bin 0 -> 2138 bytes .../video-floor-only-01/floor/lo/seg_0001.m4s | Bin 0 -> 1019 bytes .../video-floor-only-01/floor/lo/seg_0002.m4s | Bin 0 -> 1940 bytes .../video-floor-only-01/floor/lo/seg_0003.m4s | Bin 0 -> 1019 bytes .../video-floor-only-01/floor/lo/seg_0004.m4s | Bin 0 -> 1467 bytes .../packs/video-floor-only-01/key.hex | 1 + .../packs/video-floor-only-01/package/LISTING | 33 +++++ .../package/dash/classic.mpd | 41 ++++++ .../video-floor-only-01/package/floor.listing | 12 ++ ...bf6669ce8edec06fd7cd0961a01d2aaf720889.m4s | Bin 0 -> 2217 bytes ...9c039141d261dd65212035e96bb157783423c1.m4s | Bin 0 -> 1860 bytes ...d0f6263b9e06ee0af1e8269ce4f20d5cb3653d.m4s | Bin 0 -> 2092 bytes ...84fadf8c165c5e16e864629b194dc46290387e.m4s | Bin 0 -> 873 bytes ...2abbabad528b294b15a1d7bf9b635761c584f8.m4s | Bin 0 -> 873 bytes .../package/floor/hi/init.mp4 | Bin 0 -> 788 bytes ...df17537e5c31accca37390c391a7c1d27353af.m4s | Bin 0 -> 2138 bytes ...f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s | Bin 0 -> 1940 bytes ...dec11761813f995d11dc9779c5f9b039d59b73.m4s | Bin 0 -> 1467 bytes ...fc023f911b4e9e94b65770393c4df6d705b5e8.m4s | Bin 0 -> 1019 bytes ...e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s | Bin 0 -> 1019 bytes .../package/floor/lo/init.mp4 | Bin 0 -> 788 bytes .../package/hls/all/master.m3u8 | 7 + .../package/hls/classic/floor-hi.m3u8 | 18 +++ .../package/hls/classic/floor-lo.m3u8 | 18 +++ .../package/hls/classic/master.m3u8 | 7 + .../video-floor-only-01/package/index-v.wsix | Bin 0 -> 1648 bytes .../package/moq/catalog.json | 1 + ...1de2c311a3cd586379d1dea5c235d1b47fde60.wai | Bin 0 -> 2204 bytes ...b2bce45815d3ee881f238b48fae8140e9d88e6.wai | Bin 0 -> 1952 bytes ...fa3a5eaa7dde3aa6b4c3ccfdcb23e710f15d28.wai | Bin 0 -> 935 bytes ...ad4f574212ee1e6addaa99a73ab22258de73fa.wai | Bin 0 -> 1559 bytes ...4b16b69a0fc1e375bea6515cabc4bcf71a29ad.wai | Bin 0 -> 2052 bytes ...64aa67d530dc54ae2bad562dc3235f7ebffc9a.wai | Bin 0 -> 1081 bytes ...0b081b8fad0552739024df229481e73d4cd341.wai | Bin 0 -> 2270 bytes ...d64669760e1f7358553731de7ba9dafac01796.wai | Bin 0 -> 2349 bytes .../package/package.receipt.json | 1 + .../video-floor-only-01/package/plan-v.txt | 5 + .../video-floor-only-01/package/policy.json | 1 + .../video-floor-only-01/package/policy.toml | 38 +++++ .../package/stages/all.json | 1 + .../packs/video-floor-only-01/policy.toml | 38 +++++ .../packs/video-floor-only-02/floor/hi.obu | Bin 0 -> 6575 bytes .../packs/video-floor-only-02/floor/lo.obu | Bin 0 -> 6243 bytes .../packs/video-floor-only-02/key.hex | 1 + .../packs/video-floor-only-02/package/LISTING | 32 +++++ .../package/dash/classic.mpd | 41 ++++++ ...2a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s | Bin 0 -> 981 bytes ...5de0902f941a3c6a000295714f7cab193aa6cf.m4s | Bin 0 -> 981 bytes ...b33fd445037d6538b445bcc76431f9c9f91c5b.m4s | Bin 0 -> 2400 bytes ...01dc69170ecb4240dffd2e86808ddf87baa12a.m4s | Bin 0 -> 2605 bytes ...7996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s | Bin 0 -> 2088 bytes .../package/floor/hi/init.mp4 | Bin 0 -> 628 bytes ...846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s | Bin 0 -> 1127 bytes ...92fdd2aa86db43ccdc684b69c51a688856a0db.m4s | Bin 0 -> 1127 bytes ...659d88613f6d0d360485effe3751504cefbb74.m4s | Bin 0 -> 2248 bytes ...d45c4c0274b0460f6abc8f54940ac378165833.m4s | Bin 0 -> 2526 bytes ...7189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s | Bin 0 -> 1695 bytes .../package/floor/lo/init.mp4 | Bin 0 -> 628 bytes .../package/hls/all/master.m3u8 | 7 + .../package/hls/classic/floor-hi.m3u8 | 18 +++ .../package/hls/classic/floor-lo.m3u8 | 18 +++ .../package/hls/classic/master.m3u8 | 7 + .../video-floor-only-02/package/index-v.wsix | Bin 0 -> 1648 bytes .../package/moq/catalog.json | 1 + ...1de2c311a3cd586379d1dea5c235d1b47fde60.wai | Bin 0 -> 2204 bytes ...b2bce45815d3ee881f238b48fae8140e9d88e6.wai | Bin 0 -> 1952 bytes ...fa3a5eaa7dde3aa6b4c3ccfdcb23e710f15d28.wai | Bin 0 -> 935 bytes ...ad4f574212ee1e6addaa99a73ab22258de73fa.wai | Bin 0 -> 1559 bytes ...4b16b69a0fc1e375bea6515cabc4bcf71a29ad.wai | Bin 0 -> 2052 bytes ...64aa67d530dc54ae2bad562dc3235f7ebffc9a.wai | Bin 0 -> 1081 bytes ...0b081b8fad0552739024df229481e73d4cd341.wai | Bin 0 -> 2270 bytes ...d64669760e1f7358553731de7ba9dafac01796.wai | Bin 0 -> 2349 bytes .../package/package.receipt.json | 1 + .../video-floor-only-02/package/plan-v.txt | 5 + .../video-floor-only-02/package/policy.json | 1 + .../video-floor-only-02/package/policy.toml | 37 +++++ .../package/stages/all.json | 1 + .../packs/video-floor-only-02/policy.toml | 37 +++++ wai/wai-pack/src/classify.rs | 11 +- wai/wai-pack/src/floor.rs | 24 +++- wai/wai-pack/src/golden.rs | 17 ++- wai/wai-pack/src/pack.rs | 130 +++++++++++------- wai/wai-pack/src/policy.rs | 48 ++++++- wai/wai-pack/src/verify.rs | 41 ++++-- wai/wai-pack/tests/floor_only.rs | 109 +++++++++++++++ wai/wai-rs/src/stage_index.rs | 21 ++- wai/wai-rs/src/stage_index/tests.rs | 17 +++ 103 files changed, 943 insertions(+), 120 deletions(-) create mode 100644 wai/pack-conformance/mutations/index/floor-only-piece-with-derived-from.wsix create mode 100644 wai/pack-conformance/mutations/index/floor-only-piece.wsix create mode 100644 wai/pack-conformance/mutations/index/piece-kind-none.wsix create mode 100644 wai/pack-conformance/packs/video-floor-only-01/floor/hi/init.mp4 create mode 100644 wai/pack-conformance/packs/video-floor-only-01/floor/hi/seg_0000.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/floor/hi/seg_0001.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/floor/hi/seg_0002.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/floor/hi/seg_0003.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/floor/hi/seg_0004.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/floor/lo/init.mp4 create mode 100644 wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0000.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0001.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0002.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0003.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0004.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/key.hex create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/LISTING create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/dash/classic.mpd create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor.listing create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor/hi/14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor/hi/759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor/hi/d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor/hi/e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor/hi/eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor/hi/init.mp4 create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/init.mp4 create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/hls/all/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/hls/classic/floor-hi.m3u8 create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/hls/classic/floor-lo.m3u8 create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/hls/classic/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/index-v.wsix create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/moq/catalog.json create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/objects/1ca09f3aa9346effeebfc1bd101de2c311a3cd586379d1dea5c235d1b47fde60.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/objects/420b3bb3485cfea7ad941b0cf9b2bce45815d3ee881f238b48fae8140e9d88e6.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/objects/6528538927505ec6ed34d97843fa3a5eaa7dde3aa6b4c3ccfdcb23e710f15d28.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/objects/808567682e2687d0f431e2d2dead4f574212ee1e6addaa99a73ab22258de73fa.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/objects/95f784de520ecef9127c1758264b16b69a0fc1e375bea6515cabc4bcf71a29ad.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/objects/afa7e0ae4f4c7545824836249064aa67d530dc54ae2bad562dc3235f7ebffc9a.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/objects/bac29f2cf9f5bbc85f3095d0eb0b081b8fad0552739024df229481e73d4cd341.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/objects/cf65056c087382fe4be2f6cb56d64669760e1f7358553731de7ba9dafac01796.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/package.receipt.json create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/plan-v.txt create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/policy.json create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/policy.toml create mode 100644 wai/pack-conformance/packs/video-floor-only-01/package/stages/all.json create mode 100644 wai/pack-conformance/packs/video-floor-only-01/policy.toml create mode 100644 wai/pack-conformance/packs/video-floor-only-02/floor/hi.obu create mode 100644 wai/pack-conformance/packs/video-floor-only-02/floor/lo.obu create mode 100644 wai/pack-conformance/packs/video-floor-only-02/key.hex create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/LISTING create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/dash/classic.mpd create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/init.mp4 create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/init.mp4 create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/hls/all/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/hls/classic/floor-hi.m3u8 create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/hls/classic/floor-lo.m3u8 create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/hls/classic/master.m3u8 create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/index-v.wsix create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/moq/catalog.json create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/objects/1ca09f3aa9346effeebfc1bd101de2c311a3cd586379d1dea5c235d1b47fde60.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/objects/420b3bb3485cfea7ad941b0cf9b2bce45815d3ee881f238b48fae8140e9d88e6.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/objects/6528538927505ec6ed34d97843fa3a5eaa7dde3aa6b4c3ccfdcb23e710f15d28.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/objects/808567682e2687d0f431e2d2dead4f574212ee1e6addaa99a73ab22258de73fa.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/objects/95f784de520ecef9127c1758264b16b69a0fc1e375bea6515cabc4bcf71a29ad.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/objects/afa7e0ae4f4c7545824836249064aa67d530dc54ae2bad562dc3235f7ebffc9a.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/objects/bac29f2cf9f5bbc85f3095d0eb0b081b8fad0552739024df229481e73d4cd341.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/objects/cf65056c087382fe4be2f6cb56d64669760e1f7358553731de7ba9dafac01796.wai create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/package.receipt.json create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/plan-v.txt create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/policy.json create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/policy.toml create mode 100644 wai/pack-conformance/packs/video-floor-only-02/package/stages/all.json create mode 100644 wai/pack-conformance/packs/video-floor-only-02/policy.toml create mode 100644 wai/wai-pack/tests/floor_only.rs diff --git a/.github/workflows/wai-pack.yml b/.github/workflows/wai-pack.yml index 12a734813..2f8a1d7a4 100644 --- a/.github/workflows/wai-pack.yml +++ b/.github/workflows/wai-pack.yml @@ -129,6 +129,7 @@ jobs: --lib 34 --test=cmaf 4 --test=conformance 1 + --test=floor_only 2 --test=ladder 3 --test=pack_alloc 1 --test=packs 8 @@ -245,7 +246,7 @@ jobs: working-directory: wai/pack-conformance/packs run: | set -euo pipefail - for g in video-base-01 video-staged-01 video-ladder-01 video-cmaf-01; do + for g in video-base-01 video-staged-01 video-ladder-01 video-cmaf-01 video-floor-only-02; do ( cd "$g/package" for pl in hls/classic/floor-*.m3u8; do f=$(basename "$pl" .m3u8); f=${f#floor-} diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md index 533fed4f9..fd8262231 100644 --- a/wai/CHANGELOG.md +++ b/wai/CHANGELOG.md @@ -40,6 +40,16 @@ wire format may change and such changes are recorded here. byte of the ladder. A server can hold those files once for the classic site and the package. New refusals: `floor-cmaf-malformed`, `floor-cmaf-timing`, `floor-cmaf-pieces`. `wai-pack pack --link-supplied` writes them as hard links to the supplied files. +- **A floor-only profile** (§7.8). A component of `profile = "floor-only"` is its floor + rungs alone: no integer base, no refinement, no source (`policy-floor-only` + otherwise). Its pieces are its first floor rung's media segments (the CMAF form) or + shown key frames (the OBU form), each at most `max_ms` (`floor-piece-length`); each piece + is its floor objects, which present no base and so carry no `derived_from`, and its kind + is `none` (stage index kind 6). It attests delivery: the receipt binds every floor + object and the supplied floor's bytes, and the verifier holds them to the AV1 stream's + structure and the CMAF files; it states no decoded output, no fidelity to a source and + no primary. The stage index now requires a floor's `derived_from` exactly when its piece + has a base (`floor-derived-from`). - **The DASH renderer** (`wai::http_binding::dash`) writes a representation's own `@codecs`, `@width` and `@height` when given, and an adaptation set's `@codecs` only when every representation shares it. @@ -55,7 +65,9 @@ wire format may change and such changes are recorded here. `video-base-01`'s bases, which are the same objects), `ladder-mutations/`, `packs/video-repack-01/` (the ladder re-packed from `video-base-01`), `packs/video-cmaf-01/` and `cmaf-mutations/` (the ladder's streams as a muxer's fMP4 - segments), `tests/ladder.rs`, `tests/repack.rs`, `tests/cmaf.rs`, and the independent + segments), `packs/video-floor-only-01/` and `-02/` (both forms, no base), index cases of + a piece of floors alone, `tests/ladder.rs`, `tests/repack.rs`, `tests/cmaf.rs`, + `tests/floor_only.rs`, and the independent verifier `pack_verify.py`, with a box reader of its own, which re-derives every golden from its sources and checks the re-pack against its parent. `supplied_floor.py` writes one stream per floor rung; `supplied_cmaf.py` the CMAF form. diff --git a/wai/extensions/packaging.md b/wai/extensions/packaging.md index adef10db7..6b08ea83b 100644 --- a/wai/extensions/packaging.md +++ b/wai/extensions/packaging.md @@ -87,6 +87,7 @@ absent table reads as empty. | `component.media` | string | required | `video`, `image`, `audio`, `world`, `feed`, `avatar`, `film` | | `component.source` | string | absent | | | `component.timebase` | table | required | members `num`, `den`, each 1 to `2^32 − 1`, required | +| `component.profile` | string | absent | `floor-only` (§7.8); absent, the standard profile | | `segmentation.target_ms` | integer | 2000 | | | `segmentation.min_ms` | integer | 1000 | | | `segmentation.max_ms` | integer | 4000 | | @@ -164,15 +165,17 @@ first that fails is the refusal: chain of `refines` returns to a rung it passed (`policy-refines-cycle`); every chain stays in its component and ends at a base (`policy-refines-base`); no rung is refined twice (`policy-refines-branch`). -8. Every component has a base rung (`policy-no-base`). +8. Every component has a base rung (`policy-no-base`), but a floor-only one (§7.8), which + has no base and no refinement rung, no `source`, and at least one floor rung + (`policy-floor-only`). 9. A rung's **layer** is 0 for a base or a floor, and one more than the rung it refines for a refinement; the policy has one more layer than its highest rung layer. No class's and no rule's `max_layer` exceeds the highest (`policy-class-layer`). 10. A rule's `then.ladder` names known rungs, all of one component, each once: - exactly one base, every refinement over a rung it names (so its layers are a chain - from that base), and every floor rung of the component (every piece has a floor, - §7.1) (`policy-rule-ladder`). + exactly one base (none, for a floor-only component), every refinement over a rung it + names (so its layers are a chain from that base), and every floor rung of the + component (every piece has a floor, §7.1) (`policy-rule-ladder`). 11. `live.layer_lag_ms` has one entry per layer, the first 0, the entries non-decreasing (`policy-layer-lag`). 12. The deadline values (`defaults.deadline_ms` and every rule's `then.deadline_ms`) @@ -212,8 +215,9 @@ no reference outside the piece, and no later object of the package references in it. **4.2** Piece boundaries are a pure function of the source frames and the effective -policy. Where the policy names `wai.pack.scenecut/1`, the boundaries **MUST** be those -§4.3 computes. The list of piece starts, in timebase units, is the **plan**, and its +policy; a floor-only component's, which has no source, of its first floor rung (§7.8). +Where the policy names `wai.pack.scenecut/1`, the boundaries of a component with a +source **MUST** be those §4.3 computes. The list of piece starts, in timebase units, is the **plan**, and its digest is BLAKE3("wai:pack-plan\x01" ‖ u64 LE n ‖ n × u64 LE start) @@ -482,7 +486,7 @@ bytes are zero. | 8 | 4 | `duration`, in timebase units | | 12 | 4 | `first_entry`, window-relative | | 16 | 2 | `n_entries` | -| 18 | 1 | `kind`: 0 natural, 1 static, 2 synthetic, 3 motion_high (§4.6), 4 world segment, 5 audio | +| 18 | 1 | `kind`: 0 natural, 1 static, 2 synthetic, 3 motion_high (§4.6), 4 world segment, 5 audio, 6 none (a floor-only component's piece, which no source classifies, §7.8) | | 19 | 1 | flags: bit 0 scene cut, bit 1 forced at `max` (§4.3), bit 2 started by a cue, bit 3 aligned to the lead (§4.5) | | 20 | 4 | `rules`: bit *i* set when rule *i* matched the piece (§8.1) | | 24 | 4 | `moments`: bit *i* set when the piece lies in moment *i* (§8.1) | @@ -569,7 +573,9 @@ of these, checked in this order: (`layer-gap`); its tier (§6.4: `tier-entropy-passthrough`, `tier-weakest`, then `tier-mismatch`); a non-zero `prefix_digest` with a tier other than decode-equivalence (`digest-without-tier`); a deadline on an entry that is not a - refinement (`deadline-role`); a floor without flag bit 2 (`floor-derived-from`); a + refinement (`deadline-role`); a floor whose flag bit 2 is not set exactly when its + piece has a base, so a floor presents its piece's base and a piece of floors alone + presents none (`floor-derived-from`); a content hash an earlier entry has at another length (`dup-length`); the duplicate flag other than set exactly when an earlier entry has the content hash (`dup-flag`). 3. Class by class: a flag with no meaning (`class-flags`); a plan value other than @@ -632,8 +638,8 @@ refused (`pack-id`, §11.1). This revision packs supplied AV1 floors (`wai.video `wai.video.av1.lossless`, `source = "supplied"`), one stream per floor rung. **7.2** *Floor objects.* Each piece's floor is one object of the floor rung's capability -(§5.2), whose manifest carries `derived_from` (SPEC §7.1, *Derived renditions*) naming -the piece's base: `motif` the base's content hash, `motif_capability` its capability, +(§5.2), whose manifest carries `derived_from` (SPEC §7.1, *Derived renditions*), but in a +floor-only component (§7.8), naming the piece's base: `motif` the base's content hash, `motif_capability` its capability, `renderer` the floor's maker, and `settings` `BLAKE3("wai:render-settings\x01" ‖ JCS(settings))` (§3.6). For a supplied floor, `renderer` is `supplied@` and the settings are `{"source": "supplied", "supplied_listing": @@ -768,6 +774,39 @@ for the ladder and the package alike (by a hard link, or by their content addres are the same bytes. The floor objects carry the units as §7.2 frames them, as in the OBU form. +**7.8** *The floor-only profile.* A component of `profile = "floor-only"` is its floor +rungs alone: no base, no refinement and no source (§3.4 item 8). It is for a library that +delivers its standard-codec renditions as WAI objects, each named by its content hash, +listed in a signed stage index and bound to a signed receipt, without the integer lane. + +- *Its pieces* are its first floor rung's: in the CMAF form (§7.7), one piece per media + segment; in the OBU form (§7.3), one piece from each of the stream's shown key frames + to the next, the stream's first unit one (`floor-keyframe-mismatch` otherwise), and the + first floor rung's unit count is the component's frame count. A piece of more than + `max_ms` (§4.4) is refused (`floor-piece-length`); `min_ms` and `target_ms` do not + apply, and the scene-cut segmenter does not run. Every other floor rung is held to those + pieces as §7.3 and §7.7 hold a floor to a plan. A piece's kind is `none` (§6.2), its + flags 0; a rule that states `when.piece_kind` matches none of them, and its moments are + §8.1's. +- *Its objects*: each piece has one floor object per floor rung (§7.1) and nothing else. + A floor object presents no base, so its manifest is §5.2's for its capability with no + `derived_from`, and its entry's flag bit 2 is clear (§6.3); everything else is §7.2's. + Every class lists the floor only (§8.1): no catalog lists a WAI object, the MoQ catalog + is the floors' tracks, and the package has no WAI playlist or MPD. +- *What it attests*: the receipt signs the policy, so the supplied floor's listing, and + the stage index, so every floor object's content hash, length and capability; a + verifier recomputes the dedup counts, holds every object to its hash and to §7.2's + framing, its units to the AV1 stream's structure (temporal units, one per frame, + sequence headers, shown key frames at the piece starts), and the CMAF files to the + units (§7.6) or, in the CMAF form, to the ladder's bytes through `floor.listing` + (§7.7). A sink that checks an object's hash against the index receives the bytes the + signer packed, or refuses them. +- *What it does not attest*: a floor states no tier (§7.4): no decoded-output digest is + stated or checked, so nothing says what a decoder makes of the units; there is no + source, so no `sse` and no fidelity to anything; there is no primary, so no + `replicate` claim; and the pieces are not classified. It attests delivery, not + pictures. + ## 8. Classes, catalogs and delivery **8.1** *What a class lists.* The stages listed for a class are a pure function of the @@ -780,7 +819,8 @@ catalog bytes. `e_ms > from_ms`. Rule *i* matches it when each condition the rule states holds: its kind is in `when.piece_kind`, and a tag of a moment it lies in is in `when.moment_tag`. Matching rules fold in document order (§3.4). -- A floor-only class lists the floor (`0xFF`). Otherwise the class lists +- A floor-only class lists the floor (`0xFF`), and every class lists only the floor of a + piece with no base, a floor-only component's (§7.8). Otherwise the class lists `min(max_layer, the rules' then.max_layer, the piece's highest layer)`; under `max_kbps`, while the listed prefix needs more than `max_kbps`, that is `ceil(8 · bytes · num / (1000 · duration · den))` kilobits per second over the bytes of @@ -1178,9 +1218,11 @@ failed check names is not applied: class are the component's; its string table is the component's id, the class ids in policy order, then each capability at its first use; its class records are the policy's classes, in order, with their `max_layer`, floor-only flag and `max_kbps`; - every piece's kind is one a video piece has; its rules and moments are §8.1's from + every piece's kind is one a video piece has, `none` exactly in a floor-only + component (§7.8); its rules and moments are §8.1's from its kind and span; its entries are the rungs of its ladder (§5.7), by role, - capability and layer: its base, each refinement in layer order, each floor; each + capability and layer: its base, each refinement in layer order, each floor (a + floor-only component's, its floors alone); each refinement's deadline is its plan's (§8.6); and its class plan is §8.1's from its entries; - the plan file holds the index's starts and its digest is the header's @@ -1204,7 +1246,8 @@ failed check names is not applied: piece, one floor object per floor rung, the rung's the *k*-th floor entry for the *k*-th floor rung, of the rung's capability, whose renderer, settings, framing header, unit count and target are §7.2's (`floor-object-mismatch`) and which - presents the piece's base (`floor-motif-mismatch`); its units each one temporal unit + presents the piece's base (`floor-motif-mismatch`), or, in a floor-only component, + which carries no `derived_from` (`floor-object-mismatch`); its units each one temporal unit holding a frame, the first of the rung's first piece carrying a sequence header, every sequence header the first's bytes, every shown key frame carrying one (`floor-av1-malformed`); each piece opening on a shown key frame, and no other unit @@ -1229,7 +1272,8 @@ failed check names is not applied: bases of `wai.video.int_motion` (§5.5, §5.6) and stills of `wai.image.png` (§5.7); refinements of `wai.video.int_refine` over an `int_motion` base (§5.4); each piece by its ladder, a rule's ladder subset included (§5.7); and a supplied AV1 floor per floor rung, -one or several (§7.1), in the OBU form (§7.3) or the CMAF form (§7.7). Its live +one or several (§7.1), in the OBU form (§7.3) or the CMAF form (§7.7); and floor-only +components (§7.8). Its live packer packs the same pieces in windows, without a floor (§9.2). It refuses by name, before writing anything, what it does not pack yet: another medium (`pack-media-unsupported`), a floor to encode (`pack-floor-encode-unsupported`), and a rung @@ -1297,7 +1341,7 @@ the parent is the receipt. |---|---| | `policy-toml` (not UTF-8, a byte-order mark, not TOML 1.0, nesting past 32), `policy-float`, `policy-datetime`, `policy-negative`, `policy-integer-range` | §3.2 | | `policy-unknown-key`, `policy-missing-key`, `policy-type`, `policy-value`, `policy-schema` | §3.3 | -| `policy-too-many-components`, `policy-too-many-rungs`, `policy-too-many-classes`, `policy-too-many-rules`, `policy-too-many-moments`, `policy-duplicate-id`, `policy-lead`, `policy-open-gop`, `policy-piece-bounds`, `policy-ladder-component`, `policy-refines-role`, `policy-dangling-refines`, `policy-refines-cycle`, `policy-refines-base`, `policy-refines-branch`, `policy-no-base`, `policy-class-layer`, `policy-rule-ladder`, `policy-layer-lag`, `policy-too-many-deadlines`, `policy-deadline-unreachable` | §3.4 | +| `policy-too-many-components`, `policy-too-many-rungs`, `policy-too-many-classes`, `policy-too-many-rules`, `policy-too-many-moments`, `policy-duplicate-id`, `policy-lead`, `policy-open-gop`, `policy-piece-bounds`, `policy-ladder-component`, `policy-refines-role`, `policy-dangling-refines`, `policy-refines-cycle`, `policy-refines-base`, `policy-refines-branch`, `policy-no-base`, `policy-floor-only`, `policy-class-layer`, `policy-rule-ladder`, `policy-layer-lag`, `policy-too-many-deadlines`, `policy-deadline-unreachable` | §3.4 | | `capability-unknown`, `capability-not-payload`, `capability-candidate`, `capability-role`, `license-unclassified`, `license-refused`, each naming the capability (and the licence label) | §3.6 | | `y4m-header`, `y4m-interlaced`, `y4m-colorspace`, `y4m-size-change`, `y4m-truncated`, `wav-format`, `wav-truncated` | §4.7 | | `index-magic`, `index-version`, `index-truncated`, `index-reserved`, `index-media-class`, `index-role`, `index-tier`, `index-string`, `index-trailing` | §6.2 | @@ -1305,6 +1349,7 @@ the parent is the receipt. | `object-length`, `object-hash`, `non-envelope-entry`, `object-lengths`, `object-capability`, `object-refines`, `object-derived-from` | §6.3 | | `floor-missing`, `floor-listing-mismatch`, `floor-stream-missing`, `floor-av1-malformed`, `floor-frame-count`, `floor-keyframe-mismatch` | §7.1, §7.3 | | `floor-stream-missing`, `floor-cmaf-malformed`, `floor-cmaf-timing`, `floor-cmaf-pieces` | §7.7 | +| `floor-keyframe-mismatch`, `floor-piece-length` | §7.8 | | `floor-object-mismatch`, `floor-motif-mismatch`, `floor-av1-malformed`, `floor-keyframe-mismatch`, `floor-cmaf-mismatch`, against a package | §11.3 | | `receipt-json`, `receipt-version`, `receipt-index-count`, `receipt-index-digest`, `receipt-stage-root`, `receipt-component`, `receipt-policy-digest`, `receipt-counts`, `receipt-parent-kind`, `receipt-energy`, `receipt-signature` | §9.1 | | `measurement-claim-missing`, `measurement-claim-invalid` | §9.4 | diff --git a/wai/pack-conformance/README.md b/wai/pack-conformance/README.md index b1605988b..99b349ff3 100644 --- a/wai/pack-conformance/README.md +++ b/wai/pack-conformance/README.md @@ -81,6 +81,13 @@ packages (§6–§11), and their delivery over a simulated link (§8.9). - `cmaf-mutations/` — the CMAF golden altered, in `package-mutations/`'s layout: itself (`ok`); a segment replaced by one of the same samples, a `free` box before it, under its own SHA-256; `floor.listing` altered; and without it (each `floor-cmaf-mismatch`). +- `packs/video-floor-only-01/` and `packs/video-floor-only-02/` — floor-only goldens + (§7.8): a component of `profile = "floor-only"` with the ladder's two floor rungs and no + base or source, the floor in the CMAF form (`video-cmaf-01`'s files) and in the OBU form + (`video-ladder-01`'s streams). Their pieces are the first floor's segments or shown key + frames, the ladder golden's plan; each piece is its two floor objects, which carry no + `derived_from` and hold the ladder golden's units, of kind `none`; no class lists a WAI + object. - `ladder-mutations/` — packages a verifier must refuse or accept (§11.3), each the ladder golden altered (re-sealed with its key where the receipt or `LISTING` alone would catch it), in `package-mutations/`'s layout: the golden itself (`ok`); piece 2's diff --git a/wai/pack-conformance/mutations/expected.json b/wai/pack-conformance/mutations/expected.json index 2d9e302a9..ad22a5645 100644 --- a/wai/pack-conformance/mutations/expected.json +++ b/wai/pack-conformance/mutations/expected.json @@ -96,6 +96,24 @@ "index": "index/floor-without-derived-from.wsix", "reason": "floor-derived-from" }, + { + "name": "floor-only-piece", + "kind": "index", + "index": "index/floor-only-piece.wsix", + "reason": "ok" + }, + { + "name": "floor-only-piece-with-derived-from", + "kind": "index", + "index": "index/floor-only-piece-with-derived-from.wsix", + "reason": "floor-derived-from" + }, + { + "name": "piece-kind-none", + "kind": "index", + "index": "index/piece-kind-none.wsix", + "reason": "ok" + }, { "name": "entry-flag-unknown", "kind": "index", diff --git a/wai/pack-conformance/mutations/index/floor-only-piece-with-derived-from.wsix b/wai/pack-conformance/mutations/index/floor-only-piece-with-derived-from.wsix new file mode 100644 index 0000000000000000000000000000000000000000..965257d42a6a1b9c2738c8efcf53c515b69224c9 GIT binary patch literal 960 zcmWF!_KaX;U|^60Vi3&)#H>&Z;xiHeKqVvr6Xg?m(PPP&#ct(74xAt{biN_Y2; z?@cW0em34N7URlyU;cXNs<1OCTRA9i~-uuM6UfW(Cpt)mpSW& z){XTZ4hN;4>A5a0xnR@2RjvD1*qhLapSyn9wWEa>$UiKg&_|DGG;?8GnEy+l=CH#g zptR!-&->4ew4S(5-ktTt*JZ#OLOhWaj6gix#D(W#*;wBB@O*GlZB2057nz`v3p{ literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/mutations/index/floor-only-piece.wsix b/wai/pack-conformance/mutations/index/floor-only-piece.wsix new file mode 100644 index 0000000000000000000000000000000000000000..b3e502adbc6ceeb5af67c3ba4d792a621a0b66a7 GIT binary patch literal 960 zcmWF!_KaX;U|^60Vi3&)#H>&Z;xiHeKqVvr6Xg?m(PPP&#ct(74xAt{biN_Y2; z?@cW0em34N7URlyU;cXNs<1OCTRA9i~-uuM6UfW(Cpt)mpSW& z){XTZ4hN;4>A5a0xnR@2RjvD1*qhLapSyn9wWEa>$UiKg&_|DGG;?8GnEy+l=CH#g zptR!-&->4ew4S(5-ktTXl`tq~_~o=9R?f=9gsV=b?)hrKV-(rSc-FO)N8nmwY%gF66;wm=RQh1?)P6DwsIP{VYJt!~k?KLYkqz#G>zRq}x(~9iRRQO_aFI z==MWYSM;ZRzd`K;l_WOKO~{IY`u+m}C=5Ut1lS1xka`f922su+fM(uOi!~fu<)0mU zw>$M&?&OB2HpOk%;#>P=81%(*=62h!6oFX;)eoYWfqno9-vLGf0qfZzw*UX{0JZl7 zk~tt|_5BIQl2Z~IB&~cuooBf#_**pV-jkE6zrPD@laLhYKWTzyKgbxM{Y>QA{{qea z9d((rUTED|@8NJz>Y1MF;*twC?OWBle}%mXo%p%ymt8wrc!B)G0t$UlWD)^j{x5-= z!;Yqh*!YJz17se^@8AFc(!_>8uK0J{;d%d=k=7H}$-A@O+GbCyJevOfvw~%nkE3cv zbDXgj%>T&tQ`7&9@RSS*7+7>OGL$hfl$41ulqY8Dm1U-+=IdqVmBi=fmt^MWp^Fx! Rre)@(@*=5CEHi|d2LK*l&SwAs literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/pack_verify.py b/wai/pack-conformance/pack_verify.py index f08d388a4..dbbb97576 100644 --- a/wai/pack-conformance/pack_verify.py +++ b/wai/pack-conformance/pack_verify.py @@ -318,7 +318,7 @@ def read_policy(doc): raise top.err("policy-missing-key", "component") comps = [] for c in top.tables("component"): - c.keys(["id", "media", "source", "timebase"]) + c.keys(["id", "media", "source", "timebase", "profile"]) m = {"id": c.ident("id")} media = c.string_req("media") if media not in MEDIA: @@ -330,6 +330,12 @@ def read_policy(doc): tb = c.table_req("timebase") tb.keys(["num", "den"]) m["timebase"] = {"num": tb.uint_in("num", 1, U32, None), "den": tb.uint_in("den", 1, U32, None)} + # §7.8: "floor-only", a component of floor rungs alone; absent, the standard profile. + pf = c.string("profile") + if pf is not None: + if pf != "floor-only": + raise c.err("policy-value", "profile") + m["profile"] = pf comps.append(m) P["component"] = comps s = top.table("segmentation") @@ -520,7 +526,13 @@ def constrain(P, lag): if first_dup(r["refines"] for r in P["ladder"] if "refines" in r) is not None: no("policy-refines-branch") for c in P["component"]: - if not any(r["component"] == c["id"] and r["role"] == "base" for r in P["ladder"]): + def has(role, c=c): + return any(r["component"] == c["id"] and r["role"] == role for r in P["ladder"]) + if c.get("profile") == "floor-only": + # §7.8: floor rungs alone, and no source. + if has("base") or has("refinement") or "source" in c or not has("floor"): + no("policy-floor-only") + elif not has("base"): no("policy-no-base") n = max(layers(P).values(), default=0) + 1 if any(c["max_layer"] > n - 1 for c in P["class"]): @@ -533,8 +545,10 @@ def constrain(P, lag): rs = [by.get(i) for i in ids] # One component, each rung once, exactly one base, every refinement over a # rung it names, and every floor rung of its component (§3.4 item 10). + fo = rs and all(rs) and any(c["id"] == rs[0]["component"] and c.get("profile") == "floor-only" for c in P["component"]) + # A floor-only component's ladder is its floor rungs, every one (§7.8). ok = rs and all(rs) and all(x["component"] == rs[0]["component"] for x in rs) \ - and len(set(ids)) == len(ids) and sum(x["role"] == "base" for x in rs) == 1 \ + and len(set(ids)) == len(ids) and sum(x["role"] == "base" for x in rs) == (0 if fo else 1) \ and all(x.get("refines", ids[0]) in ids for x in rs) \ and all(f["id"] in ids for f in P["ladder"] if f["component"] == rs[0]["component"] and f["role"] == "floor") if not ok: @@ -1179,7 +1193,8 @@ MEDIA_CLASSES = ["video", "image", "audio", "world", "feed", "avatar", "film"] ROLES = ["base", "refinement", "floor", "snapshot", "ops", "receipt", "asset"] BASE, REFINEMENT, FLOOR = 0, 1, 2 NO_REFINES = 0xFFFFFFFF -PIECE_KINDS = KINDS + ["world", "audio"] +# §6.2: 6, none, is a floor-only component's piece, which no source classifies (§7.8). +PIECE_KINDS = KINDS + ["world", "audio", "none"] ENTRY_DUP, ENTRY_DERIVED = 2, 4 TIER_NAMES = [None, "entropy-consistency", "decode-equivalence"] @@ -1341,7 +1356,10 @@ def index_rules(ix): raise Refused("digest-without-tier") if e["deadline"] and not refinement: raise Refused("deadline-role") - if e["role"] == FLOOR and not e["flags"] & ENTRY_DERIVED: + # A floor presents its piece's base; a piece with no base has floors that present + # nothing (§6.3, §7.8). + has_base = any(x["role"] == BASE for x in E[pc["first_entry"]:pc["first_entry"] + pc["n_entries"]]) + if e["role"] == FLOOR and bool(e["flags"] & ENTRY_DERIVED) != has_base: raise Refused("floor-derived-from") earlier = [x for x in E[:i] if x["hash"] == e["hash"]] if any(x["byte_len"] != e["byte_len"] for x in earlier): @@ -2855,7 +2873,9 @@ def render_catalogs(P, ix, c, floors, size, policy_hex): height, [(fragment name, bytes)]); size: (W, H).""" num, den = ix["tb"] pieces, plan = ix["pieces"], ix["plan"] - W, H = size + # A floor-only component has no base and no frame size of its own (§7.8); only a WAI + # view, which lists none of it, names that size. + W, H = size or (0, 0) first_piece, first_start = ix["first_piece"], pieces[0]["start"] total = sum(pc["duration"] for pc in pieces) tgt = max(-(-pc["duration"] * den // num) for pc in pieces) @@ -2915,11 +2935,12 @@ def render_catalogs(P, ix, c, floors, size, policy_hex): # §8.3: an HTTP view lists a piece only where its base is of the component's default # base capability (http-delivery §4.2: no variant mixes bases with nothing in common). base_cap = default_base_cap(P, c) - bases = [next(e for e in E[pc["first_entry"]:pc["first_entry"] + pc["n_entries"]] if e["role"] == BASE) for pc in pieces] + # A floor-only piece has no base (§7.8), and an HTTP view lists nothing of it. + bases = [next((e for e in E[pc["first_entry"]:pc["first_entry"] + pc["n_entries"]] if e["role"] == BASE), None) for pc in pieces] for ci, cl in enumerate(P["class"]): name, row = cl["id"], plan[ci] lists = [listed(ix, k, row[k]) for k in range(len(pieces))] - http = [lists[k] if bases[k]["cap"] == base_cap else [] for k in range(len(pieces))] + http = [lists[k] if bases[k] is not None and bases[k]["cap"] == base_cap else [] for k in range(len(pieces))] wai = any(http) lines = head[:] if wai: @@ -3419,15 +3440,20 @@ def index_against_policy(P, comp, c, ix): long = next((k for k, pc in enumerate(ix["pieces"]) if pc["duration"] > mx), None) if long is not None: return f"piece {long}: past the policy's max_ms" + floor_only = comp.get("profile") == "floor-only" for k, pc in enumerate(ix["pieces"]): - if pc["kind"] >= len(KINDS): - return f"piece {k}: a kind a video piece does not have" + # A floor-only component's pieces are of kind none, which no other piece is (§7.8). + if (pc["kind"] == PIECE_KINDS.index("none")) != floor_only or (not floor_only and pc["kind"] >= len(KINDS)): + return f"piece {k}: a kind a piece of this component does not have" rb, mb, then = piece_then(P, ix, k) if (rb, mb) != (pc["rules"], pc["moments"]): return f"piece {k}: the rules and moments" - base, chain, floors = piece_ladder(P, c["id"], then) - want = [(BASE, base["capability"], 0)] + [(REFINEMENT, r["capability"], j + 1) for j, r in enumerate(chain)] \ - + [(FLOOR, r["capability"], 0) for r in floors] + if floor_only: + want = [(FLOOR, r["capability"], 0) for r, _ in floor_names(P, c["id"])] + else: + base, chain, floors = piece_ladder(P, c["id"], then) + want = [(BASE, base["capability"], 0)] + [(REFINEMENT, r["capability"], j + 1) for j, r in enumerate(chain)] \ + + [(FLOOR, r["capability"], 0) for r in floors] mine = E[pc["first_entry"]:pc["first_entry"] + pc["n_entries"]] if [(e["role"], e["cap"], e["layer"]) for e in mine] != want: return f"piece {k}: its entries are not the rungs of its ladder" @@ -3558,17 +3584,25 @@ def verify_component(rep, tag, root, pkg, files, P, j, c, ix, inputs=True): mine = [i for i in range(len(E)) if own[i] == k] bases = [i for i in mine if E[i]["role"] == BASE] fl = [i for i in mine if E[i]["role"] == FLOOR] - ok = len(bases) == 1 and rung is not None and len(fl) == len(rungs) and E[fl[fk]]["cap"] == rung["capability"] - rep.check(ok, f"{t}: piece {k}: one base, and one floor object of each floor rung's capability (§5, §7.2) " - f"(floor-object-mismatch)") + floor_only = comp.get("profile") == "floor-only" + ok = len(bases) == (0 if floor_only else 1) and rung is not None and len(fl) == len(rungs) \ + and E[fl[fk]]["cap"] == rung["capability"] + rep.check(ok, f"{t}: piece {k}: one base (none, floor-only), and one floor object of each floor rung's " + f"capability (§5, §7.2, §7.8) (floor-object-mismatch)") if not ok: return named | unreached(files, c['id']) - base, i = bases[0], fl[fk] - df = mans[i]["derived_from"] - rep.check(df["motif"] == E[base]["hash"].hex() and df["motif_capability"] == E[base]["cap"], - f"{t}: piece {k}: the floor presents its piece's base (floor-motif-mismatch)") - rep.check(sup is not None and df["renderer"] == f"supplied@{sup}" and df["settings"] == settings, - f"{t}: piece {k}: a supplied floor's renderer and settings (§7.2) (floor-object-mismatch)") + i = fl[fk] + if floor_only: + # §7.8: a floor that presents no base names no motif. + rep.check(mans[i].get("derived_from") is None, + f"{t}: piece {k}: a floor-only floor carries no derived_from (§7.8) (floor-object-mismatch)") + else: + base = bases[0] + df = mans[i]["derived_from"] + rep.check(df["motif"] == E[base]["hash"].hex() and df["motif_capability"] == E[base]["cap"], + f"{t}: piece {k}: the floor presents its piece's base (floor-motif-mismatch)") + rep.check(sup is not None and df["renderer"] == f"supplied@{sup}" and df["settings"] == settings, + f"{t}: piece {k}: a supplied floor's renderer and settings (§7.2) (floor-object-mismatch)") fp = floor_payload(objs[i][12 + E[i]["man_len"]:]) if fp is None: rep.check(False, f"{t}: piece {k}: the floor payload is not §7.2's framing (floor-object-mismatch)") @@ -3762,6 +3796,14 @@ def verify_sources(rep, t, root, P, comp, ix, stage, units_of, objs): refinement's bytes and reconstruction (§5.4), and every entry's sse (§6.6); and the supplied floor (§7.3). `stage` is each entry's prefix as the package decodes.""" num, den = comp["timebase"]["num"], comp["timebase"]["den"] + if comp.get("profile") == "floor-only": + # §7.8: no source; the pieces are the first floor rung's, every piece at most + # max_ms, and the supplied floor as §7.3 and §7.7 check it. + mx = units_from_ms(P["segmentation"]["max_ms"], num, den) + rep.check(all(pc["duration"] <= mx for pc in ix["pieces"]) and all(pc["flags"] == 0 for pc in ix["pieces"]), + f"{t}: every floor-only piece at most max_ms, with no flag (§7.8) (floor-piece-length)") + verify_supplied_floor(rep, t, root, P, comp, ix, range(sum(pc["duration"] for pc in ix["pieces"])), num, den, units_of) + return source = comp.get("source", "") name = source[:-len(".y4m")] if not source.endswith(".y4m") or fixture_spans(name) is None: @@ -3828,6 +3870,14 @@ def verify_sources(rep, t, root, P, comp, ix, stage, units_of, objs): f"{t}: entry {i}: sse against the source (§6.6)") below = nxt + verify_supplied_floor(rep, t, root, P, comp, ix, frames, num, den, units_of) + + +def verify_supplied_floor(rep, t, root, P, comp, ix, frames, num, den, units_of): + """The supplied floor (§7.3, §7.7): its listing, then each floor rung's stream or CMAF + files, its temporal units and its key frames, against the index's pieces; a floor-only + component's first floor rung decides them (§7.8): its shown key frames, in the OBU + form, are exactly the pieces' starts. `frames` has one element per source frame.""" # The supplied floor (§7.3): its listing, then each floor rung's stream, its temporal # units and its key frames. sup = os.path.join(root, "floor") @@ -3862,7 +3912,8 @@ def verify_sources(rep, t, root, P, comp, ix, stage, units_of, objs): rep.check(len(units) == len(frames), f"{t}: {stream}: one temporal unit per source frame (floor-frame-count)") keys = [f for f, (_, o) in enumerate(units) if shown_key(o, seq)] starts = [pc["start"] for pc in ix["pieces"]] - ok = set(starts) <= set(keys) and (P["floor"]["extra_keyframes"] or keys == starts) + plans = comp.get("profile") == "floor-only" and fname == floor_names(P, comp["id"])[0][1] + ok = set(starts) <= set(keys) and (P["floor"]["extra_keyframes"] and not plans or keys == starts) rep.check(ok, f"{t}: {stream}: shown key frames at the piece starts {starts}, and only there: {keys} (floor-keyframe-mismatch)") rep.check([[u for u, _ in units[pc["start"]:pc["start"] + pc["duration"]]] for pc in ix["pieces"]] == units_of[fname], f"{t}: each floor object of {fname} holds its piece's temporal units of {stream} (§7.2)") diff --git a/wai/pack-conformance/packs/video-floor-only-01/floor/hi/init.mp4 b/wai/pack-conformance/packs/video-floor-only-01/floor/hi/init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..af7fc6d9dc1201185942fa2d43659adcbca8bc7d GIT binary patch literal 788 zcmaJ;%}N6?5T4eHlpc!oP^5yHkxY*w%za9wEC3|Z zjyYl(TW60>Q~>ZP3lCS^w^EbD1f6S9?*#m6MMZpO#P^$r(@D)S*^GRek-KUw1c=HBzQiMCwDUp^dvvq%KhFVIdHksP8>Z6g@-b<#weN zx2OY?Iiyn2-?IUmal6U(CFV5#2z8FP^wmEZ~=>RxocGNrU JM4hO6@D04WTgd|^S%E+gAg)}k;O-a z#{`BT_``d6OlTY&9b!TQ<9HZEh=+{UGvlYJ|9~cUphX|i1j*YH9vK-750%dAu-&mxq@_~b*v~|=J$55SMW#q zakoIBUQnAxwWL_~mu*$jmee#Q zgOGMB%ma1?wY=4@emLg;tX6)OcBRcIK98?XH_1&l`nvSlyV4evHbF9KmG^9Y7dk3_ z=<;{!E~8B;lCLjNV_W(yW7NiMKs05{_4JPR1dQy93~jogtr zZH^GYm>@q?aQe1Lg^q3#1B8&TZ#c*m)T|hOvT2%N0Q4dVoIat) zv#So<``9a+0=>o5xYwf6Hg!QDtI43_fi8FLF8An#NzSU960~&#a_w|ICaFv$7?|X2 zLZ{E4Gw&!gPuSvH)eHUR^7RJGIRA>#4RH@$!G1nzc=A10Q59_S=_bUr5eOaPIJn}# zQS0e5i-52di*7e^MCVXl=9}*r+L&653VlsE;=I%Qqae4N3^aa?YU*QS->T<8P-=PL zbxMlgmHxZ-Fa)Ki26~e8qnp+s;0}|CQt$xJQkPEjRsgt*(I}br9A_US7zXeDG{dO_ZnqS3u~mUC^xZC;tgZ@jcweSDt(zxFYuID zZQD5pb8trm_gaBhmDPRUzV&bXDAy1=PX%hk#R2!|P(>`1c<}YUaxF>JnASGWy_XhI z>qx_V+zWf*2$yqCW@r};yUAfpo@zNTcja|>U>V?E8vf-L+5`A~@z$`f^S$;$4A&f2eJueg>UEkEA~1v}XQD&kyQVj=_I7pecm{8f3IKfAXd|6&wz z@Ny$e>=%^jlA$)_rdY|Hu6390UVw0cgm#NM*VEB1U6ED}A%gjOJ?f0(#hjb3aq1A# zuuz>im3^#O3HTlj8_C>;3weNtX;>70N!ncm))B0M>Or;>JIlw0Xc&JK>!4x^WRK=U mqkS3%H6Ck+u(3?TAh%}CRR*3(tlACmZ0uY^BoLK>6niOZIR4{@B85kHDg!~)8EbUKV3Q7Q_nPow8 z5J`qJx%v5NKskZjw2Ty}8YUpUrKBhkBra0|5@%wt0J4F4cQ*iOV@8N2A|+`lB~beq z7$El4loXZbF)%Q(0@XHahRfhpY=T$zlkI=My_9BFe|T@M>?|Fl zZ3;%}MvM=D%9w!x%IMm_=)iFP$^E+P%j6%w)~mCskv85?d2%h9%tpiD{y}?M(h?Rxof&$nQu)0>D5E}=#gbPBb2`I!a zz?+cK3~~xs6-bDK!GA?BLRF2CiV-J6^M{RKRjvns?zkjSr|_PU@z|Y;r43&yPn|y> z$s-Tc$i>J~aSfp{2Pni1bl5M1@gN}{pu6l5sxp8=yg+xkBUFKe_)y&i65>a7R|e4E z0uNyB0=s_B2O}*bK}P0J8-V5uIDn#GgyG71CY7gmji1^2AFmeL-*I2`?)?XHi8gVp zK>b2YY*km_YFQW}fMUWd9H)LDi3I?~L^!ymY|z9+1$dKE(8RVL+9DXwf6Vgn}m>JXzl8oBtF`BSUOBRXIMwXOeOq?~uOp;pOvQ$GYwxl#s z+e(h4l%x{|VuVV{!u6oSZBq;V4?g;b)@_(9OPk6MwmJ|1wi0UrSp0U1m% z4frtv!$MOnLH!I2(@*Mb&Dva3F&)O6HKk&6mS#OsO*Cuv|5SzspV)VThwaS-V`86) z{=}N2(P{WP)iQ}#p{EB>^09&9H82&~MWI2(V5tw0I~K58l&vT`xv0$i_`hMv(<&3% zd~+CC%6-2kDPQ-^?zVM*z6>_c;6>LLrPpSO{DZ7d^wia}oCl6Ocx*3dxmoGq+ZC3p zva@HE__V(7%Ms^#XNI`+wGZ{J+jfDMdc5+AenI@jxf?B=z0t3RTaClhcAxsC^T}W7 zf||^;Uy#b^{3`?A=lUxmw>;P&zr4l*>NdEuHk-YtclGrIIo~ez`xSHRZ@y~iNi?Lg z1GpO(9(JtS6PNFXZhoUv%HO1x`5LjSvyHQuR>N`Trn74g?F?|Q`M}ZcSC>~bzmAz> zXyf^owtVxAbNTlNn+5G6hc^`twP6>R$W-TlsEWKRtG^V%7GH{*-_}*yX)5jtYpzy> z3cM1-&GK{fd^-5IHvIXhNsq?NJMH{&ZKs{Obg1h{bWpD6`jH;?!lAB%>df=^Mm>1K zJ6(bPF@@2MgL+C!?NQZ+@SR(hqz8T%{=l}s-lXy_NBNVBRx(L^iZ$P9QNYX5y6>-K1s{n9emcj>xCJI?HX(n2Z>k4qT5%3qmKm}EFY>YP#6 zp!#siWJgMD?cJ=u19gjeA9M9m2n0V)a=Wg;AyLZVE?9N|{cZg0)q) zAAt0oO+61q^3Wb$MIAzi^{DhxA#RqAuwVlk1Kx^5E%RS^%X_~QHUhRGhuwG!ZzTgZ z4Jrv_<52U-10$05qpo>?J(Hx{8HKmv5OdgwOdY5khfwf(mxW7Nqow86rP11bPC&t+ zOs5axiWtNcW`cleIMlI~_w#yIp@-ll3ixag^+&uJgIK_3lM!<;hYlYtyZEFVsp5Il zjLgx;!zd=3Ma&$6n8Dm8Le@uK9-ot%^hq7h`jkLmLDub#z+~HnduCk?->nUFt*P`~{kY&tw7ZARZ=F>yKIU@~6WE5va7@9w9nxAqH3bW1%VA%> zhBrijYX_ACF>&beo`2#KB^Y-BF_Q=}hT+LfV>jnfEZtPHjes0L&=VvGpH2wt3r9Yo{g zRi{a90P#x>!&QX8avHb=p3wf*HXN$S^j>M;ck<%R_sL(wRKfjFs06^Vo`2YX_ literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/floor/hi/seg_0003.m4s b/wai/pack-conformance/packs/video-floor-only-01/floor/hi/seg_0003.m4s new file mode 100644 index 0000000000000000000000000000000000000000..ac02ab23e272a47b2c108501e3683748b9190b9d GIT binary patch literal 873 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 R>B5Q!))e@JZhjgg{~xLLQIG%t literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0001.m4s b/wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0001.m4s new file mode 100644 index 0000000000000000000000000000000000000000..74171d12cf37630911486c49494280811c03c617 GIT binary patch literal 1019 zcmZQzV2~&-sVvAXPRU>Z0uY^BoLK>6niOZIR4{@B85kHDg!~)8EbUKV3Q7Q_nb(8l zAd(Dca`W@kfN}!4X&EU{HB3NyOG!~8NL;1_B+kTO0b~R9?rs3mhKvwPL`u?9N}%>J zFhK07DJd$=V_;xn1*($-;wvD-fWQ!lb%EFfh}D2t1Pu!V`HDcS0i~6JGzf#lK^UYS zB(DU-azHE%<-_EGG}GhUl*AG)E}#sP`lH;M0}4jUA`Hq73=9oGAyM;+kXjA4yW8*o zx3K+??`@;*7$O??lr6zX+lcW2P!TgQI2m0JI9_0Q5a^s1cxk6W<;96idhh3Lo|kyQ z#<+KJOMKb^BO@awh9pK7xV;A5}$Y=(60j#dC!AQ`EgTa4AFGAg1BY7iE zhUO0&!OC0@0Ii75$~f67(myLZ*7D~*vnxhwMqG?671zLezzWW0801cVcY~2T&Pl4G z=ODjDxbYnmTcAPQK)3#a8ss>E;a>P29d?^djY)#)ljYR&jTDV|fDX4u7<5Ky^9LTj zrcIlc&9Ry6_D=Z$Pzf*4AMOYW^+#Ieht)s=vL5M%IP)dN-li7lXzINZH(Aqlt( H!9ptmp!5D3 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0002.m4s b/wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0002.m4s new file mode 100644 index 0000000000000000000000000000000000000000..537675bb8b0778d248e219010d0f66ec0f021573 GIT binary patch literal 1940 zcmY*Z2~d+q6yAggDOVGWA%r6VLqJew=NBV_^(qP~LO65;QrrWys&zW{?Vp%HX5Q@Xd*6HC_ulRwgpf$5 z&(~^n>TCo*vTAfW2H1w{a?}PEaU#S*9tkwFn=#w6G6(P@r&uJbLl!3sYjSh5AjH#T zWveX^}JLo5r4K%b@7Tlo;O@R;>^>((N~9s@WEQX<%} zf!`3AKbROS089Yp1?CAxd}G0UtSj-4Jd-?vCvk$8fe}nFm=tV07&-fbk+>9$oC%KP zkiF2llDeec$ohV87J*5u{}?AF4I*wM$B}Uy`GhAQvV}#NKkEd z&wuuKW3Rkd9v65Txlmb5KL~dk@CdOT>e+H z7(&L^p*BZ_95+zouq#i9i>!eyQgnNV<4_y$yGzB!Yj%96UrxY!*Sj)`k9nvrQEZRo zQDW@DavI2FT%|;8r}wu_8+vXP^l||%U~~UEW{0ami;&~SAGW(%cbQ8n{xt$t1R_7P z2UJj64Du@MuFeV7oPxW1b6pACXSBwpFjqgDxKbL1Gp=#tAyxHF&*ff`!ab=p%*Mav ztyE?XWm@0}U^@-2uydSWjvnl2rsU0gU_3I8>+m6KjEqMRnlhFOz;Z5s#}MOYI(F%Z z-=FqSvi6o- zmrb6WpI)BvHM`^|(13078AzK+l{Ea_Im#PTwg#9vT-kf6-!uJPlYZw4Xgb`coJK(0 z(-f0o20aS9ZgS0%)Iw8JH240~+NDQIFpx#q^^%wA6IN)NBd>#LMUEEw>$Gim(^O~i z=DrfS2RfeGXoO3cZdXc%a{a;C=!2d$?|n)`;TfaFUf=dnx4@021bB8O8L<&QBc_Y$ zs3``{F~5<;6M00`hgl*|@E69~?h|6{gwmQyq2k zKw|hY7iBOd#7dh0X4ZZF_f{vHDPNp4nz!dMJy%k<ST7AcDK-sO9$&n~M$Ozc zSF!Lww&T5)?c=+u%#g8kgbbL95*|UCjho4EUf;eoWpMtgurFW2KY+?6fC*kZReSA1 z;XpRLyL20ODH*)k&=Ms{x*c@B-eIQhh4zDV_{=g^yuAWOUhym{1b>Kj&aAYInxy$x d9UU?#=9ihhVrwP^=XyRG)bR$BaMrS-{{i%-AIJaz literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0003.m4s b/wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0003.m4s new file mode 100644 index 0000000000000000000000000000000000000000..90c0b6fca9da987db67ab71168d964f8216d7550 GIT binary patch literal 1019 zcmZQzV2~&-sVvAXPRU>Z0uY^BoLK>6niOZIR4{@B85kHDg!~)8tfU7J8q5KTGcd0Q z$w39rfPM{qzxG%mWY(3rIbMJ zV_<;TQ&Un@n#aJv#0pd=3B*^JfCLa20xYVN!pTTXR6cNLhqI*@1zf0VpJDUJ+8O!FG51 z{r?uWAM(9z)Ez@ajB3L3=aaG(*iH;G^o5dkxB3Uyv_3x z57-#@E^diWJ78pF#Kh19SIp?Za7n3WcOz%~#Rs7R6GPtU7I{hYF`l})v~&pz?^dxp zdmk$n7^xUBGqO0qEttS?Uu*lqt=A7+-6a40h*4mV<_zJS1|uOO7ACe1h$^6S92nXa zfMTpH92XS8P6LazIRM4jIJhNT5Mq4?fMVj9t@(ODTMTSfY3Wyf0n+-G*hNX>|gk)`4qSPxji*$ji+$?tA3a>qGI zRrDO>w+J`BV`2+5h#TnEUr>V_CotR#-=o8Bv#BvjP<^tTdcKjO5f9Me_6UQ{C~f}0 z!`HNF)3P}>lil7aKL9G>1^UAsVa8p1S83T9OIw?^upj;Kifyq3&EWn!zkf>3br^S8Fz zEv+wQUaXh;-V}1eNXAH*h2zu@s0yGT?|629TK(j&mrd)21|vx$5e{xC8>lQW&@c3P ztos<2dSV06Zczc=q!fh4+p8+BHWdGHOp7>n`Lntb&<|n^{;PVx3Lvos6cUHK7cL|L JcOh74B>+Y4|7HLH literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0004.m4s b/wai/pack-conformance/packs/video-floor-only-01/floor/lo/seg_0004.m4s new file mode 100644 index 0000000000000000000000000000000000000000..1948711274de584a9063db08f1762ed597159934 GIT binary patch literal 1467 zcmZ9K2}~1d6vw|A2B=uIMS2Z~#V8V1a2Q#(f-$IQ)S%X*y3r+;TDl^XVbv)oHh_Ecpo`68A`iB@z+> zcpif(!Bk*TVDVrIFwA1WhWm^L@8>wid7Q)EANy;g19E%KoqpS9#^-mnPHG-^ zuVg;^RwHZtv}}38j>eqM_fKzx>VMD3SA}q_oC)DMgu<@D_Bgabje16XJav;{6%0jC zf!zI#;p~JTv}`03Mv6H90=PSsYIX!8qJ~Jk%!&J~I+$!NS`(|xy;OF2CST9WmanOnrxdD-K|Uow9;#KhntSrGJQFOBwb-xa6--*N{QdWb4BO>+dHRM-F7c z@13HSPt^LhiEGipR;-qd>aScAcE1xUr<39LB|_!h2TT4eg1bC3Tl~S>z;pLzyjXWa z6y4!geaFoyzM}!%St9ZO)j}&*YEvf6o}-r4`YGt%X-$tz=>a|m)&CO6`Tt(ovpxgh C<9&w! literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/key.hex b/wai/pack-conformance/packs/video-floor-only-01/key.hex new file mode 100644 index 000000000..d5721a934 --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-01/key.hex @@ -0,0 +1 @@ +9775a49bc0d2b258d9ef766516894be1dda63647f1a68a264d1c63d30aa3b4a1 diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/LISTING b/wai/pack-conformance/packs/video-floor-only-01/package/LISTING new file mode 100644 index 000000000..7af1ca5b9 --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-01/package/LISTING @@ -0,0 +1,33 @@ +688cb303ccb16fcdd21c8cb681f936ba813829e71fbf15df0ccb28b04c134447 dash/classic.mpd +03ab06e026880875581952f91232405077be9a522dbf739b6a9d093458369710 floor.listing +14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889 floor/hi/14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889.m4s +759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1 floor/hi/759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1.m4s +d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d floor/hi/d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d.m4s +e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e floor/hi/e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e.m4s +eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8 floor/hi/eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8.m4s +a8a19ef9cd4d540037ef298097bbc5317de6a99690c8c4a745cc867c034208d6 floor/hi/init.mp4 +0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af floor/lo/0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af.m4s +10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8 floor/lo/10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s +2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73 floor/lo/2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73.m4s +a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8 floor/lo/a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8.m4s +c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc floor/lo/c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s +6dd501e27365ce9ef90576771aad73de4d200362e6974551847afc3c90604344 floor/lo/init.mp4 +d793737b69231eface4951001e65b3c52cba864f231246a41e64d49c77ebdc97 hls/all/master.m3u8 +ebdc7e40aecbe8b61124ac78f233b0dfaf2a8c5674d3fc9bb023935de1d9b6cb hls/classic/floor-hi.m3u8 +66f5eb8b89b80e7da839b23f39665eb85480c6a725fa29d93556efee673c1b9e hls/classic/floor-lo.m3u8 +d793737b69231eface4951001e65b3c52cba864f231246a41e64d49c77ebdc97 hls/classic/master.m3u8 +a7c6facb1be1ed1ebd49547e3860e999064c601c591a54035bd0ec91ca9c9865 index-v.wsix +ad5de743a1febe108739ddc6bee8d3ffdbe70c59a655192f2a55493e0ee0a213 moq/catalog.json +238862ef3eff0ee32abe02d8f470f514bb447a51a1f328d496a2cc552e6fe486 objects/1ca09f3aa9346effeebfc1bd101de2c311a3cd586379d1dea5c235d1b47fde60.wai +74bc950940597f0b96e9b5a87e719171df0b7743d448b0bb9aba17e556a77178 objects/420b3bb3485cfea7ad941b0cf9b2bce45815d3ee881f238b48fae8140e9d88e6.wai +8bc999fab324b1c90dc03387d1687ce89cc5f6f64fb818d528b3b6a06dc3d771 objects/6528538927505ec6ed34d97843fa3a5eaa7dde3aa6b4c3ccfdcb23e710f15d28.wai +8e1749bd5a12a09e05eab464e0d4f03a8c4ba9a841acb9719e56d287e928f347 objects/808567682e2687d0f431e2d2dead4f574212ee1e6addaa99a73ab22258de73fa.wai +8fea2404d5d7e251328fc7b725bf067031f7712de54bfba24d51376ff67cbc08 objects/95f784de520ecef9127c1758264b16b69a0fc1e375bea6515cabc4bcf71a29ad.wai +3e9d5d3f281f366a2056ce2ddac7c75a06bf378a29024b842953247804da9c05 objects/afa7e0ae4f4c7545824836249064aa67d530dc54ae2bad562dc3235f7ebffc9a.wai +82a7b68f2613b043a11b16431713d03ebf59333c5edc20e1ed6631bbb80c714a objects/bac29f2cf9f5bbc85f3095d0eb0b081b8fad0552739024df229481e73d4cd341.wai +ba45cdd651843f80f2a5f8a3b71bfbd64621b4680edee0100136cb22d8303eca objects/cf65056c087382fe4be2f6cb56d64669760e1f7358553731de7ba9dafac01796.wai +07805c170c6b9dcd37afb2c41a45a8e95c1ad645eba6464858d6c898107cde2f package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +747e62660a0bd9b39548798b731f46f488e76e9911bbe9b742b3dc3a3b319094 policy.json +2ec22fbee9ce044ccabc1cd03053cb3717330bd471475e395974dde0da8f7eee policy.toml +41f6cb903dd1a4fa14ae95f8286ad3877d9c40ce09c1df0915fcdd25516a4c24 stages/all.json diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/dash/classic.mpd b/wai/pack-conformance/packs/video-floor-only-01/package/dash/classic.mpd new file mode 100644 index 000000000..737f43910 --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-01/package/dash/classic.mpd @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/floor.listing b/wai/pack-conformance/packs/video-floor-only-01/package/floor.listing new file mode 100644 index 000000000..1e4f809b4 --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-01/package/floor.listing @@ -0,0 +1,12 @@ +a8a19ef9cd4d540037ef298097bbc5317de6a99690c8c4a745cc867c034208d6 hi/init.mp4 +14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889 hi/seg_0000.m4s +e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e hi/seg_0001.m4s +d3616b6368fc800ce421a492fbd0f6263b9e06ee0af1e8269ce4f20d5cb3653d hi/seg_0002.m4s +eb559df9571de1869981ca82672abbabad528b294b15a1d7bf9b635761c584f8 hi/seg_0003.m4s +759f476ce9e9b003d7d797060f9c039141d261dd65212035e96bb157783423c1 hi/seg_0004.m4s +6dd501e27365ce9ef90576771aad73de4d200362e6974551847afc3c90604344 lo/init.mp4 +0e0407f5a552e405846a411627df17537e5c31accca37390c391a7c1d27353af lo/seg_0000.m4s +c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc lo/seg_0001.m4s +10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8 lo/seg_0002.m4s +a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8 lo/seg_0003.m4s +2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73 lo/seg_0004.m4s diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/floor/hi/14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889.m4s b/wai/pack-conformance/packs/video-floor-only-01/package/floor/hi/14cdbe56c8f57b1427ab9c2a9ebf6669ce8edec06fd7cd0961a01d2aaf720889.m4s new file mode 100644 index 0000000000000000000000000000000000000000..3d6538a6af6748967bd9291736570490687c81b0 GIT binary patch literal 2217 zcmZ8h3pA8z82;vO@F&)=8jRa?m&*SBRa?%uB$aI)sc1_#vo2AtnZ!A%e|MQih*Kxm zT%wia)T)&_R*j0BPA-wCbf{LR?W8M|^S%E+gAg)}k;O-a z#{`BT_``d6OlTY&9b!TQ<9HZEh=+{UGvlYJ|9~cUphX|i1j*YH9vK-750%dAu-&mxq@_~b*v~|=J$55SMW#q zakoIBUQnAxwWL_~mu*$jmee#Q zgOGMB%ma1?wY=4@emLg;tX6)OcBRcIK98?XH_1&l`nvSlyV4evHbF9KmG^9Y7dk3_ z=<;{!E~8B;lCLjNV_W(yW7NiMKs05{_4JPR1dQy93~jogtr zZH^GYm>@q?aQe1Lg^q3#1B8&TZ#c*m)T|hOvT2%N0Q4dVoIat) zv#So<``9a+0=>o5xYwf6Hg!QDtI43_fi8FLF8An#NzSU960~&#a_w|ICaFv$7?|X2 zLZ{E4Gw&!gPuSvH)eHUR^7RJGIRA>#4RH@$!G1nzc=A10Q59_S=_bUr5eOaPIJn}# zQS0e5i-52di*7e^MCVXl=9}*r+L&653VlsE;=I%Qqae4N3^aa?YU*QS->T<8P-=PL zbxMlgmHxZ-Fa)Ki26~e8qnp+s;0}|CQt$xJQkPEjRsgt*(I}br9A_US7zXeDG{dO_ZnqS3u~mUC^xZC;tgZ@jcweSDt(zxFYuID zZQD5pb8trm_gaBhmDPRUzV&bXDAy1=PX%hk#R2!|P(>`1c<}YUaxF>JnASGWy_XhI z>qx_V+zWf*2$yqCW@r};yUAfpo@zNTcja|>U>V?E8vf-L+5`A~@z$`f^S$;$4A&f2eJueg>UEkEA~1v}XQD&kyQVj=_I7pecm{8f3IKfAXd|6&wz z@Ny$e>=%^jlA$)_rdY|Hu6390UVw0cgm#NM*VEB1U6ED}A%gjOJ?f0(#hjb3aq1A# zuuz>im3^#O3HTlj8_C>;3weNtX;>70N!ncm))B0M>Or;>JIlw0Xc&JK>!4x^WRK=U mqkS3%H6Ck+u(3?TAh%}CRR*3(tlACmSfG+U~z zbTLb_vZ*#pZ8aa@t}`)dKC^a6DK9bEs`n0)U@}8y`ZGOA_Vgc>s*hX^?Nr*a|sV4<3|I@G!wN z@QV$@2?h%tQb z4Gahh!&REg_NSv1B4b<5$ssV!y_lO9U-ndQcv1c6ye)5#>MQ5H5>X8yl25FSgW|4q z4(6u7}5d;!QvpztH@;Wf;8G7 z|8CL+fz#h<{rGdt=I6=xbhw?X4_imh?KrB>^~!rb6vr!#T9bd@sx;K-es;c7T1>ql0>XDby`ZB(6 z##l$dK+>?-x;w3fo_^A$@xTt%a)Th=yPEX+m}h6&iyUdoNztvxWM_zIlWC@_x?2H;W@rEfAO1 z{S?~nm$I?>$(70z(POHS`_AN~?r_l^$#X;0}>M_mEnr7!Fvv#v7#~1RP;Xv9K9+L~QUR zC8hv)s8oVNCCWue1bfOjR)oP_di~2k2fps1pJjrn0g2$jVgif$`Fj^o@XhbC>GNIjE z3mOH9ENJ&<3)DJ7r$M6YREJS0196-1W%^wjS5aB6HVW z9PlWjcy{gZkjtaceX_>f4z#|uWP&O+`y z4y#=^nM*_FgX3$N7N|8?ZiGayNhV+i1VYGE0|@#Zf=-MsQo`4)jpLGtxtY3u`-FxH z(G}UvBPl9&*k*M-Wvl+Ep9=Qyu^7X41#2sqYDt9hkwp`hOxvSAcst!saQFl0{nGU+`VL+9DXwf6Vgn}m>JXzl8oBtF`BSUOBRXIMwXOeOq?~uOp;pOvQ$GYwxl#s z+e(h4l%x{|VuVV{!u6oSZBq;V4?g;b)@_(9OPk6MwmJ|1wi0UrSp0U1m% z4frtv!$MOnLH!I2(@*Mb&Dva3F&)O6HKk&6mS#OsO*Cuv|5SzspV)VThwaS-V`86) z{=}N2(P{WP)iQ}#p{EB>^09&9H82&~MWI2(V5tw0I~K58l&vT`xv0$i_`hMv(<&3% zd~+CC%6-2kDPQ-^?zVM*z6>_c;6>LLrPpSO{DZ7d^wia}oCl6Ocx*3dxmoGq+ZC3p zva@HE__V(7%Ms^#XNI`+wGZ{J+jfDMdc5+AenI@jxf?B=z0t3RTaClhcAxsC^T}W7 zf||^;Uy#b^{3`?A=lUxmw>;P&zr4l*>NdEuHk-YtclGrIIo~ez`xSHRZ@y~iNi?Lg z1GpO(9(JtS6PNFXZhoUv%HO1x`5LjSvyHQuR>N`Trn74g?F?|Q`M}ZcSC>~bzmAz> zXyf^owtVxAbNTlNn+5G6hc^`twP6>R$W-TlsEWKRtG^V%7GH{*-_}*yX)5jtYpzy> z3cM1-&GK{fd^-5IHvIXhNsq?NJMH{&ZKs{Obg1h{bWpD6`jH;?!lAB%>df=^Mm>1K zJ6(bPF@@2MgL+C!?NQZ+@SR(hqz8T%{=l}s-lXy_NBNVBRx(L^iZ$P9QNYX5y6>-K1s{n9emcj>xCJI?HX(n2Z>k4qT5%3qmKm}EFY>YP#6 zp!#siWJgMD?cJ=u19gjeA9M9m2n0V)a=Wg;AyLZVE?9N|{cZg0)q) zAAt0oO+61q^3Wb$MIAzi^{DhxA#RqAuwVlk1Kx^5E%RS^%X_~QHUhRGhuwG!ZzTgZ z4Jrv_<52U-10$05qpo>?J(Hx{8HKmv5OdgwOdY5khfwf(mxW7Nqow86rP11bPC&t+ zOs5axiWtNcW`cleIMlI~_w#yIp@-ll3ixag^+&uJgIK_3lM!<;hYlYtyZEFVsp5Il zjLgx;!zd=3Ma&$6n8Dm8Le@uK9-ot%^hq7h`jkLmLDub#z+~HnduCk?->nUFt*P`~{kY&tw7ZARZ=F>yKIU@~6WE5va7@9w9nxAqH3bW1%VA%> zhBrijYX_ACF>&beo`2#KB^Y-BF_Q=}hT+LfV>jnfEZtPHjes0L&=VvGpH2wt3r9Yo{g zRi{a90P#x>!&QX8avHb=p3wf*HXN$S^j>M;ck<%R_sL(wRKfjFs06^Vo`2YX_ literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/floor/hi/e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e.m4s b/wai/pack-conformance/packs/video-floor-only-01/package/floor/hi/e5583297b1456e46366fe3317784fadf8c165c5e16e864629b194dc46290387e.m4s new file mode 100644 index 0000000000000000000000000000000000000000..7385852449e2f4b49345f9fdc6b5f563b472b1a3 GIT binary patch literal 873 zcmZQzV2~&-sVvAXPRU>Z0uY^BoLK>6niOZIR4{@B85kHDg!~)8EbUKV3Q7Q_nPow8 z5J`qJx%v5NKskZjw2Ty}8YUpUrKBhkBra0|5@%wt0J4F4cQ*iOV@8N2A|+`lB~beq z7$El4loXZbF)%Q(0@XHahRfhpY=T$zlkI=My_9BFe|T@M>?|Fl zZ3;%}MvM=D%9w!x%IMm_=)iFP$^E+P%j6%w)~mCskv85?d2%h9%tpiD{y}?M(h?Rxof&$nQu)0>D5E}=#gbPBb2`I!a zz?+cK3~~xs6-bDK!GA?BLRF2CiV-J6^M{RKRjvns?zkjSr|_PU@z|Y;r43&yPn|y> z$s-Tc$i>J~aSfp{2Pni1bl5M1@gN}{pu6l5sxp8=yg+xkBUFKe_)y&i65>a7R|e4E z0uNyB0=s_B2O}*bK}P0J8-V5uIDn#GgyG71CY7gmji1^2AFmeL-*I2`?)?XHi8gVp zK>b2YY*km_YFQW}fMUWd9H)LDi3I?~L^!ymY|z9+1$dKE(8RZ0uY^BoLK>6niOZIR4{@B85kHDg!~)8tfU7J8q5KTGce17 zvsVONc&0}C-Vg;&`1mY`9KmrJifmjoWMUb#Ckd2Jh(D=x5AbmPWdXdcmu|0Z~j#0MQH)YXFL|FtK$YiM2Nv2^z7oa9mITTLMxPcD)g)kl@!~=AfJwjCmP>2`kE_Z|~kPsiLyFfzxsP4)D z`di=u%w1sD&-q}aWhBVR{AmNwd;teg^ouZDS5N03S2DyHkxY*w%za9wEC3|Z zjyYl(TW60>Q~>ZP3lCS^w^EbD1f6S9?*#m6MMZpO#P^$r(@D)S*^GRek-KUw1c=HBzQiMCwDUp^dvvq%KhFVIdHksP8>Z6g@-b<#weN zx2OY?Iiyn2-?IUmal6U(CFV5#2z8FP^wmEZ~=>RxocGNrU JM4hO6@D04WTgdC-zYpnte zR9Y0Zs93cXts*K=DLN)dH3dIViy{$4EZW+R0uJq9j$`rQL%fB8wSi>?3D9M#bXFIl^pC~SY1idq7(O1hGH6lY)K+M6h5m6hl2|k7l7f zGUVHFP>mf2@j+O2UT8%;P(PY$kE1>6LoquqREIbrT(qJ*_-;*Vl~U*F2|Ik!fO?Zr zLVm^KV%4zq!tfiO5i(-=?3dGuro0fm*Yjsi%c-N<{Gz^wxY)M36J<%~m-Ome4;Acr zy!&y6?#uegPt;?R1`NvUhTT10>dRWw=Q7#3=4Q>J1^pX*a*qi|E<`>^*;jj>)gIFJ zpLWH4V^r9bmVvTsJFa$kOiQ@9V02AZ>EfK3JK_YXF|(7}%d7t#rNEwX@M{z1$A^oqeEJb7 zA=oUoy^g{u%KxZxa#qe(E4!iww3AcDj8;X1|4qTyvH zPeebVNFm|L;T@D)fziO=u8f%O+p(u=jii9^=JJUWW>j}-`_K5JLs2l$S0XfaF)d$WB zJgXlT`&RZ=kfB60moF`}HG&-Xt`sTu44$r(Ycm@ax8#8LxO)PM7Io#>=qLi!V=gCc#2ehAt}iU_F_ zGbCYJ-lg?ke)T3_3h<{pu>#tCYp><{_j>FHY2#g)iEplb%h!Ed;>u{infVI01`T|8 znS&Y)ek~+pTN<2Wjw`3{pN}E+->g7#8SU5Iu!`LeBj!o?vSo}$r>gj^ArO8WJ8-p= z2@iHeJVV?U;O>1~n|AO9yad?xwmn-?AoC8}`-OFmfr2AXELY>4vQ{IEO5pJJJB@mD zM%t(cSr^i>~x{cC+cVw3JbrdzH{fsImOSD79kY08MZ7{c390tgvc)!Yh3>61$rf|@Ga z?S?f-*9*o*l4hK1AOJg)?S0>tK~Lhd<};BKR;F8`jzrFZ2bjg-)!6$$REyFw8Rysh zWT+d;p9&Z3eJ3nP-^rS=vv@AA!}B62kmCv|$*x=8VFv2C3?TZjjlwrJ`Q`5&px~No zoX{Zk+UmXXxaNnO{~p*0eOd<={eQaY_V#qics*YMr_(v0Xob4JD?Xn3q-F>vu4ll| R>B5Q!))e@JZhjgg{~xLLQIG%t literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s b/wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/10b19654062fa37b83c082c922f54529725c36a4ead953b1fbfbbee14d4e79a8.m4s new file mode 100644 index 0000000000000000000000000000000000000000..537675bb8b0778d248e219010d0f66ec0f021573 GIT binary patch literal 1940 zcmY*Z2~d+q6yAggDOVGWA%r6VLqJew=NBV_^(qP~LO65;QrrWys&zW{?Vp%HX5Q@Xd*6HC_ulRwgpf$5 z&(~^n>TCo*vTAfW2H1w{a?}PEaU#S*9tkwFn=#w6G6(P@r&uJbLl!3sYjSh5AjH#T zWveX^}JLo5r4K%b@7Tlo;O@R;>^>((N~9s@WEQX<%} zf!`3AKbROS089Yp1?CAxd}G0UtSj-4Jd-?vCvk$8fe}nFm=tV07&-fbk+>9$oC%KP zkiF2llDeec$ohV87J*5u{}?AF4I*wM$B}Uy`GhAQvV}#NKkEd z&wuuKW3Rkd9v65Txlmb5KL~dk@CdOT>e+H z7(&L^p*BZ_95+zouq#i9i>!eyQgnNV<4_y$yGzB!Yj%96UrxY!*Sj)`k9nvrQEZRo zQDW@DavI2FT%|;8r}wu_8+vXP^l||%U~~UEW{0ami;&~SAGW(%cbQ8n{xt$t1R_7P z2UJj64Du@MuFeV7oPxW1b6pACXSBwpFjqgDxKbL1Gp=#tAyxHF&*ff`!ab=p%*Mav ztyE?XWm@0}U^@-2uydSWjvnl2rsU0gU_3I8>+m6KjEqMRnlhFOz;Z5s#}MOYI(F%Z z-=FqSvi6o- zmrb6WpI)BvHM`^|(13078AzK+l{Ea_Im#PTwg#9vT-kf6-!uJPlYZw4Xgb`coJK(0 z(-f0o20aS9ZgS0%)Iw8JH240~+NDQIFpx#q^^%wA6IN)NBd>#LMUEEw>$Gim(^O~i z=DrfS2RfeGXoO3cZdXc%a{a;C=!2d$?|n)`;TfaFUf=dnx4@021bB8O8L<&QBc_Y$ zs3``{F~5<;6M00`hgl*|@E69~?h|6{gwmQyq2k zKw|hY7iBOd#7dh0X4ZZF_f{vHDPNp4nz!dMJy%k<ST7AcDK-sO9$&n~M$Ozc zSF!Lww&T5)?c=+u%#g8kgbbL95*|UCjho4EUf;eoWpMtgurFW2KY+?6fC*kZReSA1 z;XpRLyL20ODH*)k&=Ms{x*c@B-eIQhh4zDV_{=g^yuAWOUhym{1b>Kj&aAYInxy$x d9UU?#=9ihhVrwP^=XyRG)bR$BaMrS-{{i%-AIJaz literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73.m4s b/wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/2c484c9bead2b261ac1a18c2aedec11761813f995d11dc9779c5f9b039d59b73.m4s new file mode 100644 index 0000000000000000000000000000000000000000..1948711274de584a9063db08f1762ed597159934 GIT binary patch literal 1467 zcmZ9K2}~1d6vw|A2B=uIMS2Z~#V8V1a2Q#(f-$IQ)S%X*y3r+;TDl^XVbv)oHh_Ecpo`68A`iB@z+> zcpif(!Bk*TVDVrIFwA1WhWm^L@8>wid7Q)EANy;g19E%KoqpS9#^-mnPHG-^ zuVg;^RwHZtv}}38j>eqM_fKzx>VMD3SA}q_oC)DMgu<@D_Bgabje16XJav;{6%0jC zf!zI#;p~JTv}`03Mv6H90=PSsYIX!8qJ~Jk%!&J~I+$!NS`(|xy;OF2CST9WmanOnrxdD-K|Uow9;#KhntSrGJQFOBwb-xa6--*N{QdWb4BO>+dHRM-F7c z@13HSPt^LhiEGipR;-qd>aScAcE1xUr<39LB|_!h2TT4eg1bC3Tl~S>z;pLzyjXWa z6y4!geaFoyzM}!%St9ZO)j}&*YEvf6o}-r4`YGt%X-$tz=>a|m)&CO6`Tt(ovpxgh C<9&w! literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8.m4s b/wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/a855b2701af4e7c8c912448be9fc023f911b4e9e94b65770393c4df6d705b5e8.m4s new file mode 100644 index 0000000000000000000000000000000000000000..90c0b6fca9da987db67ab71168d964f8216d7550 GIT binary patch literal 1019 zcmZQzV2~&-sVvAXPRU>Z0uY^BoLK>6niOZIR4{@B85kHDg!~)8tfU7J8q5KTGcd0Q z$w39rfPM{qzxG%mWY(3rIbMJ zV_<;TQ&Un@n#aJv#0pd=3B*^JfCLa20xYVN!pTTXR6cNLhqI*@1zf0VpJDUJ+8O!FG51 z{r?uWAM(9z)Ez@ajB3L3=aaG(*iH;G^o5dkxB3Uyv_3x z57-#@E^diWJ78pF#Kh19SIp?Za7n3WcOz%~#Rs7R6GPtU7I{hYF`l})v~&pz?^dxp zdmk$n7^xUBGqO0qEttS?Uu*lqt=A7+-6a40h*4mV<_zJS1|uOO7ACe1h$^6S92nXa zfMTpH92XS8P6LazIRM4jIJhNT5Mq4?fMVj9t@(ODTMTSfY3Wyf0n+-G*hNX>|gk)`4qSPxji*$ji+$?tA3a>qGI zRrDO>w+J`BV`2+5h#TnEUr>V_CotR#-=o8Bv#BvjP<^tTdcKjO5f9Me_6UQ{C~f}0 z!`HNF)3P}>lil7aKL9G>1^UAsVa8p1S83T9OIw?^upj;Kifyq3&EWn!zkf>3br^S8Fz zEv+wQUaXh;-V}1eNXAH*h2zu@s0yGT?|629TK(j&mrd)21|vx$5e{xC8>lQW&@c3P ztos<2dSV06Zczc=q!fh4+p8+BHWdGHOp7>n`Lntb&<|n^{;PVx3Lvos6cUHK7cL|L JcOh74B>+Y4|7HLH literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s b/wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/c29687008dafdf251b2ca962c3e830f785b38a56c81aee1f4c86f2e8f9115fcc.m4s new file mode 100644 index 0000000000000000000000000000000000000000..74171d12cf37630911486c49494280811c03c617 GIT binary patch literal 1019 zcmZQzV2~&-sVvAXPRU>Z0uY^BoLK>6niOZIR4{@B85kHDg!~)8EbUKV3Q7Q_nb(8l zAd(Dca`W@kfN}!4X&EU{HB3NyOG!~8NL;1_B+kTO0b~R9?rs3mhKvwPL`u?9N}%>J zFhK07DJd$=V_;xn1*($-;wvD-fWQ!lb%EFfh}D2t1Pu!V`HDcS0i~6JGzf#lK^UYS zB(DU-azHE%<-_EGG}GhUl*AG)E}#sP`lH;M0}4jUA`Hq73=9oGAyM;+kXjA4yW8*o zx3K+??`@;*7$O??lr6zX+lcW2P!TgQI2m0JI9_0Q5a^s1cxk6W<;96idhh3Lo|kyQ z#<+KJOMKb^BO@awh9pK7xV;A5}$Y=(60j#dC!AQ`EgTa4AFGAg1BY7iE zhUO0&!OC0@0Ii75$~f67(myLZ*7D~*vnxhwMqG?671zLezzWW0801cVcY~2T&Pl4G z=ODjDxbYnmTcAPQK)3#a8ss>E;a>P29d?^djY)#)ljYR&jTDV|fDX4u7<5Ky^9LTj zrcIlc&9Ry6_D=Z$Pzf*4AMOYW^+#Ieht)s=vL5M%IP)dN-li7lXzINZH(Aqlt( H!9ptmp!5D3 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/init.mp4 b/wai/pack-conformance/packs/video-floor-only-01/package/floor/lo/init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..2f94c3ac72712cf4e59f6bcae567664aede847ef GIT binary patch literal 788 zcmaJ;%}N6?5T4ds=|M^lMS6%((1Vt)KRp+`^dNXr5WK`DrAs%>vPpxAh`xaD;ahm{ zDLncNg2y_O?YglRhs}Q9H}hq(n*jhewzp|)^f5pc2yykf>qRO(iZJ)7v~~cHC^r#^ zWi-wny{G`-Q^qfW=@mUFo$FW?H+ ziLpKteyQJE(MrS|YfOpt|9<}FckWL_k}Z3Hi-jyW;RR|vI4|JR2ivI^~;& zpV<+4tt~Q19tx`0=UKv*{N32=1o^YErWgo$9%yKY6k*Ri!|=C#W--C8VA zw782-o}do38mj8fhq`}d$Tm}MQbg)QYtvYNok)G4HlsoyHc{UNnkafkI>_xRCvQ+Q zn|Y*C(Lb;Op9{+|ajB$7s%?iOz_DdKP3e|?VlU3;+F4q`?b)_OVtSOR1b(d_SWQPh4U|~ zxK*|Htd?y#eCF?I<>vw)V>On85)u%A(iR9%YX4_YBqM?K%O9-s_bGL4@-S1Gkg_WM zs==L*b=qsgbPp@X*X{o^%MujnKtL_~TcQ4en99H)vtYi}N|U_*@AenISPJ VhnJx|F;lNBGbJ@&FR{#!0RWa@SLFZz literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/moq/catalog.json b/wai/pack-conformance/packs/video-floor-only-01/package/moq/catalog.json new file mode 100644 index 000000000..308f10183 --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-01/package/moq/catalog.json @@ -0,0 +1 @@ +{"tracks":[{"altGroup":1,"codec":"av01.0.00M.08","height":36,"name":"hi/floor","namespace":"video-floor-only-01","packaging":"cmaf","renderGroup":1,"width":64},{"altGroup":1,"codec":"av01.0.00M.08","height":18,"name":"lo/floor","namespace":"video-floor-only-01","packaging":"cmaf","renderGroup":1,"width":32}],"version":1} diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/objects/1ca09f3aa9346effeebfc1bd101de2c311a3cd586379d1dea5c235d1b47fde60.wai b/wai/pack-conformance/packs/video-floor-only-01/package/objects/1ca09f3aa9346effeebfc1bd101de2c311a3cd586379d1dea5c235d1b47fde60.wai new file mode 100644 index 0000000000000000000000000000000000000000..a00277606fdbd954a40c14da7ef28e8cca8569d4 GIT binary patch literal 2204 zcmZ9MdpuNW7{|{{g9&NI2h9v>=8$A2dt62uHq(+tVzjv|DZ?Dhr!kWuiZIJk4Yk;k zlBjJZAL*hbmFT8qTiw)FTGncHA!<=cyJyUP-s9{a?`P&czvuTn-{*awb3&K-I#fdt zln$qgrLX{Yut#7XoPbKCVr-Wpm7of2FO?^w@?`9R65Sw^#)y+qO^`x@%GN2-#EnuV znlPoO!!hCw;%KQ%n!Fi{#!}i(rLY&LIKUY^I7T6tNRy=sxl|qp3)12BQn>_+`%g_4 zE8|eCN;({?6eplbuz-*7;CNWzap<<Cn9BLt)kN}-z-*u)f!oOJTsQQUsJ*3+*qqM)4Tz^w4?_&Ag=F7U|- za~tX!8``k_5;yH+?KOj9`Q-(htpq-*ug5z~BQy7$`MLMmpINT;Ip@D5Rnhs^Mtm*| z*F#)>R8}Bo^Wr1Ub$ew+OI2Im z=~nX7dlLLiSSRvKa~am-GE4J$4TpCHdenbn>kRi)*R;KjpKoOA^`5qB%dHDV4@cWv zyF^a!YMdG(E-z0gzxaJ!^!`c`r!fl83O>j6@_H)A`i`Q(1zsB`23U*7`VRHvTzoL;$raw~3krxYL0d-k)mA!_ z<*AXowl2>K%7}bqH{3L*_C8zvquY!WlK2dBk;{_6*OMs+!(G(Bzf8Bj8@Mko^Ua44 zF4Oz&WSzr`D)$drdZjzh9eCDGDv6XSMz8Zj6(vfe2~zLu#^&-*XXfnOByG5#`&W=& z8TXTJ@$UNf55=4?t7S%Rxupf$otVWA!xKv$y!3EHb&dwCppR`SPJ7;5U2fF8?U3(B z@{R4v@I1~p1+M3PrKYj-KVLy&m#l1n9y2VDZR+{kVq z=4fULQ`iWFM47HUU6Z(;(>U8|+?w_6P5uxKWY8s3Rns!4Rr9qOI0%(8i#AQ^tnE4o z83@e14o7oU1KgTMQ*9s}(WlZYg*Zf(rB+}fhBPx|8!ogjdgYTem?3NdP9rv}7Xqg-Nv}5s50G)RH7yYnGIgX@E2ywTxhh=2oUE+2sYG># zT!7n*GK)TnyW{6+-R1}bYb6sGy0>wE+Q=;NbbYM?UKZBW4|qttjn)ez7ND7YP33Oi z89cf2R+@O>OcP7h({UA^VlJ_}Ft#>@1;S}1boIpB^9xd|0jc}NkQ&s7$$I@!c>O$J zwx$@4R!<4}npt?pJbTZ=fzepcU)l*`Y^e0z!?^hx>fveoYj54F&qW+_EyNtemS*O> z36JTHZSe1*;P7^A*3}!hECN0rR1wU;g{OP}mM2PZpFNRVr1|P$lWK|}fLo>EeiFT3 z5(T<-Bm#>pv@QnXOr-p+LneuNQHYmwA!0@Wqbm`!M^r%)(GLhgMFEi$0Y-Ns=eg(E zp&>SbCxCG&5jBdTMKwW|6>1K&1-zuRSX*HFif!gD!VfJIOrjTbpraEP>T`TT4gF7F zzAbM8UT?BqHw_PA15zJ~;pDWWt#*)*pW7b{jDA#l`Lx_@Aovq$*eq=eW=H^$=G5S9 z@nIpjc@Yuh_~RXPm&N#1tRmvDL655eN519*RuvhONp-s+@ow7#h(i8H1Zsv6iB2;w zT}+C?Z!w&R#D=w<%th7!n5nn)R5rJov#>1oNPp(=^)OI&Eg(~AW)eSIaTMXcZncht S>>E_zy+%VN9)Hz>y zfl3hq^1%Qu1aiO(I2940Z#hUREJNQBsREWN&<|O#d=nxTDPU8PEEV3Ak_BgOMzY`x zGp+)~BDv@%WD}y;idLhPTr&k%loJ5vaX_(5nu;h8nG}&qK)wpxh)7e>x^JjLlqG>t z6&0A4CCY%aL4FX#0XKmBKpqEFf_z?3Ufv5U0Psis`k*HqJ#Of+K#vUx02}~oYxI$H z)>xSWQRjWIqyd${HUMBX0IWfF;;*jE_V_*I%=1k#;(bFyypkA=_PpKk1f_7SBk$-4 zFx{&RED%*aHW;7PKR9jeKkOK+@P8q6G)AU+>%fYaObhx8G09 z-L~jdv$_npbc+o>nR#sM!ljjece#XS3|s2G(yrTusXe_6r@=J^IWnf!L#AgYjP!o! zSxzbvcx8hh(&Iydez=%k_?gFC60YPe4A;JhL*PKU(=hwCt3*%o4Oiiw$*m|?Q9l1yz^vQ z_)B8SYao~4O2dc2v3ZiW8=@V#NZY;1F zPK)lfeRQaZznuF%vW~(|TW~I^vEUi`-#Ly4p39o6*uk48xs*|6-uJzG{+9Qb*n(@2! z-;dQd)-c)0Rli^SV!uYB%8OMhdg%jhQjPb`Mh_}*B_wLck4(I4J#QiZjtkoSWJw|4Wa>uS2Bo_ z&K0Y3>qcMS3}IjebjZPi@=#0^v>$%5o+8IRI+3Wx(*&C2inTdGbh4fO7y)RbVr%gx zS2S2YfhFKg3^dp;1kgTCcfy-Ire;ZS$CO+kPdtJ7HnbiZBnN81C*j>O#eW6O^y8xw zc7{L_<+1RaS|JN~5L@P3jCSGy8GdxT;PZ{kieigH3Y08KRs1!B?WLi2EYrD}A^ zbSWT}lAojhIuLEF5njl?ejr`L6l|z$rb!J4`5K%rh%j&3T0)37)wXahCd7so;I_@% ztb4Ph`_muFq<6OWx#@4;vTw6{8eVE^Rt)xK;UfI0X@s*eE?+1VPh;ll`16d-y*6H5 ze82Yfu@lqmS6?m4y{5xy!tjV{lUE@=@I@Na1a$xZdgZ}Bm;eh}%%X?JneW&v&|Q46 z`C$O>-k3{Oiu?9!?KpJ=P~F`}%z}jjktE6>Z4$u2nEfF^gze`^%zf%N8`J6>y|47_ zE{=}$i&-MOqinn?(BV#&QEewQgp;<3XQgMAHBFIwHM>?=N36#Mqgl=sSe@DwlI4d9 geh0+>)h&|SWu~O&1NoVGC8>EOK!Kvvf}G6c z#FA8yqWqN9ocN;D!qUv5)LgK9wNi3oL1I#7PG(6ZP&Lp?6pe@x(X+?>-sl`fGMy5JS8A?{hW;#mcN>*kj zwY8s_7#Jjh?o|O|2OtKq8G+aoh=mxqxPTPX`j4~Y4LFQcMHrMF7#JFWLPiocTn4XV z6TGsYZ2$Z1r8Kkp!+UdOXXzMiQ_u!V3o#g}8!Tn2Z%usnFhEF3lm!hl1zJp zD8w{DBUToU3kqP%!FpQZ5^NmY5-tddCb$H<0B=G@GswAM9S8{y2LBbk2pu&V5IaZ5{P{>8dAR9Zj4Tz`5QgNyCAfiJ_=T_* zA;AOmfjvS;23!X(&i~2MuLpYpEdw( z7jR$@VF02l>zP!Z-Zg$^>wmmjXn)6j(YyB_$R*muvBJ#~Vq&Yh0@uO95CNAFX5l#X w14$+TE+fLhEoFmMMpS?|DFv&H7=!<+9;`CrC~jt92oQ((M%YLK&29S}0Llfxm;e9( literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/objects/808567682e2687d0f431e2d2dead4f574212ee1e6addaa99a73ab22258de73fa.wai b/wai/pack-conformance/packs/video-floor-only-01/package/objects/808567682e2687d0f431e2d2dead4f574212ee1e6addaa99a73ab22258de73fa.wai new file mode 100644 index 0000000000000000000000000000000000000000..c05dd73373233ac8cf948929975396d9ba8c56eb GIT binary patch literal 1559 zcmWG{^fX+-z`#(gRGyfrWTj-NXP~5`l$)B8nF!>SWu~O&1NoVGC8>EOK!Kvvf}G6c z#FA8yqWqN9ocN;D!qUv5)LgK9wNi3oL1I#7PG(6ZP&Lp?6pe@x(X+?>-sl`fGCI&i68A?`$7CK7hN>;{3 zwYABt3=A4T_X+{A0uW0AF(VMa1Y#iuE-oO&r2Z(k=756H4MqWm*+4FL1JkxnU9CI% zY5Aeyk2p=2RT#?7<=g+OYg)A6US`JF``=@iv#_{5PP0yJNV(#0c;?hjwjN`q?l2Yu zFT=Nbi?wFUskvAPvu^NMKf8mmxGPlMSYl<{vzgaI-kx#o{Gqsd?&-=`s}cjgH8xeA zz4>`Qk6DsTOXK@Tp=A-eE?e6rf4g+4d`yu8GkaLOuG zlDR<&>{%l*1Lgw_3=C`+fSzn%XjWi&pz?3mWdmu5thfOSBMY+ZeeI-umN5Zh5NRO; zHYSb+m}Z6shE4@#h>W}e2MezNM5Y^La`_V7;_O;kiP)o!$2||s0|mJdgOR8K7l+^i z2ZZhSOnjI1!=1(>AZE~kki4_wKw7Gk97L;>0iS}@fs0^Sunme^7QT_K=$B^tAPP|- zXdu8aKTry)ALzO^xP%ZR`@>{}M3W3ehlGI$6UWCj2#L$9xJ0e5EKGnqSB!;M@GDdv z7+7~CKkcxBJ68hempX*x?eNgDUXi(*rHTg;UI9g4tHOfPe7LL<6Z_Kygr#S1f1knM05?>Hh3D%Eglq&{LXAUk z>IZ~G0bD{uK+L29ArT-82{=guEd{9~C%_Wj4Z!FYo4AXA$AL*}Dhf|yMJG@wBG7?!L?xW$EG-kA%CP@DqS<;KK*R{){w#>1#{+3>vR>B93DVk9`H zc)Y9M%prZ~zNC4BU%_&Gx} MC$j8;FCWVs0PuF4$^ZZW literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/objects/95f784de520ecef9127c1758264b16b69a0fc1e375bea6515cabc4bcf71a29ad.wai b/wai/pack-conformance/packs/video-floor-only-01/package/objects/95f784de520ecef9127c1758264b16b69a0fc1e375bea6515cabc4bcf71a29ad.wai new file mode 100644 index 0000000000000000000000000000000000000000..bb025eae3d696fae715f856387dbf1720b828d8a GIT binary patch literal 2052 zcmY*ZX;4#F7=45YDO-~m0|X@D83F=k9s!~T>sAz0gs^A@Q!pk0UWFuvC}5<0sHLpJ zfD3L=YzNm-2dcH|Xed;$T9*`CP|#pStxKgURqJ%@TjG84<4)$~ob%mtzVF`q$(#id z`ymLjz=diQR=^Qb1P+Juby`%7f2~EeIs^WV>diX68UMqiGv=WhwOL1y3|d`YmPxmI z4QkTmleh)esEz8CXdY@V#@TpDDOp0QUK;_Igu@zxUW=MhgC5oAzzPez3e{_Io&zE_(FJF8);p-W`xR9G0 z{=*2qlfT|7k_|brpzA?6|$J&1)M6>wl;|Ic}YCNAjbA zUsY#93f~sDgtZ!9Ejo~RMKkn4TX=lf(VnRMFQ0VQNU9F9W(+sh3VF7=7uf{~hn@t> z=b7s6_{p3Rvw^d-zWB|Z(^GqyzNxz}-$;rJ)@Nv5zL<&@baY2wO6xTCJrHH>bGQ96 z|B2POnj_XF{XVr(acHAUd(-r=x3cWf>We|PKP&ud1uZ9}n&bly{m#9$CvJK%l3HC* z>oRSYoA}M_T$}bEzH^dlgIDqM$CiFcza$~(1mrb|Of3^4&Q=V9T(072t1t+IJX>#Q za%PUZ>DAhGR9=SpQ#2oh>BMx{z0`9y-0_!zedm#XY3q9_NCs1Mz!iJiY1vG97pa22Fb#fijkU$j?>w@2R z?d$q(mG-lMl*eHGeVCSNfnPq;lQT*Ko!jk|wf|ay&Igb4ISs48mI6FTEe%|l+`ufo zyUXA~OZ~^DSq5em0Af^Oc#|izS@x?MZhB|=D)>9oG0@|{j(4HRPF5Si-Y~;;cm=)p z*(~V6*3&Y{>7Ag>Vy4IFeg}hSGcPP{yoBl&j7V6Vts^8zcFVmdaZkoW;g&D92ep)^ zcmA4y6i7kWi7JtA~P#AeUDeYVs7jpY4#RF6I^uoY~Tw zu8fq!6gvP3hnko8IM}$STcIXno#x{oGkIKH!ucSI6^KYdHqzY0==tgYmvl;Yn zh&i@5IqI;xGDJXe_=pnNBj+~|cyCpzJ&-~tA}M2C^*zSs37eOmObCV2nInEcv3nxi0rQwoJNIZwKmS@0ldj;P7PtXQbM#uzOS5@PZuaSFgZZrvmm! z%C+N7*Ups<<$`;V37l0CBefTG#0XPv2cKlPD_-Q71Ce$n54VR2iFSWu~O&1NoVGC8>EOK!Kvvf}G6c z#FA8yqWqN9ocN;D!qUv5)LgK9wNi3oL1I#7PG(6ZP&Lp?6pe@x(X+?>-sl`fGMy5JS8A?`$7CK7hN>;{3 zwY9Cx3=EP$_X+{A0uY1Pj6iG*#6k>QTtJFR{ZVes0R9O zr1yT_=6Q(+Y>aysx5TF%FoS3@GGbzAf@@)PV7R2zv%8Tq{^EmBfr%k+bc?*C`4~^# zTw1z>g?FpioxP703p5})Rg9P!SsdV&O<=gMwSD2%>j$oGlK+0hD6mI!hHy@U7(}g* z5epMr2ShEv18^C30p5g+W{@|*diokf zA@&FwaWMF==tbz6s|=BlH{xVy{;(0O#q|Kt0nu3*CtF4OXJyA){@iDFMGK-#&4`PU zrQ#Y`KUmq>41?Us?`|-1$2mz=^c>{32sgfCVhcBv8|bTFP(vLjFx(5@qr+~qsWC}V zeX^W-zAD5}MI#=d7wr*-o>AKTfrqbY)23x}Y$m(CQ+@zf$P4tbJHouX_O8;hGnTeC zZDBw9;T79r3Ai`;Py?VFF2RrL|1Nlt2|R%L-vJZ>69nL%5M*Tjv;pBdUiIXfDKoCH z32(act==#|1>y+>BOxZXsw)U(7e9Y%tKHK2Qs%{asqal8Clny+WQ>GaI8Ob5sso0} z9nbDhtDpS!vT5DWAPZ3=X(YnIEoB2$!|1?pq0eL8$FS5B8{lpd72r)uK^Ss-RmIhY q;y;dQ5yvinR#$@iR*b=aRS#I11ISZ-a0zj^pU@;E;JyG$tONihvl;FH literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-01/package/objects/bac29f2cf9f5bbc85f3095d0eb0b081b8fad0552739024df229481e73d4cd341.wai b/wai/pack-conformance/packs/video-floor-only-01/package/objects/bac29f2cf9f5bbc85f3095d0eb0b081b8fad0552739024df229481e73d4cd341.wai new file mode 100644 index 0000000000000000000000000000000000000000..2bc6503c3b1b5bb339d6339816d26458e8d23b42 GIT binary patch literal 2270 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 LNB;T4GU@*TnaWI= literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/key.hex b/wai/pack-conformance/packs/video-floor-only-02/key.hex new file mode 100644 index 000000000..cb349a425 --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-02/key.hex @@ -0,0 +1 @@ +969470be8f2e8fbb31f18a2e3ede613cc2817cbe2fa7a7f8ccb3bd60826044ac diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/LISTING b/wai/pack-conformance/packs/video-floor-only-02/package/LISTING new file mode 100644 index 000000000..37a7b0010 --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-02/package/LISTING @@ -0,0 +1,32 @@ +c5203585fea0962de941d258789157a0590e18b62a2e5d1facbd11e1cfd1ddb9 dash/classic.mpd +04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6 floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b floor/hi/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s +58c598174eed554cd0d1bc8abedca8c9d51d992c8e3b963bcb7574da4983ed9f floor/hi/init.mp4 +589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s +6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s +acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74 floor/lo/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s +d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833 floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s +d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9 floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s +640cd81c83baefbe13e8ccc2bf577395c6602885cc73e201ca34dc267e7f0a48 floor/lo/init.mp4 +3fd88f9dcf835edf0fcca8dff8371d2b4e897ac097fc85901477c950c0da7996 hls/all/master.m3u8 +bfa98255d682517f58df4073bc71fdb3fcca120fc33d16e4aca873392476c586 hls/classic/floor-hi.m3u8 +ad81674ac359096ebed255a26a40e82858e53e9754702429e59d72898df33812 hls/classic/floor-lo.m3u8 +3fd88f9dcf835edf0fcca8dff8371d2b4e897ac097fc85901477c950c0da7996 hls/classic/master.m3u8 +cfa7d9a1a9c8a22d9ac1e22e4874b8a23e6ac5505077faf89dd70e65d3b4145a index-v.wsix +ddec2072b2b70d5df4c6295f7e0b3f7d9b649a3d524a341f8fd6f98a2ea0db89 moq/catalog.json +238862ef3eff0ee32abe02d8f470f514bb447a51a1f328d496a2cc552e6fe486 objects/1ca09f3aa9346effeebfc1bd101de2c311a3cd586379d1dea5c235d1b47fde60.wai +74bc950940597f0b96e9b5a87e719171df0b7743d448b0bb9aba17e556a77178 objects/420b3bb3485cfea7ad941b0cf9b2bce45815d3ee881f238b48fae8140e9d88e6.wai +8bc999fab324b1c90dc03387d1687ce89cc5f6f64fb818d528b3b6a06dc3d771 objects/6528538927505ec6ed34d97843fa3a5eaa7dde3aa6b4c3ccfdcb23e710f15d28.wai +8e1749bd5a12a09e05eab464e0d4f03a8c4ba9a841acb9719e56d287e928f347 objects/808567682e2687d0f431e2d2dead4f574212ee1e6addaa99a73ab22258de73fa.wai +8fea2404d5d7e251328fc7b725bf067031f7712de54bfba24d51376ff67cbc08 objects/95f784de520ecef9127c1758264b16b69a0fc1e375bea6515cabc4bcf71a29ad.wai +3e9d5d3f281f366a2056ce2ddac7c75a06bf378a29024b842953247804da9c05 objects/afa7e0ae4f4c7545824836249064aa67d530dc54ae2bad562dc3235f7ebffc9a.wai +82a7b68f2613b043a11b16431713d03ebf59333c5edc20e1ed6631bbb80c714a objects/bac29f2cf9f5bbc85f3095d0eb0b081b8fad0552739024df229481e73d4cd341.wai +ba45cdd651843f80f2a5f8a3b71bfbd64621b4680edee0100136cb22d8303eca objects/cf65056c087382fe4be2f6cb56d64669760e1f7358553731de7ba9dafac01796.wai +24c0a3b5c168705e24651303e9c7a4da733cd7bf05972dfb795c7020511021ee package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +59ac061dd4cf2b1d6bfbd90f3b928fb52d996877e1612d2e77520e55a4566ba6 policy.json +d352b112ede244612448bd216ece0553ead1c5af1542d874bc7ef5b5b546fd27 policy.toml +c421d0d94d97977ac1ec994510317d67f54cb947cec3464afd08e7dbefbc854a stages/all.json diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/dash/classic.mpd b/wai/pack-conformance/packs/video-floor-only-02/package/dash/classic.mpd new file mode 100644 index 000000000..0bc509f7c --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-02/package/dash/classic.mpd @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s b/wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s new file mode 100644 index 0000000000000000000000000000000000000000..7e5a29203e5ad8907861e9d0bba3c074652aaabe GIT binary patch literal 981 zcmZQzU~I|F&rf4uU=YYn%SZvzAi%`Hz?f4~ln53t0f_@efPfK*MM~0AN`ZD>)ul4GzYNU-fRG!?;WVklSNXUqZ zp$V!GsKJ4u>kCkfnUTc-q8TFA02E_kV(UN>Yi}?TG-74pxS#;G1gx$VD8$CWE#ZO? zY61$e3-BgnG=rQ1Rs|B`VDMkji%?Z#q+-O$(EMQ|Se5GmpgS%J)G54YWIT4KVrj#d z%2VghNAk!6HF7bsR9r)7%mE5<10D7YVLV8P2k0()gsKdn5HHYO?g&*NAwE=hfrR)` z-IW3Kx4;9KyTGoW^T9~VNRW~F(*~gV0uBr!z*Ng{Wj&M1)4RscZ2gZ{3+?Z?FM9X> z1Gz+-I98y3Attt}D{!?e3=u#vVHS>4Kaj)%fMOyX+)_4ZVxj`PNhxSzVhsMPdeFqg SQQX7A5MU&1B!On{J_i6~LX$%P literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s b/wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s new file mode 100644 index 0000000000000000000000000000000000000000..3e21af5bfbf09877f851ca6abe777d4380b6af59 GIT binary patch literal 981 zcmZQzU~I|F&rf4uU=YYn%SZvzAi%=Fz?f4~ln53t0f{q##TkL5NJ&~s35Wp&?Lf5- zB}Juq3=HfbVM!pr2S|h1#t>~_wk9J)6NnTcf-Q`sh8VUQiRy_l6WN_QNaiDpQ^FR7 zn8_5Fo03?<#RUu*ru83Z#~W}MsfsWtJ1{Ub0ELVsY`6?w#U^-VKiU5G+e>L?^@sQ7 z%Ffa;+NNNnZp8QisEj!S7~ZZ8j1COvpWLszzD)k{YrQ(F8foJVl_z&I8Lka75;9_9 zXo4yPYH(oa`T`VVW@K@IXoiS20L56C*gBBJ+8c}njaXSYE+~L40jp~T3bAo;OSm9} znt(#=0=x+s%^;_MRe^*!82nfCB2?8FsTgrGG=JC#R^@sC=#EPQbqenp8IRqmSlaNV z^3?hBkv#H1ja-Z@71t0NbAUqJK!^Q87!MNS0lLc`p(+C?#0zwnJ35N03S2DSG@1F;!I7$KTKq!JPvSzH-OTo{Qhjl?EKTpovdSsdaj zIK<_M5Jy%ci9hQl0O;eg9t^&G831-aG8%wy#kV%$aZ0I58H;^ zl*AG)E?_ERTK{o&ya9*NR2Bh-*+4Eg1JhkSsZ(8N8l=i*ER)^%Ke~)_P5uS1Zn4&` zIcJNyKE0EFs%8Jm*Fd&OJ9XEL`faTNexYicUhLQ(Yn!p43}x zZr*LnxJ=OW=tqw|A66x`-zYCW60gMYl;?7Ko7Bv=aVPVOO?9doL)3Sjd%y2RAs>g7 zzhb5Na+7s4b0*p~)O==JU|Rhk*GoidLz`%;gv$3ES!wxgOQ!hSZ~mje`r*NfRmVSN zsPbvJ{16DLIlX7%^{>Y*t_2u>US+&3`jBhx+`TR9lCI?LI-DStcsN=2!s7)Gr4t`V zAKx%H%EGNMR%T*1m*-v6i{+1QALJ5{n6TaIU;0Cx2MfMEUYQ!&<5K$jg_QZX$BP~` z@4fohS=-_A<3PWRX{iUka&;-Q{+(MMJEh&VKCm|ShSrB&;%lxbbWOHqE@MpGDyeH` z>Hp?$*}^EZuKTa5RWA9@YO8zyGfZ33?b6?MhTh9;e%7SH8izH-NOsp}IN3NX9_% zAc|XWyE*GK9^_`c`|@2EP=gW^`_lx3J#9b@Dl9x-SAd1OL9ujCa{FZ&Lx~-mP3J= z!h?n9FOm@lwHO>sTc3sk6?<_A&P6gw0Vw2yYM+9Un1LUveVg9$CoXXS#zp|DRqJo{ z3YwXNf-MNuLIt3kL*O=bgR=6n*yK76>k}z%$EO3;hoRdkZV-WL=N8HRdy5l5p&W&3 zse+N5K@8kFa4O%_q`g8>b9UPDr*$8WMF6$L!R-d81W=G9CZL4s>4P7`X1&b^xjl(t Ln*9Vs_%#6l=bT(r literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s b/wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s new file mode 100644 index 0000000000000000000000000000000000000000..a246e72beae3b37d64c24c831a41f58e23f0cb74 GIT binary patch literal 2605 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 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/init.mp4 b/wai/pack-conformance/packs/video-floor-only-02/package/floor/hi/init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..0b3ade2588318c8374e2813c379f92328998bc05 GIT binary patch literal 628 zcmaJ(|3il#OZDrXHF*9Xt4iVyflo2Lr+O&i_bGHW)? zR{&~y95}iJXIX&p%jQpQGF?B~?~xj%c7FFx1BxQB@bmZMan=XA(#B}71zfv-;*cAH bzj}3s&}4iCt=&kQ??7UsT;x3O>uhg-8t^^c literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s b/wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s new file mode 100644 index 0000000000000000000000000000000000000000..78b5c886674e2dbd93fd45b08573c5214c082bb5 GIT binary patch literal 1127 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 J3Z`r-_#X%x5%B;3 literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s b/wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s new file mode 100644 index 0000000000000000000000000000000000000000..6adf8fdfddb9f43c4eda7bcb3dc4a4a5518f1282 GIT binary patch literal 2526 zcmZ`(Yfuwc7+sbW!qWsWgd{+)fLH~07V4lzO>NbV4=Pp}WDp556kEb0#zzND*IGpy zsI(|*QL$<(T18Z#Qguv_Y6?D}7DXb8DB9YNf)4a)?YEnd{nDA{2l@E!`OZ1_+#C8YTu-NHMj$gr`edrK~Fxzy@0e)hSU zgG;lE=jKe>5-UxKo|4#7TKTtY`oxcVO0_3PXInJFU+)I&EFRa;lyc~o{3M2sq+Cr5 zLAbSnS0h0%M7^bewodQA-ewL?mQ>H45kE?P@skf}B_(hX4C5G*A>0mrplb6gj{o7O zOV?uB{!r3>lp868KFb7*3{g}|2T?+Sj|lZF@`3qBk3>CUXc^@x6z^5rgjvGi_KfI` z8!^YKO|+Eq7D=ehJXJ?Z%YE{}zDOYSRmx25{FJ<+aKPiqhHy1Kk`fVBi86kuxwvmm z8*ur#xZhpIPe`}59|#|;?4%`B04W?eVjtL`Bzle?DoH&KL=u6Ic#tQu{N~v{k5*7p zFl?|BZP-iP$+(r@o%?ZK&h?uWbRZ=I%Uk#%>y-n~4vW=vFr`3_A(mi4TIE)^HPj?Z zEnEUIggCpt#c0Ik9+gj{n_)D}%v*=iu=A76sq=D^u9+l%F?0YmigfQw=Os@^Bm_W0 z;R5f$YP(Gsl3PE|B=^s#>xUgg3dP&{ZAM4rk(Ad9o#S72*4!~2@G;K*EdIWS z!35>(FZiOOv-a!9E9FNGO4^^I9TvGu^nK7ST293wXKaM2dFNMo`PG_z8PK1AT!HQG zWtVgPyF7M7wDHc)6xWu$?(4oWVNn$5O!|+vx_mfzmBSh*emNv#V=C-pso(-|- zzgEV^Wg5Qj#>IjjpqQ?dsOIw-9jlNug+TiaV$Y>EzTMXv{)F{DlXUME*|UQ;;3XwC zHSbuT3@dL6yr0{6j0|jfWT}=EmNc1wYPL|k8&N$t5m#@3Sm!!~jSR$aOY!!L@^5xW z#qCiW;B6*2>s#)@jh&CgK_Vz#u=@QqY5*^AXmc^N48g5h=uqYS1Wjn~y1hKVh5>kz zL)n&E0z9o`hn@|dC63$7Kb|x>n6>i%#B=$ z12>xV;gmW02y;g4xe)RC&7hD$R7@-5lRo;^EJ!nxbh~P6a(L;`)5M9V>L}385_sRS zudq+z)5a4KBNnAuBM(GOg$I}|6ju$;L8w-Zbqpz~`q5a^UoZ|X*t}BAZ=OZ;(dU?rCb!_9kb$|A5g*lx= yi~F5!xUnfs`I14B4!hGkq_~7SzAZYO@~EmG7+3LP?C!#fdY7*730?O%TKz9K{6yUV literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s b/wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s new file mode 100644 index 0000000000000000000000000000000000000000..5c06ef47a465a0b1f6802d80907cf89f7a8c472a GIT binary patch literal 1695 zcmZQzV6w=~&rf4uU=YYn%SZvzAi&DNz@$)8ln53t0f{q##TkL5NJ&~s35Wp&3m6y} zzmyb}<}om^gM>AJdL4i?i2WR*4a}BcglGbhl1OY3B(@?FTO5gvtXBp}To?yi3P~K7 zIml{|%||v9Ssa;-tOgfb8p#dFYKSohIed`y;$kD4DTZV(G8;J@kj+6BM-G2vy~yT6 z*(~X~DTyUqT)^05Qh$_Nb3no92BQGOY#^7rfoWT(uGSs>wEWQUN1Ue1Dhy@k^6mfC zH7#0jFEeB8{qM2MSyO6 z49yA*4^;l`x@=%1ZotCGf-HVtJ87R~On{M)0UHxX155)$14E~Rk-Py13$Fk~tQ%xb z`4ZjY>{?lg*rScdJrB$?5;frB5M1DZu;reK@3MZNV<2b-t3W#JpyihgOP4@QCp0u1v5rJ#C%_O}6rgc#W$CL@HJj3f+1m^ePJK?q%5 z#U*NeWnlu)DPkc|POPYOI}^^AQfc20jl*NyNuAS7dJ3Lwf^p(c@2PGs=|Up|&O006TcZ;t=~ literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/init.mp4 b/wai/pack-conformance/packs/video-floor-only-02/package/floor/lo/init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..d419e7893b423b9190462bd07734f8d65d2f1cfc GIT binary patch literal 628 zcmaJ72wlj--P?G~v~>ZbEg8c>oz#gjkv{w=`HjkN|b0NVI}qD>5;-$JpC X@ML@i0XNF!FA&0NA34waI@sGks3|>p literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/hls/all/master.m3u8 b/wai/pack-conformance/packs/video-floor-only-02/package/hls/all/master.m3u8 new file mode 100644 index 000000000..5fb4ccb7c --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-02/package/hls/all/master.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=9055,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9016,AVERAGE-BANDWIDTH=8723,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/hls/classic/floor-hi.m3u8 b/wai/pack-conformance/packs/video-floor-only-02/package/hls/classic/floor-hi.m3u8 new file mode 100644 index 000000000..d6ac7336d --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-02/package/hls/classic/floor-hi.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:3 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-MAP:URI="../../floor/hi/init.mp4" +#EXTINF:2.400, +../../floor/hi/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +#EXTINF:1.000, +../../floor/hi/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +#EXTINF:2.000, +../../floor/hi/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +#EXTINF:1.000, +../../floor/hi/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +#EXTINF:1.600, +../../floor/hi/576b7d2156c2b595bf48bf34f67996d7f89e75d105f0dc71c9841bb96e6cd0fc.m4s +#EXT-X-ENDLIST diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/hls/classic/floor-lo.m3u8 b/wai/pack-conformance/packs/video-floor-only-02/package/hls/classic/floor-lo.m3u8 new file mode 100644 index 000000000..628e70c2b --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-02/package/hls/classic/floor-lo.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:3 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-MAP:URI="../../floor/lo/init.mp4" +#EXTINF:2.400, +../../floor/lo/d0f68eb18af5b67736ddccd97ed45c4c0274b0460f6abc8f54940ac378165833.m4s +#EXTINF:1.000, +../../floor/lo/6bba50408f894d0e9d5516a53992fdd2aa86db43ccdc684b69c51a688856a0db.m4s +#EXTINF:2.000, +../../floor/lo/acd166807d05fe4f512407f717659d88613f6d0d360485effe3751504cefbb74.m4s +#EXTINF:1.000, +../../floor/lo/589ad79210bff258db68916876846a2b0d530ea2e44260af66ddc51ad14ce07f.m4s +#EXTINF:1.600, +../../floor/lo/d550ebb204adf0b5a7f310c7d07189e7bed63e12e34e9ed4d9bf96a101d864a9.m4s +#EXT-X-ENDLIST diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/hls/classic/master.m3u8 b/wai/pack-conformance/packs/video-floor-only-02/package/hls/classic/master.m3u8 new file mode 100644 index 000000000..5fb4ccb7c --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-02/package/hls/classic/master.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=10440,AVERAGE-BANDWIDTH=9055,CODECS="av01.0.00M.08",RESOLUTION=64x36 +../classic/floor-hi.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=9016,AVERAGE-BANDWIDTH=8723,CODECS="av01.0.00M.08",RESOLUTION=32x18 +../classic/floor-lo.m3u8 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/index-v.wsix b/wai/pack-conformance/packs/video-floor-only-02/package/index-v.wsix new file mode 100644 index 0000000000000000000000000000000000000000..3338fc15ba3171fd49ba3a368aa1cc0e872d0be2 GIT binary patch literal 1648 zcmWF!_KaX;U|^60Vi3&=#9Tnk4CSjHKW)dty*A`xK;08 zSIF83R7MhrNdKeth&w&SP{4f4T@kTd(FcM%O&ag3{N1!rY+vfE7q|?wfl4qju%Re{ ziG$qF1jeZHp-|OEK$-=Md^=Pgq#vXc-TVbmc?}@Vfkpm&Dr*i$annEVN8e6|U31GU zF4q`?b)_OVtSOR1b(d_SWQPh4U|~ zxK*|Htd?y#eCF?I<>vw)V>On85)u%A(iR9%YX4_YBqM?K%O9-s_bGL4@-S1Gkg_WM zs==L*b=qsgbPp@X*X{o^%MujnKtL_~TcQ4en99H)vtYi}N|U_*@AenISPJ VhnJx|F;lNBGbJ@&FR{#!0RT_OSBC%q literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/moq/catalog.json b/wai/pack-conformance/packs/video-floor-only-02/package/moq/catalog.json new file mode 100644 index 000000000..90091605e --- /dev/null +++ b/wai/pack-conformance/packs/video-floor-only-02/package/moq/catalog.json @@ -0,0 +1 @@ +{"tracks":[{"altGroup":1,"codec":"av01.0.00M.08","height":36,"name":"hi/floor","namespace":"video-floor-only-02","packaging":"cmaf","renderGroup":1,"width":64},{"altGroup":1,"codec":"av01.0.00M.08","height":18,"name":"lo/floor","namespace":"video-floor-only-02","packaging":"cmaf","renderGroup":1,"width":32}],"version":1} diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/objects/1ca09f3aa9346effeebfc1bd101de2c311a3cd586379d1dea5c235d1b47fde60.wai b/wai/pack-conformance/packs/video-floor-only-02/package/objects/1ca09f3aa9346effeebfc1bd101de2c311a3cd586379d1dea5c235d1b47fde60.wai new file mode 100644 index 0000000000000000000000000000000000000000..a00277606fdbd954a40c14da7ef28e8cca8569d4 GIT binary patch literal 2204 zcmZ9MdpuNW7{|{{g9&NI2h9v>=8$A2dt62uHq(+tVzjv|DZ?Dhr!kWuiZIJk4Yk;k zlBjJZAL*hbmFT8qTiw)FTGncHA!<=cyJyUP-s9{a?`P&czvuTn-{*awb3&K-I#fdt zln$qgrLX{Yut#7XoPbKCVr-Wpm7of2FO?^w@?`9R65Sw^#)y+qO^`x@%GN2-#EnuV znlPoO!!hCw;%KQ%n!Fi{#!}i(rLY&LIKUY^I7T6tNRy=sxl|qp3)12BQn>_+`%g_4 zE8|eCN;({?6eplbuz-*7;CNWzap<<Cn9BLt)kN}-z-*u)f!oOJTsQQUsJ*3+*qqM)4Tz^w4?_&Ag=F7U|- za~tX!8``k_5;yH+?KOj9`Q-(htpq-*ug5z~BQy7$`MLMmpINT;Ip@D5Rnhs^Mtm*| z*F#)>R8}Bo^Wr1Ub$ew+OI2Im z=~nX7dlLLiSSRvKa~am-GE4J$4TpCHdenbn>kRi)*R;KjpKoOA^`5qB%dHDV4@cWv zyF^a!YMdG(E-z0gzxaJ!^!`c`r!fl83O>j6@_H)A`i`Q(1zsB`23U*7`VRHvTzoL;$raw~3krxYL0d-k)mA!_ z<*AXowl2>K%7}bqH{3L*_C8zvquY!WlK2dBk;{_6*OMs+!(G(Bzf8Bj8@Mko^Ua44 zF4Oz&WSzr`D)$drdZjzh9eCDGDv6XSMz8Zj6(vfe2~zLu#^&-*XXfnOByG5#`&W=& z8TXTJ@$UNf55=4?t7S%Rxupf$otVWA!xKv$y!3EHb&dwCppR`SPJ7;5U2fF8?U3(B z@{R4v@I1~p1+M3PrKYj-KVLy&m#l1n9y2VDZR+{kVq z=4fULQ`iWFM47HUU6Z(;(>U8|+?w_6P5uxKWY8s3Rns!4Rr9qOI0%(8i#AQ^tnE4o z83@e14o7oU1KgTMQ*9s}(WlZYg*Zf(rB+}fhBPx|8!ogjdgYTem?3NdP9rv}7Xqg-Nv}5s50G)RH7yYnGIgX@E2ywTxhh=2oUE+2sYG># zT!7n*GK)TnyW{6+-R1}bYb6sGy0>wE+Q=;NbbYM?UKZBW4|qttjn)ez7ND7YP33Oi z89cf2R+@O>OcP7h({UA^VlJ_}Ft#>@1;S}1boIpB^9xd|0jc}NkQ&s7$$I@!c>O$J zwx$@4R!<4}npt?pJbTZ=fzepcU)l*`Y^e0z!?^hx>fveoYj54F&qW+_EyNtemS*O> z36JTHZSe1*;P7^A*3}!hECN0rR1wU;g{OP}mM2PZpFNRVr1|P$lWK|}fLo>EeiFT3 z5(T<-Bm#>pv@QnXOr-p+LneuNQHYmwA!0@Wqbm`!M^r%)(GLhgMFEi$0Y-Ns=eg(E zp&>SbCxCG&5jBdTMKwW|6>1K&1-zuRSX*HFif!gD!VfJIOrjTbpraEP>T`TT4gF7F zzAbM8UT?BqHw_PA15zJ~;pDWWt#*)*pW7b{jDA#l`Lx_@Aovq$*eq=eW=H^$=G5S9 z@nIpjc@Yuh_~RXPm&N#1tRmvDL655eN519*RuvhONp-s+@ow7#h(i8H1Zsv6iB2;w zT}+C?Z!w&R#D=w<%th7!n5nn)R5rJov#>1oNPp(=^)OI&Eg(~AW)eSIaTMXcZncht S>>E_zy+%VN9)Hz>y zfl3hq^1%Qu1aiO(I2940Z#hUREJNQBsREWN&<|O#d=nxTDPU8PEEV3Ak_BgOMzY`x zGp+)~BDv@%WD}y;idLhPTr&k%loJ5vaX_(5nu;h8nG}&qK)wpxh)7e>x^JjLlqG>t z6&0A4CCY%aL4FX#0XKmBKpqEFf_z?3Ufv5U0Psis`k*HqJ#Of+K#vUx02}~oYxI$H z)>xSWQRjWIqyd${HUMBX0IWfF;;*jE_V_*I%=1k#;(bFyypkA=_PpKk1f_7SBk$-4 zFx{&RED%*aHW;7PKR9jeKkOK+@P8q6G)AU+>%fYaObhx8G09 z-L~jdv$_npbc+o>nR#sM!ljjece#XS3|s2G(yrTusXe_6r@=J^IWnf!L#AgYjP!o! zSxzbvcx8hh(&Iydez=%k_?gFC60YPe4A;JhL*PKU(=hwCt3*%o4Oiiw$*m|?Q9l1yz^vQ z_)B8SYao~4O2dc2v3ZiW8=@V#NZY;1F zPK)lfeRQaZznuF%vW~(|TW~I^vEUi`-#Ly4p39o6*uk48xs*|6-uJzG{+9Qb*n(@2! z-;dQd)-c)0Rli^SV!uYB%8OMhdg%jhQjPb`Mh_}*B_wLck4(I4J#QiZjtkoSWJw|4Wa>uS2Bo_ z&K0Y3>qcMS3}IjebjZPi@=#0^v>$%5o+8IRI+3Wx(*&C2inTdGbh4fO7y)RbVr%gx zS2S2YfhFKg3^dp;1kgTCcfy-Ire;ZS$CO+kPdtJ7HnbiZBnN81C*j>O#eW6O^y8xw zc7{L_<+1RaS|JN~5L@P3jCSGy8GdxT;PZ{kieigH3Y08KRs1!B?WLi2EYrD}A^ zbSWT}lAojhIuLEF5njl?ejr`L6l|z$rb!J4`5K%rh%j&3T0)37)wXahCd7so;I_@% ztb4Ph`_muFq<6OWx#@4;vTw6{8eVE^Rt)xK;UfI0X@s*eE?+1VPh;ll`16d-y*6H5 ze82Yfu@lqmS6?m4y{5xy!tjV{lUE@=@I@Na1a$xZdgZ}Bm;eh}%%X?JneW&v&|Q46 z`C$O>-k3{Oiu?9!?KpJ=P~F`}%z}jjktE6>Z4$u2nEfF^gze`^%zf%N8`J6>y|47_ zE{=}$i&-MOqinn?(BV#&QEewQgp;<3XQgMAHBFIwHM>?=N36#Mqgl=sSe@DwlI4d9 geh0+>)h&|SWu~O&1NoVGC8>EOK!Kvvf}G6c z#FA8yqWqN9ocN;D!qUv5)LgK9wNi3oL1I#7PG(6ZP&Lp?6pe@x(X+?>-sl`fGMy5JS8A?{hW;#mcN>*kj zwY8s_7#Jjh?o|O|2OtKq8G+aoh=mxqxPTPX`j4~Y4LFQcMHrMF7#JFWLPiocTn4XV z6TGsYZ2$Z1r8Kkp!+UdOXXzMiQ_u!V3o#g}8!Tn2Z%usnFhEF3lm!hl1zJp zD8w{DBUToU3kqP%!FpQZ5^NmY5-tddCb$H<0B=G@GswAM9S8{y2LBbk2pu&V5IaZ5{P{>8dAR9Zj4Tz`5QgNyCAfiJ_=T_* zA;AOmfjvS;23!X(&i~2MuLpYpEdw( z7jR$@VF02l>zP!Z-Zg$^>wmmjXn)6j(YyB_$R*muvBJ#~Vq&Yh0@uO95CNAFX5l#X w14$+TE+fLhEoFmMMpS?|DFv&H7=!<+9;`CrC~jt92oQ((M%YLK&29S}0Llfxm;e9( literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/objects/808567682e2687d0f431e2d2dead4f574212ee1e6addaa99a73ab22258de73fa.wai b/wai/pack-conformance/packs/video-floor-only-02/package/objects/808567682e2687d0f431e2d2dead4f574212ee1e6addaa99a73ab22258de73fa.wai new file mode 100644 index 0000000000000000000000000000000000000000..c05dd73373233ac8cf948929975396d9ba8c56eb GIT binary patch literal 1559 zcmWG{^fX+-z`#(gRGyfrWTj-NXP~5`l$)B8nF!>SWu~O&1NoVGC8>EOK!Kvvf}G6c z#FA8yqWqN9ocN;D!qUv5)LgK9wNi3oL1I#7PG(6ZP&Lp?6pe@x(X+?>-sl`fGCI&i68A?`$7CK7hN>;{3 zwYABt3=A4T_X+{A0uW0AF(VMa1Y#iuE-oO&r2Z(k=756H4MqWm*+4FL1JkxnU9CI% zY5Aeyk2p=2RT#?7<=g+OYg)A6US`JF``=@iv#_{5PP0yJNV(#0c;?hjwjN`q?l2Yu zFT=Nbi?wFUskvAPvu^NMKf8mmxGPlMSYl<{vzgaI-kx#o{Gqsd?&-=`s}cjgH8xeA zz4>`Qk6DsTOXK@Tp=A-eE?e6rf4g+4d`yu8GkaLOuG zlDR<&>{%l*1Lgw_3=C`+fSzn%XjWi&pz?3mWdmu5thfOSBMY+ZeeI-umN5Zh5NRO; zHYSb+m}Z6shE4@#h>W}e2MezNM5Y^La`_V7;_O;kiP)o!$2||s0|mJdgOR8K7l+^i z2ZZhSOnjI1!=1(>AZE~kki4_wKw7Gk97L;>0iS}@fs0^Sunme^7QT_K=$B^tAPP|- zXdu8aKTry)ALzO^xP%ZR`@>{}M3W3ehlGI$6UWCj2#L$9xJ0e5EKGnqSB!;M@GDdv z7+7~CKkcxBJ68hempX*x?eNgDUXi(*rHTg;UI9g4tHOfPe7LL<6Z_Kygr#S1f1knM05?>Hh3D%Eglq&{LXAUk z>IZ~G0bD{uK+L29ArT-82{=guEd{9~C%_Wj4Z!FYo4AXA$AL*}Dhf|yMJG@wBG7?!L?xW$EG-kA%CP@DqS<;KK*R{){w#>1#{+3>vR>B93DVk9`H zc)Y9M%prZ~zNC4BU%_&Gx} MC$j8;FCWVs0PuF4$^ZZW literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/objects/95f784de520ecef9127c1758264b16b69a0fc1e375bea6515cabc4bcf71a29ad.wai b/wai/pack-conformance/packs/video-floor-only-02/package/objects/95f784de520ecef9127c1758264b16b69a0fc1e375bea6515cabc4bcf71a29ad.wai new file mode 100644 index 0000000000000000000000000000000000000000..bb025eae3d696fae715f856387dbf1720b828d8a GIT binary patch literal 2052 zcmY*ZX;4#F7=45YDO-~m0|X@D83F=k9s!~T>sAz0gs^A@Q!pk0UWFuvC}5<0sHLpJ zfD3L=YzNm-2dcH|Xed;$T9*`CP|#pStxKgURqJ%@TjG84<4)$~ob%mtzVF`q$(#id z`ymLjz=diQR=^Qb1P+Juby`%7f2~EeIs^WV>diX68UMqiGv=WhwOL1y3|d`YmPxmI z4QkTmleh)esEz8CXdY@V#@TpDDOp0QUK;_Igu@zxUW=MhgC5oAzzPez3e{_Io&zE_(FJF8);p-W`xR9G0 z{=*2qlfT|7k_|brpzA?6|$J&1)M6>wl;|Ic}YCNAjbA zUsY#93f~sDgtZ!9Ejo~RMKkn4TX=lf(VnRMFQ0VQNU9F9W(+sh3VF7=7uf{~hn@t> z=b7s6_{p3Rvw^d-zWB|Z(^GqyzNxz}-$;rJ)@Nv5zL<&@baY2wO6xTCJrHH>bGQ96 z|B2POnj_XF{XVr(acHAUd(-r=x3cWf>We|PKP&ud1uZ9}n&bly{m#9$CvJK%l3HC* z>oRSYoA}M_T$}bEzH^dlgIDqM$CiFcza$~(1mrb|Of3^4&Q=V9T(072t1t+IJX>#Q za%PUZ>DAhGR9=SpQ#2oh>BMx{z0`9y-0_!zedm#XY3q9_NCs1Mz!iJiY1vG97pa22Fb#fijkU$j?>w@2R z?d$q(mG-lMl*eHGeVCSNfnPq;lQT*Ko!jk|wf|ay&Igb4ISs48mI6FTEe%|l+`ufo zyUXA~OZ~^DSq5em0Af^Oc#|izS@x?MZhB|=D)>9oG0@|{j(4HRPF5Si-Y~;;cm=)p z*(~V6*3&Y{>7Ag>Vy4IFeg}hSGcPP{yoBl&j7V6Vts^8zcFVmdaZkoW;g&D92ep)^ zcmA4y6i7kWi7JtA~P#AeUDeYVs7jpY4#RF6I^uoY~Tw zu8fq!6gvP3hnko8IM}$STcIXno#x{oGkIKH!ucSI6^KYdHqzY0==tgYmvl;Yn zh&i@5IqI;xGDJXe_=pnNBj+~|cyCpzJ&-~tA}M2C^*zSs37eOmObCV2nInEcv3nxi0rQwoJNIZwKmS@0ldj;P7PtXQbM#uzOS5@PZuaSFgZZrvmm! z%C+N7*Ups<<$`;V37l0CBefTG#0XPv2cKlPD_-Q71Ce$n54VR2iFSWu~O&1NoVGC8>EOK!Kvvf}G6c z#FA8yqWqN9ocN;D!qUv5)LgK9wNi3oL1I#7PG(6ZP&Lp?6pe@x(X+?>-sl`fGMy5JS8A?`$7CK7hN>;{3 zwY9Cx3=EP$_X+{A0uY1Pj6iG*#6k>QTtJFR{ZVes0R9O zr1yT_=6Q(+Y>aysx5TF%FoS3@GGbzAf@@)PV7R2zv%8Tq{^EmBfr%k+bc?*C`4~^# zTw1z>g?FpioxP703p5})Rg9P!SsdV&O<=gMwSD2%>j$oGlK+0hD6mI!hHy@U7(}g* z5epMr2ShEv18^C30p5g+W{@|*diokf zA@&FwaWMF==tbz6s|=BlH{xVy{;(0O#q|Kt0nu3*CtF4OXJyA){@iDFMGK-#&4`PU zrQ#Y`KUmq>41?Us?`|-1$2mz=^c>{32sgfCVhcBv8|bTFP(vLjFx(5@qr+~qsWC}V zeX^W-zAD5}MI#=d7wr*-o>AKTfrqbY)23x}Y$m(CQ+@zf$P4tbJHouX_O8;hGnTeC zZDBw9;T79r3Ai`;Py?VFF2RrL|1Nlt2|R%L-vJZ>69nL%5M*Tjv;pBdUiIXfDKoCH z32(act==#|1>y+>BOxZXsw)U(7e9Y%tKHK2Qs%{asqal8Clny+WQ>GaI8Ob5sso0} z9nbDhtDpS!vT5DWAPZ3=X(YnIEoB2$!|1?pq0eL8$FS5B8{lpd72r)uK^Ss-RmIhY q;y;dQ5yvinR#$@iR*b=aRS#I11ISZ-a0zj^pU@;E;JyG$tONihvl;FH literal 0 HcmV?d00001 diff --git a/wai/pack-conformance/packs/video-floor-only-02/package/objects/bac29f2cf9f5bbc85f3095d0eb0b081b8fad0552739024df229481e73d4cd341.wai b/wai/pack-conformance/packs/video-floor-only-02/package/objects/bac29f2cf9f5bbc85f3095d0eb0b081b8fad0552739024df229481e73d4cd341.wai new file mode 100644 index 0000000000000000000000000000000000000000..2bc6503c3b1b5bb339d6339816d26458e8d23b42 GIT binary patch literal 2270 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 Option { - [PieceKind::Natural, PieceKind::Static, PieceKind::Synthetic, PieceKind::MotionHigh].get(c as usize).copied() + match c { + 6 => Some(PieceKind::None), + _ => [PieceKind::Natural, PieceKind::Static, PieceKind::Synthetic, PieceKind::MotionHigh].get(c as usize).copied(), + } } /// The policy's spelling (`rule.when.piece_kind`). @@ -35,6 +41,7 @@ impl PieceKind { PieceKind::Static => "static", PieceKind::Synthetic => "synthetic", PieceKind::MotionHigh => "motion_high", + PieceKind::None => "none", } } } diff --git a/wai/wai-pack/src/floor.rs b/wai/wai-pack/src/floor.rs index bb55c9e1a..9522617a0 100644 --- a/wai/wai-pack/src/floor.rs +++ b/wai/wai-pack/src/floor.rs @@ -140,8 +140,10 @@ impl UnitChecker { } /// §7.3's checks of one supplied stream that need no plan, read a unit at a time -/// ([`UnitChecker`]), and its unit count (`floor-frame-count`). An I/O failure is `io`. -pub fn check_stream(r: R, frames: u64) -> Result { +/// ([`UnitChecker`]), and its unit count (`floor-frame-count`): the source's frames, or, +/// for `None`, the stream decides it (a floor-only component's first floor rung, §7.8). +/// An I/O failure is `io`. +pub fn check_stream(r: R, frames: Option) -> Result { let mut rd = av1::TuReader::new(r); let read = |e: av1::ReadError| match e { av1::ReadError::Malformed(m) => FloorReason { code: "floor-av1-malformed", detail: m.0 }, @@ -151,7 +153,23 @@ pub fn check_stream(r: R, frames: u64) -> Result Result, FloorReason> { + let mut out = Vec::with_capacity(starts.len()); + for (k, &s) in starts.iter().enumerate() { + let e = starts.get(k + 1).copied().unwrap_or(frames); + if e - s > max { + return refuse("floor-piece-length", format!("piece {k}: {} frames, past the policy's max_ms ({max} units)", e - s)); + } + out.push(crate::scenecut::Piece { start: s, len: e - s, flags: 0, stats: crate::scenecut::PieceStats::default() }); + } + Ok(out) } /// One media segment of a supplied CMAF floor (§7.7): its file in the supplied floor, its diff --git a/wai/wai-pack/src/golden.rs b/wai/wai-pack/src/golden.rs index 9f3436100..53c09701a 100644 --- a/wai/wai-pack/src/golden.rs +++ b/wai/wai-pack/src/golden.rs @@ -31,7 +31,7 @@ use wai::stage_index::{self as wsix, ClassRec, EntryRec, Header, MediaClass, Pie use wai::wai_video_manifest::EnergyProvenance; /// The golden packs. -pub const PACKS: &[&str] = &["video-base-01", "video-staged-01", "video-ladder-01", "video-repack-01", "video-cmaf-01"]; +pub const PACKS: &[&str] = &["video-base-01", "video-staged-01", "video-ladder-01", "video-repack-01", "video-cmaf-01", "video-floor-only-01", "video-floor-only-02"]; type Files = BTreeMap>; @@ -62,7 +62,8 @@ pub fn golden_inputs(dir: &Path, name: &str) -> std::io::Result<(Vec, Files, let key = read_key(&d.join("key.hex"))?; let p = crate::policy::Policy::parse_bytes(&policy).map_err(io)?; let mut sources = BTreeMap::new(); - for c in &p.components { + // A floor-only component has no source (§7.8). + for c in p.components.iter().filter(|c| !c.floor_only()) { let src = c.source.as_deref().and_then(|s| s.strip_suffix(".y4m")).ok_or_else(|| io(format!("component {} names no fixture", c.id)))?; sources.insert(c.id.clone(), crate::fixture::generate(src).ok_or_else(|| io(format!("no fixture {src}")))?); } @@ -227,6 +228,18 @@ fn index_cases() -> Vec { ("floor-before-refinement", "entry-order", |ix| ix.entries.swap(2, 3)), ("deadline-on-base", "deadline-role", |ix| ix.entries[0].deadline_ms = 5), ("floor-without-derived-from", "floor-derived-from", |ix| ix.entries[3].flags = 0), + // A piece of floors alone (a floor-only component's, §7.8): its floor presents no + // base, so it carries no derived_from, and one that does is refused. + ("floor-only-piece", "ok", |ix| { + ix.entries.remove(4); + ix.pieces[1].n_entries = 1; + ix.entries[4].flags = 0; + }), + ("floor-only-piece-with-derived-from", "floor-derived-from", |ix| { + ix.entries.remove(4); + ix.pieces[1].n_entries = 1; + }), + ("piece-kind-none", "ok", |ix| ix.pieces[0].kind = wsix::PIECE_KIND_NONE), ("entry-flag-unknown", "entry-flags", |ix| ix.entries[0].flags |= 0x80), ("piece-gap", "piece-order", |ix| ix.pieces[1].start = 51), ("piece-empty", "piece-order", |ix| ix.pieces[0].duration = 0), diff --git a/wai/wai-pack/src/pack.rs b/wai/wai-pack/src/pack.rs index d1486d8d8..e79024087 100644 --- a/wai/wai-pack/src/pack.rs +++ b/wai/wai-pack/src/pack.rs @@ -831,47 +831,51 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt return Err(PackError::new("pack-floor-encode-unsupported", "this revision packs a supplied floor")); } let tb = comp.timebase; - let src = sources.get(&comp.id).ok_or_else(|| PackError::new("pack-source-missing", format!("no source for component {}", comp.id)))?; - - // The first read of the source: its pieces (§4.3), a frame at a time. + // A floor-only component (§7.8) has no source: its pieces are its first floor rung's. + let floor_only = comp.floor_only(); let source_err = |e: crate::source::SourceError| PackError::new(e.code(), e.to_string()); - let mut rd = crate::source::y4m::Y4mReader::new(src.open().map_err(|e| io_err("the source", e))?).map_err(source_err)?; - let hd = rd.header; - let (w, h) = (hd.w, hd.h); - let mut seg = Segmenter::new(SegParams::from_policy(&policy.segmentation, tb), w, h); + let src = if floor_only { None } else { Some(sources.get(&comp.id).ok_or_else(|| PackError::new("pack-source-missing", format!("no source for component {}", comp.id)))?) }; + let (mut w, mut h) = (0u32, 0u32); let mut pieces = Vec::new(); let mut n_frames = 0u64; let mut digests: Vec<[u8; 32]> = Vec::new(); - let mut held: Vec> = Vec::new(); - while let Some(f) = rd.next_frame() { - let f = f.map_err(source_err)?; - n_frames += 1; - let closed = seg.push(&f.rgb); - held.push(f.rgb); - for p in closed { - // The frames of a closed piece leave the hold once their digest is taken. + if let Some(src) = src { + // The first read of the source: its pieces (§4.3), a frame at a time. + let mut rd = crate::source::y4m::Y4mReader::new(src.open().map_err(|e| io_err("the source", e))?).map_err(source_err)?; + let hd = rd.header; + (w, h) = (hd.w, hd.h); + let mut seg = Segmenter::new(SegParams::from_policy(&policy.segmentation, tb), w, h); + let mut held: Vec> = Vec::new(); + while let Some(f) = rd.next_frame() { + let f = f.map_err(source_err)?; + n_frames += 1; + let closed = seg.push(&f.rgb); + held.push(f.rgb); + for p in closed { + // The frames of a closed piece leave the hold once their digest is taken. + let first = n_frames - held.len() as u64; + let take = (p.start + p.len - first) as usize; + digests.push(frames_digest(&held[..take])); + held.drain(..take); + pieces.push(p); + } + } + for p in seg.finish() { let first = n_frames - held.len() as u64; let take = (p.start + p.len - first) as usize; digests.push(frames_digest(&held[..take])); held.drain(..take); pieces.push(p); } + drop(held); + if hd.rate.is_some_and(|(n, d)| (n, d) != (tb.num, tb.den)) { + return Err(PackError::new("pack-source-rate", "the source's frame rate is not the component's timebase")); + } + if n_frames == 0 { + return Err(PackError::new("y4m-truncated", "a source of no frames")); + } } - for p in seg.finish() { - let first = n_frames - held.len() as u64; - let take = (p.start + p.len - first) as usize; - digests.push(frames_digest(&held[..take])); - held.drain(..take); - pieces.push(p); - } - drop(held); - if hd.rate.is_some_and(|(n, d)| (n, d) != (tb.num, tb.den)) { - return Err(PackError::new("pack-source-rate", "the source's frame rate is not the component's timebase")); - } - if n_frames == 0 { - return Err(PackError::new("y4m-truncated", "a source of no frames")); - } - let starts: Vec = pieces.iter().map(|p| p.start).collect(); + let mut starts: Vec = pieces.iter().map(|p| p.start).collect(); // The supplied floor, checked before anything is written (§7.3): the listing once, // then each floor rung's stream in ladder order. @@ -886,26 +890,45 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt // A supplied CMAF floor's listing travels in the package (§7.7): it names each of the // ladder's files by its SHA-256, and the policy, which the receipt signs, pins it. let floor_listing = if policy.floor.cmaf() { Some(wai::pin::listing_from_sha256(&shas).map_err(|e| PackError::new("floor-listing-mismatch", e.to_string()))?) } else { None }; - for (rung, name) in &floors { - if policy.floor.cmaf() { - let c = floor::check_cmaf(&opts.floor, &shas, name, tb.num, tb.den, Some(n_frames)).map_err(floor_reason)?; + for (i, (rung, name)) in floors.iter().enumerate() { + // A floor-only component's first floor rung decides its frames and its pieces + // (§7.8): a piece per media segment, or one at each shown key frame. + let plans = floor_only && i == 0; + let frames = (!plans).then_some(n_frames); + let (check, form) = if policy.floor.cmaf() { + let c = floor::check_cmaf(&opts.floor, &shas, name, tb.num, tb.den, frames).map_err(floor_reason)?; + if plans { + n_frames = c.units.key.len() as u64; + starts = c.segments.iter().map(|s| s.start).collect(); + } floor::check_cmaf_pieces(&c.segments, &starts, n_frames).map_err(floor_reason)?; - floor::check_keyframes(&c.units.key, &starts, policy.floor.extra_keyframes).map_err(floor_reason)?; - fins.push(FloorIn { rung, name: name.clone(), check: c.units.clone(), form: FloorForm::Cmaf(c) }); + (c.units.clone(), FloorForm::Cmaf(c)) } else { let file = format!("{name}.obu"); let sha256 = shas.get(&file).cloned().ok_or_else(|| PackError::new("floor-stream-missing", format!("no {file} in the supplied floor")))?; let r = opts.floor.open(&file).map_err(|e| io_err(&file, e))?; - let check = floor::check_stream(r, n_frames).map_err(floor_reason)?; - floor::check_keyframes(&check.key, &starts, policy.floor.extra_keyframes).map_err(floor_reason)?; - fins.push(FloorIn { rung, name: name.clone(), check, form: FloorForm::Obu { file, sha256 } }); + let check = floor::check_stream(r, frames).map_err(floor_reason)?; + if plans { + n_frames = check.key.len() as u64; + starts = check.key.iter().enumerate().filter(|(_, k)| **k).map(|(f, _)| f as u64).collect(); + if starts.first() != Some(&0) { + return Err(PackError::new("floor-keyframe-mismatch", format!("{file}: its first unit is not a shown key frame"))); + } + } + (check, FloorForm::Obu { file, sha256 }) + }; + floor::check_keyframes(&check.key, &starts, policy.floor.extra_keyframes).map_err(floor_reason)?; + if plans { + pieces = floor::floor_pieces(&starts, n_frames, tb.units_from_ms(policy.segmentation.max_ms)).map_err(floor_reason)?; } + fins.push(FloorIn { rung, name: name.clone(), check, form }); } // A re-pack's parent, verified and matched piece by piece (§11.5), before anything is // written. let parent = match &opts.base_from { None => None, + Some(_) if floor_only => return Err(PackError::new("repack-parent-mismatch", "a floor-only component has no base to take (§7.8)")), Some(set) => { let pp = load_parent(set, comp)?; match_parent(&pp, &policy, comp, &pieces)?; @@ -917,7 +940,10 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt } let coder = Coder::new(&policy, comp, w, h)?; // The second read: each piece coded, and each floor rung's units for it. - let mut rd = crate::source::y4m::Y4mReader::new(src.open().map_err(|e| io_err("the source", e))?).map_err(source_err)?; + let mut rd = match src { + Some(src) => Some(crate::source::y4m::Y4mReader::new(src.open().map_err(|e| io_err("the source", e))?).map_err(source_err)?), + None => None, + }; if let Some(l) = &floor_listing { sink.put(crate::verify::FLOOR_LISTING, l).map_err(|e| io_err(crate::verify::FLOOR_LISTING, e))?; } @@ -955,13 +981,22 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt for batch in (0..pieces.len()).collect::>().chunks(jobs) { let mut srcs: Vec>> = Vec::with_capacity(batch.len()); for &p in batch { - let fr = read_frames(&mut rd, pieces[p].len)?; + let Some(rd) = rd.as_mut() else { + srcs.push(Vec::new()); + continue; + }; + let fr = read_frames(rd, pieces[p].len)?; if frames_digest(&fr) != digests[p] { return Err(PackError::new("pack-source-changed", format!("piece {p}'s frames differ on the source's second read"))); } srcs.push(fr); } let one = |p: usize, fr: &[Vec]| match &parent { + // A floor-only piece: its floors alone, of kind none (§7.8). + _ if floor_only => { + let piece = &pieces[p]; + Ok(CodedPiece { piece: piece.clone(), kind: PieceKind::None, plan: plan_piece(&policy, tb, piece.start, piece.len, PieceKind::None), stages: Vec::new() }) + } None => coder.code(&pieces[p], fr), Some(pp) => reuse_piece(pp, &pp.pieces[p], &pieces[p], &policy, comp, fr), }; @@ -980,9 +1015,9 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt for (&p, r) in batch.iter().zip(results) { let piece = &pieces[p]; let mut cp = r?; - // The floors, each presenting the piece's base (§7.2). - let (base_hash, base_cap) = (cp.stages[0].hash, cp.stages[0].capability.clone()); - let df = objects::supplied_derived_from(&base_hash, &base_cap, &listing); + // The floors, each presenting the piece's base (§7.2); a floor-only piece's + // present none (§7.8). + let df = cp.stages.first().map(|b| objects::supplied_derived_from(&b.hash, &b.capability, &listing)); for (fi, f) in fins.iter().enumerate() { let (fw, fh) = (f.check.seq.max_frame_width, f.check.seq.max_frame_height); let changed = |what: &str| PackError::new("floor-listing-mismatch", format!("{what} changed while it was read")); @@ -1025,7 +1060,10 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt _ => unreachable!("a floor's read is of its form"), }; let payload = floor::av1_payload(&units, fh, fw, tb.num, tb.den); - let env = objects::floor_envelope(comp.media.label(), &f.rung.capability, payload, piece.len, fh, fw, &df); + let env = match &df { + Some(df) => objects::floor_envelope(comp.media.label(), &f.rung.capability, payload, piece.len, fh, fw, df), + None => objects::base_envelope(comp.media.label(), &f.rung.capability, payload, piece.len, fh, fw), + }; cp.stages.push(Stage { hash: objects::object_hash(&env), capability: f.rung.capability.clone(), @@ -1035,7 +1073,7 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt prefix_digest: [0u8; 32], sse: wsix::SSE_UNKNOWN, deadline_ms: 0, - flags: wsix::ENTRY_DERIVED_FROM, + flags: if df.is_some() { wsix::ENTRY_DERIVED_FROM } else { 0 }, lens: Lens::of(&env)?, envelope: env, }); @@ -1063,7 +1101,7 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt } } } - if rd.next_frame().is_some() { + if rd.as_mut().is_some_and(|rd| rd.next_frame().is_some()) { return Err(PackError::new("pack-source-changed", "the source holds more frames on its second read")); } let Window { index, .. } = window_index(&policy, comp, &coded, 0, 0, [0u8; 32])?; diff --git a/wai/wai-pack/src/policy.rs b/wai/wai-pack/src/policy.rs index 5e100e0be..fafc7e387 100644 --- a/wai/wai-pack/src/policy.rs +++ b/wai/wai-pack/src/policy.rs @@ -123,6 +123,8 @@ pub enum PolicyReason { RefinesBranch, /// A component has no base rung. NoBase, + /// A floor-only component with a base or a refinement rung, a source, or no floor rung. + FloorOnly, /// A class's or a rule's `max_layer` that no rung reaches. ClassLayer, /// A rule's `then.ladder` names an unknown rung, rungs of two components, or no base. @@ -166,6 +168,7 @@ impl PolicyReason { RefinesBase => "policy-refines-base", RefinesBranch => "policy-refines-branch", NoBase => "policy-no-base", + FloorOnly => "policy-floor-only", ClassLayer => "policy-class-layer", RuleLadder => "policy-rule-ladder", LayerLag => "policy-layer-lag", @@ -270,6 +273,19 @@ pub struct Component { pub media: Media, pub source: Option, pub timebase: Timebase, + /// `"floor-only"`: a component of floor rungs alone, with no base and no source + /// (§7.8); absent, the standard profile. + pub profile: Option, +} + +/// The one value of `component.profile` (§7.8). +pub const PROFILE_FLOOR_ONLY: &str = "floor-only"; + +impl Component { + /// Whether the component is floor-only (§7.8). + pub fn floor_only(&self) -> bool { + self.profile.as_deref() == Some(PROFILE_FLOOR_ONLY) + } } /// `[segmentation]`. @@ -708,7 +724,7 @@ fn read(doc: &toml::Table) -> R<(Policy, Option>)> { } let mut components = Vec::new(); for c in top.tables("component")? { - c.keys(&["id", "media", "source", "timebase"])?; + c.keys(&["id", "media", "source", "timebase", "profile"])?; let id = c.id("id")?; let media = Media::from_label(&c.string_req("media")?).ok_or_else(|| c.err(PolicyReason::Value, "media"))?; let source = c.string("source")?; @@ -716,7 +732,11 @@ fn read(doc: &toml::Table) -> R<(Policy, Option>)> { tb.keys(&["num", "den"])?; let num = tb.uint_in("num", 1, u32::MAX as u64, None)? as u32; let den = tb.uint_in("den", 1, u32::MAX as u64, None)? as u32; - components.push(Component { id, media, source, timebase: Timebase { num, den } }); + let profile = c.string("profile")?; + if profile.as_deref().is_some_and(|p| p != PROFILE_FLOOR_ONLY) { + return Err(c.err(PolicyReason::Value, "profile")); + } + components.push(Component { id, media, source, timebase: Timebase { num, den }, profile }); } let s = top.table("segmentation")?; @@ -1001,8 +1021,16 @@ impl Policy { if let Some(t) = first_duplicate(self.ladder.iter().filter_map(|r| r.refines.as_deref())) { return e(P::RefinesBranch, &format!("ladder.{t}")); } - if let Some(c) = self.components.iter().find(|c| !self.ladder.iter().any(|r| r.component == c.id && r.role == Role::Base)) { - return e(P::NoBase, &format!("component.{}", c.id)); + for c in &self.components { + let has = |role: Role| self.ladder.iter().any(|r| r.component == c.id && r.role == role); + if c.floor_only() { + // §7.8: floor rungs alone, and no source. + if has(Role::Base) || has(Role::Refinement) || c.source.is_some() || !has(Role::Floor) { + return e(P::FloorOnly, &format!("component.{}", c.id)); + } + } else if !has(Role::Base) { + return e(P::NoBase, &format!("component.{}", c.id)); + } } let top = self.layer_count() - 1; if let Some(c) = self.classes.iter().find(|c| c.max_layer > top) { @@ -1018,11 +1046,13 @@ impl Policy { // over a rung it names, so the layers it codes are a chain from that base; // and every floor rung of the component (§7.1: every piece has a floor). let named = |id: &str| ids.iter().any(|i| i == id); + let floor_only = |comp: &str| self.components.iter().any(|c| c.id == comp && c.floor_only()); + // A floor-only component's ladder is its floor rungs, every one (§7.8). let ok = rungs.is_some_and(|rs| { !rs.is_empty() && rs.iter().all(|x| x.component == rs[0].component) && first_duplicate(ids.iter().map(String::as_str)).is_none() - && rs.iter().filter(|x| x.role == Role::Base).count() == 1 + && rs.iter().filter(|x| x.role == Role::Base).count() == usize::from(!floor_only(&rs[0].component)) && rs.iter().all(|x| x.refines.as_deref().is_none_or(named)) && self.ladder.iter().filter(|x| x.component == rs[0].component && x.role == Role::Floor).all(|f| named(&f.id)) }); @@ -1051,8 +1081,9 @@ impl Policy { /// The effective policy as JSON ([packaging] §3.2): every member the schema /// defines, defaults written in; an optional member with no default (`source`, - /// `supplied_listing`, `supplied_form`, `max_kbps`, `refines`, and a rule's `when` and - /// `then` keys) is omitted when absent. Arrays of tables keep their file order. + /// `profile`, `supplied_listing`, `supplied_form`, `max_kbps`, `refines`, and a rule's + /// `when` and `then` keys) is omitted when absent. Arrays of tables keep their file + /// order. /// /// [packaging]: ../../../extensions/packaging.md pub fn to_value(&self) -> Value { @@ -1075,6 +1106,9 @@ impl Policy { tb.insert("num".into(), c.timebase.num.into()); tb.insert("den".into(), c.timebase.den.into()); m.insert("timebase".into(), tb.into()); + if let Some(p) = &c.profile { + m.insert("profile".into(), p.clone().into()); + } Value::Object(m) }) .collect::>(); diff --git a/wai/wai-pack/src/verify.rs b/wai/wai-pack/src/verify.rs index 4881ed6fc..97418c624 100644 --- a/wai/wai-pack/src/verify.rs +++ b/wai/wai-pack/src/verify.rs @@ -339,17 +339,25 @@ pub fn index_against_policy(policy: &Policy, comp: &Component, ix: &StageIndex) return bad(format!("piece {p}: {} units, past the policy's max_ms ({max} units, §4.4)", ix.pieces[p].duration)); } for (p, piece) in ix.pieces.iter().enumerate() { - let Some(kind) = PieceKind::from_code(piece.kind) else { return bad(format!("piece {p}: a kind a video piece does not have")) }; + // A floor-only component's pieces are of kind none, which no other piece is (§7.8). + let Some(kind) = PieceKind::from_code(piece.kind).filter(|k| (*k == PieceKind::None) == comp.floor_only()) else { + return bad(format!("piece {p}: a kind a piece of this component does not have")); + }; let pp = plan_piece(policy, tb, piece.start, piece.duration as u64, kind); if (pp.rules, pp.moments) != (piece.rules, piece.moments) { return bad(format!("piece {p}: its rules and moments are not §8.1's")); } - let Some(ladder) = crate::plan::piece_ladder(policy, &comp.id, &pp) else { return bad("no base rung".into()) }; - let mut want: Vec<(Role, &str, u8)> = vec![(Role::Base, ladder.base.capability.as_str(), 0)]; - for (k, r) in ladder.refinements.iter().enumerate() { - want.push((Role::Refinement, r.capability.as_str(), (k + 1).min(255) as u8)); + let mut want: Vec<(Role, &str, u8)> = Vec::new(); + if comp.floor_only() { + want.extend(crate::pack::floor_rungs(policy, &comp.id).into_iter().map(|(r, _)| (Role::Floor, r.capability.as_str(), 0))); + } else { + let Some(ladder) = crate::plan::piece_ladder(policy, &comp.id, &pp) else { return bad("no base rung".into()) }; + want.push((Role::Base, ladder.base.capability.as_str(), 0)); + for (k, r) in ladder.refinements.iter().enumerate() { + want.push((Role::Refinement, r.capability.as_str(), (k + 1).min(255) as u8)); + } + want.extend(ladder.floors.iter().map(|r| (Role::Floor, r.capability.as_str(), 0))); } - want.extend(ladder.floors.iter().map(|r| (Role::Floor, r.capability.as_str(), 0))); let got: Vec<(Role, &str, u8)> = ix.piece_entries(p).iter().map(|e| (e.role, ix.capability(e), e.layer)).collect(); if got != want { return bad(format!("piece {p}: its entries are not the rungs of its ladder (§5.7)")); @@ -666,15 +674,22 @@ fn one_floor(files: &BTreeMap>, policy: &Policy, comp: &Componen if ix.capability(fe) != rung.capability { return Err(object(format!("piece {p}: floor {name} is not its floor rung's capability"))); } - let base = es.iter().find(|e| e.role == Role::Base).ok_or_else(|| reason("floor-motif-mismatch", format!("piece {p} has no base")))?; let bytes = objects.get(&fe.content_hash).ok_or_else(|| object(format!("piece {p}: the floor object is not held")))?; let w = wai::container::Wai::from_bytes(bytes).map_err(|e| object(e.to_string()))?; - let df = w.manifest.derived_from.as_ref().and_then(|v| wai::container::DerivedFrom::from_value(v).ok()).ok_or_else(|| reason("floor-motif-mismatch", format!("piece {p}")))?; - if df.motif != crate::hex(&base.content_hash) || df.motif_capability != ix.capability(base) { - return Err(reason("floor-motif-mismatch", format!("piece {p}: the floor does not present its piece's base"))); - } - if df.renderer != df_want.renderer || df.settings != df_want.settings { - return Err(object(format!("piece {p}: a supplied floor's renderer and settings are §7.2's"))); + if comp.floor_only() { + // §7.8: a floor that presents no base carries no derived_from. + if w.manifest.derived_from.as_ref().is_some_and(|v| !v.is_null()) { + return Err(object(format!("piece {p}: a floor-only floor names a motif"))); + } + } else { + let base = es.iter().find(|e| e.role == Role::Base).ok_or_else(|| reason("floor-motif-mismatch", format!("piece {p} has no base")))?; + let df = w.manifest.derived_from.as_ref().and_then(|v| wai::container::DerivedFrom::from_value(v).ok()).ok_or_else(|| reason("floor-motif-mismatch", format!("piece {p}")))?; + if df.motif != crate::hex(&base.content_hash) || df.motif_capability != ix.capability(base) { + return Err(reason("floor-motif-mismatch", format!("piece {p}: the floor does not present its piece's base"))); + } + if df.renderer != df_want.renderer || df.settings != df_want.settings { + return Err(object(format!("piece {p}: a supplied floor's renderer and settings are §7.2's"))); + } } let (units, hdr) = crate::floor::av1_units(&w.payload).ok_or_else(|| object(format!("piece {p}: the floor's payload is not §7.2's framing")))?; if units.len() as u64 != ix.pieces[p].duration as u64 { diff --git a/wai/wai-pack/tests/floor_only.rs b/wai/wai-pack/tests/floor_only.rs new file mode 100644 index 000000000..1606cf9f1 --- /dev/null +++ b/wai/wai-pack/tests/floor_only.rs @@ -0,0 +1,109 @@ +//! The floor-only profile (packaging §7.8): a component of floor rungs alone, with no +//! integer base and no source. The goldens `video-floor-only-01` (the CMAF form) and +//! `video-floor-only-02` (the OBU form) carry the ladder's two floors and nothing else; +//! their pieces are the first floor rung's; and what the profile refuses is refused by +//! name. + +use std::collections::BTreeMap; +use std::path::{Path, PathBuf}; +use wai::stage_index::{Role, StageIndex, PIECE_KIND_NONE}; + +type Files = BTreeMap>; + +fn corpus() -> PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")).join("../pack-conformance") +} + +fn held(p: &Path) -> Files { + wai::pin::read_dir_set(p).unwrap() +} + +fn policy(g: &str) -> String { + String::from_utf8(std::fs::read(corpus().join(format!("packs/{g}/policy.toml"))).unwrap()).unwrap() +} + +/// Pack `policy` over the supplied floor `floor` (its listing pinned), with no source. +fn pack(policy: &str, floor: Files, base_from: Option) -> Result { + let listing = wai_pack::floor::listing_sha256(&floor).unwrap(); + let at = policy.find("supplied_listing = \"").unwrap() + "supplied_listing = \"".len(); + let policy = format!("{}{listing}{}", &policy[..at], &policy[at + 64..]); + let mut o = wai_pack::pack::PackOpts::new(ed25519_dalek::SigningKey::from_bytes(&[0x5a; 32]), "did:key:test", floor); + o.base_from = base_from.map(wai_pack::files::FileSet::Memory); + wai_pack::pack::pack(policy.as_bytes(), &BTreeMap::new(), &mut o) +} + +fn code(r: Result) -> String { + r.map(|_| "ok".to_string()).unwrap_or_else(|e| e.code) +} + +/// Each piece is its two floors, presenting no base (no derived_from), of kind none; the +/// pieces are the first floor's segments or key frames, which are the ladder golden's +/// plan; the floor objects hold the same units as the ladder golden's; no class lists a +/// WAI object, so there is no WAI playlist, and the MoQ catalog is the floors' tracks. +#[test] +fn a_floor_only_package_is_its_floors_alone() { + let ladder = held(&corpus().join("packs/video-ladder-01/package")); + let lix = StageIndex::parse(&ladder["index-v.wsix"]).unwrap(); + for g in ["video-floor-only-01", "video-floor-only-02"] { + let pkg = held(&corpus().join(format!("packs/{g}/package"))); + wai_pack::verify::verify_files(&pkg).unwrap(); + let ix = StageIndex::parse(&pkg["index-v.wsix"]).unwrap(); + assert_eq!(ix.pieces.iter().map(|p| (p.start, p.duration)).collect::>(), lix.pieces.iter().map(|p| (p.start, p.duration)).collect::>(), "{g}: the ladder's plan"); + for (p, piece) in ix.pieces.iter().enumerate() { + assert_eq!((piece.kind, piece.flags), (PIECE_KIND_NONE, 0)); + let es = ix.piece_entries(p); + assert_eq!(es.iter().map(|e| e.role).collect::>(), vec![Role::Floor, Role::Floor], "{g} piece {p}"); + for (k, e) in es.iter().enumerate() { + assert_eq!(e.flags & wai::stage_index::ENTRY_DERIVED_FROM, 0); + let w = wai::container::Wai::from_bytes(&pkg[&wai_pack::objects::object_path(&e.content_hash)]).unwrap(); + assert!(w.manifest.derived_from.is_none()); + let lw = wai::container::Wai::from_bytes(&ladder[&wai_pack::objects::object_path(&lix.piece_entries(p)[1 + k].content_hash)]).unwrap(); + assert_eq!(w.payload, lw.payload, "{g} piece {p}: the ladder golden's units"); + } + } + assert!(!pkg.keys().any(|k| k.ends_with("/wai.m3u8") || k.starts_with("dash/all")), "{g}: no WAI view"); + let moq: serde_json::Value = serde_json::from_slice(&pkg["moq/catalog.json"]).unwrap(); + let names: Vec<&str> = moq["tracks"].as_array().unwrap().iter().map(|t| t["name"].as_str().unwrap()).collect(); + assert_eq!(names, vec!["hi/floor", "lo/floor"]); + } +} + +/// §3.4 and §7.8's refusals. +#[test] +fn what_the_floor_only_profile_refuses() { + let p = policy("video-floor-only-02"); + let fl = held(&corpus().join("packs/video-floor-only-02/floor")); + assert_eq!(code(pack(&p, fl.clone(), None)), "ok"); + let base_rung = "\n[[ladder]]\nid = \"b0\"\ncomponent = \"v\"\ncapability = \"wai.video.int_motion\"\nrole = \"base\"\n\n[floor]"; + assert_eq!(code(pack(&p.replacen("\n[floor]", base_rung, 1), fl.clone(), None)), "policy-floor-only", "a base rung"); + assert_eq!(code(pack(&p.replace("profile = \"floor-only\"", "profile = \"floor-only\"\nsource = \"v.y4m\""), fl.clone(), None)), "policy-floor-only", "a source"); + assert_eq!(code(pack(&p.replace("profile = \"floor-only\"", "profile = \"other\""), fl.clone(), None)), "policy-value"); + assert_eq!(code(pack(&p.replace("profile = \"floor-only\"\n", ""), fl.clone(), None)), "policy-no-base", "the standard profile needs a base"); + // A rule's ladder is every floor rung, and only them. + let rule = |l: &str| format!("{p}\n[[rule]]\nid = \"r\"\nthen = {{ ladder = [{l}] }}\n"); + assert_eq!(code(pack(&rule("\"hi\", \"lo\""), fl.clone(), None)), "ok"); + assert_eq!(code(pack(&rule("\"hi\""), fl.clone(), None)), "policy-rule-ladder"); + // A piece past max_ms: the first floor's first piece is 60 frames, 2.4 s. + assert_eq!(code(pack(&p.replace("max_ms = 4000", "max_ms = 2000\nmin_ms = 1000\ntarget_ms = 2000"), fl.clone(), None)), "floor-piece-length"); + // The first floor rung decides the plan: one that opens on an inter frame has none. The + // stream opens on frame 1, its sequence header put after its delimiter (a first unit + // without one is refused before, floor-av1-malformed). + let tus = wai_pack::av1::temporal_units(&fl["hi.obu"]).unwrap(); + let seq = tus[0].sequence_header().unwrap().bytes.to_vec(); + let hi: Vec> = tus.iter().map(|t| t.bytes()).collect(); + let mut opened = hi[1..].to_vec(); + opened[0] = [&opened[0][..2], &seq[..], &opened[0][2..]].concat(); + let mut off = fl.clone(); + off.insert("hi.obu".into(), opened.concat()); + assert_eq!(code(pack(&p, off, None)), "floor-keyframe-mismatch"); + let mut cut = fl.clone(); + cut.insert("hi.obu".into(), hi[1..].concat()); + assert_eq!(code(pack(&p, cut, None)), "floor-av1-malformed", "a first unit without a sequence header"); + // The other floor rungs are held to it. + let mut short = fl.clone(); + let lo: Vec> = wai_pack::av1::temporal_units(&fl["lo.obu"]).unwrap().iter().map(|t| t.bytes()).collect(); + short.insert("lo.obu".into(), lo[..lo.len() - 1].concat()); + assert_eq!(code(pack(&p, short, None)), "floor-frame-count"); + // Nothing to re-pack: a floor-only component has no base. + assert_eq!(code(pack(&p, fl, Some(held(&corpus().join("packs/video-base-01/package"))))), "repack-parent-mismatch"); +} diff --git a/wai/wai-rs/src/stage_index.rs b/wai/wai-rs/src/stage_index.rs index 11cacae57..7f197f7d0 100644 --- a/wai/wai-rs/src/stage_index.rs +++ b/wai/wai-rs/src/stage_index.rs @@ -238,7 +238,8 @@ pub struct PieceRec { /// Its first entry, window-relative. pub first_entry: u32, pub n_entries: u16, - /// 0 natural, 1 static, 2 synthetic, 3 motion_high, 4 world segment, 5 audio. + /// 0 natural, 1 static, 2 synthetic, 3 motion_high, 4 world segment, 5 audio, 6 none (a + /// piece of a floor-only component, which no source classifies). pub kind: u8, pub flags: u8, /// Bit `i`: rule `i` of the policy matched the piece. @@ -247,6 +248,10 @@ pub struct PieceRec { pub moments: u32, } +/// The piece kind of a piece no source classifies: a floor-only component's (packaging +/// §7.8). +pub const PIECE_KIND_NONE: u8 = 6; + /// An entry record. #[derive(Clone, Debug, PartialEq, Eq)] pub struct EntryRec { @@ -641,8 +646,9 @@ impl StageIndex { /// decode-equivalence over a prefix that does not hold it (`tier-weakest`); a tier /// other than §6.4's (`tier-mismatch`); a non-zero prefix digest without /// decode-equivalence (`digest-without-tier`); a deadline on an entry that is not a - /// refinement (`deadline-role`); a floor without `derived_from` - /// (`floor-derived-from`); a content hash an earlier entry has at another length + /// refinement (`deadline-role`); a floor without `derived_from` in a piece that has a + /// base, or with it in one that has none (`floor-derived-from`); a content hash an + /// earlier entry has at another length /// (`dup-length`); the duplicate flag other than set exactly when an earlier entry /// has the content hash (`dup-flag`); /// 3. class by class: a flag with no meaning (`class-flags`); a plan value other than @@ -675,7 +681,7 @@ impl StageIndex { return r("piece-entries", format!("piece {i}'s entries do not follow the previous piece's")); } next_entry += p.n_entries as u64; - if p.kind > 5 || p.flags & !0x0F != 0 { + if p.kind > PIECE_KIND_NONE || p.flags & !0x0F != 0 { return r("piece-kind", format!("piece {i}: kind {} flags {:#x}", p.kind, p.flags)); } } @@ -687,6 +693,9 @@ impl StageIndex { let piece_no = h.first_piece.checked_add(pi as u64); let from = p.first_entry as usize; let to = from + p.n_entries as usize; + // A floor presents its piece's base (derived_from); a piece with no base, a + // floor-only one's, has floors that present nothing. + let has_base = self.entries[from..to].iter().any(|e| e.role == Role::Base); for k in from..to { let e = &self.entries[k]; if Some(e.piece) != piece_no { @@ -742,8 +751,8 @@ impl StageIndex { if !layered && e.deadline_ms != 0 { return r("deadline-role", format!("entry {k}, not a refinement, states a deadline")); } - if e.role == Role::Floor && e.flags & ENTRY_DERIVED_FROM == 0 { - return r("floor-derived-from", format!("entry {k}, a floor, does not carry derived_from")); + if e.role == Role::Floor && (e.flags & ENTRY_DERIVED_FROM != 0) != has_base { + return r("floor-derived-from", format!("entry {k}, a floor, carries derived_from where its piece {} a base", if has_base { "has" } else { "has no" })); } let dup = match seen.get(&e.content_hash) { Some(&len) if len != e.byte_len => return r("dup-length", format!("entry {k} repeats a content hash at another length")), diff --git a/wai/wai-rs/src/stage_index/tests.rs b/wai/wai-rs/src/stage_index/tests.rs index 9f293a4d7..43af24306 100644 --- a/wai/wai-rs/src/stage_index/tests.rs +++ b/wai/wai-rs/src/stage_index/tests.rs @@ -102,6 +102,22 @@ fn an_index_round_trips_and_checks() { } } +/// A piece of floors alone, a floor-only component's (packaging §7.8): its floors carry +/// no derived_from, which they would only as the presentation of a base, and one that does +/// is refused; such a piece's kind is `none`, which nothing classifies. +#[test] +fn a_piece_of_floors_alone_presents_no_base() { + let (mut ix, _) = fixture(); + ix.entries.remove(4); + ix.pieces[1].n_entries = 1; + assert_eq!(code(&ix), "floor-derived-from", "a floor with derived_from in a piece with no base"); + ix.entries[4].flags = 0; + ix.pieces[1].kind = PIECE_KIND_NONE; + assert_eq!(code(&ix), "ok"); + let back = StageIndex::parse(&ix.to_bytes()).unwrap(); + assert_eq!(back.pieces[1].kind, PIECE_KIND_NONE); +} + #[test] fn the_plan_digest_is_over_the_starts() { let mut want = blake3::Hasher::new(); @@ -158,6 +174,7 @@ fn every_index_mutation_names_its_reason() { ("piece-entries", |ix| ix.pieces[1].first_entry = 3), ("piece-entries", |ix| ix.entries[5].piece = 0), ("piece-kind", |ix| ix.pieces[0].kind = 9), + ("piece-kind", |ix| ix.pieces[0].kind = PIECE_KIND_NONE + 1), ("class-plan", |ix| ix.plan[0][1] = 1), ("class-plan", |ix| ix.plan[0][0] = 3), ("class-plan", |ix| { -- 2.54.0 (Apple Git-157) From effaf611a7bf05900a54ce68051065b33cad608c Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 20:54:16 -0400 Subject: [PATCH 07/50] wai-pack tests: the directory pack of a floor-only golden has no source Co-Authored-By: Claude Opus 5.5 --- wai/wai-pack/tests/packs.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/wai/wai-pack/tests/packs.rs b/wai/wai-pack/tests/packs.rs index d1b9a110e..c55df348b 100644 --- a/wai/wai-pack/tests/packs.rs +++ b/wai/wai-pack/tests/packs.rs @@ -313,11 +313,14 @@ fn every_golden_packs_alike_into_a_directory_on_several_threads() { let (policy, sources, mut o) = golden::golden_inputs(&corpus(), name).unwrap(); o.jobs = 3; o.floor = wai_pack::files::FileSet::Dir(corpus().join("packs").join(name).join("floor")); - let src = base.join(format!("{name}.y4m")); std::fs::create_dir_all(&base).unwrap(); - std::fs::write(&src, &sources["v"]).unwrap(); + // A floor-only golden has no source (§7.8). let mut inputs = BTreeMap::new(); - inputs.insert("v".to_string(), wai_pack::files::Input::Path(src)); + if let Some(v) = sources.get("v") { + let src = base.join(format!("{name}.y4m")); + std::fs::write(&src, v).unwrap(); + inputs.insert("v".to_string(), wai_pack::files::Input::Path(src)); + } let out = base.join(name); let mut sink = wai_pack::files::DirSink::new(&out).unwrap(); wai_pack::pack::pack_into(&policy, &inputs, &mut o, &mut sink).unwrap(); -- 2.54.0 (Apple Git-157) From be3f641886a87f4687bdc0b24669a0bc936c1995 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 21:02:59 -0400 Subject: [PATCH 08/50] =?UTF-8?q?pack=5Fverify.py=20at=20scale,=20and=20th?= =?UTF-8?q?e=20measurement=20claim=20checked=20(=C2=A79.4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Each object is hashed once (http_verify keeps each object's content hash, which pack_verify seeds once an object holds to its entry), and http_verify.resolve_uri finds an object under its own content id before any search: the lookup that hashed every object for every URI is gone. - --jobs N: every object's hash, and every base's decode and its layers, piece by piece, run in N worker processes ahead of the checks, which read their results in the serial run's order with the serial run's reasons. - --native-blake3 (opt-in): BLAKE3 from the blake3 module, taken only after it agrees with the pure implementation on the published vectors and on inputs at every chunk boundary; the docstring says what it gives up (that module is the implementation wai-rs links). - --package : one package verified as §11.3 does, without its sources or its key. - The measurement claim of a metered package is checked: the claim corpus's verifier (claim_verify.py) reads it, then it is held to the receipt (subject, figure profile, joules, class and evidence, signer). The unconditional measurement-claim-invalid is gone. - package-mutations: a metered package (ok), a claim about another figure (measurement-claim-invalid), none (measurement-claim-missing), each made by the generator with fixed members. - CI: pack_verify.py --jobs 2 over the corpus. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-pack.yml | 6 + wai/CHANGELOG.md | 12 + wai/http-conformance/http_verify.py | 26 +- wai/pack-conformance/pack_verify.py | 238 ++++++++++++++++-- .../package-mutations/expected.json | 15 ++ .../metered-claim-another-figure/LISTING | 36 +++ ...84b5d45994dd713e7576673f2.measurement.json | 1 + .../package.receipt.json | 1 + .../metered-claim-missing/LISTING | 35 +++ .../package.receipt.json | 1 + .../package-mutations/metered/LISTING | 36 +++ ...84b5d45994dd713e7576673f2.measurement.json | 1 + .../metered/package.receipt.json | 1 + wai/wai-pack/src/golden.rs | 64 +++++ 14 files changed, 457 insertions(+), 16 deletions(-) create mode 100644 wai/pack-conformance/package-mutations/metered-claim-another-figure/LISTING create mode 100644 wai/pack-conformance/package-mutations/metered-claim-another-figure/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json create mode 100644 wai/pack-conformance/package-mutations/metered-claim-another-figure/package.receipt.json create mode 100644 wai/pack-conformance/package-mutations/metered-claim-missing/LISTING create mode 100644 wai/pack-conformance/package-mutations/metered-claim-missing/package.receipt.json create mode 100644 wai/pack-conformance/package-mutations/metered/LISTING create mode 100644 wai/pack-conformance/package-mutations/metered/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json create mode 100644 wai/pack-conformance/package-mutations/metered/package.receipt.json diff --git a/.github/workflows/wai-pack.yml b/.github/workflows/wai-pack.yml index 2f8a1d7a4..8dc6e4d71 100644 --- a/.github/workflows/wai-pack.yml +++ b/.github/workflows/wai-pack.yml @@ -168,6 +168,12 @@ jobs: working-directory: wai shell: bash run: python3 pack-conformance/pack_verify.py pack-conformance + # The same checks with the hashes and decodes run ahead in worker processes + # (--jobs): every check and its reason are the serial run's. + - name: pack_verify.py --jobs 2 + working-directory: wai + shell: bash + run: python3 pack-conformance/pack_verify.py --jobs 2 pack-conformance - name: Install Rust 1.98.0 shell: bash run: | diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md index fd8262231..8a9a8c094 100644 --- a/wai/CHANGELOG.md +++ b/wai/CHANGELOG.md @@ -50,6 +50,18 @@ wire format may change and such changes are recorded here. structure and the CMAF files; it states no decoded output, no fidelity to a source and no primary. The stage index now requires a floor's `derived_from` exactly when its piece has a base (`floor-derived-from`). +- **The independent verifier at scale** (`pack_verify.py`). Each object is hashed once, + and `http_verify.resolve_uri` finds an object by its content id rather than by hashing + every object for every URI. `--jobs N` runs every object's hash and every base's decode + and layers in N worker processes, piece by piece, ahead of checks that are unchanged in + order and reason. `--native-blake3` takes BLAKE3 from the `blake3` module after it + agrees with the pure implementation on the published vectors (opt-in: that module is + the implementation wai-rs links). `--package ` verifies one package without its + sources or its key. **The measurement claim is checked** (§9.4): the claim corpus's + verifier reads it, and it is held to the receipt's figure, class, evidence and signer, so + a correctly metered package passes; `package-mutations/` gains a metered package (`ok`), + a claim about another figure (`measurement-claim-invalid`) and none + (`measurement-claim-missing`). - **The DASH renderer** (`wai::http_binding::dash`) writes a representation's own `@codecs`, `@width` and `@height` when given, and an adaptation set's `@codecs` only when every representation shares it. diff --git a/wai/http-conformance/http_verify.py b/wai/http-conformance/http_verify.py index e28253049..a463b92bb 100644 --- a/wai/http-conformance/http_verify.py +++ b/wai/http-conformance/http_verify.py @@ -70,8 +70,26 @@ def blake3(b): return B3.blake3(b) +# Each object's content hash, computed once: an object resolved many times (resolve_uri, +# once per URI that names it) is hashed once. A caller that has checked an object's hash +# against its own record may seed it (seed_content_hash). +_CONTENT_HASH = {} + + def content_hash(env): - return blake3(DOMAIN + env) + h = _CONTENT_HASH.get(env) + if h is None: + h = _CONTENT_HASH[env] = blake3(DOMAIN + env) + return h + + +def seed_content_hash(env, h): + """Record an object's content hash that the caller has computed and checked.""" + _CONTENT_HASH[env] = h + + +def forget_content_hashes(): + _CONTENT_HASH.clear() # ------------------------------------------------------------------ the registry @@ -3035,7 +3053,11 @@ def resolve_uri(objs, uri): name = base.rsplit("/", 1)[-1] if name.endswith(".wai") and re.fullmatch(r"[0-9a-f]{64}", name[:-4]): cid = name[:-4] - b = next((b for b in objs.values() if cid is not None and content_hash(b).hex() == cid), None) + # An object held under its own content id is found by name, its hash checked; any + # other by its content hash, each object hashed once (content_hash). + b = objs.get(f"{cid}.wai") if cid is not None else None + if b is None or content_hash(b).hex() != cid: + b = next((b for b in objs.values() if cid is not None and content_hash(b).hex() == cid), None) if b is None: raise SystemExit("http_verify: %s names no corpus object" % uri) return b diff --git a/wai/pack-conformance/pack_verify.py b/wai/pack-conformance/pack_verify.py index dbbb97576..50103e2aa 100644 --- a/wai/pack-conformance/pack_verify.py +++ b/wai/pack-conformance/pack_verify.py @@ -57,9 +57,27 @@ from their specifications, reads the capability registry from its published expo verified as above without its inputs, and refused with the reason the corpus gives it (the first check that fails), or accepted where the corpus says `ok`. - python3 pack_verify.py + python3 pack_verify.py [--jobs N] [--native-blake3] + python3 pack_verify.py [--jobs N] [--native-blake3] --package Exit status 0 only if every vector verifies. Python 3.11 or later (tomllib). + +At scale (a package of a full title), two options make the same checks faster: + +- `--jobs N` hashes every object and decodes every base and its layers in N worker + processes, each piece alone, before the checks run; the checks, their order and their + reasons are the serial run's, reading the workers' content hashes and prefix digests + where the serial run computes them. Each object is hashed once, and each URI a playlist + names is resolved by content id (http_verify.resolve_uri), not by hashing every object. +- `--native-blake3` takes BLAKE3 from the `blake3` module, which binds the BLAKE3 team's + Rust implementation, the one wai-rs links, so the hashes are no longer computed by code + independent of wai-rs; it is taken only after it agrees with the pure implementation + here on the published BLAKE3 vectors (../http-conformance/blake3_vectors.json) and on + generated inputs of every chunk boundary, and refused otherwise. + +`--package ` verifies one package as §11.3 does, without its sources, as a +publisher's verifier does (the receipt's signature by its own key, §9.1, since no +`key.hex` sits beside it). """ import hashlib import itertools @@ -87,6 +105,52 @@ sys.path.insert(0, os.path.join(HERE, "..", "http-conformance")) import http_verify as HV # noqa: E402 HV.load_registry() +# --jobs: worker processes for the hashes and decodes run ahead of the checks; 1 runs none. +JOBS = 1 +NATIVE = False +_POOL = None + + +def _worker_init(native): + if native: + use_native_blake3() + + +def pool(): + """The worker processes (--jobs), each with this run's BLAKE3.""" + global _POOL + if _POOL is None and JOBS > 1: + import multiprocessing + _POOL = multiprocessing.get_context("spawn").Pool(JOBS, initializer=_worker_init, initargs=(NATIVE,)) + return _POOL + + +def use_native_blake3(): + """--native-blake3: the blake3 module, only where it agrees with the pure BLAKE3 on the + published vectors and on inputs at and around every chunk and block boundary.""" + global blake3 + try: + import blake3 as nb + except ImportError: + raise SystemExit("pack_verify: --native-blake3, but no blake3 module is installed") + + def native(b): + return nb.blake3(b).digest() + vec = json.load(open(os.path.join(HERE, "..", "http-conformance", "blake3_vectors.json"))) + for c in vec["cases"]: + data = bytes(i % 251 for i in range(c["input_len"])) + if native(data).hex() != c["hash"][:64] or blake3(data).hex() != c["hash"][:64]: + raise SystemExit(f"pack_verify: the native BLAKE3 disagrees on the {c['input_len']}-byte vector") + for n in [0, 1, 63, 64, 65, 1023, 1024, 1025, 2048, 4095, 4096, 4097, 16385, 65537]: + data = bytes((i * 131 + n) % 256 for i in range(n)) + if native(data) != blake3(data): + raise SystemExit(f"pack_verify: the native BLAKE3 disagrees on a {n}-byte input") + import _blake3 + global NATIVE + _blake3.blake3 = native + blake3 = native + NATIVE = True + MAX_INTEGER = (1 << 53) - 1 # The longest manifest a reader must accept (SPEC §2, *Reader limits*). MANIFEST_MAX = 1 << 27 @@ -1657,12 +1721,13 @@ def refines_ok(ix, i, rf): return all(p in below for p in producers) and E[e["refines"]]["hash"].hex() in producers -def object_rules(ix, i, data): - """§6.3, with the objects in hand: entry i's object, the first rule broken is the refusal.""" +def object_rules(ix, i, data, hashed=None): + """§6.3, with the objects in hand: entry i's object, the first rule broken is the refusal. + `hashed` is its content hash where a worker computed it (--jobs).""" e = ix["entries"][i] if len(data) != e["byte_len"]: raise Refused("object-length") - if content_hash(data) != e["hash"]: + if (hashed if hashed is not None else content_hash(data)) != e["hash"]: raise Refused("object-hash") env = read_envelope(data) if env is None: @@ -3152,9 +3217,21 @@ class Held: return itertools.repeat(self.frame, self.n) +class Decoded: + """A prefix a worker decoded (--jobs): its clip digest (§6.5) and its frame count, + not its frames.""" + def __init__(self, digest, n): + self.digest, self.n = digest, n + + def __len__(self): + return self.n + + def prefix_digest_of(frames): """SPEC §7's clip digest, each frame's SHA-256 fed in turn: a still's frame, held, is hashed once and its digest fed for every frame, a block of them at a time (§5.7).""" + if isinstance(frames, Decoded): + return frames.digest h = hashlib.sha256() if isinstance(frames, Held): d = hashlib.sha256(frames.frame).digest() @@ -3174,10 +3251,48 @@ def clip_digest(frames): return hashlib.sha256(b"".join(hashlib.sha256(f).digest() for f in frames)).digest() +def work_hash(path): + """A worker's object (--jobs): its content hash (jwp-receipts §2.1).""" + return content_hash(load(path)) + + +def work_chain(task): + """A worker's piece (--jobs): its base decoded, or a still held, and each layer applied + in entry order, every prefix's clip digest, as the serial run computes them; at the + first that fails, which (the base, or the j-th layer) and why, in the serial run's words. + task: (capability, frames, [(path, manifest length)], base first).""" + cap, n, objs = task + payloads = [load(p)[12 + ml:] for p, ml in objs] + try: + if cap == "wai.image.png": + pw, ph, rgb = png_frame(payloads[0]) + frames = Held(rgb, n) + else: + wv = IPV.parse_wiv1(payloads[0], 0) + frames, pw, ph = IPV.decode_wiv1_k0(wv), wv["w"], wv["h"] + except (IPV.Refused, ValueError, TypeError, IndexError, struct.error, zlib.error) as x: + return ("base", str(x)) + digests = [prefix_digest_of(frames)] + for p in payloads[1:]: + try: + frames = wir1_apply(p, frames) + except (SV.Refused, KeyError, IndexError, struct.error) as x: + return ("layer", len(digests), str(x), pw, ph, digests) + digests.append(prefix_digest_of(frames)) + return ("ok", pw, ph, digests) + + def verify_pack(rep, d, name, pkg=None, inputs=True): """packs//: package/ (or `pkg`) verified in §11.3's order, without the source; then, with `inputs`, the package's inputs: policy.toml as given, and what only the source decides (the plan, each base's sse and step) and the supplied floor.""" + try: + verify_pack_once(rep, d, name, pkg, inputs) + finally: + HV.forget_content_hashes() + + +def verify_pack_once(rep, d, name, pkg, inputs): root = os.path.join(d, "packs", name) pkg = pkg or os.path.join(root, "package") tag = f"packs/{name}" @@ -3270,10 +3385,13 @@ def verify_pack(rep, d, name, pkg=None, inputs=True): except Refused as e: rep.check(False, f"{tag}: the receipt against its indexes ({e.code})") return - seed = bytes.fromhex(load(os.path.join(root, "key.hex")).decode().strip()) - pk, sig = ed25519_from_seed(seed, r["payload"]) - rep.check(pk.hex() == j["signer_pubkey"], f"{tag}: the receipt's signer is the package key") - rep.check(sig.hex() == j["sig"], f"{tag}: the signature is the package key's over the payload (§11.2)") + # A golden's own key re-signs its payload (§11.2); a package verified without its key + # (--package) has its signature checked by verify_receipt_v2 alone (§9.1). + if os.path.exists(os.path.join(root, "key.hex")): + seed = bytes.fromhex(load(os.path.join(root, "key.hex")).decode().strip()) + pk, sig = ed25519_from_seed(seed, r["payload"]) + rep.check(pk.hex() == j["signer_pubkey"], f"{tag}: the receipt's signer is the package key") + rep.check(sig.hex() == j["sig"], f"{tag}: the signature is the package key's over the payload (§11.2)") # A re-pack golden names the golden it takes its bases from (§11.5); every other golden # has no parent. if inputs: @@ -3294,9 +3412,12 @@ def verify_pack(rep, d, name, pkg=None, inputs=True): # §9.4: a metered package publishes its measurement claim; an unmetered one, none. claim = f"claims/{j['receipt_hash']}.measurement.json" - if j["joules_micro"]: + if j["energy_provenance"] is not None: rep.check(claim in files, f"{tag}: a metered package's measurement claim (measurement-claim-missing)") - rep.check(False, f"{tag}: this verifier does not check a measurement claim (measurement-claim-invalid)") + if claim in files: + why = measurement_claim_fault(load(os.path.join(pkg, claim)), j) + rep.check(why is None, f"{tag}: the measurement claim verifies and is about the receipt's figure: {why} " + f"(measurement-claim-invalid)") named.add(claim) else: rep.check(not any(p.startswith("claims/") for p in others), @@ -3310,6 +3431,36 @@ def verify_pack(rep, d, name, pkg=None, inputs=True): rep.check(not other, f"{tag}: other files: {other} (unexpected-file)") +def measurement_claim_fault(b, j): + """§9.4: a metered package's claim, `claims/.measurement.json`, read by the + claim corpus's own verifier (../claim-conformance/claim_verify.py: jwp-receipts §3.1 + steps 1-4, its signature among them, and step 5, a first claim naming no parent), then + checked against the receipt as jwp-receipts §2.4.8 and energy-measurement §6.1 check a + measurement claim against the figure it names (step 6): a `measurement` claim about the + receipt (subject type receipt, subject the receipt's hash), of figure profile + `wai:video-package-receipt-id`, which has no figure index and no group, whose figure + is the receipt's (joules, class and evidence) and whose signer is the receipt's. + None when it holds; else what fails.""" + import claim_verify as CV + try: + c = CV.verify_claim(b.decode("utf-8")) + CV.check_chain(c, None) + except (CV.Reject, UnicodeError) as x: + return f"the claim does not verify ({x})" + f = c["body"] + if c["class"] != "measurement" or c["subject_type"] != "receipt" or c["subject"] != j["receipt_hash"]: + return "not a measurement claim about this receipt" + if f["figure_profile"] != "wai:video-package-receipt-id" or f["figure_index"] is not None or f["group"] is not None: + return "not of the package receipt's figure profile, or with an index or a group" + if f["joules_micro"] != j["joules_micro"]: + return f"a figure of {f['joules_micro']} uJ, the receipt's {j['joules_micro']}" + if f["energy_provenance"] != j["energy_provenance"] or any(f.get(k) != j.get(k) for k in EVIDENCE_MEMBERS): + return "another acquisition class or evidence than the receipt's" + if c["signer_pubkey"] != j["signer_pubkey"]: + return "signed by another key than the receipt's" + return None + + def repack_fields(ix, k): """§11.5: piece k's base and refinement entries, every field but the entry's place in its index: the entry it refines counted from its piece's first, its flags but the duplicate @@ -3495,6 +3646,9 @@ def verify_component(rep, tag, root, pkg, files, P, j, c, ix, inputs=True): # Every entry's object (§6.3), the decode-equivalent prefixes (§6.5). objs, mans, decoded = {}, {}, {} + # --jobs: every object's content hash computed ahead, once per file, in the workers. + present = sorted({f"objects/{e['hash'].hex()}.wai" for e in E} & set(files)) + hashes = dict(zip(present, pool().map(work_hash, [os.path.join(pkg, p) for p in present], 1))) if pool() else {} for i, e in enumerate(E): path = f"objects/{e['hash'].hex()}.wai" named.add(path) @@ -3503,7 +3657,9 @@ def verify_component(rep, tag, root, pkg, files, P, j, c, ix, inputs=True): continue objs[i] = load(os.path.join(pkg, path)) try: - mans[i] = object_rules(ix, i, objs[i]) + mans[i] = object_rules(ix, i, objs[i], hashes.get(path)) + # The object's hash is its entry's: http_verify resolves it without hashing it. + HV.seed_content_hash(objs[i], e["hash"]) rep.check(True, f"{t}: entry {i}: the object rules (§6.3)") except Refused as x: rep.check(False, f"{t}: entry {i}: the object rules (§6.3) ({x.code})") @@ -3523,12 +3679,35 @@ def verify_component(rep, tag, root, pkg, files, P, j, c, ix, inputs=True): size = None own = owners(ix) stage = {} # entry index → the frames of the prefix it completes, decoded + # --jobs, without the sources (which re-derive from the frames themselves): each piece's + # base decoded and its layers applied in the workers, ahead, piece by piece; the checks + # below read their digests in the serial run's order. + chains = {} + if pool() and not inputs: + tasks = {} + for k, pc in enumerate(pieces): + mine = range(pc["first_entry"], pc["first_entry"] + pc["n_entries"]) + b = [i for i in mine if E[i]["role"] == BASE] + if b: + chain = [b[0]] + [i for i in mine if E[i]["role"] == REFINEMENT] + tasks[k] = (E[b[0]]["cap"], pc["duration"], [(os.path.join(pkg, f"objects/{E[i]['hash'].hex()}.wai"), E[i]["man_len"]) for i in chain]) + chains = dict(zip(tasks, pool().map(work_chain, list(tasks.values()), 1))) + layer_of = {} for i, e in enumerate(E): ml = e["man_len"] payload = objs[i][12 + ml:] k = own[i] n = pieces[k]["duration"] - if e["role"] == BASE: + if e["role"] == BASE and k in chains: + res = chains[k] + if res[0] == "base": + rep.check(False, f"{t}: entry {i}: the base does not decode ({res[1]}) (prefix-digest)") + return named | unreached(files, c['id']) + pw, ph, digests = (res[1], res[2], res[3]) if res[0] == "ok" else (res[3], res[4], res[5]) + frames = Decoded(digests[0], n) + stage[i] = frames + layer_of[k] = 0 + elif e["role"] == BASE: try: if e["cap"] == "wai.image.png": # §5.7: a still, its one frame held for the piece: the frame and its @@ -3543,6 +3722,7 @@ def verify_component(rep, tag, root, pkg, files, P, j, c, ix, inputs=True): return named | unreached(files, c['id']) decoded.setdefault(e["hash"], (wv, frames)) stage[i] = frames + if e["role"] == BASE: size = size or (pw, ph) # §5.2: the reference packager's base manifest, as SPEC §3 orders it. want = {"wai": "1.0", "media": comp["media"], "intent": "replicate", @@ -3559,6 +3739,14 @@ def verify_component(rep, tag, root, pkg, files, P, j, c, ix, inputs=True): "target": None} rep.check(objs[i][8:8 + ml] == json.dumps(want, separators=(",", ":")).encode(), f"{t}: entry {i}: the refinement's manifest is §5.4's (object-manifest)") + if k in chains: + res = chains[k] + layer_of[k] += 1 + if res[0] == "layer" and res[1] == layer_of[k]: + rep.check(False, f"{t}: entry {i}: the layer does not apply to the stage below it ({res[2]}) (prefix-digest)") + return named | unreached(files, c['id']) + stage[i] = Decoded((res[3] if res[0] == "ok" else res[5])[layer_of[k]], n) + continue try: stage[i] = wir1_apply(payload, stage[e["refines"]]) except (SV.Refused, KeyError, IndexError, struct.error) as x: @@ -4302,10 +4490,32 @@ def verify(d): def main(argv): - if len(argv) != 2: + global JOBS + args = argv[1:] + package = None + while args and args[0].startswith("--"): + if args[0] == "--jobs" and len(args) > 1 and args[1].isdigit() and int(args[1]) >= 1: + JOBS, args = int(args[1]), args[2:] + elif args[0] == "--native-blake3": + use_native_blake3() + args = args[1:] + elif args[0] == "--package" and len(args) > 1: + package, args = args[1], args[2:] + else: + print(__doc__) + return 2 + if package is not None: + if args: + print(__doc__) + return 2 + rep = Report() + verify_pack(rep, HERE, "--package", pkg=package, inputs=False) + print(f"pack_verify: {rep.checked - rep.failures}/{rep.checked} checks hold") + return 0 if rep.failures == 0 else 1 + if len(args) != 1: print(__doc__) return 2 - rep = verify(argv[1]) + rep = verify(args[0]) check_reader_limit(rep) print(f"pack_verify: {rep.checked - rep.failures}/{rep.checked} checks hold") return 0 if rep.failures == 0 else 1 diff --git a/wai/pack-conformance/package-mutations/expected.json b/wai/pack-conformance/package-mutations/expected.json index e1842869e..6da029e10 100644 --- a/wai/pack-conformance/package-mutations/expected.json +++ b/wai/pack-conformance/package-mutations/expected.json @@ -282,6 +282,21 @@ "reason": "receipt-json", "remove": [] }, + { + "name": "metered", + "reason": "ok", + "remove": [] + }, + { + "name": "metered-claim-another-figure", + "reason": "measurement-claim-invalid", + "remove": [] + }, + { + "name": "metered-claim-missing", + "reason": "measurement-claim-missing", + "remove": [] + }, { "name": "empty-directory", "reason": "unexpected-file", diff --git a/wai/pack-conformance/package-mutations/metered-claim-another-figure/LISTING b/wai/pack-conformance/package-mutations/metered-claim-another-figure/LISTING new file mode 100644 index 000000000..da0b0dbe2 --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered-claim-another-figure/LISTING @@ -0,0 +1,36 @@ +9414f625ee38f54eb010a003c262ec5ed1ffc95b82510dc032da065846ff4b9b claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json +91b8aba2292191f2046eb841fe6fcb7b214826cecd9e06a3c193a68e7089e144 dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6 floor/v/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf floor/v/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b floor/v/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a floor/v/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +99a24de04f7be9fc21097e69d2d61b222e458b1f93b8082026a9874aeb9f4c15 floor/v/99a24de04f7be9fc21097e69d2d61b222e458b1f93b8082026a9874aeb9f4c15.m4s +58c598174eed554cd0d1bc8abedca8c9d51d992c8e3b963bcb7574da4983ed9f floor/v/init.mp4 +289bfcb09eb25124ac19597bc624371c34bea00aa1011ced9372d96b5e14b2bd hls/classic/floor-v.m3u8 +3026d7f11005e34ff66298175777ee6806d649cf9d5c1467aaa4fb00ac5987e6 hls/classic/master.m3u8 +3026d7f11005e34ff66298175777ee6806d649cf9d5c1467aaa4fb00ac5987e6 hls/legacy/master.m3u8 +c5902f61ffaf77f940c4d3dc6e850340aaaeb3f433e4541f935c32443c50b341 hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +c5902f61ffaf77f940c4d3dc6e850340aaaeb3f433e4541f935c32443c50b341 hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +0b65400d0bbde57ed6a2c19d90cb72ec753de0e76165e4f286acfd5a7bda14d2 index-v.wsix +115e8e1e7ee0765de9bd2f71576cae01ce6576a5ce2a24f3374879eb74d9a6af moq/catalog.json +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +4d583d03292b77f9d46b02f2c80a774b1cda1b07df38243d18fe586b82eaca60 objects/35c7a45323b7afe979c123fa885f35cc55fabd2a1954759aebe4b95dbc76361f.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +9fdf29f5c9536d1f7701c791328d656ef725ba9b8cb3760bdb00f5a503c69338 objects/761c4649427c51796a2b699568775765b209ee80d2f4fc1cf040838c6724aa2d.wai +a3135205d3139b39409d4e4e2aafed2c042797d293a9f9fc8664467165336e25 objects/7cc2b824ad6105abfccae27093190311b6a2348842e571684b021a213341b94a.wai +3c66c0b25b759cd1fe6245d282ba928441b873d62e4ac62c95260e45a80fff77 objects/8f748dc64787b5c5ece081270c8559277f926322dd6ddc345306b8231f2d1752.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +4a2370c37281e64f30cb66a4bd7125854d6280855e90f00229b177bd70af3d8c package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +a497fdf29528c4744ce8548e3b430d6311f15c10ca2a4cb548fb9958d3d98f07 policy.json +d667cfa0c1e4e52f254f3a89a80cb0d3b6be0d833c40c8b44f60be33765859b0 policy.toml +59b343802800c815390b840da3ee6981367b495a30d8a1952f6484d04271caf9 stages/legacy.json +b7514cb869338126e4785943a4624e9dbfa44464fa450c55341b7931bd9c19f9 stages/mobile.json +33898452413a8fe209fb6b158bfd1e9b06a74fc3ab7639810522a586a4aa6ac6 stages/tv.json diff --git a/wai/pack-conformance/package-mutations/metered-claim-another-figure/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json b/wai/pack-conformance/package-mutations/metered-claim-another-figure/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json new file mode 100644 index 000000000..07001fc41 --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered-claim-another-figure/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json @@ -0,0 +1 @@ +{"body":{"bracket":null,"build":{"profile":"release","target":null,"toolchain":null},"energy_calibration_ref":null,"energy_counter_filtering":null,"energy_provenance":"ModelBased","energy_uncertainty":null,"figure_index":null,"figure_profile":"wai:video-package-receipt-id","group":null,"joules_micro":500001,"power_reader":"model:500mW"},"class":"measurement","issued_at":"2026-10-21T00:00:00Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"d6935698b54a44f0ff253340fe62334f30a2e8de5d4ab277496e67e666e621b87fdbd558867a7d64f5be637c9388f0cd5696d7629ad87fe89bf09194e0a35500","signer_id":"did:key:z6MkfMo6gxqdBhaHMNnmfhgZFBjpCDTkmJMJLoypsBZS9PwD","signer_pubkey":"0d7550754e0800a5d237eef5826035766b9b3e5a15868a940ab289958788e3b0","subject":"01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2","subject_type":"receipt"} \ No newline at end of file diff --git a/wai/pack-conformance/package-mutations/metered-claim-another-figure/package.receipt.json b/wai/pack-conformance/package-mutations/metered-claim-another-figure/package.receipt.json new file mode 100644 index 000000000..a59cb6c3b --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered-claim-another-figure/package.receipt.json @@ -0,0 +1 @@ +{"asset_id":"video-base-01","components":[{"id":"v","index":"index-v.wsix","index_digest":"5ffc2be3f21af79078a1158e3d669e4268a35b0ca61a6e73ff252fdf38f346d0","media_class":"video","stage_root":"bd0c7799633b108cf9ccb0c7a4cedbdf6173a83470d3d96b94d075c03e0db7b6"}],"energy_provenance":"ModelBased","grant":{"capability":"wai.video.package","funds_ceiling":null,"grant_hash":"0000000000000000000000000000000000000000000000000000000000000000","joule_ceiling_micro":null},"joules_micro":500000,"kind":"package","packager":"builtin:wai-pack@0.1.0","parent_kind":"none","parent_receipt_hash":null,"policy_digest":"e1c131d56798eb840e22736076d74908bca2b7585aeae7e4bb1698218c01a35e","receipt_hash":"01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2","sig":"eb052a53c735830304a6c74230dcc348ca6d0c8110497e916407062da83e627db36ba165167ed217e451a26dfa1f5b5e21cf766725063c4532df82ff9d949604","signer_id":"did:key:z6MkfMo6gxqdBhaHMNnmfhgZFBjpCDTkmJMJLoypsBZS9PwD","signer_pubkey":"0d7550754e0800a5d237eef5826035766b9b3e5a15868a940ab289958788e3b0","stored_bytes":119779,"total_bytes":130963,"total_entries":10,"unique_objects":8,"version":2,"work_units":10} \ No newline at end of file diff --git a/wai/pack-conformance/package-mutations/metered-claim-missing/LISTING b/wai/pack-conformance/package-mutations/metered-claim-missing/LISTING new file mode 100644 index 000000000..67b4a1e2b --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered-claim-missing/LISTING @@ -0,0 +1,35 @@ +91b8aba2292191f2046eb841fe6fcb7b214826cecd9e06a3c193a68e7089e144 dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6 floor/v/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf floor/v/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b floor/v/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a floor/v/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +99a24de04f7be9fc21097e69d2d61b222e458b1f93b8082026a9874aeb9f4c15 floor/v/99a24de04f7be9fc21097e69d2d61b222e458b1f93b8082026a9874aeb9f4c15.m4s +58c598174eed554cd0d1bc8abedca8c9d51d992c8e3b963bcb7574da4983ed9f floor/v/init.mp4 +289bfcb09eb25124ac19597bc624371c34bea00aa1011ced9372d96b5e14b2bd hls/classic/floor-v.m3u8 +3026d7f11005e34ff66298175777ee6806d649cf9d5c1467aaa4fb00ac5987e6 hls/classic/master.m3u8 +3026d7f11005e34ff66298175777ee6806d649cf9d5c1467aaa4fb00ac5987e6 hls/legacy/master.m3u8 +c5902f61ffaf77f940c4d3dc6e850340aaaeb3f433e4541f935c32443c50b341 hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +c5902f61ffaf77f940c4d3dc6e850340aaaeb3f433e4541f935c32443c50b341 hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +0b65400d0bbde57ed6a2c19d90cb72ec753de0e76165e4f286acfd5a7bda14d2 index-v.wsix +115e8e1e7ee0765de9bd2f71576cae01ce6576a5ce2a24f3374879eb74d9a6af moq/catalog.json +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +4d583d03292b77f9d46b02f2c80a774b1cda1b07df38243d18fe586b82eaca60 objects/35c7a45323b7afe979c123fa885f35cc55fabd2a1954759aebe4b95dbc76361f.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +9fdf29f5c9536d1f7701c791328d656ef725ba9b8cb3760bdb00f5a503c69338 objects/761c4649427c51796a2b699568775765b209ee80d2f4fc1cf040838c6724aa2d.wai +a3135205d3139b39409d4e4e2aafed2c042797d293a9f9fc8664467165336e25 objects/7cc2b824ad6105abfccae27093190311b6a2348842e571684b021a213341b94a.wai +3c66c0b25b759cd1fe6245d282ba928441b873d62e4ac62c95260e45a80fff77 objects/8f748dc64787b5c5ece081270c8559277f926322dd6ddc345306b8231f2d1752.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +4a2370c37281e64f30cb66a4bd7125854d6280855e90f00229b177bd70af3d8c package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +a497fdf29528c4744ce8548e3b430d6311f15c10ca2a4cb548fb9958d3d98f07 policy.json +d667cfa0c1e4e52f254f3a89a80cb0d3b6be0d833c40c8b44f60be33765859b0 policy.toml +59b343802800c815390b840da3ee6981367b495a30d8a1952f6484d04271caf9 stages/legacy.json +b7514cb869338126e4785943a4624e9dbfa44464fa450c55341b7931bd9c19f9 stages/mobile.json +33898452413a8fe209fb6b158bfd1e9b06a74fc3ab7639810522a586a4aa6ac6 stages/tv.json diff --git a/wai/pack-conformance/package-mutations/metered-claim-missing/package.receipt.json b/wai/pack-conformance/package-mutations/metered-claim-missing/package.receipt.json new file mode 100644 index 000000000..a59cb6c3b --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered-claim-missing/package.receipt.json @@ -0,0 +1 @@ +{"asset_id":"video-base-01","components":[{"id":"v","index":"index-v.wsix","index_digest":"5ffc2be3f21af79078a1158e3d669e4268a35b0ca61a6e73ff252fdf38f346d0","media_class":"video","stage_root":"bd0c7799633b108cf9ccb0c7a4cedbdf6173a83470d3d96b94d075c03e0db7b6"}],"energy_provenance":"ModelBased","grant":{"capability":"wai.video.package","funds_ceiling":null,"grant_hash":"0000000000000000000000000000000000000000000000000000000000000000","joule_ceiling_micro":null},"joules_micro":500000,"kind":"package","packager":"builtin:wai-pack@0.1.0","parent_kind":"none","parent_receipt_hash":null,"policy_digest":"e1c131d56798eb840e22736076d74908bca2b7585aeae7e4bb1698218c01a35e","receipt_hash":"01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2","sig":"eb052a53c735830304a6c74230dcc348ca6d0c8110497e916407062da83e627db36ba165167ed217e451a26dfa1f5b5e21cf766725063c4532df82ff9d949604","signer_id":"did:key:z6MkfMo6gxqdBhaHMNnmfhgZFBjpCDTkmJMJLoypsBZS9PwD","signer_pubkey":"0d7550754e0800a5d237eef5826035766b9b3e5a15868a940ab289958788e3b0","stored_bytes":119779,"total_bytes":130963,"total_entries":10,"unique_objects":8,"version":2,"work_units":10} \ No newline at end of file diff --git a/wai/pack-conformance/package-mutations/metered/LISTING b/wai/pack-conformance/package-mutations/metered/LISTING new file mode 100644 index 000000000..ecc747b37 --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered/LISTING @@ -0,0 +1,36 @@ +a2ef584d432d2a1a1af10cb9d342c0fecbb2c05d72fc054d3792a7ab4bacdce6 claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json +91b8aba2292191f2046eb841fe6fcb7b214826cecd9e06a3c193a68e7089e144 dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6 floor/v/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf floor/v/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b floor/v/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a floor/v/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +99a24de04f7be9fc21097e69d2d61b222e458b1f93b8082026a9874aeb9f4c15 floor/v/99a24de04f7be9fc21097e69d2d61b222e458b1f93b8082026a9874aeb9f4c15.m4s +58c598174eed554cd0d1bc8abedca8c9d51d992c8e3b963bcb7574da4983ed9f floor/v/init.mp4 +289bfcb09eb25124ac19597bc624371c34bea00aa1011ced9372d96b5e14b2bd hls/classic/floor-v.m3u8 +3026d7f11005e34ff66298175777ee6806d649cf9d5c1467aaa4fb00ac5987e6 hls/classic/master.m3u8 +3026d7f11005e34ff66298175777ee6806d649cf9d5c1467aaa4fb00ac5987e6 hls/legacy/master.m3u8 +c5902f61ffaf77f940c4d3dc6e850340aaaeb3f433e4541f935c32443c50b341 hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +c5902f61ffaf77f940c4d3dc6e850340aaaeb3f433e4541f935c32443c50b341 hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +0b65400d0bbde57ed6a2c19d90cb72ec753de0e76165e4f286acfd5a7bda14d2 index-v.wsix +115e8e1e7ee0765de9bd2f71576cae01ce6576a5ce2a24f3374879eb74d9a6af moq/catalog.json +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +4d583d03292b77f9d46b02f2c80a774b1cda1b07df38243d18fe586b82eaca60 objects/35c7a45323b7afe979c123fa885f35cc55fabd2a1954759aebe4b95dbc76361f.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +9fdf29f5c9536d1f7701c791328d656ef725ba9b8cb3760bdb00f5a503c69338 objects/761c4649427c51796a2b699568775765b209ee80d2f4fc1cf040838c6724aa2d.wai +a3135205d3139b39409d4e4e2aafed2c042797d293a9f9fc8664467165336e25 objects/7cc2b824ad6105abfccae27093190311b6a2348842e571684b021a213341b94a.wai +3c66c0b25b759cd1fe6245d282ba928441b873d62e4ac62c95260e45a80fff77 objects/8f748dc64787b5c5ece081270c8559277f926322dd6ddc345306b8231f2d1752.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +4a2370c37281e64f30cb66a4bd7125854d6280855e90f00229b177bd70af3d8c package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +a497fdf29528c4744ce8548e3b430d6311f15c10ca2a4cb548fb9958d3d98f07 policy.json +d667cfa0c1e4e52f254f3a89a80cb0d3b6be0d833c40c8b44f60be33765859b0 policy.toml +59b343802800c815390b840da3ee6981367b495a30d8a1952f6484d04271caf9 stages/legacy.json +b7514cb869338126e4785943a4624e9dbfa44464fa450c55341b7931bd9c19f9 stages/mobile.json +33898452413a8fe209fb6b158bfd1e9b06a74fc3ab7639810522a586a4aa6ac6 stages/tv.json diff --git a/wai/pack-conformance/package-mutations/metered/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json b/wai/pack-conformance/package-mutations/metered/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json new file mode 100644 index 000000000..e320e2364 --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json @@ -0,0 +1 @@ +{"body":{"bracket":null,"build":{"profile":"release","target":null,"toolchain":null},"energy_calibration_ref":null,"energy_counter_filtering":null,"energy_provenance":"ModelBased","energy_uncertainty":null,"figure_index":null,"figure_profile":"wai:video-package-receipt-id","group":null,"joules_micro":500000,"power_reader":"model:500mW"},"class":"measurement","issued_at":"2026-10-21T00:00:00Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"8e4df4a0568d61e153cd7eca9e8664dc69b11202d8999138b639ffa77f7ade7de212a2b31d3a7977861ab176286a77633257a17d0919c5e04a9d2741b85fc807","signer_id":"did:key:z6MkfMo6gxqdBhaHMNnmfhgZFBjpCDTkmJMJLoypsBZS9PwD","signer_pubkey":"0d7550754e0800a5d237eef5826035766b9b3e5a15868a940ab289958788e3b0","subject":"01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2","subject_type":"receipt"} \ No newline at end of file diff --git a/wai/pack-conformance/package-mutations/metered/package.receipt.json b/wai/pack-conformance/package-mutations/metered/package.receipt.json new file mode 100644 index 000000000..a59cb6c3b --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered/package.receipt.json @@ -0,0 +1 @@ +{"asset_id":"video-base-01","components":[{"id":"v","index":"index-v.wsix","index_digest":"5ffc2be3f21af79078a1158e3d669e4268a35b0ca61a6e73ff252fdf38f346d0","media_class":"video","stage_root":"bd0c7799633b108cf9ccb0c7a4cedbdf6173a83470d3d96b94d075c03e0db7b6"}],"energy_provenance":"ModelBased","grant":{"capability":"wai.video.package","funds_ceiling":null,"grant_hash":"0000000000000000000000000000000000000000000000000000000000000000","joule_ceiling_micro":null},"joules_micro":500000,"kind":"package","packager":"builtin:wai-pack@0.1.0","parent_kind":"none","parent_receipt_hash":null,"policy_digest":"e1c131d56798eb840e22736076d74908bca2b7585aeae7e4bb1698218c01a35e","receipt_hash":"01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2","sig":"eb052a53c735830304a6c74230dcc348ca6d0c8110497e916407062da83e627db36ba165167ed217e451a26dfa1f5b5e21cf766725063c4532df82ff9d949604","signer_id":"did:key:z6MkfMo6gxqdBhaHMNnmfhgZFBjpCDTkmJMJLoypsBZS9PwD","signer_pubkey":"0d7550754e0800a5d237eef5826035766b9b3e5a15868a940ab289958788e3b0","stored_bytes":119779,"total_bytes":130963,"total_entries":10,"unique_objects":8,"version":2,"work_units":10} \ No newline at end of file diff --git a/wai/wai-pack/src/golden.rs b/wai/wai-pack/src/golden.rs index 53c09701a..63750002a 100644 --- a/wai/wai-pack/src/golden.rs +++ b/wai/wai-pack/src/golden.rs @@ -632,6 +632,65 @@ pub fn reseal_as(files: &mut Files, key: &SigningKey, policy_json: Option<&[u8]> Ok(()) } +/// What a metered package carries as its measurement claim (§9.4). +#[derive(Clone, Copy, PartialEq, Eq)] +enum Claim { + /// The claim the packer writes. + Written, + /// A claim about a figure one microjoule off, signed by the package key. + AnotherFigure, + /// No claim. + None, +} + +/// The golden re-sealed as a metered pack (§9.4): a model meter of 500 mW over one second, +/// so the figure is 500,000 µJ, `ModelBased`, and its measurement claim, every member of +/// which is fixed (the build record names a release build and nothing it cannot know here, +/// `issued_at` is fixed), so the files are the same on every machine. +fn metered(g: &Files, key: &SigningKey, claim: Claim) -> Files { + use wai::claim_receipt::{ClaimBody, ClaimReceipt, FigureHeader, MeasurementClaim, SubjectType}; + use wai::energy_figure::EnergyFigures; + use wai::energy_meter::Meter as _; + let mut f = g.clone(); + let policy = crate::policy::Policy::parse_bytes(&f["policy.toml"]).expect("the golden's policy"); + let comp = &policy.components[0]; + let ixb = f[&wai::package::index_file(&comp.id)].clone(); + let mut t = 0u64; + let mut meter = wai::energy_meter::ModelMeter::new(move || { + let v = t; + t += 1_000_000; + v + }, 500); + meter.start(); + let energy = meter.stop().expect("a figure").as_seal_args(); + let did = wai::signer_id::did_key(&key.verifying_key().to_bytes()); + let r = PackageReceiptV2::seal(key, &did, &policy.asset_id, policy.digest(), &[(comp.id.clone(), ixb.clone())], &crate::pack::packager_id(), energy, GrantRef::unbounded("wai.video.package"), Parent::None).expect("the metered receipt seals"); + f.insert("package.receipt.json".into(), r.to_json().into_bytes()); + let indexes: Vec<&[u8]> = vec![&ixb]; + let view = (&r, indexes.as_slice()).figure_view().expect("the receipt verifies against its index"); + let build = wai::energy_report::BuildRecord { profile: wai::energy_report::BuildProfile::Release, toolchain: None, target: None }; + let issued = "2026-10-21T00:00:00Z"; + let written = match claim { + Claim::Written => Some(wai::energy_figure::meter_report::emit(&view, None, None, build, "model:500mW", key, &did, None, issued).expect("the claim checks against the receipt")), + Claim::AnotherFigure => { + let fig = view.figure(None).expect("a figure"); + let body = ClaimBody::Measurement(MeasurementClaim { + figure: FigureHeader::new(&view.profile, None, None, fig.joules_micro + 1, fig.class.as_ref().expect("a class")), + bracket: None, + build, + power_reader: Some("model:500mW".into()), + }); + Some(ClaimReceipt::seal_unchecked(key, &did, SubjectType::Receipt, view.identity, 0, issued, body, None).expect("the claim seals")) + } + Claim::None => None, + }; + if let Some(c) = written { + f.insert(crate::pack::claim_path(&r), c.to_json().into_bytes()); + } + relist(&mut f); + f +} + /// Write `LISTING` again over every other file. pub fn relist(files: &mut Files) { files.remove("LISTING"); @@ -972,6 +1031,11 @@ pub fn package_mutations(g: &Files, key: &SigningKey) -> Vec { f.insert("package.receipt.json".into(), bad.into_bytes()); add(name, "receipt-json", listed(f)); } + // A metered package (§9.4): its claim as the packer writes it, which every verifier + // accepts; a claim about another figure, signed by the package key; and no claim. + add("metered", "ok", metered(g, key, Claim::Written)); + add("metered-claim-another-figure", "measurement-claim-invalid", metered(g, key, Claim::AnotherFigure)); + add("metered-claim-missing", "measurement-claim-missing", metered(g, key, Claim::None)); // Directories (§11.1, "no other"): one that holds nothing, one that holds nothing // under a dot-name (a version-control directory's), and one that cannot be read. let dir = |name: &'static str, empty: &[&str], unreadable: &[&str]| PackageMutation { -- 2.54.0 (Apple Git-157) From 658812a5fa98e14c0e8f4f3e6959984e65ed25e0 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 21:15:46 -0400 Subject: [PATCH 09/50] pack-conformance: the staged golden itself among staged-mutations (ok) Verified without its sources, the staged golden's every layer has its prefix digest checked by a decode the verifier runs however it runs it (serially or in pack_verify.py's workers). Without an accepted layered case, layer digests a verifier got wrong still gave the refusals the corpus expects. The README names the metered package cases. Co-Authored-By: Claude Opus 5.5 --- wai/pack-conformance/README.md | 9 +++++++-- wai/pack-conformance/staged-mutations/expected.json | 5 +++++ wai/wai-pack/src/golden.rs | 5 ++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/wai/pack-conformance/README.md b/wai/pack-conformance/README.md index 99b349ff3..2f26ee8c0 100644 --- a/wai/pack-conformance/README.md +++ b/wai/pack-conformance/README.md @@ -123,7 +123,9 @@ packages (§6–§11), and their delivery over a simulated link (§8.9). window past 32 KiB, bytes after the zlib stream, and its Adler-32. And one dynamic block of literals twice: with a lone distance code of one bit, read (the one incomplete code set the zlib library takes), and of two bits, refused. -- `staged-mutations/` — the staged golden altered and re-sealed with its key, in the +- `staged-mutations/` — the staged golden itself (`ok`: verified without its sources, + every layer's prefix digest held to it), and the staged golden altered and re-sealed + with its key, in the layout of `package-mutations/`: a refinement on another deadline than its plan's, a piece missing its top layer, a still where the policy's rule now gives the piece the default ladder (each `index-policy-mismatch`), a top layer coded again at another step @@ -152,7 +154,10 @@ packages (§6–§11), and their delivery over a simulated link (§8.9). off among them), a missing or corrupted object, a live window no catalog can be written for, floor objects that do not open on a key frame or are not §7.2's, files and directories a strict read finds, and a receipt file that is not its canonical - form; and one the verifier must accept (an extra key frame the policy allows). + form; and those the verifier must accept (an extra key frame the policy allows, and a + metered package, §9.4: the golden re-sealed with a 500 mW model meter over one second + and its measurement claim, every member fixed), with a claim about another figure + (`measurement-claim-invalid`) and none (`measurement-claim-missing`). The fixtures are not committed. `wai-pack fixture gen ` writes each from its definition (`wai-pack/src/fixture.rs`), every byte an integer function of the frame diff --git a/wai/pack-conformance/staged-mutations/expected.json b/wai/pack-conformance/staged-mutations/expected.json index cbdafd185..9393a597f 100644 --- a/wai/pack-conformance/staged-mutations/expected.json +++ b/wai/pack-conformance/staged-mutations/expected.json @@ -1,6 +1,11 @@ { "pack": "video-staged-01", "cases": [ + { + "name": "ok", + "reason": "ok", + "remove": [] + }, { "name": "refinement-deadline", "reason": "index-policy-mismatch", diff --git a/wai/wai-pack/src/golden.rs b/wai/wai-pack/src/golden.rs index 63750002a..64c9e0530 100644 --- a/wai/wai-pack/src/golden.rs +++ b/wai/wai-pack/src/golden.rs @@ -1078,7 +1078,7 @@ fn prefix_frames(f: &Files, ix: &StageIndex, k: usize) -> Vec> { } /// Staged packages a verifier must refuse (§11.3), each the staged golden altered and -/// re-sealed with its key: a refinement on another deadline than its plan's (§8.6); a +/// re-sealed with its key, and the golden itself, which it accepts: a refinement on another deadline than its plan's (§8.6); a /// piece missing its top layer, and the static piece's still where the policy's rule now /// gives it the default ladder (§5.7); a top layer coded again at another step, its /// prefix digest left as it was; and the still's prefix digest of its one frame, not of @@ -1090,6 +1090,9 @@ pub fn staged_mutations(g: &Files, key: &SigningKey) -> Vec { }; let mut out: Vec = Vec::new(); let mut add = |name: &'static str, reason: &str, files: Files| out.push(PackageMutation { name, reason: reason.into(), files, empty_dirs: Vec::new(), unreadable_dirs: Vec::new() }); + // The staged golden itself, verified without its sources: every layer's prefix digest + // is held to it (a verifier's decode of the layers, however it runs, is checked). + add("ok", "ok", g.clone()); let ix = golden_index(g); let last = ix.pieces.len() - 1; let top = |ix: &StageIndex, p: usize| ix.pieces[p].first_entry as usize + ix.piece_entries(p).iter().rposition(|e| e.role == Role::Refinement).expect("a layer"); -- 2.54.0 (Apple Git-157) From 4c46e910bee91fed03654e610368b8fcb627982a Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 21:16:57 -0400 Subject: [PATCH 10/50] =?UTF-8?q?packaging=20=C2=A77.3:=20a=20key-frame=20?= =?UTF-8?q?sequence=20header=20put=20back=20is=20the=20stream's=20own?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit An informative note: a floor taken from an existing ladder needs a sequence header in every unit that starts at a shown key frame; where a ladder's key-frame samples lack one, the header put back must be the stream's own first sequence header OBU, byte for byte, since §7.3 refuses any other bytes. The sample entry's av1C header can differ from the in-band one in its tool flags and is refused; the packager writes its own av1C from the in-band header. A ladder without in-band headers cannot be taken in the CMAF form. tests/refusals.rs holds the rule: the stream stripped of its key-frame headers is refused, its own header put back is the stream, another header's bytes are refused. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-pack.yml | 2 +- wai/CHANGELOG.md | 5 +++++ wai/extensions/packaging.md | 12 +++++++++++ wai/wai-pack/tests/refusals.rs | 39 ++++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 1 deletion(-) diff --git a/.github/workflows/wai-pack.yml b/.github/workflows/wai-pack.yml index 8dc6e4d71..3efef0231 100644 --- a/.github/workflows/wai-pack.yml +++ b/.github/workflows/wai-pack.yml @@ -134,7 +134,7 @@ jobs: --test=pack_alloc 1 --test=packs 8 --test=review 9 - --test=refusals 5 + --test=refusals 6 --test=repack 3 --test=scenecut 3 --test=source_alloc 1 diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md index 8a9a8c094..5078a6211 100644 --- a/wai/CHANGELOG.md +++ b/wai/CHANGELOG.md @@ -62,6 +62,11 @@ wire format may change and such changes are recorded here. a correctly metered package passes; `package-mutations/` gains a metered package (`ok`), a claim about another figure (`measurement-claim-invalid`) and none (`measurement-claim-missing`). +- **§7.3: key-frame sequence headers** (an informative note). A floor taken from an + existing ladder needs a sequence header in every key-frame unit; a producer that puts + one back must put back the stream's own first sequence header, byte for byte, not the + sample entry's `av1C` header, which can differ in its tool flags and is refused + (`floor-av1-malformed`). `tests/refusals.rs` holds the rule. - **The DASH renderer** (`wai::http_binding::dash`) writes a representation's own `@codecs`, `@width` and `@height` when given, and an adaptation set's `@codecs` only when every representation shares it. diff --git a/wai/extensions/packaging.md b/wai/extensions/packaging.md index 6b08ea83b..6705aa135 100644 --- a/wai/extensions/packaging.md +++ b/wai/extensions/packaging.md @@ -673,6 +673,18 @@ order: `KEY_FRAME` and `show_frame` 1, or the sequence uses the reduced still-picture header; a unit that shows an existing frame does not. +*Key-frame sequence headers (informative).* A floor taken from an existing ladder without +re-encoding (its CMAF samples demuxed to this form, each with its temporal delimiter put +back) needs a sequence header in every unit that starts at a shown key frame. Where a +ladder's key-frame samples lack one, a producer that puts one back must put back the +stream's own first sequence header OBU, byte for byte, after each such unit's temporal +delimiter: §7.3 refuses any other bytes (`floor-av1-malformed`). The sequence header in +the ladder's sample entry (`av1C`) is not always the stream's: an encoder may write it +before it settles its coding tools, so that it differs from the in-band one in its tool +flags, and a stream with that header put back is refused. The packager writes its own +`av1C` from the in-band header (§7.6). A ladder whose key frames carry no in-band header +cannot be taken in the CMAF form (§7.7), whose units are its samples as they are. + The plan a supplied floor is made against is the **keyframe plan**, the file `plan-.txt`: each piece's first frame in decimal, one per line, each line ended by a line feed. Its pieces' starts are the plan of §4.2, and `wai-pack plan` writes it from the diff --git a/wai/wai-pack/tests/refusals.rs b/wai/wai-pack/tests/refusals.rs index 275891504..16f708bd4 100644 --- a/wai/wai-pack/tests/refusals.rs +++ b/wai/wai-pack/tests/refusals.rs @@ -96,6 +96,45 @@ fn every_floor_reason() { assert_eq!(case(extra.concat(), &|p: String| p.replace("[floor]\n", "[floor]\nextra_keyframes = true\n")), "ok"); } +/// §7.3's note on key-frame sequence headers: a stream whose key frames after the first +/// lost their sequence header is refused; with the stream's own first header put back after +/// each key frame's delimiter it is the original stream and packs; with a header of other +/// bytes put back (as a sample entry's `av1C` header can be, differing in a tool flag), it +/// is refused again. +#[test] +fn a_key_frame_header_put_back_is_the_stream_s_own() { + let floor = golden_floor(); + let tus = wai_pack::av1::temporal_units(&floor).unwrap(); + let seq = tus[0].sequence_header().unwrap().bytes.to_vec(); + let units: Vec> = tus.iter().map(|t| t.bytes()).collect(); + // Each unit without a sequence header, but for the first. + let stripped: Vec> = tus.iter().enumerate().map(|(i, t)| { + if i == 0 { + return t.bytes(); + } + t.obus.iter().filter(|o| o.obu_type != wai_pack::av1::OBU_SEQUENCE_HEADER).flat_map(|o| o.bytes.iter().copied()).collect() + }).collect(); + let id = |p: String| p; + assert_ne!(stripped, units, "the golden's key frames carry the header"); + assert_eq!(case(stripped.concat(), &id), "floor-av1-malformed", "a key frame without one"); + let put_back = |hdr: &[u8]| -> Vec { + tus.iter().zip(&stripped).enumerate().flat_map(|(i, (t, u))| { + if i > 0 && t.sequence_header().is_some() { [&u[..2], hdr, &u[2..]].concat() } else { u.clone() } + }).collect() + }; + assert_eq!(put_back(&seq), units.concat(), "the stream's own header put back is the stream"); + assert_eq!(case(put_back(&seq), &id), "ok"); + // Another header: the stream's with its last payload byte changed (a tool flag bit). + let mut other = seq.clone(); + let last = other.len() - 1; + other[last] ^= 0x40; + let mut s = put_back(&other); + // The first unit keeps the stream's own header, which every other must equal. + let first = units[0].len(); + s.splice(..first, units[0].iter().copied()); + assert_eq!(case(s, &id), "floor-av1-malformed", "a header of other bytes"); +} + /// §11.4: what this revision does not pack yet is refused by name, every /// `pack-capability-unsupported` naming its capability; what it packs now (refinement /// rungs, a rule's ladder subset, a still) packs. -- 2.54.0 (Apple Git-157) From 886d4bb0dd412ee5729fe0e4bda54d41b69bcc6a Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 21:23:20 -0400 Subject: [PATCH 11/50] pack-conformance: the supplied CMAF reader differentially (cmaf_diff.py) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit wai-pack's reader of a supplied CMAF floor (wai-pack cmaf-verdict, a conformance aid) against pack_verify.py's, which shares no code with it, on seeded alterations of a media muxer's segments (packs/video-cmaf-01/floor) and of §7.6's writer's: a flipped byte, an overwritten field, a cut, a changed box size, an inserted box, the init's timescale or edit list, a repeated moof/mdat pair. Every verdict, and every accepted segment's samples, must agree, and neither may crash. CI runs it in the independent job. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-pack.yml | 7 ++ wai/pack-conformance/cmaf_diff.py | 148 ++++++++++++++++++++++++++++++ wai/wai-pack/src/bin/wai_pack.rs | 38 ++++++++ 3 files changed, 193 insertions(+) create mode 100644 wai/pack-conformance/cmaf_diff.py diff --git a/.github/workflows/wai-pack.yml b/.github/workflows/wai-pack.yml index 3efef0231..2cd2ed8b5 100644 --- a/.github/workflows/wai-pack.yml +++ b/.github/workflows/wai-pack.yml @@ -218,6 +218,13 @@ jobs: set -euo pipefail python3 ../pack-conformance/stage_diff.py target/debug/wai-pack 1 1000 python3 ../pack-conformance/stage_diff.py target/release/wai-pack 2 3000 + # The supplied CMAF reader differentially (packaging §7.7): seeded alterations of a + # media muxer's segments and of §7.6's writer's, every verdict and accepted segment's + # samples of wai-pack's reader equal to pack_verify.py's. + - name: cmaf_diff.py, wai-pack against pack_verify.py + shell: bash + working-directory: wai/wai-pack + run: python3 ../pack-conformance/cmaf_diff.py target/release/wai-pack 1 3000 # A still's reader differentially: the zlib library's own streams, dynamic blocks # built on each of RFC 1951's and zlib's code-set rules, and their alterations, every # verdict of wai-pack's reader equal to pack_verify.py's, which inflates with diff --git a/wai/pack-conformance/cmaf_diff.py b/wai/pack-conformance/cmaf_diff.py new file mode 100644 index 000000000..6bbaa1572 --- /dev/null +++ b/wai/pack-conformance/cmaf_diff.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python3 +"""The supplied CMAF reader differentially (extensions/packaging.md §7.7): wai-pack's +(`wai-pack cmaf-verdict`) against pack_verify.py's, which shares no code with it, on +seeded alterations of real files. The files are the CMAF golden's floor (a media muxer's +initialization and media segments, packs/video-cmaf-01/floor/) and §7.6's writer's (the +ladder golden's package, packs/video-ladder-01/package/floor/). Each case alters the +initialization segment or one media segment: a byte flipped in its first boxes, a 32-bit +field overwritten at a box boundary, the file cut short, a box's size changed, a box +inserted at the top level or in a moof, the init's timescale or edit list altered, or a +segment's moof and mdat repeated. Every verdict (ok, floor-cmaf-malformed or +floor-cmaf-timing), and for an accepted segment its samples (offset, length, duration, +flags, decode time), must agree, and no reader may panic. + + python3 cmaf_diff.py +""" +import hashlib +import os +import random +import subprocess +import sys +import tempfile + +HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, HERE) +import pack_verify as PV # noqa: E402 + + +def py_init(b): + try: + return "ok", PV.cmaf_init(b) + except PV.CmafFault as x: + return x.code, None + except Exception as x: # a reader must refuse, never fail otherwise + return f"CRASH {type(x).__name__}", None + + +def py_segment(b, init): + try: + s = PV.cmaf_segment(b, init) + except PV.CmafFault as x: + return (x.code, 0, "-") + except Exception as x: + return (f"CRASH {type(x).__name__}", 0, "-") + text = "".join(f"{a},{n},{d},{f},{t};" for a, n, d, f, t in s) + return ("ok", len(s), hashlib.sha256(text.encode()).hexdigest()) + + +def boxes(b, start, end): + try: + return PV.bmff_boxes(b, start, end) + except PV.CmafFault: + return [] + + +def alter(rng, b): + b = bytearray(b) + top = boxes(b, 0, len(b)) + k = rng.randrange(8) + if k == 6: + # The times: an init's timescale or its edit list's media time, at their offsets. + for kind, off in ((b"mdhd", 20), (b"elst", 20), (b"elst", 16)): + at = bytes(b).find(kind) + if at >= 0 and rng.random() < 0.5 and at + off + 4 <= len(b): + b[at + off:at + off + 4] = rng.choice([0, 1, 2, rng.randrange(1 << 32)]).to_bytes(4, "big") + return bytes(b) + k = 0 + if k == 7: + # A media segment's moof and mdat repeated: the second's decode time is the first's. + pairs = [i for i, x in enumerate(top) if x[0] == b"moof" and i + 1 < len(top) and top[i + 1][0] == b"mdat"] + if pairs: + i = rng.choice(pairs) + b += b[top[i][1]:top[i + 1][3]] + return bytes(b) + k = 0 + if k == 0 and b: + b[rng.randrange(min(len(b), 400))] ^= 1 << rng.randrange(8) + elif k == 1 and top: + x = rng.choice(top) + inner = boxes(b, x[2], x[3]) if x[0] in (b"moov", b"moof", b"trak", b"traf", b"mdia", b"minf", b"stbl", b"mvex") else [] + y = rng.choice(inner) if inner and rng.random() < 0.7 else x + at = y[1] + rng.choice([8, 12, 16, 20, 24]) + if at + 4 <= len(b): + b[at:at + 4] = rng.choice([0, 1, 7, 0xFFFFFFFF, rng.randrange(1 << 32)]).to_bytes(4, "big") + elif k == 2 and len(b) > 8: + del b[rng.randrange(8, len(b)):] + elif k == 3 and top: + x = rng.choice(top) + b[x[1]:x[1] + 4] = max(0, (x[3] - x[1]) + rng.choice([-9, -1, 1, 4, 8, -(x[3] - x[1])])).to_bytes(4, "big") + elif k == 4 and top: + kind = rng.choice([b"free", b"skip", b"uuid", b"styp", b"mdat", b"moof"]) + box = (8 + 4).to_bytes(4, "big") + kind + bytes(4) + at = rng.choice([x[1] for x in top] + [len(b)]) + b[at:at] = box + elif top: + moofs = [x for x in top if x[0] == b"moof"] + if moofs: + x = rng.choice(moofs) + inner = boxes(b, x[2], x[3]) + at = rng.choice([y[1] for y in inner] + [x[3]]) + kind = rng.choice([b"sbgp", b"free", b"tfdt", b"trun"]) + box = (8 + 8).to_bytes(4, "big") + kind + bytes(8) + b[at:at] = box + b[x[1]:x[1] + 4] = (x[3] - x[1] + len(box)).to_bytes(4, "big") + return bytes(b) + + +def main(argv): + if len(argv) != 4: + print(__doc__) + return 2 + wai_pack, seed, n = argv[1], int(argv[2]), int(argv[3]) + rng = random.Random(seed) + root = os.path.join(HERE, "packs") + sets = [] + for d in (os.path.join(root, "video-cmaf-01", "floor", "hi"), os.path.join(root, "video-cmaf-01", "floor", "lo"), + os.path.join(root, "video-ladder-01", "package", "floor", "hi")): + names = sorted(os.listdir(d)) + sets.append((PV.load(os.path.join(d, "init.mp4")), [PV.load(os.path.join(d, x)) for x in names if x.endswith(".m4s")])) + bad, seen = 0, {} + with tempfile.TemporaryDirectory() as tmp: + for c in range(n): + init, segs = rng.choice(sets) + seg = rng.choice(segs) + if rng.random() < 0.25: + init = alter(rng, init) + else: + seg = alter(rng, seg) + ip, sp = os.path.join(tmp, "init.mp4"), os.path.join(tmp, "seg.m4s") + open(ip, "wb").write(init) + open(sp, "wb").write(seg) + out = subprocess.run([wai_pack, "cmaf-verdict", ip, sp], capture_output=True, text=True).stdout.splitlines() + iv, pi = py_init(init) + want = [f"init\t{iv}"] + if iv == "ok": + v = py_segment(seg, pi) + want.append(f"{sp}\t{v[0]}\t{v[1]}\t{v[2]}") + verdict = want[-1].split("\t")[1] + seen[verdict] = seen.get(verdict, 0) + 1 + if out != want or any("PANIC" in x or "CRASH" in x for x in out + want): + bad += 1 + if bad <= 10: + print(f"case {c}: wai-pack {out}, pack_verify {want}") + print(f"cmaf_diff: {n - bad}/{n} cases agree; verdicts {dict(sorted(seen.items()))}") + return 0 if bad == 0 else 1 + + +if __name__ == "__main__": + sys.exit(main(sys.argv)) diff --git a/wai/wai-pack/src/bin/wai_pack.rs b/wai/wai-pack/src/bin/wai_pack.rs index a24890d56..b52b3c278 100644 --- a/wai/wai-pack/src/bin/wai_pack.rs +++ b/wai/wai-pack/src/bin/wai_pack.rs @@ -76,6 +76,10 @@ //! window,lookahead},"frames":[[RGB8 bytes]...],"stream":bool} and writes, per line, //! {"pieces":[[start,len,flags,abs_diff,changed,compared,occupancy]...],"scores":[...]}, //! pushing frames one at a time when "stream" is true +//! wai-pack cmaf-verdict ... +//! a conformance aid: the supplied CMAF reader's verdict on each file (packaging §7.7), +//! `init\t`, then `\t\t\t` per +//! segment, the digest the SHA-256 of each sample's `offset,length,duration,flags,dts;` //! wai-pack fixture gen [-o ] //! write a conformance fixture (Y4M); `fixture list` names them //! wai-pack conformance regen|check @@ -472,6 +476,39 @@ fn cmd_source_verdict(args: &[String]) -> Result<(), String> { Ok(()) } +/// `cmaf-verdict ...`: the supplied CMAF reader's verdict on each file +/// (packaging §7.7): `init\t`, then per segment `\t\t\t`, +/// the digest the SHA-256 of `,,,,;` per +/// sample; a reader that panics prints `PANIC`. +fn cmd_cmaf_verdict(args: &[String]) -> Result<(), String> { + let (init, segs) = args.split_first().ok_or("cmaf-verdict: ...")?; + let ib = std::fs::read(init).map_err(|e| format!("{init}: {e}"))?; + let i = match std::panic::catch_unwind(|| wai_pack::cmaf_read::read_init(&ib)) { + Err(_) => { + println!("init\tPANIC"); + return Ok(()); + } + Ok(Err(f)) => { + println!("init\t{}", f.code()); + return Ok(()); + } + Ok(Ok(i)) => i, + }; + println!("init\tok"); + for p in segs { + let b = std::fs::read(p).map_err(|e| format!("{p}: {e}"))?; + match std::panic::catch_unwind(|| wai_pack::cmaf_read::read_segment(&b, &i)) { + Err(_) => println!("{p}\tPANIC\t0\t-"), + Ok(Err(f)) => println!("{p}\t{}\t0\t-", f.code()), + Ok(Ok(s)) => { + let text: String = s.iter().map(|x| format!("{},{},{},{},{};", x.at, x.len, x.duration, x.flags, x.dts)).collect(); + println!("{p}\tok\t{}\t{}", s.len(), wai_pack::sha256_hex(text.as_bytes())); + } + } + } + Ok(()) +} + fn cmd_segment_json() -> Result<(), String> { use std::io::BufRead as _; for line in std::io::stdin().lock().lines() { @@ -574,6 +611,7 @@ fn main() -> ExitCode { "listing" => cmd_listing(rest), "policy-verdict" => cmd_policy_verdict(rest), "source-verdict" => cmd_source_verdict(rest), + "cmaf-verdict" => cmd_cmaf_verdict(rest), "segment-json" => cmd_segment_json(), "fixture" => cmd_fixture(rest), "conformance" => cmd_conformance(rest), -- 2.54.0 (Apple Git-157) From 522a46eec649eab39ffd4235b6607f22373c0e63 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 21:25:59 -0400 Subject: [PATCH 12/50] ci(wai-pack): the claim verifier and the OER verifier it imports are among the paths pack_verify.py now reads a metered package's claim with claim-conformance/claim_verify.py, which imports oer-conformance/oer2_verify.py: a change to either runs this workflow. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-pack.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/wai-pack.yml b/.github/workflows/wai-pack.yml index 2cd2ed8b5..ca27f97a1 100644 --- a/.github/workflows/wai-pack.yml +++ b/.github/workflows/wai-pack.yml @@ -20,7 +20,8 @@ name: wai-pack # # Push filters match the push's delta, so every path a build or a verifier reads is # listed: the crate, the wai crate it builds on, the corpus, the BLAKE3, integer payload, -# staged-delivery and staged-measurement verifiers and the registry export pack_verify.py +# staged-delivery and staged-measurement verifiers, the claim verifier (a metered +# package's claim) and the OER verifier it imports, the registry export pack_verify.py # reads, and this file. concurrency: @@ -35,6 +36,8 @@ on: - 'wai/pack-conformance/**' - 'wai/claim-conformance/_blake3.py' - 'wai/claim-conformance/_ed25519.py' + - 'wai/claim-conformance/claim_verify.py' + - 'wai/oer-conformance/oer2_verify.py' - 'wai/int-payload-conformance/int_payload_verify.py' - 'wai/staged-conformance/staged_verify.py' - 'wai/staged-measure-conformance/sim_verify.py' -- 2.54.0 (Apple Git-157) From 55c502d581ef1c917dc226e972d8b00007ea8377 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 21 Oct 2026 21:34:16 -0400 Subject: [PATCH 13/50] pack-conformance: policy_diff.py generates profile, source and the [floor] table The seeded policies now carry component.profile (floor-only, or a value it does not take), a source, and floor.supplied_form and extra_keyframes, so the two policy readers are compared on the new members and their refusals (policy-floor-only among them). Co-Authored-By: Claude Opus 5.5 --- wai/pack-conformance/policy_diff.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/wai/pack-conformance/policy_diff.py b/wai/pack-conformance/policy_diff.py index 9f01e22cf..f785cbfd4 100644 --- a/wai/pack-conformance/policy_diff.py +++ b/wai/pack-conformance/policy_diff.py @@ -125,6 +125,11 @@ def random_policy(rng): body = [] for c in comps: body += ["[[component]]", f'id = "{c}"', "media = " + val(q + biased(["video", "audio", "bogus"]) + q)] + # §7.8's profile and a source, which a floor-only component may not have. + if rng.random() < 0.15: + body.append("profile = " + val(q + biased(["floor-only", "bogus"]) + q)) + if rng.random() < 0.1: + body.append('source = "v.y4m"') if rng.random() > 0.05: num, den = val(str(biased([25, 0, 48000, 4294967295, 16777216]))), val(str(biased([1, 1001, 0, 600]))) body.append("timebase = { num = " + num + ", den = " + den + " }") @@ -147,6 +152,13 @@ def random_policy(rng): body.append(f'refines = "{rng.choice(rungs + ["nope"])}"') if rng.random() < 0.5: body.append("params = " + biased(PARAMS)) + if rng.random() < 0.3: + # §7.7's form of a supplied floor, and the floor's other members. + body.append("[floor]") + if rng.random() < 0.6: + body.append("supplied_form = " + val(q + biased(["cmaf", "obu"]) + q)) + if rng.random() < 0.4: + body.append("extra_keyframes = " + val(biased(["true", "false"]))) if rng.random() < 0.3: body += ["[live]", "layer_lag_ms = " + biased(["[0]", "[0, 200]", "[0, 200, 400]", "[1]", "[0, 100, 50]"])] for i in range(biased([0, 0, 1, 2])): -- 2.54.0 (Apple Git-157) From 7eba1af02c260a1196a792d880c9cab0ce1df83c Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 04:49:56 -0400 Subject: [PATCH 14/50] wai-rs: the encoder's motion search and an object's hash may run elsewhere int_video_enc::encode_with takes the motion search as a MotionSearch, whose rule is the encoder's (every candidate's cost, the least by cost, then by |dy| + |dx|, then the earlier vector): every other step of the encode stays here, so a search that keeps the rule gives encode's payload byte for byte. CpuSearch is the reference, and encode is encode_with over it; a search that gives another number of vectors than the frame's blocks is refused (field_range). stage_index::check_object_hashed is check_object with the content hash handed in, so a verifier can hash a component's objects in one batch on another fabric; check_object is it over the reference hash. Co-Authored-By: Claude Opus 5.5 --- wai/wai-rs/src/int_video_enc.rs | 94 +++++++++++++++++++++++++++++++-- wai/wai-rs/src/stage_index.rs | 12 ++++- 2 files changed, 100 insertions(+), 6 deletions(-) diff --git a/wai/wai-rs/src/int_video_enc.rs b/wai/wai-rs/src/int_video_enc.rs index f059686a5..f44ee312e 100644 --- a/wai/wai-rs/src/int_video_enc.rs +++ b/wai/wai-rs/src/int_video_enc.rs @@ -170,13 +170,51 @@ fn search_block(src: &[u8], rf: &[u8], h: usize, w: usize, y0: usize, x0: usize, (best.2 as i16, best.3 as i16) } +/// Where the motion search of [`encode_with`] runs: something that gives, for one frame, +/// the vector of every block in raster order, each the least-cost candidate under the +/// search order and tie-break of the module documentation. The search is a pure +/// function of the frame, the reference and the parameters, so every implementation +/// that keeps that rule gives the same vectors, and so the same payload; [`CpuSearch`] +/// is the reference. An implementation that cannot search a frame (a device lost, a +/// size it does not take) searches it with [`CpuSearch`] rather than fail, so a payload +/// never depends on where its search ran. +pub trait MotionSearch { + /// Append to `out` the vectors of the `⌈h / block⌉ · ⌈w / block⌉` blocks of `src` + /// (`h × w` RGB8), predicted from `rf` (the previous frame as decoded), with vector + /// components in `−range..=range` in units of `1 / prec` pel. + #[allow(clippy::too_many_arguments)] + fn frame(&mut self, src: &[u8], rf: &[u8], h: usize, w: usize, block: usize, range: i64, prec: i64, out: &mut Vec<(i16, i16)>); +} + +/// The reference motion search, on the CPU: [`search_block`] for each block, in raster +/// order. +#[derive(Debug, Clone, Copy, Default)] +pub struct CpuSearch; + +impl MotionSearch for CpuSearch { + fn frame(&mut self, src: &[u8], rf: &[u8], h: usize, w: usize, block: usize, range: i64, prec: i64, out: &mut Vec<(i16, i16)>) { + for by in 0..h.div_ceil(block) { + for bx in 0..w.div_ceil(block) { + out.push(search_block(src, rf, h, w, by * block, bx * block, block, range, prec)); + } + } + } +} + /// Encode `frames`, each `h × w` RGB8 (rows top to bottom), as a `WIV1` keyframe-0 /// payload under `p`. Refuses `field_range` for a parameter outside its range (`q` /// outside `1..=65535`, `block` 0, `mv_precision` other than 1 or 2, `search · /// mv_precision` past [`MAX_SEARCH_RANGE`]), an empty clip, a zero dimension or a frame /// that is not `h·w·3` bytes; `too_large` for a clip past the format's caps, before -/// anything is allocated. +/// anything is allocated. The motion search runs on the CPU ([`CpuSearch`]). pub fn encode(frames: &[Vec], h: u32, w: u32, p: &EncParams) -> Result { + encode_with(frames, h, w, p, &mut CpuSearch) +} + +/// [`encode`], with the motion search of frames 1 on run by `search`. Every other step +/// (the residuals, the reconstruction, its SSE, the table and the stream) runs here, so a +/// `search` that keeps [`MotionSearch`]'s rule gives [`encode`]'s payload byte for byte. +pub fn encode_with(frames: &[Vec], h: u32, w: u32, p: &EncParams, search: &mut dyn MotionSearch) -> Result { let field = |why: &str| IntPayloadError::new(Refusal::FieldRange, why.to_string()); if !(1..=wire::MAX_Q).contains(&p.q) { return Err(field("q is outside 1..=65535")); @@ -234,10 +272,10 @@ pub fn encode(frames: &[Vec], h: u32, w: u32, p: &EncParams) -> Result 0 { let rf = &recon[f - 1]; - for by in 0..nby as usize { - for bx in 0..nbx { - mvs.push(search_block(src, rf, h, w, by * block, bx * block, block, range, prec as i64)); - } + let before = mvs.len(); + search.frame(src, rf, h, w, block, range, prec as i64, &mut mvs); + if mvs.len() - before != nb as usize { + return Err(field("the motion search gave another number of vectors than the frame has blocks")); } } let mut cur = Vec::with_capacity(src.len()); @@ -374,6 +412,52 @@ mod tests { } } + /// A search run elsewhere is handed each frame from 1 on with the previous frame as + /// decoded; one that keeps the rule gives `encode`'s payload byte for byte, one that + /// moves a vector gives another payload that still decodes to its own + /// reconstruction, and one that gives another number of vectors is refused. + #[test] + fn encode_with_runs_only_the_search_elsewhere() { + struct Seen<'a> { + calls: Vec<(usize, Vec)>, + nudge: Option, + short: bool, + recon: &'a [Vec], + } + impl MotionSearch for Seen<'_> { + fn frame(&mut self, src: &[u8], rf: &[u8], h: usize, w: usize, block: usize, range: i64, prec: i64, out: &mut Vec<(i16, i16)>) { + let f = self.calls.len() + 1; + self.calls.push((f, rf.to_vec())); + let start = out.len(); + CpuSearch.frame(src, rf, h, w, block, range, prec, out); + if self.nudge == Some(f) { + out[start].1 = if out[start].1 == range as i16 { out[start].1 - 1 } else { out[start].1 + 1 }; + } + if self.short { + out.pop(); + } + } + } + let (h, w) = (19, 23); + let src = clip(h, w, 5); + for &(block, search, prec, q) in &[(4, 2, 2, 3), (8, 3, 1, 4), (16, 1, 2, 9)] { + let p = EncParams { block, search, mv_precision: prec, q }; + let want = encode(&src, h as u32, w as u32, &p).unwrap(); + let mut s = Seen { calls: Vec::new(), nudge: None, short: false, recon: &want.recon }; + assert_eq!(encode_with(&src, h as u32, w as u32, &p, &mut s).unwrap(), want, "{p:?}"); + assert_eq!(s.calls.len(), 4, "{p:?}: frames 1 to 4"); + for (f, rf) in &s.calls { + assert_eq!(rf, &s.recon[f - 1], "{p:?}: frame {f} searched from the previous frame as decoded"); + } + let mut moved = Seen { calls: Vec::new(), nudge: Some(2), short: false, recon: &want.recon }; + let other = encode_with(&src, h as u32, w as u32, &p, &mut moved).unwrap(); + assert_ne!(other.wiv1, want.wiv1, "{p:?}: a moved vector is another payload"); + assert_eq!(decode(&other.wiv1), other.recon, "{p:?}"); + let mut short = Seen { calls: Vec::new(), nudge: None, short: true, recon: &want.recon }; + assert_eq!(encode_with(&src, h as u32, w as u32, &p, &mut short).map(|_| ()).unwrap_err().code(), "field_range"); + } + } + #[test] fn quantize_rounds_halves_away_from_zero() { let cases = [(5, 2, 3), (-5, 2, -3), (3, 2, 2), (1, 2, 1), (-1, 2, -1), (7, 4, 2), (6, 4, 2), (2, 4, 1), (-2, 4, -1), (1, 4, 0), (0, 9, 0), (255, 1, 255), (-255, 255, -1)]; diff --git a/wai/wai-rs/src/stage_index.rs b/wai/wai-rs/src/stage_index.rs index 7f197f7d0..923dbd5b3 100644 --- a/wai/wai-rs/src/stage_index.rs +++ b/wai/wai-rs/src/stage_index.rs @@ -806,12 +806,22 @@ pub fn digest_of(file: &[u8]) -> [u8; 32] { /// among them the one its entry refines (`object-refines`); and `derived_from` is present, /// well formed, exactly when the entry says so (`object-derived-from`). pub fn check_object(ix: &StageIndex, k: usize, bytes: &[u8]) -> Result<(), IndexReason> { + check_object_hashed(ix, k, bytes, &mut |b| crate::jwp_hash::content_hash(b)) +} + +/// [`check_object`], with the content hash of `bytes` taken from `hash`, which is asked +/// for it at most once and only once the length holds: a caller that hashed the objects +/// elsewhere (a batch on another fabric, packaging §11.6) hands its result in. The rules +/// and their order are [`check_object`]'s; a caller whose hash is not the reference's +/// gets `object-hash` where the reference would not, so a caller re-checks that refusal +/// with the reference before it reports it. +pub fn check_object_hashed(ix: &StageIndex, k: usize, bytes: &[u8], hash: &mut dyn FnMut(&[u8]) -> [u8; 32]) -> Result<(), IndexReason> { let r = |code: &'static str, detail: String| Err(IndexReason::new(code, detail)); let e = ix.entries.get(k).ok_or_else(|| IndexReason::new("object-hash", format!("no entry {k}")))?; if bytes.len() as u64 != e.byte_len { return r("object-length", format!("{} bytes, the entry says {}", bytes.len(), e.byte_len)); } - if crate::jwp_hash::content_hash(bytes) != e.content_hash { + if hash(bytes) != e.content_hash { return r("object-hash", "the bytes do not hash to the entry's content hash".into()); } let man_len = bytes.get(4..8).map(|b| u32::from_le_bytes(b.try_into().expect("four bytes"))); -- 2.54.0 (Apple Git-157) From 02b005fb4f5ea732abdb95c6c4b5c01b48f1f88d Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 04:50:07 -0400 Subject: [PATCH 15/50] =?UTF-8?q?jwp-receipts=20=C2=A72.4.8:=20a=20measure?= =?UTF-8?q?ment=20claim's=20fabric=20record?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A measurement claim may carry `fabrics` (energy-measurement §6.3): the steps of the work the figure covers, each with every fabric that ran it (cpu, gpu, media, neural) and the backend that did, and the figure divided into one share per fabric, each attributed as `task` (the operating system's account of the work's own energy) or `rail` (the fabric's whole rail, the work its sole user, at least 99% of its busy time). No attribution divides a shared rail by its users' busy time, which does not apportion energy. `fabrics` is the one claim member that is absent rather than null (§2.4), so every claim sealed before it keeps its bytes and link hash. Rule 6 refuses, in order: a fabric or attribution outside §6.3 (measurement_fabric_unknown); no step or no share, or either out of order or repeated (measurement_fabric_order); a step on a fabric with no share (measurement_fabric_unmetered); a share on a fabric no step ran on (measurement_fabric_unused); shares that do not sum to the figure (measurement_fabric_sum). wai-rs: MeasurementClaim::fabrics, its parse, rules and serialisation, and meter_report::emit_with_fabrics. claim_verify.py: the same rules, written from the text. claim-conformance: 14 vectors appended after the 567 before them, which a new test pins by digest (computed from the committed corpus before the change); one accept, four step-2 shape refusals (null among them), the step-4 reasons, and a share attributed by GPU time refused. Co-Authored-By: Claude Opus 5.5 --- wai/claim-conformance/claim_verify.py | 53 +++- wai/claim-conformance/vectors.json | 158 +++++++++++ wai/extensions/energy-measurement.md | 40 +++ wai/extensions/jwp-receipts.md | 33 ++- wai/wai-pack/src/golden.rs | 1 + wai/wai-pack/tests/packs.rs | 1 + wai/wai-rs/src/claim_receipt.rs | 262 +++++++++++++++++- .../src/claim_receipt/corpus/session.rs | 1 + wai/wai-rs/src/energy_figure.rs | 20 ++ wai/wai-rs/src/key_log/corpus.rs | 1 + 10 files changed, 559 insertions(+), 11 deletions(-) diff --git a/wai/claim-conformance/claim_verify.py b/wai/claim-conformance/claim_verify.py index 0e7093178..cf8fcf021 100644 --- a/wai/claim-conformance/claim_verify.py +++ b/wai/claim-conformance/claim_verify.py @@ -214,6 +214,13 @@ GAP_REASONS = ("delivery-timeout", "discretion", "not-received") # §2.4.11 BRACKET = ["idle", "busy", "window_us", "completions", "in_flight", "opening"] SUMMARY = ["n", "mean_uw", "sd_uw", "live_intervals", "longest_live_run"] BUILD = ["profile", "toolchain", "target"] +# §2.4.8's fabric record (energy-measurement §6.3): the one member of a claim that is absent +# rather than null, so a report sealed before it existed keeps its bytes. +FABRIC_RECORD = ["steps", "shares"] +FABRIC_STEP = ["step", "fabric", "backend"] +FABRIC_SHARE = ["fabric", "joules_micro", "attribution"] +FABRICS = ["cpu", "gpu", "media", "neural"] +ATTRIBUTIONS = ["rail", "task"] PREDICTION = ["predictor", "descriptor_hash", "predicted_joules_micro"] # energy-measurement §6.1: profile -> (subject_type, carries several figures, an Ed25519 # key signs the figure, names a group). @@ -393,7 +400,7 @@ def check_body(cls, b): else: raise Reject(2, "field_type") return - members(b, BODY[cls], 2) + members(b, BODY[cls] + (["fabrics"] if cls == "measurement" and "fabrics" in b else []), 2) if cls == "reconstruct-session": check_session_body(b) return @@ -459,6 +466,8 @@ def check_body(cls, b): need(bd["toolchain"] is None or isinstance(bd["toolchain"], str), 2) need(bd["target"] is None or is_token(bd["target"]), 2) need(b["power_reader"] is None or isinstance(b["power_reader"], str), 2) + if "fabrics" in b: + check_fabric_shape(b["fabrics"]) else: need(is_uri(b["vocabulary"]), 2) for k in ("op_requested", "op_committed", "op_delivered"): @@ -1380,6 +1389,46 @@ def acquisition(b): need(u is None and f is None and ref is None, 4, ev) +def check_fabric_shape(f): + """§2.4.8's fabric record at step 2: an object of `steps` and `shares`, every row of + one an object of its members before any row's values, the terms tokens, a backend a + non-empty string, a share's figure an integer. Never null.""" + need(isinstance(f, dict), 2) + members(f, FABRIC_RECORD, 2) + for key, cols in (("steps", FABRIC_STEP), ("shares", FABRIC_SHARE)): + rows = f[key] + need(isinstance(rows, list), 2) + for row in rows: + need(isinstance(row, dict), 2) + members(row, cols, 2) + for row in rows: + if key == "steps": + need(all(isinstance(row[k], str) for k in cols), 2) + need(is_token(row["step"]) and is_token(row["fabric"]) and row["backend"] != "", 2) + else: + need(isinstance(row["fabric"], str) and isinstance(row["attribution"], str), 2) + need(is_token(row["fabric"]) and is_token(row["attribution"]) and is_int(row["joules_micro"]), 2) + + +def fabric_rules(f, joules): + """§2.4.8 rule 6: the vocabularies of energy-measurement §6.3, the order (steps by + term then fabric, shares by fabric, each once, neither empty), every fabric a step + names metered, every share's fabric running a step, and the shares summing to the + figure.""" + st, sh = f["steps"], f["shares"] + need(all(s["fabric"] in FABRICS for s in st) and all(s["fabric"] in FABRICS and s["attribution"] in ATTRIBUTIONS for s in sh), + 4, "measurement_fabric_unknown") + keys = [(s["step"].encode(), FABRICS.index(s["fabric"])) for s in st] + ranks = [FABRICS.index(s["fabric"]) for s in sh] + need(st and sh and all(a < b for a, b in zip(keys, keys[1:])) and all(a < b for a, b in zip(ranks, ranks[1:])), + 4, "measurement_fabric_order") + metered = {s["fabric"] for s in sh} + ran = {s["fabric"] for s in st} + need(ran <= metered, 4, "measurement_fabric_unmetered") + need(metered <= ran, 4, "measurement_fabric_unused") + need(sum(s["joules_micro"] for s in sh) == joules, 4, "measurement_fabric_sum") + + def class_rules(c): """§3.1 step 4 — §2.4.5-§2.4.7 and §2.6.""" cls, b = c["class"], c["body"] @@ -1405,6 +1454,8 @@ def class_rules(c): 4, "measurement_no_power_reader") if b["bracket"] is not None: bracket_rules(b["bracket"], b["joules_micro"], b["energy_provenance"], b["energy_uncertainty"]) + if "fabrics" in b: + fabric_rules(b["fabrics"], b["joules_micro"]) elif cls == "operating-point": figure_rules(c) pts = [b[k] for k in ("op_requested", "op_committed", "op_delivered")] diff --git a/wai/claim-conformance/vectors.json b/wai/claim-conformance/vectors.json index 23f5a1233..cbde2b137 100644 --- a/wai/claim-conformance/vectors.json +++ b/wai/claim-conformance/vectors.json @@ -23534,6 +23534,164 @@ "step": 4, "reason": "session_switch_invalid" } + }, + { + "name": "measurement_fabrics_accept", + "about": "a ModelBased figure of 9,000 uJ divided by fabric: the motion search ran on the CPU and on a GPU, the base's coding on the CPU, the object hashes on the GPU; the CPU's share is the task's own and the GPU's its whole rail, the work its sole user, and the shares sum to the figure", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":6500},{\"attribution\":\"rail\",\"fabric\":\"gpu\",\"joules_micro\":2500}],\"steps\":[{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-code\"},{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"object-hash\"}]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"ade1d72401ae9890ddb985640c3939d4a7366a47ff8ec64dd9d3a1b197f160bdbf5e5d54a45d464b86d981762c8d8b70c189ba67d6f0fe0f0fa3498829949200\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "context": { + "figure": { + "claim": "{\"body\":{\"coverage\":\"Whole\",\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"grade\":\"derived\",\"joules_micro\":9000,\"method\":\"https://transaction.science/wai/extensions/energy-measurement\",\"oer_receipt\":null,\"work_unit\":\"subpixel\",\"work_units\":49152},\"class\":\"energy\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":0,\"sig\":\"81c6ff685f4bf15dc35e0ca55e9823d274185c5ac26299e3c803d90f51fc7b82f87151748d2ed4d755c04ece8a3b77b166f97ddf5e0810da11fd9d96663e1e06\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"5bb20a10b980be8c6d95915394f6e89cd49c16d0f5e94cd87c0ec6ce37bcfc5e\",\"subject_type\":\"object\"}" + } + }, + "expected": { + "outcome": "accept", + "link_hash": "18e3adfd42cfe7e95a5cab676508039a3228201cc9b8dfab627a7a13b3acec59" + } + }, + { + "name": "measurement_fabrics_null", + "about": "a fabric record written null: a report without one has no member, so it has one canonical form", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":null,\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"d08ee5e9f8b1725316150be5e8eb2c3aa44dd384abf55ce6cb23497cc8f24533a5a4c7b9b54b1df0d51de1308b1a931220f06f3679261c1595a73c19bddbbf05\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 2, + "reason": "field_type" + } + }, + { + "name": "measurement_fabric_step_unknown_member", + "about": "a step carrying its work count: a step is its term, fabric and backend", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":6500},{\"attribution\":\"rail\",\"fabric\":\"gpu\",\"joules_micro\":2500}],\"steps\":[{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-code\",\"units\":48},{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"object-hash\"}]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"bf3b79d56a0f330542dd44835a796c0c85de6d1ca93552c2a4602813fb0f3587628823095c8960a499c0c83378ad2656226153e79faa0a279014f27c1239350e\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 2, + "reason": "unknown_member" + } + }, + { + "name": "measurement_fabric_backend_empty", + "about": "a step whose backend is the empty string", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":6500},{\"attribution\":\"rail\",\"fabric\":\"gpu\",\"joules_micro\":2500}],\"steps\":[{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-code\"},{\"backend\":\"\",\"fabric\":\"cpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"object-hash\"}]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"8315dbdc55a7579bda8af4d6e6c74ecae852f1a1479d20b3b0062997be76032500cf3cbe78bd62fe901b5963177932a86afc74a9d921d956f681ef476705e60b\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 2, + "reason": "field_type" + } + }, + { + "name": "measurement_fabric_share_not_integer", + "about": "a share written as a string", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":\"6500\"},{\"attribution\":\"rail\",\"fabric\":\"gpu\",\"joules_micro\":2500}],\"steps\":[{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-code\"},{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"object-hash\"}]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"96617e85e614ab1af4b8973282d845bab99fcf5dc5a6c9842f588519b44da16ec805f9cb18c3e5c96634aed04389bde11cc8e961a51ad2e918b00d971183330e\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 2, + "reason": "field_type" + } + }, + { + "name": "measurement_fabric_unknown", + "about": "a share on a fabric energy-measurement 6.3 does not name", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":6500},{\"attribution\":\"rail\",\"fabric\":\"fpga\",\"joules_micro\":2500}],\"steps\":[{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-code\"},{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"object-hash\"}]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"4b6524608520fccdf643c5cb3dedd95d9a9458cfddf5db5a4aba9633914b21e1ddf6459ffac2430852dbe3dc7fec8fb6462a74315de2ff10401ac8cde1121a0c\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 4, + "reason": "measurement_fabric_unknown" + } + }, + { + "name": "measurement_fabric_attribution_unknown", + "about": "a share attributed by a method energy-measurement 6.3 does not name", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":6500},{\"attribution\":\"estimate\",\"fabric\":\"gpu\",\"joules_micro\":2500}],\"steps\":[{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-code\"},{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"object-hash\"}]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"b402e8284b7ddb0e8d9ce8a95efe11e7b149e77bbbbc952bfe0b1c4529df7e20a4a3ca99fba81950c12cf6aca951ea4612d31e7724d294ce43eea50a64a8d407\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 4, + "reason": "measurement_fabric_unknown" + } + }, + { + "name": "measurement_fabric_time_share", + "about": "a shared GPU rail divided by its users' GPU time: busy time does not apportion energy, so energy-measurement 6.3 names no such attribution", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":6500},{\"attribution\":\"time-share\",\"fabric\":\"gpu\",\"joules_micro\":2500}],\"steps\":[{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-code\"},{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"object-hash\"}]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"1c27953daed7fa881dee0608475b91b85a25dd63c84000e4042b7f99e56c43aa6aaa9deced4e8cc35e69d07288656146763fca5365c4eaab5f60cd4c91ba4d02\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 4, + "reason": "measurement_fabric_unknown" + } + }, + { + "name": "measurement_fabric_steps_out_of_order", + "about": "the motion search listed before the base's coding: steps are in byte order of their terms", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":6500},{\"attribution\":\"rail\",\"fabric\":\"gpu\",\"joules_micro\":2500}],\"steps\":[{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-code\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"object-hash\"}]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"d3d12b97d54fa252120ad54a1e1799c4648beedf078dc37223093ac6cd3d666e1ad61b399e1be0fe8d042697583fa3ad8085f1e0842fe88fe8e4b4abb623a505\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 4, + "reason": "measurement_fabric_order" + } + }, + { + "name": "measurement_fabric_share_twice", + "about": "two shares on the CPU: a fabric has one share", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":6500},{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":2500}],\"steps\":[{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-code\"}]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"fbec2c55c3d7a36f0d3f2093e25c31c5a55bd9e19b3c6f8879aa8dc266e1092fdecb2489f2bafb89fc5abbdf6adf643fc5d59d367fff38d2dd0bfdb4eab86008\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 4, + "reason": "measurement_fabric_order" + } + }, + { + "name": "measurement_fabric_no_step", + "about": "shares with no step: a record says where the work ran", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":6500},{\"attribution\":\"rail\",\"fabric\":\"gpu\",\"joules_micro\":2500}],\"steps\":[]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"b45a7c64df5a376493f0136630ef1080c55c7c966f02eb5410b390c09340812c862a90b7b12703fdb953e58ab665ca55341b1eeb87afc1d5bda68a65a6b9d80e\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 4, + "reason": "measurement_fabric_order" + } + }, + { + "name": "measurement_fabric_unmetered", + "about": "a step on the GPU with a share on the CPU alone: a fabric that ran work has a share", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":9000}],\"steps\":[{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-code\"},{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"object-hash\"}]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"0296dfdd393715cf081ae36dd7e1046345e41489c38a50e44c51ba7fac0f7456d03b5fd8508372517df2bfe583f813394f2f7fd8edaa9d6b68c3daf24a1c1001\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 4, + "reason": "measurement_fabric_unmetered" + } + }, + { + "name": "measurement_fabric_unused", + "about": "a share on the GPU while every step ran on the CPU", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":6500},{\"attribution\":\"rail\",\"fabric\":\"gpu\",\"joules_micro\":2500}],\"steps\":[{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-code\"},{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-search\"}]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"a538aac1de0c7d1c8b50b141ae9e4d8a272264451e15e4736e62126d33f50c3f69e577e33a1b39a07862412718cb7f5f1a009bc38ed96f3297540db4a8bd270e\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 4, + "reason": "measurement_fabric_unused" + } + }, + { + "name": "measurement_fabric_sum", + "about": "shares of 6,500 and 2,499 uJ under a figure of 9,000: the shares divide the figure", + "procedure": "claim", + "receipt": "{\"body\":{\"bracket\":null,\"build\":{\"profile\":\"release\",\"target\":\"x86_64-unknown-linux-gnu\",\"toolchain\":\"rustc 1.98.0 (example)\"},\"energy_calibration_ref\":null,\"energy_counter_filtering\":null,\"energy_provenance\":\"ModelBased\",\"energy_uncertainty\":null,\"fabrics\":{\"shares\":[{\"attribution\":\"task\",\"fabric\":\"cpu\",\"joules_micro\":6500},{\"attribution\":\"rail\",\"fabric\":\"gpu\",\"joules_micro\":2499}],\"steps\":[{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-code\"},{\"backend\":\"claim-conformance: a cpu backend\",\"fabric\":\"cpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"base-search\"},{\"backend\":\"claim-conformance: a gpu backend\",\"fabric\":\"gpu\",\"step\":\"object-hash\"}]},\"figure_index\":null,\"figure_profile\":\"moq-jwp:claim-link\",\"group\":null,\"joules_micro\":9000,\"power_reader\":\"reader:example\"},\"class\":\"measurement\",\"issued_at\":\"2026-09-27T12:00:00Z\",\"kind\":\"claim\",\"parent_receipt_hash\":null,\"seq\":1,\"sig\":\"7528210f3893e4066c79e478bd771fb9dff22ead676a08e86b76a89a0cb37b1fc041d1391250cdca436ad14f1e4a4efa22937c2c1a0f5eb480dea1f954cee201\",\"signer_id\":\"did:example:meter\",\"signer_pubkey\":\"a09aa5f47a6759802ff955f8dc2d2a14a5c99d23be97f864127ff9383455a4f0\",\"subject\":\"a2316cae02860ddb6643af9b2213dcc4768867fbcd46e32e17ad7aabccf8758e\",\"subject_type\":\"receipt\"}", + "expected": { + "outcome": "reject", + "step": 4, + "reason": "measurement_fabric_sum" + } } ] } diff --git a/wai/extensions/energy-measurement.md b/wai/extensions/energy-measurement.md index 4cbb0ae3b..1a11b7f46 100644 --- a/wai/extensions/energy-measurement.md +++ b/wai/extensions/energy-measurement.md @@ -1026,6 +1026,46 @@ and, under a hardware class, that the rail was live and the ratio is at least 1 (jwp-receipts §2.4.8). It does not check the values, which cannot be re-measured (§5). +### 6.3 A figure divided by fabric + +Work can run on more than one kind of processor, a **fabric**: `cpu`, `gpu`, +`media` (a hardware video engine) or `neural` (a neural-network engine). A +`measurement` report MAY carry a **fabric record** (jwp-receipts §2.4.8, +`fabrics`): the steps of the work, each with every fabric that ran it and the +backend that did, and the figure divided into one **share** per fabric that ran +a step. The figure is the sum of its shares, and its class (§2) is the class of +the whole: a share is no measurement of its own. + +Each share states how its energy was attributed to the work: + +- `task`: the operating system's account of the work's own energy on that + fabric, as it accounts a task's use of the processors (on the reference + hosts, the kernel's per-task CPU energy, `ri_energy_nj` of + `proc_pid_rusage`, read by the process for itself), which other work on the + host does not enter; +- `rail`: the fabric's whole rail over the span, in which the work was the + fabric's sole user, at least 99% of the busy time every user of the fabric + accrued over it; a share that is exactly 0 because the work spent no time on + the fabric is also `rail`. + +No attribution divides a rail that other work shared by its users' busy time. +Busy time does not apportion energy: a GPU kernel that keeps the GPU busy at a +low clock and one that keeps it busy at a high clock accrue the same time and +draw very differently, and a division by GPU time has been measured to charge +a decode three to fifteen times the GPU energy it drew alone +(`jouleclaw-energy`, `process_gpu`). Where a fabric that ran a step was shared +and its rail cannot be attributed, the span has no fabric record: the producer +meters it otherwise (§3's bracket, over the whole figure), or seals it +unmetered. So does a span that ran a step on a fabric with no live counter: on +the reference hosts (macOS 27 on arm64) the media engine and the neural engine +have none an unprivileged process can read. + +The record says where the work ran and what each fabric drew; it changes +nothing a figure's verifier checks of the figure itself (§6.2). Which fabric +ran a step changes no output of a step whose output its specification fixes +([packaging](packaging.md) §11, its steps and fabrics), so a record is a statement about energy, not +about what was produced. + ## 7. Worked example `wai.video.int_motion`, real-footage vector, 8 frames of 96×96 RGB, release diff --git a/wai/extensions/jwp-receipts.md b/wai/extensions/jwp-receipts.md index 5767db631..756c1af06 100644 --- a/wai/extensions/jwp-receipts.md +++ b/wai/extensions/jwp-receipts.md @@ -315,7 +315,11 @@ one such statement — a class-scoped `body` under a `class` discriminator — on one envelope. Required members. A claim has no optional members: a nullable member -is present and `null`, so one claim has one canonical form. +is present and `null`, so one claim has one canonical form. There is one +exception, a `measurement` claim's `fabrics` (§2.4.8): it is absent when the +claim does not divide its figure by fabric and is never `null`, so a claim +sealed before the member existed keeps its bytes and its link hash, and one +claim still has one canonical form. | field | type | meaning | |---|---|---| @@ -676,6 +680,7 @@ receipt's identity for every other profile. | `bracket` | object or `null` | For a figure obtained under energy-measurement §3: `{ "idle": summary, "busy": summary, "window_us": integer, "completions": integer, "in_flight": integer, "opening": "from-rest" or "running" }`, a summary being `{ "n": integer, "mean_uw": integer, "sd_uw": integer, "live_intervals": integer, "longest_live_run": integer }` as energy-measurement §6.2 defines them. `null` otherwise. | | `build` | object | `{ "profile": "release" or "debug", "toolchain": string or null, "target": term or null }`: the build of the code measured (energy-measurement §5, §8). `release` is an optimised build (for a Rust build, `opt-level` 2, 3, `s` or `z`, whatever its profile is named); any other build is `debug`. A finer vocabulary is a new registration. | | `power_reader` | string or `null` | The reader of the power interface (energy-measurement §8). Required under a hardware class (rule 4). | +| `fabrics` | object, or absent | Where the work the figure covers ran, and the figure divided by fabric (energy-measurement §6.3): `{ "steps": [step, ...], "shares": [share, ...] }`. A step is `{ "step": term, "fabric": term, "backend": string }`: a step of the work, in the vocabulary of the document that defines the figure's receipt (for `wai:video-package-receipt-id`, the steps of [packaging](packaging.md) §11), a fabric that ran it, and the implementation and device that did, a non-empty string. A share is `{ "fabric": term, "joules_micro": integer, "attribution": term }`. Absent, the claim does not divide its figure; never `null` (§2.4). | A report carries none of what follows from its values: neither the §4 ratio nor its verdict, which every reader derives (energy-measurement §6.2). A bracket @@ -721,6 +726,18 @@ Rules, checked at §3.1 step 4 in this order: **MUST** be the bracket's (`measurement_window_mismatch`), and the declared `relative_ppm` **MUST** be at least the least `p` the bracket supports (energy-measurement §6.2) (`measurement_declaration_below_bracket`). +6. Where `fabrics` is present, in this order: + - every fabric is `cpu`, `gpu`, `media` or `neural`, and every attribution `task` + or `rail` (energy-measurement §6.3) (`measurement_fabric_unknown`); + - there is at least one step and one share; the steps are in the order of their + `step`, in byte order, and then of their fabric, in the order just given, each pair + once; and the shares are in the order of their fabric, each fabric once + (`measurement_fabric_order`); + - every fabric a step names has a share (`measurement_fabric_unmetered`): a fabric + that ran work is metered; + - every share's fabric runs a step (`measurement_fabric_unused`); + - the shares sum to `joules_micro` (`measurement_fabric_sum`): the record divides + the figure, and the figure's class covers every share. **Against the figure** (§3.1 step 6). The context is the receipt the claim names, verified under its own profile's rules; for `moq-jwp:object`, that is @@ -1917,9 +1934,14 @@ order listed. 2. **Body.** A `body` that is not an object is `field_type`. Otherwise it is checked against the class's member table (for a lawful-basis body, the table of the record that `record`, read first, names; see - §2.4.6): a member absent is `missing_required_field`, an additional + §2.4.6): a member absent is `missing_required_field` (but a + `measurement` body's `fabrics`, which may be absent, §2.4), an additional member is `unknown_member`, and then, in the table's order, a member - that is not of the type the table gives it is `field_type`. That is + that is not of the type the table gives it is `field_type`; a `fabrics` + that is `null` is `field_type`, and within it, as in a bracket, a member + absent is `missing_required_field` and an additional one `unknown_member` + (`steps` before `shares`, each array's rows read for their members before + its rows' values). That is a wrong JSON type; an integer that is not one of §2.4.3; a byte string that is not lowercase hex, two digits a byte, or a hash that is not 64 of them; a value outside an enumeration this extension @@ -2061,6 +2083,11 @@ and never folds it in: confirmation changes the outcome of no step here. | 4 | `measurement_figure_mismatch` | `joules_micro` is not the figure the bracket gives | | 4 | `measurement_window_mismatch` | under a hardware class, the declared window is not the bracket's | | 4 | `measurement_declaration_below_bracket` | under a hardware class, `relative_ppm` is below the least the bracket supports | +| 4 | `measurement_fabric_unknown` | a fabric record names a fabric other than `cpu`, `gpu`, `media` and `neural`, or an attribution other than `task` and `rail` | +| 4 | `measurement_fabric_order` | a fabric record with no step or no share, its steps not in the order of their step and fabric, or its shares not in the order of their fabric, or a pair or a fabric twice | +| 4 | `measurement_fabric_unmetered` | a fabric record's step runs on a fabric the record gives no share | +| 4 | `measurement_fabric_unused` | a fabric record's share is on a fabric no step of it runs on | +| 4 | `measurement_fabric_sum` | a fabric record's shares do not sum to `joules_micro` | | 4 | `operating_point_empty_point` | a point is present with no member | | 4 | `operating_point_delivered_alone` | `op_delivered` is present without `op_committed` | | 4 | `operating_point_incomplete` | `op_requested` or `op_committed` is present without `op_delivered` | diff --git a/wai/wai-pack/src/golden.rs b/wai/wai-pack/src/golden.rs index 64c9e0530..361ab49c6 100644 --- a/wai/wai-pack/src/golden.rs +++ b/wai/wai-pack/src/golden.rs @@ -679,6 +679,7 @@ fn metered(g: &Files, key: &SigningKey, claim: Claim) -> Files { bracket: None, build, power_reader: Some("model:500mW".into()), + fabrics: None, }); Some(ClaimReceipt::seal_unchecked(key, &did, SubjectType::Receipt, view.identity, 0, issued, body, None).expect("the claim seals")) } diff --git a/wai/wai-pack/tests/packs.rs b/wai/wai-pack/tests/packs.rs index c55df348b..fe2d6afee 100644 --- a/wai/wai-pack/tests/packs.rs +++ b/wai/wai-pack/tests/packs.rs @@ -270,6 +270,7 @@ fn forged_body(view: &wai::energy_figure::FigureView) -> wai::claim_receipt::Cla bracket: None, build: wai::energy_report::BuildRecord::of_this_build(), power_reader: Some("model".into()), + fabrics: None, }) } diff --git a/wai/wai-rs/src/claim_receipt.rs b/wai/wai-rs/src/claim_receipt.rs index c911cacdf..70d3cca46 100644 --- a/wai/wai-rs/src/claim_receipt.rs +++ b/wai/wai-rs/src/claim_receipt.rs @@ -260,6 +260,17 @@ pub enum Reason { MeasurementWindowMismatch, /// Under a hardware class, a declared uncertainty below the least the bracket supports. MeasurementDeclarationBelowBracket, + /// A fabric record naming a fabric or an attribution outside energy-measurement §6.3. + MeasurementFabricUnknown, + /// A fabric record with no step or no share, or out of its order (a pair or a fabric + /// twice among them). + MeasurementFabricOrder, + /// A step on a fabric the record gives no share. + MeasurementFabricUnmetered, + /// A share on a fabric no step of the record ran on. + MeasurementFabricUnused, + /// Shares that do not sum to the figure. + MeasurementFabricSum, /// An operating point present with no member. OperatingPointEmptyPoint, /// `op_delivered` without `op_committed`. @@ -457,6 +468,11 @@ impl Reason { Reason::MeasurementFigureMismatch => "measurement_figure_mismatch", Reason::MeasurementWindowMismatch => "measurement_window_mismatch", Reason::MeasurementDeclarationBelowBracket => "measurement_declaration_below_bracket", + Reason::MeasurementFabricUnknown => "measurement_fabric_unknown", + Reason::MeasurementFabricOrder => "measurement_fabric_order", + Reason::MeasurementFabricUnmetered => "measurement_fabric_unmetered", + Reason::MeasurementFabricUnused => "measurement_fabric_unused", + Reason::MeasurementFabricSum => "measurement_fabric_sum", Reason::OperatingPointEmptyPoint => "operating_point_empty_point", Reason::OperatingPointDeliveredAlone => "operating_point_delivered_alone", Reason::OperatingPointIncomplete => "operating_point_incomplete", @@ -989,6 +1005,78 @@ pub struct MeasurementClaim { pub build: BuildRecord, /// The reader of the power interface. pub power_reader: Option, + /// Where the work the figure covers ran, and the figure divided by fabric + /// (energy-measurement §6.3). `None`: the member is absent, the one member of a claim + /// that is absent rather than `null`, so a report sealed before it existed keeps its + /// bytes. + pub fabrics: Option, +} + +/// The fabrics a figure's work ran on (jwp-receipts §2.4.8, energy-measurement §6.3): +/// each step with every fabric that ran it and the backend that did, and the figure's +/// share on each fabric. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct FabricRecord { + /// In the order of `(step, fabric)`, each pair once. + pub steps: Vec, + /// In the order of `fabric`, each once. + pub shares: Vec, +} + +/// One step of the work and a fabric that ran it. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct FabricStep { + /// A term of the vocabulary the figure's profile names (for a package receipt, + /// packaging §11.6). + pub step: String, + /// `cpu`, `gpu`, `media` or `neural`. + pub fabric: String, + /// The implementation and device that ran it, as its producer names them. + pub backend: String, +} + +/// The figure's share on one fabric. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct FabricShare { + pub fabric: String, + pub joules_micro: u64, + /// How the share was attributed to the work (energy-measurement §6.3): `task`, the + /// operating system's account of the work's own energy on the fabric, or `rail`, the + /// fabric's whole rail over a span in which the work was its sole user. + pub attribution: String, +} + +/// The fabrics of energy-measurement §6.3, in their order. +pub const FABRICS: [&str; 4] = ["cpu", "gpu", "media", "neural"]; +/// The attributions of energy-measurement §6.3. A rail shared with other work is not +/// divided by its users' busy time, which does not apportion energy, so no term names that. +pub const ATTRIBUTIONS: [&str; 2] = ["rail", "task"]; + +impl FabricRecord { + /// Rule 6 of jwp-receipts §2.4.8: the vocabularies, the orders, every fabric a step + /// names metered and every share's fabric running a step, and the shares summing to + /// the figure. + fn check(&self, joules_micro: u64) -> Result<(), Reason> { + let rank = |f: &str| FABRICS.iter().position(|x| *x == f); + if self.steps.iter().any(|s| rank(&s.fabric).is_none()) || self.shares.iter().any(|s| rank(&s.fabric).is_none() || !ATTRIBUTIONS.contains(&s.attribution.as_str())) { + return Err(Reason::MeasurementFabricUnknown); + } + let ordered_steps = self.steps.windows(2).all(|w| (w[0].step.as_bytes(), rank(&w[0].fabric)) < (w[1].step.as_bytes(), rank(&w[1].fabric))); + let ordered_shares = self.shares.windows(2).all(|w| rank(&w[0].fabric) < rank(&w[1].fabric)); + if self.steps.is_empty() || self.shares.is_empty() || !ordered_steps || !ordered_shares { + return Err(Reason::MeasurementFabricOrder); + } + if self.steps.iter().any(|s| !self.shares.iter().any(|x| x.fabric == s.fabric)) { + return Err(Reason::MeasurementFabricUnmetered); + } + if self.shares.iter().any(|x| !self.steps.iter().any(|s| s.fabric == x.fabric)) { + return Err(Reason::MeasurementFabricUnused); + } + if self.shares.iter().map(|s| s.joules_micro as u128).sum::() != joules_micro as u128 { + return Err(Reason::MeasurementFabricSum); + } + Ok(()) + } } impl MeasurementClaim { @@ -1638,6 +1726,65 @@ const MEASUREMENT_MEMBERS: &[&str] = &[ "build", "power_reader", ]; +/// A measurement body's members with its fabric record (§2.4.8). +const MEASUREMENT_FABRIC_MEMBERS: &[&str] = &[ + "figure_profile", + "figure_index", + "group", + "joules_micro", + "energy_provenance", + "energy_uncertainty", + "energy_counter_filtering", + "energy_calibration_ref", + "bracket", + "build", + "power_reader", + "fabrics", +]; +/// A fabric record's members, a step's and a share's (§2.4.8). +const FABRIC_MEMBERS: &[&str] = &["steps", "shares"]; +const FABRIC_STEP_MEMBERS: &[&str] = &["step", "fabric", "backend"]; +const FABRIC_SHARE_MEMBERS: &[&str] = &["fabric", "joules_micro", "attribution"]; + +/// A fabric record (§2.4.8): an object of `steps` and `shares`, each an array of objects +/// of their members, the terms and the backend non-empty strings, each share's figure an +/// integer. Never `null`: a report with no record has no member. +fn get_fabrics(v: &Value) -> Result { + let fm = v.as_object().ok_or(Reason::FieldType)?; + members(fm, FABRIC_MEMBERS)?; + let rows = |k: &str, required: &[&str]| -> Result>, Reason> { + let a = fm[k].as_array().ok_or(Reason::FieldType)?; + a.iter() + .map(|x| { + let o = x.as_object().ok_or(Reason::FieldType)?; + members(o, required)?; + Ok(o.clone()) + }) + .collect() + }; + let steps = rows("steps", FABRIC_STEP_MEMBERS)? + .iter() + .map(|o| { + let (step, fabric, backend) = (get_str(o, "step")?, get_str(o, "fabric")?, get_str(o, "backend")?); + term_ok(&step)?; + term_ok(&fabric)?; + if backend.is_empty() { + return Err(Reason::FieldType); + } + Ok(FabricStep { step, fabric, backend }) + }) + .collect::, Reason>>()?; + let shares = rows("shares", FABRIC_SHARE_MEMBERS)? + .iter() + .map(|o| { + let (fabric, attribution) = (get_str(o, "fabric")?, get_str(o, "attribution")?); + term_ok(&fabric)?; + term_ok(&attribution)?; + Ok(FabricShare { fabric, joules_micro: get_int(o, "joules_micro")?, attribution }) + }) + .collect::, Reason>>()?; + Ok(FabricRecord { steps, shares }) +} /// An operating-point body's members (§2.4.9), in the order step 2 reads them. const OPERATING_POINT_MEMBERS: &[&str] = &[ "figure_profile", @@ -1786,6 +1933,14 @@ impl ClaimBody { b.insert("target".into(), c.build.target.clone().map(Value::String).unwrap_or(Value::Null)); m.insert("build".into(), Value::Object(b)); m.insert("power_reader".into(), c.power_reader.clone().map(Value::String).unwrap_or(Value::Null)); + if let Some(f) = &c.fabrics { + let steps = f.steps.iter().map(|s| serde_json::json!({ "step": s.step, "fabric": s.fabric, "backend": s.backend })).collect(); + let shares = f.shares.iter().map(|s| serde_json::json!({ "fabric": s.fabric, "joules_micro": s.joules_micro, "attribution": s.attribution })).collect(); + let mut fm = Map::new(); + fm.insert("steps".into(), Value::Array(steps)); + fm.insert("shares".into(), Value::Array(shares)); + m.insert("fabrics".into(), Value::Object(fm)); + } } ClaimBody::OperatingPoint(c) => { c.figure.insert_into(&mut m); @@ -1956,7 +2111,12 @@ impl ClaimBody { }) } ClaimClass::Measurement => { - members(m, MEASUREMENT_MEMBERS)?; + // `fabrics` is the one member that is absent rather than null (§2.4.8). + if m.contains_key("fabrics") { + members(m, MEASUREMENT_FABRIC_MEMBERS)?; + } else { + members(m, MEASUREMENT_MEMBERS)?; + } let figure = FigureHeader::read(m)?; let bracket = match &m["bracket"] { Value::Null => None, @@ -1975,6 +2135,7 @@ impl ClaimBody { bracket, build: BuildRecord { profile, toolchain, target }, power_reader: get_opt_str(m, "power_reader")?, + fabrics: m.get("fabrics").map(get_fabrics).transpose()?, }) } ClaimClass::OperatingPoint => { @@ -2156,6 +2317,20 @@ impl ClaimBody { if let Some(t) = &c.build.target { term_ok(t)?; } + if let Some(f) = &c.fabrics { + for s in &f.steps { + term_ok(&s.step)?; + term_ok(&s.fabric)?; + if s.backend.is_empty() { + return Err(Reason::FieldType); + } + } + for s in &f.shares { + term_ok(&s.fabric)?; + term_ok(&s.attribution)?; + int_ok(s.joules_micro)?; + } + } Ok(()) } ClaimBody::OperatingPoint(c) => { @@ -2230,6 +2405,10 @@ impl ClaimBody { let hardware = class.uncertainty().map(|u| (u.relative_ppm, u.window_us)); b.check(c.figure.joules_micro, hardware).map_err(report_reason)?; } + // Rule 6: a fabric record's vocabularies, order, coverage and sum. + if let Some(f) = &c.fabrics { + f.check(c.figure.joules_micro)?; + } Ok(()) } ClaimBody::OperatingPoint(c) => { @@ -3509,7 +3688,7 @@ pub(crate) fn rfc3339(s: &str) -> bool { /// fails instead of passing on nothing. (A function rather than a public constant so /// cbindgen does not export it into the C header.) pub fn corpus_vector_count() -> usize { - 567 + 581 } /// The conformance corpus (`claim-conformance/vectors.json`), regenerated. Ed25519 @@ -4747,6 +4926,60 @@ mod corpus { v.extend(stage_vectors()); // §2.4.12, appended: the vectors above are an unchanged prefix. v.extend(session::vectors()); + // §2.4.8's fabric record, appended the same way. + v.extend(fabric_vectors()); + v + } + + /// A measurement claim's fabric record (§2.4.8, energy-measurement §6.3), appended + /// after every earlier vector so that they stay an unchanged prefix. + fn fabric_vectors() -> Vec { + let meter_id = "did:example:meter"; + let model = EnergyProvenance::ModelBased; + let mut v = Vec::new(); + let fstep = |step: &str, fabric: &str| FabricStep { step: step.into(), fabric: fabric.into(), backend: format!("claim-conformance: a {fabric} backend") }; + let fshare = |fabric: &str, joules_micro: u64, attribution: &str| FabricShare { fabric: fabric.into(), joules_micro, attribution: attribution.into() }; + let record = |steps: Vec, shares: Vec| FabricRecord { steps, shares }; + let good = || record( + vec![fstep("base-code", "cpu"), fstep("base-search", "cpu"), fstep("base-search", "gpu"), fstep("object-hash", "gpu")], + vec![fshare("cpu", 6_500, "task"), fshare("gpu", 2_500, "rail")], + ); + let e_fab = named(9_000, &model); + let fab_body = |f: FabricRecord| ClaimBody::Measurement(MeasurementClaim { figure: claim_link(9_000, &model), bracket: None, build: release(), power_reader: Some(READER.into()), fabrics: Some(f) }); + let fab_accept = seal(&meter(), meter_id, SubjectType::Receipt, e_fab.link_hash(), 1, fab_body(good()), None); + let fab_bad = |f: FabricRecord| seal_bad(&meter(), meter_id, SubjectType::Receipt, e_fab.link_hash(), 1, fab_body(f)); + let fab_edit = |f: &dyn Fn(&mut Map)| resigned(&fab_accept, &meter(), |m| f(body_of(m))); + v.push(with(claim("measurement_fabrics_accept", "a ModelBased figure of 9,000 uJ divided by fabric: the motion search ran on the CPU and on a GPU, the base's coding on the CPU, the object hashes on the GPU; the CPU's share is the task's own and the GPU's its whole rail, the work its sole user, and the shares sum to the figure", + fab_accept.to_json(), Ok(())), "figure", claim_ctx(&e_fab))); + v.extend([ + reject("measurement_fabrics_null", "a fabric record written null: a report without one has no member, so it has one canonical form", + fab_edit(&|b| { b.insert("fabrics".into(), Value::Null); }), 2, Reason::FieldType), + reject("measurement_fabric_step_unknown_member", "a step carrying its work count: a step is its term, fabric and backend", + fab_edit(&|b| { b["fabrics"]["steps"][0]["units"] = 48.into(); }), 2, Reason::UnknownMember), + reject("measurement_fabric_backend_empty", "a step whose backend is the empty string", + fab_edit(&|b| { b["fabrics"]["steps"][1]["backend"] = "".into(); }), 2, Reason::FieldType), + reject("measurement_fabric_share_not_integer", "a share written as a string", + fab_edit(&|b| { b["fabrics"]["shares"][0]["joules_micro"] = "6500".into(); }), 2, Reason::FieldType), + reject("measurement_fabric_unknown", "a share on a fabric energy-measurement 6.3 does not name", + fab_bad(record(good().steps, vec![fshare("cpu", 6_500, "task"), fshare("fpga", 2_500, "rail")])), 4, Reason::MeasurementFabricUnknown), + reject("measurement_fabric_attribution_unknown", "a share attributed by a method energy-measurement 6.3 does not name", + fab_bad(record(good().steps, vec![fshare("cpu", 6_500, "task"), fshare("gpu", 2_500, "estimate")])), 4, Reason::MeasurementFabricUnknown), + reject("measurement_fabric_time_share", "a shared GPU rail divided by its users' GPU time: busy time does not apportion energy, so energy-measurement 6.3 names no such attribution", + fab_bad(record(good().steps, vec![fshare("cpu", 6_500, "task"), fshare("gpu", 2_500, "time-share")])), 4, Reason::MeasurementFabricUnknown), + reject("measurement_fabric_steps_out_of_order", "the motion search listed before the base's coding: steps are in byte order of their terms", + fab_bad(record(vec![fstep("base-search", "cpu"), fstep("base-code", "cpu"), fstep("base-search", "gpu"), fstep("object-hash", "gpu")], good().shares)), 4, Reason::MeasurementFabricOrder), + reject("measurement_fabric_share_twice", "two shares on the CPU: a fabric has one share", + fab_bad(record(vec![fstep("base-code", "cpu")], vec![fshare("cpu", 6_500, "task"), fshare("cpu", 2_500, "task")])), 4, Reason::MeasurementFabricOrder), + reject("measurement_fabric_no_step", "shares with no step: a record says where the work ran", + fab_bad(record(Vec::new(), good().shares)), 4, Reason::MeasurementFabricOrder), + reject("measurement_fabric_unmetered", "a step on the GPU with a share on the CPU alone: a fabric that ran work has a share", + fab_bad(record(good().steps, vec![fshare("cpu", 9_000, "task")])), 4, Reason::MeasurementFabricUnmetered), + reject("measurement_fabric_unused", "a share on the GPU while every step ran on the CPU", + fab_bad(record(vec![fstep("base-code", "cpu"), fstep("base-search", "cpu")], good().shares)), 4, Reason::MeasurementFabricUnused), + reject("measurement_fabric_sum", "shares of 6,500 and 2,499 uJ under a figure of 9,000: the shares divide the figure", + fab_bad(record(good().steps, vec![fshare("cpu", 6_500, "task"), fshare("gpu", 2_499, "rail")])), 4, Reason::MeasurementFabricSum), + ]); + v } @@ -4816,7 +5049,7 @@ mod corpus { } fn measurement_body(h: FigureHeader, b: Option, build: BuildRecord) -> ClaimBody { - ClaimBody::Measurement(MeasurementClaim { figure: h, bracket: b, build, power_reader: Some(READER.into()) }) + ClaimBody::Measurement(MeasurementClaim { figure: h, bracket: b, build, power_reader: Some(READER.into()), fabrics: None }) } fn point(pairs: &[(&str, u64)]) -> Option { @@ -4924,7 +5157,7 @@ mod corpus { let est = EnergyProvenance::Estimator; let e_est = named(9_000, &est); let debug = BuildRecord { profile: BuildProfile::Debug, toolchain: None, target: None }; - let no_bracket = ClaimBody::Measurement(MeasurementClaim { figure: claim_link(9_000, &est), bracket: None, build: debug, power_reader: None }); + let no_bracket = ClaimBody::Measurement(MeasurementClaim { figure: claim_link(9_000, &est), bracket: None, build: debug, power_reader: None, fabrics: None }); v.push(with(claim("measurement_no_bracket_accept", "an Estimator figure obtained under no bracket: the report states the build alone, a debug build, its toolchain, target and reader unknown", seal(&meter(), meter_id, SubjectType::Receipt, e_est.link_hash(), 1, no_bracket, None).to_json(), Ok(())), "figure", claim_ctx(&e_est))); let counter = chip_class(20_000, 1_000_000); @@ -5046,11 +5279,12 @@ mod corpus { bad_about(&e_unit, ClaimBody::Measurement(MeasurementClaim { figure: FigureHeader { energy_uncertainty: None, ..claim_link(f_unit, &c_unit) }, bracket: Some(unit), build: release(), power_reader: Some(READER.into()), + fabrics: None, })), 4, Reason::EnergyAcquisitionEvidence), reject("measurement_no_power_reader", "an OnChipCounter report that names no power reader: a hardware figure is a reading, and its report names what read it", - bad_about(&e_unit, ClaimBody::Measurement(MeasurementClaim { figure: claim_link(f_unit, &c_unit), bracket: Some(unit), build: release(), power_reader: None })), 4, Reason::MeasurementNoPowerReader), + bad_about(&e_unit, ClaimBody::Measurement(MeasurementClaim { figure: claim_link(f_unit, &c_unit), bracket: Some(unit), build: release(), power_reader: None, fabrics: None })), 4, Reason::MeasurementNoPowerReader), reject("measurement_no_power_reader_no_bracket", "an OnChipCounter report with neither a bracket nor a reader: omitting the bracket does not excuse the reader", - bad_about(&e_unit, ClaimBody::Measurement(MeasurementClaim { figure: claim_link(f_unit, &c_unit), bracket: None, build: release(), power_reader: None })), 4, Reason::MeasurementNoPowerReader), + bad_about(&e_unit, ClaimBody::Measurement(MeasurementClaim { figure: claim_link(f_unit, &c_unit), bracket: None, build: release(), power_reader: None, fabrics: None })), 4, Reason::MeasurementNoPowerReader), reject("measurement_one_idle_sample", "an idle bracket of one sample has no standard deviation", hw_report(at(live(1, 20_000_000, 0), unit.busy), &c_unit, f_unit), 4, Reason::MeasurementTooFewSamples), reject("measurement_rail_not_live", "the busy bracket's rail advanced in 4 samples of 14: below five, and below four in five", @@ -5947,6 +6181,7 @@ mod tests { bracket: Some(b), build: BuildRecord::of_this_build(), power_reader: reader.map(str::to_owned), + fabrics: None, }); ClaimReceipt::seal_unchecked(key, "r", SubjectType::Receipt, e.link_hash(), 1, T, body, None).unwrap() }; @@ -5968,7 +6203,7 @@ mod tests { let class = EnergyProvenance::ModelBased; let h = |profile: &str, index: Option, j: u64| FigureHeader::new(profile, index, None, j, &class); let m = |h: FigureHeader, b: Option| { - ClaimBody::Measurement(MeasurementClaim { figure: h, bracket: b, build: BuildRecord::of_this_build(), power_reader: None }) + ClaimBody::Measurement(MeasurementClaim { figure: h, bracket: b, build: BuildRecord::of_this_build(), power_reader: None, fabrics: None }) }; let seal = |body: ClaimBody| ClaimReceipt::seal(&k(1), "m", SubjectType::Receipt, [1; 32], 0, T, body, None); assert!(seal(m(h("moq-jwp:claim-link", None, 5), None)).is_ok()); @@ -6441,6 +6676,19 @@ mod tests { assert_eq!(hex(digest.as_bytes()), "41465e7b57ca795b8ee4b998f11553a3a2b720fe994e6f0d53866af73f281ba1"); } + /// The vectors the corpus held before a measurement claim's fabric record was added + /// (all 567), pinned as the tests above pin theirs. The digest was computed from the + /// committed corpus before the record was added and must never be edited to make the + /// test pass. + #[test] + fn the_vectors_before_the_fabric_record_are_unchanged() { + let doc: Value = crate::oer::load(conformance_vectors().as_bytes()).unwrap(); + let vs = doc["vectors"].as_array().unwrap(); + let first = Value::Array(vs[..567].to_vec()); + let digest = blake3::hash(serde_json::to_string(&first).unwrap().as_bytes()); + assert_eq!(hex(digest.as_bytes()), "74f802d701daa0620b1577cb100a80951fedb797f9d47057efca61f21d40b8a6"); + } + /// A session claim's grammars (§2.4.12): `media`, a decoder identifier, and the /// rounding of its worker count. #[test] diff --git a/wai/wai-rs/src/claim_receipt/corpus/session.rs b/wai/wai-rs/src/claim_receipt/corpus/session.rs index e68a02ab0..1026e6edd 100644 --- a/wai/wai-rs/src/claim_receipt/corpus/session.rs +++ b/wai/wai-rs/src/claim_receipt/corpus/session.rs @@ -1365,6 +1365,7 @@ pub(super) fn vectors() -> Vec { bracket: None, build: BuildRecord { profile: BuildProfile::Release, toolchain: None, target: None }, power_reader: Some("a counter reader".into()), + fabrics: None, }); seal(&viewer(), SINK_ID, SubjectType::Receipt, s.link_hash(), 1, body, None) }; diff --git a/wai/wai-rs/src/energy_figure.rs b/wai/wai-rs/src/energy_figure.rs index 80987c08d..c12e00907 100644 --- a/wai/wai-rs/src/energy_figure.rs +++ b/wai/wai-rs/src/energy_figure.rs @@ -464,6 +464,25 @@ pub mod meter_report { signer_id: &str, previous: Option<&ClaimReceipt>, issued_at: &str, + ) -> Result { + emit_with_fabrics(view, index, bracket, build, power_reader, None, signer, signer_id, previous, issued_at) + } + + /// [`emit`], the report carrying `fabrics` (energy-measurement §6.3): where the work + /// the figure covers ran, and the figure divided by fabric. `None` is [`emit`]'s + /// report, which has no `fabrics` member. + #[allow(clippy::too_many_arguments)] + pub fn emit_with_fabrics( + view: &FigureView, + index: Option, + bracket: Option, + build: BuildRecord, + power_reader: &str, + fabrics: Option, + signer: &SigningKey, + signer_id: &str, + previous: Option<&ClaimReceipt>, + issued_at: &str, ) -> Result { let profile = super::profile(&view.profile).ok_or("the receipt's profile is not in energy-measurement section 6.1")?; let f = view.figure(index).ok_or("the receipt carries no figure at that index")?; @@ -473,6 +492,7 @@ pub mod meter_report { bracket, build, power_reader: Some(power_reader.to_owned()), + fabrics, }); let (seq, parent) = match previous { Some(p) => (p.seq + 1, Some(p.link_hash())), diff --git a/wai/wai-rs/src/key_log/corpus.rs b/wai/wai-rs/src/key_log/corpus.rs index b5d20298e..ede135e40 100644 --- a/wai/wai-rs/src/key_log/corpus.rs +++ b/wai/wai-rs/src/key_log/corpus.rs @@ -256,6 +256,7 @@ fn measurement_body(class: &str) -> ClaimBody { bracket: None, build: BuildRecord { profile: BuildProfile::Release, toolchain: None, target: None }, power_reader: Some("urn:example:power-reader".into()), + fabrics: None, }) } -- 2.54.0 (Apple Git-157) From 84322d7c48f7c65569010358420750bc97fc3603 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 04:50:22 -0400 Subject: [PATCH 16/50] wai-pack-gpu: the motion search, SSE and BLAKE3 as exact WGSL kernels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A crate of its own, with its own lockfile, as wai-ops-gpu is: WGSL compute kernels through wgpu 30.0.1 (Metal, Vulkan, DX12), in 32-bit words with every intermediate bounded inside its type, so a device that executes WGSL's integer arithmetic gives the CPU's result for every input. - motion.wgsl: one workgroup per block, each thread the least of the candidates it visits by (cost, |dy| + |dx|, index), the workgroup reducing them to the least: the order is total, so the result is the encoder's whichever thread meets which candidate first. Half-pel prediction with integer rounding and clamped coordinates, as integer-payloads §3 defines it. - sse.wgsl: partial sums of at most 4,096 bytes a thread (under 2^32), added on the host in 64 bits. - blake3.wgsl: BLAKE3's chunk function, one thread per chunk of one message; a message of several chunks has its parent nodes merged on the host by the reference crate's subtree functions, in the tree the specification fixes. A size a kernel does not take (a block whose cost can pass 2^32 - 1, a range past 127, a binding past the device's) is refused before anything runs, so the caller computes it on the CPU. A software rasteriser is not opened: it runs on the CPU. tests/kernels.rs holds each kernel to a reference transcribed from the extension text (the BLAKE3 crate for BLAKE3), on frames of noise, near ties, flat fields (every candidate ties), alternating columns (two vectors tie at one length) and hard edges, at sizes that are not whole blocks and both precisions; tests/mutants.rs edits one expression of a kernel at a time (a tie rule, a rounding addend, a clamp bound, a reduction bound, a square, a rotation, a permutation entry, the root flag, the chunk counter, a block length) and requires the cases to catch each, on every adapter. With no adapter the tests print SKIPPED, unless WAI_PACK_GPU_REQUIRE is set. Co-Authored-By: Claude Opus 5.5 --- wai/wai-pack-gpu/Cargo.lock | 1063 +++++++++++++++++++++++++ wai/wai-pack-gpu/Cargo.toml | 34 + wai/wai-pack-gpu/src/lib.rs | 486 +++++++++++ wai/wai-pack-gpu/src/wgsl/blake3.wgsl | 145 ++++ wai/wai-pack-gpu/src/wgsl/motion.wgsl | 131 +++ wai/wai-pack-gpu/src/wgsl/sse.wgsl | 41 + wai/wai-pack-gpu/tests/kernels.rs | 79 ++ wai/wai-pack-gpu/tests/mutants.rs | 86 ++ wai/wai-pack-gpu/tests/support/mod.rs | 169 ++++ 9 files changed, 2234 insertions(+) create mode 100644 wai/wai-pack-gpu/Cargo.lock create mode 100644 wai/wai-pack-gpu/Cargo.toml create mode 100644 wai/wai-pack-gpu/src/lib.rs create mode 100644 wai/wai-pack-gpu/src/wgsl/blake3.wgsl create mode 100644 wai/wai-pack-gpu/src/wgsl/motion.wgsl create mode 100644 wai/wai-pack-gpu/src/wgsl/sse.wgsl create mode 100644 wai/wai-pack-gpu/tests/kernels.rs create mode 100644 wai/wai-pack-gpu/tests/mutants.rs create mode 100644 wai/wai-pack-gpu/tests/support/mod.rs diff --git a/wai/wai-pack-gpu/Cargo.lock b/wai/wai-pack-gpu/Cargo.lock new file mode 100644 index 000000000..6f32f9a1d --- /dev/null +++ b/wai/wai-pack-gpu/Cargo.lock @@ -0,0 +1,1063 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android_system_properties" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" +dependencies = [ + "libc", +] + +[[package]] +name = "arrayvec" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" + +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "bit-set" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2f926cc3060f09db9ebc5b52823d85268d24bb917e472c0c4bea35780a7d" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "blake3" +version = "1.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d9e454fc11f76977dc803893aff6304ed33d6a26efae8696573bea74baa27ae" +dependencies = [ + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "cpufeatures", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a1f896587b6f2c069c73d2f0913e2d590c3990285cd2f0b6aa02b786b4c679c" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "cc" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877bf67ac8e52449eb2f9e98a344ea163beb70dd1f9eebe3cc5357dcfeaee4df" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" + +[[package]] +name = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "codespan-reporting" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "constant_time_eq" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" + +[[package]] +name = "cpufeatures" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" +dependencies = [ + "libc", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags", + "objc2", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "equivalent" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" + +[[package]] +name = "find-msvc-tools" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "gpu-allocator" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795" +dependencies = [ + "ash", + "hashbrown 0.16.1", + "log", + "presser", + "thiserror", + "windows", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "num-traits", + "zerocopy", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash", +] + +[[package]] +name = "indexmap" +version = "2.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", +] + +[[package]] +name = "js-sys" +version = "0.3.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.191" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a" + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "litrs" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "naga" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a616d2fb8c89516ac2723a581f69d6c18576046bed761bd6b305e5618e6ae130" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags", + "cfg-if", + "cfg_aliases", + "codespan-reporting", + "half", + "hashbrown 0.17.1", + "indexmap", + "libm", + "log", + "naga-types", + "num-traits", + "once_cell", + "rustc-hash", + "spirv", + "thiserror", + "unicode-ident", +] + +[[package]] +name = "naga-types" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "590afbf58a6f4f62873cd5cff4468061844bafa1cdf399cc954537c22d768d49" +dependencies = [ + "hashbrown 0.17.1", + "indexmap", + "rustc-hash", + "thiserror", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "objc2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08849bbd4767dfae9457696856ae1c84fe4e0281bbe4a7abff2d0e06fb7981f8" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-metal" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" +dependencies = [ + "bitflags", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "ordered-float" +version = "5.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c7c9e0d9b23589f26070720bac724174bfec1083e82f7854cdd0267518343c0" +dependencies = [ + "num-traits", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "portable-atomic" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" + +[[package]] +name = "portable-atomic-util" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "profiling" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "range-alloc" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "raw-window-metal" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40d213455a5f1dc59214213c7330e074ddf8114c9a42411eb890c767357ce135" +dependencies = [ + "objc2", + "objc2-core-foundation", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b" + +[[package]] +name = "spirv" +version = "0.4.0+sdk-1.4.341.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9571ea910ebd84c86af4b3ed27f9dbdc6ad06f17c5f96146b2b671e2976744f" +dependencies = [ + "bitflags", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "2.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "tokio" +version = "1.54.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c168a474b95bfecfe908a65d4bdffc523144b649a74c09c286afb35d53e0bc" +dependencies = [ + "pin-project-lite", +] + +[[package]] +name = "unicode-ident" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "wai-pack-gpu" +version = "0.1.0" +dependencies = [ + "blake3", + "wgpu", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" +dependencies = [ + "js-sys", + "tokio", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 3.0.9", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wgpu" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527ccdf43dd5b2e8676eed9984ce00e2bbb0a1b85b70c1969dcb6cd2eb55ab9e" +dependencies = [ + "arrayvec", + "bitflags", + "bytemuck", + "cfg-if", + "cfg_aliases", + "document-features", + "hashbrown 0.17.1", + "js-sys", + "log", + "portable-atomic", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c018fce9b6270aa203c2fdd56f3cce996713534bd757e4ea58c8560b121f14" +dependencies = [ + "arrayvec", + "bit-set", + "bit-vec", + "bitflags", + "bytemuck", + "cfg_aliases", + "document-features", + "hashbrown 0.17.1", + "indexmap", + "log", + "naga", + "naga-types", + "once_cell", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "rustc-hash", + "smallvec", + "thiserror", + "wgpu-core-deps-apple", + "wgpu-core-deps-windows-linux-android", + "wgpu-hal", + "wgpu-naga-bridge", + "wgpu-types", +] + +[[package]] +name = "wgpu-core-deps-apple" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061f3d319a40d39d00b1ecc2c33b89fe21d4e6fe01859df3500a3a8ecccd6b68" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-windows-linux-android" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7586165fd5f6d881cb9ce4bb71f40d6caab2c0f1837e3fc1d9788a197fb6004f" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-hal" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b7fb58561a792bc237628ba0792e332de418fefe145f13b5ed8201e6d52f58" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags", + "block2", + "bytemuck", + "cfg-if", + "cfg_aliases", + "gpu-allocator", + "hashbrown 0.17.1", + "libc", + "libloading", + "log", + "naga", + "naga-types", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-metal", + "objc2-quartz-core", + "once_cell", + "ordered-float", + "parking_lot", + "portable-atomic", + "portable-atomic-util", + "profiling", + "range-alloc", + "raw-window-handle", + "raw-window-metal", + "renderdoc-sys", + "smallvec", + "static_assertions", + "thiserror", + "wgpu-naga-bridge", + "wgpu-types", + "windows", + "windows-core", +] + +[[package]] +name = "wgpu-naga-bridge" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f62e73117bb7a62bfd9c5a5841438a823f6566c6442a808ee269d2d055c081" +dependencies = [ + "naga", + "wgpu-types", +] + +[[package]] +name = "wgpu-types" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99dad6f1fbdbbdb4c278a6508b059d44688f5cebddf78d005a46a31340269286" +dependencies = [ + "bitflags", + "bytemuck", + "js-sys", + "log", + "naga-types", + "raw-window-handle", + "static_assertions", + "web-sys", +] + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core", + "windows-link", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link", +] + +[[package]] +name = "zerocopy" +version = "0.8.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] diff --git a/wai/wai-pack-gpu/Cargo.toml b/wai/wai-pack-gpu/Cargo.toml new file mode 100644 index 000000000..05117ba88 --- /dev/null +++ b/wai/wai-pack-gpu/Cargo.toml @@ -0,0 +1,34 @@ +# The steps of WAI's packaging extension that a GPU computes exactly, as WGSL compute +# kernels through wgpu (Metal, Vulkan, DX12): the integer encoder's motion search, the +# sum of squared differences, and BLAKE3's chunk function. Every kernel is integer, in +# 32-bit words, so a device that runs it gives the CPU's result for every input +# (extensions/packaging.md §11.6). +# +# A SEPARATE crate with its own lockfile, as wai-ops-gpu is, so that wai-pack builds +# without wgpu by default; wai-pack's `gpu` feature is the only way it enters a pack. +[package] +name = "wai-pack-gpu" +version = "0.1.0" +edition = "2024" +rust-version = "1.97" +license = "Apache-2.0" +publish = false +description = "WAI packaging steps on GPUs: the integer motion search, SSE and BLAKE3's chunk function as WGSL kernels through wgpu, exact in 32-bit words" +repository = "https://git.transaction.science/Transaction-Science/open-standards" + +# Its own workspace and Cargo.lock. +[workspace] + +[lib] +name = "wai_pack_gpu" +path = "src/lib.rs" + +[dependencies] +wgpu = { version = "30.0.1", default-features = false, features = ["std", "wgsl", "metal", "vulkan", "dx12"] } +# The parent nodes of a message of several chunks are merged on the host, by the BLAKE3 +# reference crate's subtree functions (`blake3::hazmat`); the device computes the chunks. +blake3 = "1" + +[profile.release] +debug = false +overflow-checks = true diff --git a/wai/wai-pack-gpu/src/lib.rs b/wai/wai-pack-gpu/src/lib.rs new file mode 100644 index 000000000..328585a01 --- /dev/null +++ b/wai/wai-pack-gpu/src/lib.rs @@ -0,0 +1,486 @@ +//! The steps of WAI's packaging extension that a GPU computes exactly +//! (`extensions/packaging.md` §11.6): WGSL compute kernels, run through `wgpu` on Metal, +//! Vulkan and DX12. +//! +//! - [`Gpu::motion_frame`]: the motion search of `wai.video.int_motion`'s encoder for one +//! frame (§5.5), every block's vector under the encoder's search order and tie-break; +//! - [`Gpu::sse`]: the sum of squared differences of two byte strings (§6.6); +//! - [`Gpu::blake3_many`]: BLAKE3 of many messages, each chunk's compressions on the +//! device and the parent nodes merged on the host by the reference crate. +//! +//! Every kernel is integer, in 32-bit words, with every intermediate bounded inside its +//! type, so a device that executes WGSL's integer arithmetic gives the CPU's result for +//! every input. This crate does not decide that a device does: its caller runs each kernel +//! against the CPU reference on qualifying inputs before it trusts a device with a step, +//! and `tests/` hold the kernels to their references and show that an edited kernel is +//! caught. A size a kernel does not take is [`GpuError::Unsupported`], before anything +//! runs, so the caller computes it on the CPU. + +use std::borrow::Cow; +use std::collections::HashMap; +use std::sync::{Arc, Mutex, MutexGuard}; + +/// How long one wait on a submission may take. +pub const POLL_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(120); + +/// Why the device gave no result. +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum GpuError { + /// The input is outside what the kernel takes (a size, a bound); nothing ran. + Unsupported(String), + /// The device reported an error, was lost, or a wait failed or timed out. + Device(String), +} + +impl std::fmt::Display for GpuError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + GpuError::Unsupported(m) => write!(f, "not taken by the kernel: {m}"), + GpuError::Device(m) => write!(f, "device: {m}"), + } + } +} + +impl std::error::Error for GpuError {} + +/// What the platform reports about an adapter. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Adapter { + /// `metal`, `vulkan` or `dx12`. + pub backend: String, + pub name: String, + pub vendor: u32, + pub device: u32, + /// `discrete`, `integrated`, `virtual`, `cpu` or `other`. + pub device_type: String, + pub driver: String, + pub driver_info: String, +} + +impl Adapter { + /// One line naming the adapter, as a fabric record names its backend. + pub fn label(&self) -> String { + let mut s = format!("wai-pack-gpu {} on wgpu {}: {} ({:04x}:{:04x}, {})", env!("CARGO_PKG_VERSION"), self.backend, self.name, self.vendor, self.device, self.device_type); + if !self.driver.is_empty() { + s.push_str(format!(", driver {} {}", self.driver, self.driver_info).trim_end()); + } + s + } +} + +/// The kernels' sources: the shipped ones, or a test's edit of one. +#[derive(Clone, Debug)] +pub struct Sources { + pub motion: String, + pub sse: String, + pub blake3: String, +} + +impl Sources { + pub fn shipped() -> Sources { + Sources { motion: include_str!("wgsl/motion.wgsl").into(), sse: include_str!("wgsl/sse.wgsl").into(), blake3: include_str!("wgsl/blake3.wgsl").into() } + } +} + +#[derive(Default)] +struct Sink { + messages: Vec, + lost: Option, +} + +struct Pipelines { + layout: wgpu::BindGroupLayout, + motion: wgpu::ComputePipeline, + sse: wgpu::ComputePipeline, + blake3: wgpu::ComputePipeline, +} + +/// One opened adapter with the kernels compiled on it. +pub struct Gpu { + device: wgpu::Device, + queue: wgpu::Queue, + pipes: Pipelines, + adapter: Adapter, + max_binding: u64, + sink: Arc>, + pool: Mutex>>, + label: String, +} + +/// What discovery found: the adapters that opened, and why each other one did not. +#[derive(Default)] +pub struct Discovery { + pub found: Vec, + pub refused: Vec<(Adapter, String)>, +} + +fn lock(m: &Mutex) -> MutexGuard<'_, T> { + m.lock().unwrap_or_else(|p| p.into_inner()) +} + +fn backend_label(b: wgpu::Backend) -> Option<&'static str> { + match b { + wgpu::Backend::Metal => Some("metal"), + wgpu::Backend::Vulkan => Some("vulkan"), + wgpu::Backend::Dx12 => Some("dx12"), + _ => None, + } +} + +fn device_type_label(t: wgpu::DeviceType) -> &'static str { + match t { + wgpu::DeviceType::DiscreteGpu => "discrete", + wgpu::DeviceType::IntegratedGpu => "integrated", + wgpu::DeviceType::VirtualGpu => "virtual", + wgpu::DeviceType::Cpu => "cpu", + wgpu::DeviceType::Other => "other", + } +} + +/// Polls a future once with a waker that does nothing. Natively wgpu resolves every +/// future of its interface before returning it, and a map completes inside the poll that +/// waits for it, so one poll resolves each call; a future still pending is an error. +fn resolve(f: F) -> Result { + let mut f = std::pin::pin!(f); + match f.as_mut().poll(&mut std::task::Context::from_waker(std::task::Waker::noop())) { + std::task::Poll::Ready(v) => Ok(v), + std::task::Poll::Pending => Err(GpuError::Device("a native future was pending after one poll".into())), + } +} + +/// Every adapter of the platform's primary interfaces, each opened with the shipped +/// kernels. Nothing is decided here about whether a device computes them correctly. +pub fn discover() -> Discovery { + discover_with(&Sources::shipped(), "shipped") +} + +/// [`discover`], with the kernels compiled from `src` and labelled `label`. +pub fn discover_with(src: &Sources, label: &str) -> Discovery { + let mut d = Discovery::default(); + if wgpu::Instance::enabled_backend_features().is_empty() { + return d; + } + let mut desc = wgpu::InstanceDescriptor::new_without_display_handle(); + desc.backends = wgpu::Backends::PRIMARY; + desc.flags = wgpu::InstanceFlags::empty(); + desc.backend_options.dx12.shader_compiler = wgpu::Dx12Compiler::Fxc; + let inst = wgpu::Instance::new(desc); + let Ok(adapters) = resolve(inst.enumerate_adapters(wgpu::Backends::PRIMARY)) else { + return d; + }; + for a in adapters { + match open(a, src, label) { + Ok(g) => d.found.push(g), + Err(e) => d.refused.push(*e), + } + } + d +} + +fn open(adapter: wgpu::Adapter, src: &Sources, label: &str) -> Result> { + let info = adapter.get_info(); + let who = Adapter { + backend: backend_label(info.backend).map_or_else(|| format!("{:?}", info.backend).to_lowercase(), str::to_string), + name: info.name.clone(), + vendor: info.vendor, + device: info.device, + device_type: device_type_label(info.device_type).into(), + driver: info.driver.clone(), + driver_info: info.driver_info.clone(), + }; + if backend_label(info.backend).is_none() { + return Err(Box::new((who, format!("backend {:?} is not one the kernels run on", info.backend)))); + } + if info.device_type == wgpu::DeviceType::Cpu { + return Err(Box::new((who, "a software rasteriser runs on the CPU: it is not another fabric".into()))); + } + if !adapter.get_downlevel_capabilities().flags.contains(wgpu::DownlevelFlags::COMPUTE_SHADERS) { + return Err(Box::new((who, "no compute shaders".into()))); + } + let offered = adapter.limits(); + let mut short: Option = None; + wgpu::Limits::default().check_limits_with_fail_fn(&offered, true, |name, needed, has| { + short.get_or_insert_with(|| format!("limit {name}: the kernels need {needed}, the adapter offers {has}")); + }); + if let Some(why) = short { + return Err(Box::new((who, why))); + } + let required_limits = wgpu::Limits { + max_storage_buffer_binding_size: offered.max_storage_buffer_binding_size, + max_buffer_size: offered.max_buffer_size, + ..wgpu::Limits::default() + }; + let descriptor = wgpu::DeviceDescriptor { label: Some("wai-pack-gpu"), required_features: wgpu::Features::empty(), required_limits, ..Default::default() }; + let (device, queue) = match resolve(adapter.request_device(&descriptor)) { + Ok(Ok(dq)) => dq, + Ok(Err(e)) => return Err(Box::new((who, format!("request_device: {e}")))), + Err(e) => return Err(Box::new((who, e.to_string()))), + }; + let sink = Arc::new(Mutex::new(Sink::default())); + let errors = Arc::clone(&sink); + device.on_uncaptured_error(Arc::new(move |e: wgpu::Error| lock(&errors).messages.push(e.to_string()))); + let lost = Arc::clone(&sink); + device.set_device_lost_callback(move |reason, message| { + let mut s = lock(&lost); + if s.lost.is_none() { + s.lost = Some(format!("device lost ({reason:?}): {message}")); + } + }); + let pipes = match pipelines(&device, src) { + Ok(p) => p, + Err(e) => return Err(Box::new((who, format!("the kernels did not compile: {e}")))), + }; + let granted = device.limits(); + let max_binding = granted.max_storage_buffer_binding_size.min(granted.max_buffer_size); + Ok(Gpu { device, queue, pipes, adapter: who, max_binding, sink, pool: Mutex::new(HashMap::new()), label: label.to_string() }) +} + +fn pipelines(device: &wgpu::Device, src: &Sources) -> Result { + let scope = device.push_error_scope(wgpu::ErrorFilter::Validation); + let entry = |binding: u32, ty: wgpu::BufferBindingType| wgpu::BindGroupLayoutEntry { + binding, + visibility: wgpu::ShaderStages::COMPUTE, + ty: wgpu::BindingType::Buffer { ty, has_dynamic_offset: false, min_binding_size: None }, + count: None, + }; + let storage = |read_only| wgpu::BufferBindingType::Storage { read_only }; + let layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + label: Some("wai-pack-gpu"), + entries: &[entry(0, wgpu::BufferBindingType::Uniform), entry(1, storage(true)), entry(2, storage(true)), entry(3, storage(false))], + }); + let pl = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { label: Some("wai-pack-gpu"), bind_group_layouts: &[Some(&layout)], immediate_size: 0 }); + let pipe = |label: &str, text: &str, entry_point: &str| { + let m = device.create_shader_module(wgpu::ShaderModuleDescriptor { label: Some(label), source: wgpu::ShaderSource::Wgsl(Cow::Owned(text.to_string())) }); + device.create_compute_pipeline(&wgpu::ComputePipelineDescriptor { label: Some(label), layout: Some(&pl), module: &m, entry_point: Some(entry_point), compilation_options: Default::default(), cache: None }) + }; + let motion = pipe("wai-pack-gpu motion", &src.motion, "search"); + let sse = pipe("wai-pack-gpu sse", &src.sse, "sse"); + let blake3 = pipe("wai-pack-gpu blake3", &src.blake3, "chunk"); + if let Some(e) = resolve(scope.pop()).map_err(|e| e.to_string())? { + return Err(e.to_string()); + } + Ok(Pipelines { layout, motion, sse, blake3 }) +} + +/// `bytes` as little-endian words, zero-padded to a whole word. +fn words(bytes: &[u8]) -> Vec { + let mut v = bytes.to_vec(); + v.resize(bytes.len().div_ceil(4).max(1) * 4, 0); + v +} + +/// A grid of `n` workgroups of 64 threads as `(x, y)`, rows of at most 65,535. +fn grid(n: u64) -> (u32, u32) { + let x = n.min(65_535).max(1); + (x as u32, n.div_ceil(x).max(1) as u32) +} + +impl Gpu { + /// The adapter, as the platform reports it. + pub fn adapter(&self) -> &Adapter { + &self.adapter + } + + /// The label of the kernels compiled on it: `shipped`, or a test's edit. + pub fn kernels(&self) -> &str { + &self.label + } + + fn settled(&self) -> Result<(), GpuError> { + let mut s = lock(&self.sink); + if let Some(why) = &s.lost { + return Err(GpuError::Device(why.clone())); + } + if s.messages.is_empty() { + return Ok(()); + } + Err(GpuError::Device(std::mem::take(&mut s.messages).join("; "))) + } + + fn take(&self, size: u64, usage: wgpu::BufferUsages) -> wgpu::Buffer { + let size = size.div_ceil(256).max(1) * 256; + if let Some(b) = lock(&self.pool).get_mut(&(size, usage.bits())).and_then(Vec::pop) { + return b; + } + self.device.create_buffer(&wgpu::BufferDescriptor { label: Some("wai-pack-gpu"), size, usage, mapped_at_creation: false }) + } + + fn give(&self, bufs: Vec) { + let mut p = lock(&self.pool); + for b in bufs { + let v = p.entry((b.size(), b.usage().bits())).or_default(); + if v.len() < 32 { + v.push(b); + } + } + } + + fn input(&self, bytes: &[u8]) -> wgpu::Buffer { + let w = words(bytes); + let b = self.take(w.len() as u64, wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_DST); + self.queue.write_buffer(&b, 0, &w); + b + } + + /// Run `pipe` over `groups` workgroups with the uniform `params` and inputs `a`, `b`, + /// and read back the first `out_len` bytes of its output. + fn run(&self, pipe: &wgpu::ComputePipeline, params: &[u32], a: &[u8], b: &[u8], out_len: u64, groups: (u32, u32)) -> Result, GpuError> { + for (what, n) in [("an input", words(a).len() as u64), ("an input", words(b).len() as u64), ("the output", out_len)] { + if n > self.max_binding { + return Err(GpuError::Unsupported(format!("{what} of {n} bytes is past the device's binding of {}", self.max_binding))); + } + } + self.settled()?; + let mut pbytes: Vec = params.iter().flat_map(|w| w.to_le_bytes()).collect(); + pbytes.resize(pbytes.len().div_ceil(16).max(1) * 16, 0); + let ub = self.take(pbytes.len() as u64, wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST); + self.queue.write_buffer(&ub, 0, &pbytes); + let ab = self.input(a); + let bb = self.input(b); + let ob = self.take(out_len.max(4), wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_SRC); + let staging = self.take(out_len.max(4), wgpu::BufferUsages::MAP_READ | wgpu::BufferUsages::COPY_DST); + let bg = self.device.create_bind_group(&wgpu::BindGroupDescriptor { + label: Some("wai-pack-gpu"), + layout: &self.pipes.layout, + entries: &[ + wgpu::BindGroupEntry { binding: 0, resource: ub.as_entire_binding() }, + wgpu::BindGroupEntry { binding: 1, resource: ab.as_entire_binding() }, + wgpu::BindGroupEntry { binding: 2, resource: bb.as_entire_binding() }, + wgpu::BindGroupEntry { binding: 3, resource: ob.as_entire_binding() }, + ], + }); + let mut enc = self.device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: Some("wai-pack-gpu") }); + { + let mut pass = enc.begin_compute_pass(&wgpu::ComputePassDescriptor { label: Some("wai-pack-gpu"), timestamp_writes: None }); + pass.set_pipeline(pipe); + pass.set_bind_group(0, &bg, &[]); + pass.dispatch_workgroups(groups.0, groups.1, 1); + } + let len = out_len.div_ceil(4).max(1) * 4; + enc.copy_buffer_to_buffer(&ob, 0, &staging, 0, len); + let index = self.queue.submit([enc.finish()]); + let slot: Arc>>> = Arc::new(Mutex::new(None)); + let filled = Arc::clone(&slot); + staging.map_async(wgpu::MapMode::Read, 0..len, move |r| *lock(&filled) = Some(r)); + let poll = || self.device.poll(wgpu::PollType::Wait { submission_index: Some(index), timeout: Some(POLL_TIMEOUT) }); + match std::panic::catch_unwind(std::panic::AssertUnwindSafe(poll)) { + Ok(Ok(_)) => {} + Ok(Err(e)) => return Err(GpuError::Device(format!("wait: {e}"))), + Err(_) => return Err(GpuError::Device("the device poll panicked".into())), + } + match lock(&slot).take() { + Some(Ok(())) => {} + Some(Err(e)) => return Err(GpuError::Device(format!("map: {e}"))), + None => return Err(GpuError::Device("the map did not complete within its wait".into())), + } + let out = { + let view = staging.get_mapped_range(0..len).map_err(|e| GpuError::Device(format!("mapped range: {e}")))?; + view[..out_len as usize].to_vec() + }; + staging.unmap(); + self.settled()?; + self.give(vec![ub, ab, bb, ob, staging]); + Ok(out) + } + + /// The motion search of one frame (packaging §5.5): the vector of each of the + /// `⌈h / block⌉ · ⌈w / block⌉` blocks of `src` (`h × w` RGB8), in raster order, + /// predicted from `rf` with components in `−range..=range` at precision `prec` + /// (1 or 2), each the least-cost candidate under the encoder's order. + #[allow(clippy::too_many_arguments)] + pub fn motion_frame(&self, src: &[u8], rf: &[u8], h: usize, w: usize, block: usize, range: i64, prec: i64) -> Result, GpuError> { + let un = |m: &str| Err(GpuError::Unsupported(m.to_string())); + if h == 0 || w == 0 || block == 0 || !(1..=2).contains(&prec) || !(0..=127).contains(&range) { + return un("a zero size, or a precision or range the encoder does not take"); + } + let samples = (h as u64).checked_mul(w as u64).and_then(|p| p.checked_mul(3)); + if samples.is_none_or(|s| s >= 1 << 31) || src.len() as u64 != samples.unwrap_or(0) || rf.len() != src.len() { + return un("a frame past 2^31 samples, or not h × w × 3 bytes"); + } + // A block's cost, at most block^2 * 3 * 255, is held in 32 bits. + if (block as u64).saturating_mul(block as u64).saturating_mul(765) > u32::MAX as u64 { + return un("a block whose cost can pass 2^32 - 1"); + } + let (nby, nbx) = (h.div_ceil(block), w.div_ceil(block)); + if nby > 65_535 || nbx > 65_535 { + return un("more than 65,535 blocks in a row or a column"); + } + let side = 2 * range as u32 + 1; + let params = [h as u32, w as u32, block as u32, nbx as u32, range as i32 as u32, prec as u32, side, side * side]; + let nb = nby * nbx; + let out = self.run(&self.pipes.motion, ¶ms, src, rf, 8 * nb as u64, (nbx as u32, nby as u32))?; + Ok(out.chunks_exact(8).map(|c| (i32::from_le_bytes([c[0], c[1], c[2], c[3]]) as i16, i32::from_le_bytes([c[4], c[5], c[6], c[7]]) as i16)).collect()) + } + + /// `Σ (a_i − b_i)²` over two byte strings of one length (packaging §6.6), in partial + /// sums of at most 4,096 bytes added here in 64 bits. + pub fn sse(&self, a: &[u8], b: &[u8]) -> Result { + if a.len() != b.len() { + return Err(GpuError::Unsupported("two strings of different lengths".into())); + } + if a.is_empty() { + return Ok(0); + } + if a.len() as u64 >= 1 << 32 { + return Err(GpuError::Unsupported("a string of 2^32 bytes or more".into())); + } + const PER: u64 = 4096; + let threads = (a.len() as u64).div_ceil(PER); + let (gx, gy) = grid(threads.div_ceil(64)); + let params = [a.len() as u32, PER as u32, gx * 64, 0]; + let out = self.run(&self.pipes.sse, ¶ms, a, b, 4 * threads, (gx, gy))?; + Ok(out.chunks_exact(4).map(|c| u32::from_le_bytes([c[0], c[1], c[2], c[3]]) as u64).sum()) + } + + /// BLAKE3 (the default hash mode) of each message: every chunk compressed on the + /// device, the parent nodes of a message of several chunks merged here by the + /// reference crate's subtree functions, in the tree the specification fixes. + pub fn blake3_many(&self, msgs: &[&[u8]]) -> Result, GpuError> { + // Each message on a word, its chunks one job each. + let mut data: Vec = Vec::new(); + let mut jobs: Vec = Vec::new(); + let mut spans: Vec<(usize, usize)> = Vec::with_capacity(msgs.len()); + for m in msgs { + if m.len() as u64 >= 1 << 32 { + return Err(GpuError::Unsupported("a message of 2^32 bytes or more".into())); + } + let word = (data.len() / 4) as u32; + let n_chunks = m.len().div_ceil(1024).max(1); + spans.push((jobs.len() / 8, n_chunks)); + for c in 0..n_chunks { + let len = (m.len() - c * 1024).min(1024); + let counter = c as u64; + jobs.extend_from_slice(&[word + (c * 256) as u32, len as u32, counter as u32, (counter >> 32) as u32, (n_chunks == 1) as u32, 0, 0, 0]); + } + data.extend_from_slice(m); + data.resize(data.len().div_ceil(4) * 4, 0); + } + let n = (jobs.len() / 8) as u64; + if n == 0 { + return Ok(Vec::new()); + } + let (gx, gy) = grid(n.div_ceil(64)); + let params = [n as u32, gx * 64, 0, 0]; + let job_bytes: Vec = jobs.iter().flat_map(|w| w.to_le_bytes()).collect(); + let out = self.run(&self.pipes.blake3, ¶ms, &data, &job_bytes, 32 * n, (gx, gy))?; + let cv = |i: usize| -> [u8; 32] { out[32 * i..32 * i + 32].try_into().expect("32 bytes") }; + Ok(spans.iter().map(|&(first, count)| if count == 1 { cv(first) } else { merge((first..first + count).map(cv).collect()) }).collect()) + } +} + +/// The root of a message of two or more chunks from its chunks' chaining values: each +/// level pairs adjacent nodes and carries an odd last one up, which is the tree BLAKE3 +/// fixes (the left subtree holds the largest power of two of chunks below the count), and +/// the last merge is the root. +fn merge(mut level: Vec<[u8; 32]>) -> [u8; 32] { + use blake3::hazmat::{merge_subtrees_non_root, merge_subtrees_root, Mode}; + debug_assert!(level.len() >= 2); + while level.len() > 2 { + let mut next = Vec::with_capacity(level.len().div_ceil(2)); + for pair in level.chunks(2) { + next.push(if pair.len() == 2 { merge_subtrees_non_root(&pair[0], &pair[1], Mode::Hash) } else { pair[0] }); + } + level = next; + } + *merge_subtrees_root(&level[0], &level[1], Mode::Hash).as_bytes() +} diff --git a/wai/wai-pack-gpu/src/wgsl/blake3.wgsl b/wai/wai-pack-gpu/src/wgsl/blake3.wgsl new file mode 100644 index 000000000..105fae311 --- /dev/null +++ b/wai/wai-pack-gpu/src/wgsl/blake3.wgsl @@ -0,0 +1,145 @@ +// BLAKE3's chunk function (the BLAKE3 specification, §2.1–§2.4), one thread per chunk of +// one message: a chunk's chaining value, or, for a message of one chunk, its root output. +// The host merges the chaining values of a message of several chunks into its root +// (§2.5, parent nodes), so this kernel does the compressions that read the message, all +// but one in every sixteen. +// +// A job names a chunk: where its words start, its length in bytes (0 to 1024; 0 only for +// the empty message), its counter, and whether it is a message's only chunk (the ROOT +// flag on its last block). The host starts each message on a word and fills the rest of +// its last word with zeros, so a block's bytes past the chunk's length read as zero, as +// the specification pads a block, and words past it are not read. + +struct Job { + word: u32, len: u32, counter_lo: u32, counter_hi: u32, + root: u32, pad0: u32, pad1: u32, pad2: u32, +} + +struct Params { + n: u32, row: u32, pad0: u32, pad1: u32, +} + +@group(0) @binding(0) var P: Params; +@group(0) @binding(1) var DATA: array; +@group(0) @binding(2) var JOBS: array; +// Eight words per job. +@group(0) @binding(3) var OUT: array; + +const CHUNK_START: u32 = 1u; +const CHUNK_END: u32 = 2u; +const ROOT: u32 = 8u; + +const IV0: u32 = 0x6A09E667u; +const IV1: u32 = 0xBB67AE85u; +const IV2: u32 = 0x3C6EF372u; +const IV3: u32 = 0xA54FF53Au; +const IV4: u32 = 0x510E527Fu; +const IV5: u32 = 0x9B05688Cu; +const IV6: u32 = 0x1F83D9ABu; +const IV7: u32 = 0x5BE0CD19u; + +fn rotr(x: u32, n: u32) -> u32 { + return (x >> n) | (x << (32u - n)); +} + +var v: array; +var m: array; + +fn g(a: u32, b: u32, c: u32, d: u32, mx: u32, my: u32) { + v[a] = v[a] + v[b] + mx; + v[d] = rotr(v[d] ^ v[a], 16u); + v[c] = v[c] + v[d]; + v[b] = rotr(v[b] ^ v[c], 12u); + v[a] = v[a] + v[b] + my; + v[d] = rotr(v[d] ^ v[a], 8u); + v[c] = v[c] + v[d]; + v[b] = rotr(v[b] ^ v[c], 7u); +} + +fn round_fn() { + g(0u, 4u, 8u, 12u, m[0], m[1]); + g(1u, 5u, 9u, 13u, m[2], m[3]); + g(2u, 6u, 10u, 14u, m[4], m[5]); + g(3u, 7u, 11u, 15u, m[6], m[7]); + g(0u, 5u, 10u, 15u, m[8], m[9]); + g(1u, 6u, 11u, 12u, m[10], m[11]); + g(2u, 7u, 8u, 13u, m[12], m[13]); + g(3u, 4u, 9u, 14u, m[14], m[15]); +} + +// The message permutation of §2.2, applied between rounds. +fn permute() { + let o = m; + m[0] = o[2]; + m[1] = o[6]; + m[2] = o[3]; + m[3] = o[10]; + m[4] = o[7]; + m[5] = o[0]; + m[6] = o[4]; + m[7] = o[13]; + m[8] = o[1]; + m[9] = o[11]; + m[10] = o[12]; + m[11] = o[5]; + m[12] = o[9]; + m[13] = o[14]; + m[14] = o[15]; + m[15] = o[8]; +} + +@compute @workgroup_size(64) +fn chunk(@builtin(global_invocation_id) gid: vec3) { + let t = gid.x + gid.y * P.row; + if (t >= P.n) { + return; + } + let job = JOBS[t]; + var cv = array(IV0, IV1, IV2, IV3, IV4, IV5, IV6, IV7); + let blocks = max(1u, (job.len + 63u) / 64u); + for (var b = 0u; b < blocks; b = b + 1u) { + let base = b * 64u; + let block_len = min(64u, job.len - min(job.len, base)); + for (var i = 0u; i < 16u; i = i + 1u) { + let at = base + i * 4u; + var word = 0u; + if (at < job.len) { + word = DATA[job.word + b * 16u + i]; + } + m[i] = word; + } + var flags = 0u; + if (b == 0u) { + flags = flags | CHUNK_START; + } + if (b == blocks - 1u) { + flags = flags | CHUNK_END; + if (job.root != 0u) { + flags = flags | ROOT; + } + } + for (var i = 0u; i < 8u; i = i + 1u) { + v[i] = cv[i]; + } + v[8] = IV0; + v[9] = IV1; + v[10] = IV2; + v[11] = IV3; + v[12] = job.counter_lo; + v[13] = job.counter_hi; + v[14] = block_len; + v[15] = flags; + for (var r = 0u; r < 7u; r = r + 1u) { + round_fn(); + if (r < 6u) { + permute(); + } + } + for (var i = 0u; i < 8u; i = i + 1u) { + cv[i] = v[i] ^ v[i + 8u]; + } + } + for (var i = 0u; i < 8u; i = i + 1u) { + OUT[t * 8u + i] = cv[i]; + } +} diff --git a/wai/wai-pack-gpu/src/wgsl/motion.wgsl b/wai/wai-pack-gpu/src/wgsl/motion.wgsl new file mode 100644 index 000000000..2032431d5 --- /dev/null +++ b/wai/wai-pack-gpu/src/wgsl/motion.wgsl @@ -0,0 +1,131 @@ +// The motion search of `wai.video.int_motion`'s encoder (packaging §5.5, +// wai-rs `int_video_enc`), one workgroup per block of one frame. +// +// For each candidate vector (dy, dx), both components in -R..=R, the cost is the sum, +// over the block's pixels inside the frame and the three channels, of +// |source - prediction|, the prediction being the decoder's (integer-payloads §3) from +// the previous frame as decoded: whole-pel at precision 1; at precision 2 the half-pel +// bilinear average with integer rounding, every coordinate clamped to the frame. The +// least cost wins; a tie goes to the smaller |dy| + |dx|, then to the earlier vector +// (dy outer, dx inner, each ascending). That order is a total order on +// (cost, |dy| + |dx|, index), so its minimum is the same whichever thread meets which +// candidate first: the threads each keep the least of the candidates they visit, and the +// workgroup reduces those to the least. +// +// Frames are bytes, four to a word, least significant first. Every value is a u32 or an +// i32 well inside its range: a cost is at most block^2 * 3 * 255 (the host refuses a block +// whose bound passes 2^32 - 1), an index at most 255^2. + +struct Params { + h: u32, w: u32, block: u32, nbx: u32, + range: i32, prec: u32, side: u32, ncand: u32, +} + +@group(0) @binding(0) var P: Params; +@group(0) @binding(1) var SRC: array; +@group(0) @binding(2) var REF: array; +// Two words per block, raster order: dy, dx. +@group(0) @binding(3) var OUT: array; + +const WG: u32 = 64u; +var wc: array; +var wl: array; +var wi: array; + +fn src_at(i: u32) -> i32 { + return i32((SRC[i >> 2u] >> ((i & 3u) * 8u)) & 0xffu); +} + +fn ref_at(i: u32) -> i32 { + return i32((REF[i >> 2u] >> ((i & 3u) * 8u)) & 0xffu); +} + +// A sample of the reference, its coordinates clamped to the frame. +fn px(yy: i32, xx: i32, c: u32) -> i32 { + let cy = u32(clamp(yy, 0, i32(P.h) - 1)); + let cx = u32(clamp(xx, 0, i32(P.w) - 1)); + return ref_at((cy * P.w + cx) * 3u + c); +} + +// integer-payloads §3's prediction; `>>` of an i32 is the arithmetic shift, so +// dy >> 1 is floor(dy / 2) and dy & 1 its fraction, as in the decoder. +fn predict(y: i32, x: i32, dy: i32, dx: i32, c: u32) -> i32 { + if (P.prec == 1u) { + return px(y + dy, x + dx, c); + } + let iy = y + (dy >> 1u); + let fy = dy & 1; + let ix = x + (dx >> 1u); + let fx = dx & 1; + if (fy == 0 && fx == 0) { + return px(iy, ix, c); + } + if (fy == 0) { + return (px(iy, ix, c) + px(iy, ix + 1, c) + 1) >> 1u; + } + if (fx == 0) { + return (px(iy, ix, c) + px(iy + 1, ix, c) + 1) >> 1u; + } + return (px(iy, ix, c) + px(iy, ix + 1, c) + px(iy + 1, ix, c) + px(iy + 1, ix + 1, c) + 2) >> 2u; +} + +// Whether (c, l, i) comes before (bc, bl, bi) in the search's order. +fn before(c: u32, l: u32, i: u32, bc: u32, bl: u32, bi: u32) -> bool { + if (c != bc) { + return c < bc; + } + if (l != bl) { + return l < bl; + } + return i < bi; +} + +@compute @workgroup_size(64) +fn search(@builtin(workgroup_id) g: vec3, @builtin(local_invocation_index) t: u32) { + let x0 = g.x * P.block; + let y0 = g.y * P.block; + let x1 = min(x0 + P.block, P.w); + let y1 = min(y0 + P.block, P.h); + var bc = 0xffffffffu; + var bl = 0xffffffffu; + var bi = 0xffffffffu; + for (var k = t; k < P.ncand; k = k + WG) { + let dy = i32(k / P.side) - P.range; + let dx = i32(k % P.side) - P.range; + var cost = 0u; + for (var y = y0; y < y1; y = y + 1u) { + for (var x = x0; x < x1; x = x + 1u) { + let s = (y * P.w + x) * 3u; + for (var c = 0u; c < 3u; c = c + 1u) { + cost = cost + u32(abs(src_at(s + c) - predict(i32(y), i32(x), dy, dx, c))); + } + } + } + let l1 = u32(abs(dy) + abs(dx)); + if (before(cost, l1, k, bc, bl, bi)) { + bc = cost; + bl = l1; + bi = k; + } + } + wc[t] = bc; + wl[t] = bl; + wi[t] = bi; + workgroupBarrier(); + for (var s = WG / 2u; s > 0u; s = s >> 1u) { + if (t < s) { + if (before(wc[t + s], wl[t + s], wi[t + s], wc[t], wl[t], wi[t])) { + wc[t] = wc[t + s]; + wl[t] = wl[t + s]; + wi[t] = wi[t + s]; + } + } + workgroupBarrier(); + } + if (t == 0u) { + let k = wi[0]; + let b = g.y * P.nbx + g.x; + OUT[2u * b] = i32(k / P.side) - P.range; + OUT[2u * b + 1u] = i32(k % P.side) - P.range; + } +} diff --git a/wai/wai-pack-gpu/src/wgsl/sse.wgsl b/wai/wai-pack-gpu/src/wgsl/sse.wgsl new file mode 100644 index 000000000..64478c15d --- /dev/null +++ b/wai/wai-pack-gpu/src/wgsl/sse.wgsl @@ -0,0 +1,41 @@ +// The sum of squared differences of two byte strings (packaging §6.6, an entry's `sse`), +// in partial sums that the host adds in 64 bits. +// +// Each thread sums the squares over `per` consecutive bytes (`per` at most 65,536, so a +// partial is at most 65,536 * 255^2 < 2^32 and never wraps) and writes its partial; the +// host adds the partials. The strings are bytes, four to a word, least significant +// first, and the host pads both with zeros to a whole word, which adds nothing. + +struct Params { + n: u32, per: u32, row: u32, pad: u32, +} + +@group(0) @binding(0) var P: Params; +@group(0) @binding(1) var A: array; +@group(0) @binding(2) var B: array; +@group(0) @binding(3) var OUT: array; + +fn byte_of(word: u32, k: u32) -> i32 { + return i32((word >> (k * 8u)) & 0xffu); +} + +@compute @workgroup_size(64) +fn sse(@builtin(global_invocation_id) g: vec3) { + let t = g.x + g.y * P.row; + let start = t * P.per; + if (start >= P.n) { + return; + } + let end = min(start + P.per, P.n); + var acc = 0u; + // `per` is a multiple of 4, so a thread's bytes start on a word. + for (var i = start; i < end; i = i + 4u) { + let a = A[i >> 2u]; + let b = B[i >> 2u]; + for (var k = 0u; k < 4u; k = k + 1u) { + let d = byte_of(a, k) - byte_of(b, k); + acc = acc + u32(d * d); + } + } + OUT[t] = acc; +} diff --git a/wai/wai-pack-gpu/tests/kernels.rs b/wai/wai-pack-gpu/tests/kernels.rs new file mode 100644 index 000000000..9f2497e13 --- /dev/null +++ b/wai/wai-pack-gpu/tests/kernels.rs @@ -0,0 +1,79 @@ +//! Each kernel against its reference on every adapter that opens: the motion search +//! against packaging §5.5's search as the text states it, the SSE against the plain sum, +//! BLAKE3 against the reference crate on the test vectors' lengths. Every case is seeded, +//! so a difference names its case. With no adapter, each test prints SKIPPED and passes, +//! unless WAI_PACK_GPU_REQUIRE is set. + +mod support; + +use support::*; + +#[test] +fn the_motion_search_is_the_texts() { + for g in gpus() { + let mut rng = Rng(0x5eed_0001); + let mut n = 0; + for &(h, w, block, range, prec) in MOTION_CASES { + for (kind, src, rf) in frame_pairs(&mut rng, h, w) { + let got = g.motion_frame(&src, &rf, h, w, block, range, prec).expect("the kernel runs"); + let want = search(&src, &rf, h, w, block, range, prec); + assert_eq!(got, want, "{}: {kind} {h}x{w} block {block} range {range} prec {prec}", g.adapter().label()); + n += 1; + } + } + eprintln!("{}: motion search, {n} frames, every vector the text's", g.adapter().label()); + } +} + +/// What the kernel does not take is refused before anything runs. +#[test] +fn the_motion_search_refuses_what_it_does_not_take() { + for g in gpus() { + let f = vec![0u8; 4 * 4 * 3]; + let un = |r: Result, wai_pack_gpu::GpuError>| matches!(r, Err(wai_pack_gpu::GpuError::Unsupported(_))); + assert!(un(g.motion_frame(&f, &f, 4, 4, 4, 1, 3)), "precision 3"); + assert!(un(g.motion_frame(&f, &f, 4, 4, 4, 128, 2)), "range 128"); + assert!(un(g.motion_frame(&f, &f, 4, 5, 4, 1, 2)), "a frame that is not h × w × 3"); + assert!(un(g.motion_frame(&f, &f, 4, 4, 0, 1, 2)), "block 0"); + assert!(un(g.motion_frame(&f, &f, 4, 4, 2370, 1, 2)), "a block whose cost can pass 2^32 - 1"); + } +} + +#[test] +fn the_sse_is_the_sum() { + for g in gpus() { + let mut rng = Rng(0x5eed_0002); + for n in [0usize, 1, 3, 4, 5, 4095, 4096, 4097, 65_537, 1_048_579] { + let (a, b) = (rng.bytes(n), rng.bytes(n)); + assert_eq!(g.sse(&a, &b).unwrap(), sse(&a, &b), "{}: {n} random bytes", g.adapter().label()); + } + // The largest partial: every byte 0 against 255, 4,096 to a thread. + let (a, b) = (vec![0u8; 3 * 4096 + 7], vec![255u8; 3 * 4096 + 7]); + assert_eq!(g.sse(&a, &b).unwrap(), sse(&a, &b), "{}: the largest squares", g.adapter().label()); + } +} + +#[test] +fn blake3_is_the_reference() { + for g in gpus() { + let inputs: Vec> = BLAKE3_LENGTHS.iter().map(|&n| blake3_input(n)).collect(); + let refs: Vec<&[u8]> = inputs.iter().map(|v| v.as_slice()).collect(); + // All at once, in one dispatch, and each alone. + let many = g.blake3_many(&refs).unwrap(); + for (m, h) in refs.iter().zip(&many) { + assert_eq!(h, blake3::hash(m).as_bytes(), "{}: {} bytes, in a batch", g.adapter().label(), m.len()); + assert_eq!(&g.blake3_many(&[m]).unwrap()[0], blake3::hash(m).as_bytes(), "{}: {} bytes alone", g.adapter().label(), m.len()); + } + // Random messages at random lengths, hashed in batches of mixed sizes. + let mut rng = Rng(0x5eed_0003); + let msgs: Vec> = (0..200).map(|_| { + let n = rng.below(20_000) as usize; + rng.bytes(n) + }).collect(); + let refs: Vec<&[u8]> = msgs.iter().map(|v| v.as_slice()).collect(); + for (m, h) in refs.iter().zip(g.blake3_many(&refs).unwrap()) { + assert_eq!(&h, blake3::hash(m).as_bytes(), "{}: a random message of {} bytes", g.adapter().label(), m.len()); + } + eprintln!("{}: BLAKE3, {} lengths and 200 random messages, every hash the reference crate's", g.adapter().label(), BLAKE3_LENGTHS.len()); + } +} diff --git a/wai/wai-pack-gpu/tests/mutants.rs b/wai/wai-pack-gpu/tests/mutants.rs new file mode 100644 index 000000000..11a354567 --- /dev/null +++ b/wai/wai-pack-gpu/tests/mutants.rs @@ -0,0 +1,86 @@ +//! An edited kernel is caught: each mutant below changes one expression of a shipped +//! kernel (a tie rule, a rounding addend, a clamp bound, a square, a rotation, a flag), +//! and the cases of `kernels.rs` must find a result that differs from the reference on +//! every adapter. A mutant they did not catch would be a part of a kernel the tests do +//! not hold. + +mod support; + +use support::*; +use wai_pack_gpu::Sources; + +struct Mutant { + name: &'static str, + kernel: &'static str, + from: &'static str, + to: &'static str, +} + +const MUTANTS: &[Mutant] = &[ + Mutant { name: "the earlier vector loses a tie", kernel: "motion", from: "return i < bi;", to: "return i > bi;" }, + Mutant { name: "the longer vector wins a tie", kernel: "motion", from: "return l < bl;", to: "return l > bl;" }, + Mutant { name: "a horizontal half-pel truncates", kernel: "motion", from: "return (px(iy, ix, c) + px(iy, ix + 1, c) + 1) >> 1u;", to: "return (px(iy, ix, c) + px(iy, ix + 1, c)) >> 1u;" }, + Mutant { name: "a diagonal half-pel rounds by 1", kernel: "motion", from: "px(iy + 1, ix + 1, c) + 2) >> 2u;", to: "px(iy + 1, ix + 1, c) + 1) >> 2u;" }, + Mutant { name: "a column past the frame is read", kernel: "motion", from: "clamp(xx, 0, i32(P.w) - 1)", to: "clamp(xx, 0, i32(P.w))" }, + Mutant { name: "the reduction skips a lane", kernel: "motion", from: "for (var s = WG / 2u; s > 0u; s = s >> 1u)", to: "for (var s = WG / 2u; s > 1u; s = s >> 1u)" }, + Mutant { name: "the absolute difference, not its square", kernel: "sse", from: "acc = acc + u32(d * d);", to: "acc = acc + u32(abs(d));" }, + Mutant { name: "a rotation by 11", kernel: "blake3", from: "v[b] = rotr(v[b] ^ v[c], 12u);", to: "v[b] = rotr(v[b] ^ v[c], 11u);" }, + Mutant { name: "a permutation entry swapped", kernel: "blake3", from: "m[0] = o[2];\n m[1] = o[6];", to: "m[0] = o[6];\n m[1] = o[2];" }, + Mutant { name: "the root flag of a parent's value", kernel: "blake3", from: "const ROOT: u32 = 8u;", to: "const ROOT: u32 = 4u;" }, + Mutant { name: "every chunk counted as the first", kernel: "blake3", from: "v[12] = job.counter_lo;", to: "v[12] = 0u;" }, + Mutant { name: "a short last block counted whole", kernel: "blake3", from: "v[14] = block_len;", to: "v[14] = 64u;" }, +]; + +fn edited(m: &Mutant) -> Sources { + let mut s = Sources::shipped(); + let k = match m.kernel { + "motion" => &mut s.motion, + "sse" => &mut s.sse, + _ => &mut s.blake3, + }; + assert_eq!(k.matches(m.from).count(), 1, "{}: the expression is in the kernel once", m.name); + *k = k.replacen(m.from, m.to, 1); + s +} + +/// Whether the kernel cases find a difference from the reference on `g`. +fn caught(g: &wai_pack_gpu::Gpu, kernel: &str) -> bool { + match kernel { + "motion" => { + let mut rng = Rng(0x5eed_0001); + MOTION_CASES.iter().any(|&(h, w, block, range, prec)| { + frame_pairs(&mut rng, h, w).into_iter().any(|(_, src, rf)| g.motion_frame(&src, &rf, h, w, block, range, prec).ok() != Some(search(&src, &rf, h, w, block, range, prec))) + }) + } + "sse" => { + let mut rng = Rng(0x5eed_0002); + [1usize, 4097, 65_537].iter().any(|&n| { + let (a, b) = (rng.bytes(n), rng.bytes(n)); + g.sse(&a, &b).ok() != Some(sse(&a, &b)) + }) + } + _ => { + let inputs: Vec> = BLAKE3_LENGTHS.iter().map(|&n| blake3_input(n)).collect(); + let refs: Vec<&[u8]> = inputs.iter().map(|v| v.as_slice()).collect(); + match g.blake3_many(&refs) { + Ok(hs) => refs.iter().zip(hs).any(|(m, h)| &h != blake3::hash(m).as_bytes()), + Err(_) => true, + } + } + } +} + +#[test] +fn every_mutant_is_caught() { + if gpus().is_empty() { + return; + } + for m in MUTANTS { + let found = gpus_with(&edited(m), m.name); + assert!(!found.is_empty(), "{}: the mutant did not compile, so it proves nothing", m.name); + for g in &found { + assert!(caught(g, m.kernel), "{}: {} not caught", g.adapter().label(), m.name); + } + eprintln!("caught: {} ({})", m.name, m.kernel); + } +} diff --git a/wai/wai-pack-gpu/tests/support/mod.rs b/wai/wai-pack-gpu/tests/support/mod.rs new file mode 100644 index 000000000..051fb1dc5 --- /dev/null +++ b/wai/wai-pack-gpu/tests/support/mod.rs @@ -0,0 +1,169 @@ +//! What the kernel tests share: the adapters, the references the kernels are held to, and +//! the cases. +//! +//! The references are transcribed here from the extension text (packaging §5.5, §6.6), +//! apart from the crate's kernels and from wai-rs, whose encoder wai-pack's differential +//! test holds the device to; BLAKE3's is the reference crate. + +#![allow(dead_code)] + +use wai_pack_gpu::{Discovery, Gpu, Sources}; + +/// The adapters that opened. With none, a test prints SKIPPED and passes, unless +/// `WAI_PACK_GPU_REQUIRE` is set: then an absent adapter fails, never skips. +pub fn gpus_with(src: &Sources, label: &str) -> Vec { + let Discovery { found, refused } = wai_pack_gpu::discover_with(src, label); + for (a, why) in &refused { + eprintln!("adapter refused: {}: {why}", a.label()); + } + if found.is_empty() { + assert!(std::env::var_os("WAI_PACK_GPU_REQUIRE").is_none(), "WAI_PACK_GPU_REQUIRE is set and no adapter opened"); + eprintln!("SKIPPED: no GPU adapter opened"); + } + found +} + +pub fn gpus() -> Vec { + gpus_with(&Sources::shipped(), "shipped") +} + +/// A seeded generator (xorshift64*), so every run sees the same cases. +pub struct Rng(pub u64); + +impl Rng { + pub fn next(&mut self) -> u64 { + self.0 ^= self.0 >> 12; + self.0 ^= self.0 << 25; + self.0 ^= self.0 >> 27; + self.0.wrapping_mul(0x2545_F491_4F6C_DD1D) + } + pub fn below(&mut self, n: u64) -> u64 { + self.next() % n + } + pub fn bytes(&mut self, n: usize) -> Vec { + (0..n).map(|_| self.next() as u8).collect() + } +} + +/// integer-payloads §3's prediction: whole-pel, or half-pel bilinear with integer +/// rounding, every coordinate clamped to the frame. +pub fn predict(rf: &[u8], h: usize, w: usize, y: i64, x: i64, dy: i64, dx: i64, c: usize, prec: i64) -> i64 { + let p = |yy: i64, xx: i64| rf[((yy.clamp(0, h as i64 - 1) as usize) * w + xx.clamp(0, w as i64 - 1) as usize) * 3 + c] as i64; + if prec == 1 { + return p(y + dy, x + dx); + } + let (iy, fy, ix, fx) = (y + dy.div_euclid(2), dy.rem_euclid(2), x + dx.div_euclid(2), dx.rem_euclid(2)); + match (fy, fx) { + (0, 0) => p(iy, ix), + (0, _) => (p(iy, ix) + p(iy, ix + 1) + 1) / 2, + (_, 0) => (p(iy, ix) + p(iy + 1, ix) + 1) / 2, + _ => (p(iy, ix) + p(iy, ix + 1) + p(iy + 1, ix) + p(iy + 1, ix + 1) + 2) / 4, + } +} + +/// packaging §5.5's search, as the text states it: for each block in raster order, every +/// candidate's full cost, and the least by cost, then by |dy| + |dx|, then the earliest. +pub fn search(src: &[u8], rf: &[u8], h: usize, w: usize, block: usize, range: i64, prec: i64) -> Vec<(i16, i16)> { + let mut out = Vec::new(); + for by in 0..h.div_ceil(block) { + for bx in 0..w.div_ceil(block) { + let mut best: Option<(u64, i64, i64, i64)> = None; + for dy in -range..=range { + for dx in -range..=range { + let mut cost = 0u64; + for y in by * block..((by + 1) * block).min(h) { + for x in bx * block..((bx + 1) * block).min(w) { + for c in 0..3 { + cost += (src[(y * w + x) * 3 + c] as i64 - predict(rf, h, w, y as i64, x as i64, dy, dx, c, prec)).unsigned_abs(); + } + } + } + let key = (cost, dy.abs() + dx.abs()); + if best.is_none_or(|b| key < (b.0, b.1)) { + best = Some((cost, key.1, dy, dx)); + } + } + } + let b = best.expect("one candidate at least"); + out.push((b.2 as i16, b.3 as i16)); + } + } + out +} + +/// `Σ (a − b)²`. +pub fn sse(a: &[u8], b: &[u8]) -> u64 { + a.iter().zip(b).map(|(&x, &y)| (x as i64 - y as i64).pow(2) as u64).sum() +} + +/// A frame pair of each kind the search meets: noise (costs all apart), a smooth field +/// moved by a fraction of a pel (near ties), a flat field (every candidate ties, so the +/// tie-break alone decides), and hard edges near the frame's borders (clamping). +pub fn frame_pairs(rng: &mut Rng, h: usize, w: usize) -> Vec<(&'static str, Vec, Vec)> { + let n = h * w * 3; + let noise_a = rng.bytes(n); + let noise_b = rng.bytes(n); + let field = |t: usize| -> Vec { + (0..h * w) + .flat_map(|i| { + let (y, x) = (i / w, i % w); + let v = ((x * 7 + y * 5 + t * 3) % 256) as u8; + [v, v / 2 + (y % 7) as u8, 255 - v] + }) + .collect() + }; + let flat = vec![97u8; n]; + let flat2 = vec![101u8; n]; + let edges = |t: usize| -> Vec { + (0..h * w) + .flat_map(|i| { + let (y, x) = (i / w, i % w); + let on = (x + t) % 5 < 2 || y + t < 3 || x + 2 >= w; + if on { [250, 10, 128] } else { [5, 240, 64] } + }) + .collect() + }; + // The noisy frame predicted from a blurred copy of itself, so costs differ by little. + let mut near = noise_a.clone(); + for v in near.iter_mut() { + *v = (*v / 8) * 8 + 3; + } + // Columns alternating in the reference and moved by one in the source: inside the + // frame a vector one column left and one right match alike, at the same |dy| + |dx|, + // so the earlier vector decides. + let stripes = |t: usize| -> Vec { + (0..h * w).flat_map(|i| if (i % w + t) % 2 == 0 { [40, 200, 90] } else { [200, 40, 160] }).collect() + }; + vec![ + ("noise", noise_a.clone(), noise_b), + ("near", noise_a, near), + ("field", field(1), field(0)), + ("flat", flat, flat2), + ("edges", edges(1), edges(0)), + ("stripes", stripes(1), stripes(0)), + ] +} + +/// The frame sizes and search parameters the motion cases cover: frames that are not a +/// whole number of blocks, a frame smaller than a block, both precisions, and ranges +/// from 0 to past the frame. +pub const MOTION_CASES: &[(usize, usize, usize, i64, i64)] = &[ + // (h, w, block, range, prec) + (24, 40, 8, 3, 1), + (24, 40, 8, 3, 2), + (19, 23, 4, 2, 2), + (33, 17, 16, 8, 2), + (9, 13, 16, 5, 1), + (12, 12, 4, 0, 2), + (16, 16, 32, 1, 2), + (36, 64, 16, 14, 2), + (5, 7, 2, 9, 2), +]; + +/// The message lengths of the BLAKE3 test vectors, and a few past them. +pub const BLAKE3_LENGTHS: &[usize] = &[0, 1, 63, 64, 65, 127, 128, 129, 1023, 1024, 1025, 2048, 2049, 3072, 3073, 4096, 4097, 5120, 5121, 6144, 6145, 7168, 7169, 8192, 8193, 16384, 31744, 102_400, 1_000_003]; + +/// The BLAKE3 test vectors' input: byte i is i mod 251. +pub fn blake3_input(n: usize) -> Vec { + (0..n).map(|i| (i % 251) as u8).collect() +} -- 2.54.0 (Apple Git-157) From 69327119f6e7a15318b957d8d9ddd074ef95e268 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 04:51:02 -0400 Subject: [PATCH 17/50] =?UTF-8?q?wai-pack:=20each=20step=20placed=20on=20a?= =?UTF-8?q?=20fabric=20by=20measured=20energy=20(packaging=20=C2=A711.6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fabric.rs names the steps of a pack and a verify (source-read, segment, base-search, base-code, refine-code, sse, object-hash, digest, floor-read, index, io, ...) and places each call of one on a fabric, the way an energy-aware scheduler places work: a backend is a candidate only once it has given the CPU reference's output on qualifying inputs (seeded frame pairs of every kind the search meets, seeded SSE and BLAKE3 inputs), and among candidates the least `uJ per call + nJ per unit * units` of a measured cost table wins, the CPU on a tie or where nothing was measured. The CPU is the reference and the fallback: a call another fabric does not take runs on the CPU, with the same output. --fabric cpu (the default), gpu, or auto:. With feature `gpu`, base-search, sse and object-hash run on a GPU through wai-pack-gpu. The packer's coder, its floors' object hashes, and the verifier's object hashes go through the placement; the verifier hashes a component's objects in one batch and decides any object-hash refusal again on the CPU, so its verdict is the CPU's. With feature `fabric-meter` (macOS), --meter fabric meters the pack per fabric, without privileges: the CPU's energy as the kernel accounts it to the process (task), and the GPU rail (IOReport "GPU Energy"), read on its republish at each end, where the process held at least 99% of every client's GPU time (rail); a shared GPU gives no figure, and the pack is refused pack-meter, saying why. The claim carries the fabric record (jwp-receipts §2.4.8). `wai-pack fabric list` shows each step's qualified backends, `fabric calibrate` measures the cost table. tests/fabric.rs: placement, the cost table, and the claim's record on every build; with `gpu`, on every GPU, the search against the reference (qualifying frames, seeded noise at every block size and range, every fixture's frame pairs, whole encodes), every golden packed on the GPU byte for byte the committed package, every golden and package and staged mutation given the CPU's verdict with the hashes on the GPU, and an edited kernel refused by qualification and, forced in, moving no verdict. pack_verify.py holds a package's fabric record to the steps of §11.6. Co-Authored-By: Claude Opus 5.5 --- wai/pack-conformance/pack_verify.py | 9 + wai/wai-pack/Cargo.lock | 888 +++++++++++++++++++++++++++- wai/wai-pack/Cargo.toml | 12 + wai/wai-pack/src/bin/wai_pack.rs | 202 ++++++- wai/wai-pack/src/encode.rs | 11 +- wai/wai-pack/src/fabric.rs | 612 +++++++++++++++++++ wai/wai-pack/src/fabric_meter.rs | 456 ++++++++++++++ wai/wai-pack/src/lib.rs | 5 +- wai/wai-pack/src/live.rs | 2 +- wai/wai-pack/src/pack.rs | 80 ++- wai/wai-pack/src/verify.rs | 46 +- wai/wai-pack/tests/fabric.rs | 313 ++++++++++ 12 files changed, 2608 insertions(+), 28 deletions(-) create mode 100644 wai/wai-pack/src/fabric.rs create mode 100644 wai/wai-pack/src/fabric_meter.rs create mode 100644 wai/wai-pack/tests/fabric.rs diff --git a/wai/pack-conformance/pack_verify.py b/wai/pack-conformance/pack_verify.py index 50103e2aa..20ac55f7c 100644 --- a/wai/pack-conformance/pack_verify.py +++ b/wai/pack-conformance/pack_verify.py @@ -3458,9 +3458,18 @@ def measurement_claim_fault(b, j): return "another acquisition class or evidence than the receipt's" if c["signer_pubkey"] != j["signer_pubkey"]: return "signed by another key than the receipt's" + # A package's fabric record (jwp-receipts §2.4.8) names the steps of §11.6. + bad = [s["step"] for s in f.get("fabrics", {"steps": []})["steps"] if s["step"] not in PACK_STEPS] + if bad: + return f"a fabric record naming {bad[0]}, which is not a step of §11.6" return None +# §11.6: the steps of a pack or a verify, as a measurement claim's fabric record names them. +PACK_STEPS = ("source-decode", "source-read", "segment", "base-search", "base-code", "refine-code", "sse", + "object-hash", "digest", "floor-read", "floor-decode", "index", "io") + + def repack_fields(ix, k): """§11.5: piece k's base and refinement entries, every field but the entry's place in its index: the entry it refines counted from its piece's first, its flags but the duplicate diff --git a/wai/wai-pack/Cargo.lock b/wai/wai-pack/Cargo.lock index ca0b3d0cb..7d98a2831 100644 --- a/wai/wai-pack/Cargo.lock +++ b/wai/wai-pack/Cargo.lock @@ -8,12 +8,36 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android_system_properties" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" +dependencies = [ + "libc", +] + [[package]] name = "arrayvec" version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + [[package]] name = "autocfg" version = "1.5.1" @@ -26,6 +50,21 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" +[[package]] +name = "bit-set" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2f926cc3060f09db9ebc5b52823d85268d24bb917e472c0c4bea35780a7d" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" + [[package]] name = "bitflags" version = "2.13.2" @@ -54,6 +93,41 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a1f896587b6f2c069c73d2f0913e2d590c3990285cd2f0b6aa02b786b4c679c" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + [[package]] name = "cbindgen" version = "0.29.4" @@ -88,6 +162,21 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" +[[package]] +name = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "codespan-reporting" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" +dependencies = [ + "unicode-width", +] + [[package]] name = "const-oid" version = "0.9.6" @@ -118,6 +207,12 @@ dependencies = [ "libc", ] +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + [[package]] name = "crypto-common" version = "0.1.7" @@ -175,6 +270,25 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags", + "objc2", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + [[package]] name = "ed25519" version = "2.2.3" @@ -233,6 +347,36 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -265,11 +409,51 @@ dependencies = [ "r-efi", ] +[[package]] +name = "gpu-allocator" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795" +dependencies = [ + "ash", + "hashbrown 0.16.1", + "log", + "presser", + "thiserror", + "windows", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "num-traits", + "zerocopy", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + [[package]] name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash", +] [[package]] name = "heck" @@ -284,7 +468,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.17.1", ] [[package]] @@ -293,18 +477,60 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +[[package]] +name = "js-sys" +version = "0.3.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + [[package]] name = "libc" version = "0.2.190" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78" +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "linux-raw-sys" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +[[package]] +name = "litrs" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + [[package]] name = "log" version = "0.4.34" @@ -326,6 +552,44 @@ dependencies = [ "adler2", ] +[[package]] +name = "naga" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a616d2fb8c89516ac2723a581f69d6c18576046bed761bd6b305e5618e6ae130" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags", + "cfg-if", + "cfg_aliases", + "codespan-reporting", + "half", + "hashbrown 0.17.1", + "indexmap", + "libm", + "log", + "naga-types", + "num-traits", + "once_cell", + "rustc-hash", + "spirv", + "thiserror", + "unicode-ident", +] + +[[package]] +name = "naga-types" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "590afbf58a6f4f62873cd5cff4468061844bafa1cdf399cc954537c22d768d49" +dependencies = [ + "hashbrown 0.17.1", + "indexmap", + "rustc-hash", + "thiserror", +] + [[package]] name = "num-bigint" version = "0.4.8" @@ -352,6 +616,93 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", +] + +[[package]] +name = "objc2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08849bbd4767dfae9457696856ae1c84fe4e0281bbe4a7abff2d0e06fb7981f8" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-metal" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" +dependencies = [ + "bitflags", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-metal", ] [[package]] @@ -360,6 +711,44 @@ version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +[[package]] +name = "ordered-float" +version = "5.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c7c9e0d9b23589f26070720bac724174bfec1083e82f7854cdd0267518343c0" +dependencies = [ + "num-traits", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + [[package]] name = "pkcs8" version = "0.10.2" @@ -376,6 +765,27 @@ version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" +[[package]] +name = "portable-atomic" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" + +[[package]] +name = "portable-atomic-util" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + [[package]] name = "proc-macro2" version = "1.0.107" @@ -385,6 +795,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "profiling" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" + [[package]] name = "quote" version = "1.0.47" @@ -409,6 +825,51 @@ dependencies = [ "getrandom 0.2.17", ] +[[package]] +name = "range-alloc" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "raw-window-metal" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40d213455a5f1dc59214213c7330e074ddf8114c9a42411eb890c767357ce135" +dependencies = [ + "objc2", + "objc2-core-foundation", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc_version" version = "0.4.1" @@ -431,6 +892,18 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "semver" version = "1.0.28" @@ -535,6 +1008,27 @@ dependencies = [ "rand_core", ] +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b" + +[[package]] +name = "spirv" +version = "0.4.0+sdk-1.4.341.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9571ea910ebd84c86af4b3ed27f9dbdc6ad06f17c5f96146b2b671e2976744f" +dependencies = [ + "bitflags", +] + [[package]] name = "spki" version = "0.7.3" @@ -545,6 +1039,12 @@ dependencies = [ "der", ] +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "subtle" version = "2.6.1" @@ -586,6 +1086,35 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "thiserror" +version = "2.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "tokio" +version = "1.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3" +dependencies = [ + "pin-project-lite", +] + [[package]] name = "toml" version = "0.8.23" @@ -671,6 +1200,12 @@ version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + [[package]] name = "version_check" version = "0.9.5" @@ -709,6 +1244,15 @@ dependencies = [ "sha2", "toml 0.8.23", "wai", + "wai-pack-gpu", +] + +[[package]] +name = "wai-pack-gpu" +version = "0.1.0" +dependencies = [ + "blake3", + "wgpu", ] [[package]] @@ -726,12 +1270,325 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" +[[package]] +name = "wasm-bindgen" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" +dependencies = [ + "js-sys", + "tokio", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 3.0.6", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wgpu" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527ccdf43dd5b2e8676eed9984ce00e2bbb0a1b85b70c1969dcb6cd2eb55ab9e" +dependencies = [ + "arrayvec", + "bitflags", + "bytemuck", + "cfg-if", + "cfg_aliases", + "document-features", + "hashbrown 0.17.1", + "js-sys", + "log", + "portable-atomic", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c018fce9b6270aa203c2fdd56f3cce996713534bd757e4ea58c8560b121f14" +dependencies = [ + "arrayvec", + "bit-set", + "bit-vec", + "bitflags", + "bytemuck", + "cfg_aliases", + "document-features", + "hashbrown 0.17.1", + "indexmap", + "log", + "naga", + "naga-types", + "once_cell", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "rustc-hash", + "smallvec", + "thiserror", + "wgpu-core-deps-apple", + "wgpu-core-deps-windows-linux-android", + "wgpu-hal", + "wgpu-naga-bridge", + "wgpu-types", +] + +[[package]] +name = "wgpu-core-deps-apple" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061f3d319a40d39d00b1ecc2c33b89fe21d4e6fe01859df3500a3a8ecccd6b68" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-windows-linux-android" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7586165fd5f6d881cb9ce4bb71f40d6caab2c0f1837e3fc1d9788a197fb6004f" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-hal" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b7fb58561a792bc237628ba0792e332de418fefe145f13b5ed8201e6d52f58" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags", + "block2", + "bytemuck", + "cfg-if", + "cfg_aliases", + "gpu-allocator", + "hashbrown 0.17.1", + "libc", + "libloading", + "log", + "naga", + "naga-types", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-metal", + "objc2-quartz-core", + "once_cell", + "ordered-float", + "parking_lot", + "portable-atomic", + "portable-atomic-util", + "profiling", + "range-alloc", + "raw-window-handle", + "raw-window-metal", + "renderdoc-sys", + "smallvec", + "static_assertions", + "thiserror", + "wgpu-naga-bridge", + "wgpu-types", + "windows", + "windows-core", +] + +[[package]] +name = "wgpu-naga-bridge" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f62e73117bb7a62bfd9c5a5841438a823f6566c6442a808ee269d2d055c081" +dependencies = [ + "naga", + "wgpu-types", +] + +[[package]] +name = "wgpu-types" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99dad6f1fbdbbdb4c278a6508b059d44688f5cebddf78d005a46a31340269286" +dependencies = [ + "bitflags", + "bytemuck", + "js-sys", + "log", + "naga-types", + "raw-window-handle", + "static_assertions", + "web-sys", +] + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core", + "windows-link", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.61.2" @@ -741,6 +1598,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link", +] + [[package]] name = "winnow" version = "0.7.15" @@ -756,6 +1622,26 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +[[package]] +name = "zerocopy" +version = "0.8.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "zeroize" version = "1.9.0" diff --git a/wai/wai-pack/Cargo.toml b/wai/wai-pack/Cargo.toml index 5e0eba82e..24e92b58d 100644 --- a/wai/wai-pack/Cargo.toml +++ b/wai/wai-pack/Cargo.toml @@ -26,6 +26,10 @@ path = "src/bin/wai_pack.rs" # view (receipt_claims); the model meter (energy_meter); and a still's writer and reader # (png_still, src/png.rs re-exports them). No codec library is linked. wai = { path = "../wai-rs", default-features = false, features = ["video_int", "video_package", "http", "stage_measure", "receipt_claims", "energy_meter", "png_still"] } +# Stages on a GPU (feature `gpu`, packaging §11.6): the motion search, SSE and BLAKE3's +# chunk function as WGSL kernels, in a crate of its own with its own lockfile, as +# wai-ops-gpu is. Off by default: a build without it places every stage on the CPU. +wai-pack-gpu = { path = "../wai-pack-gpu", optional = true } ed25519-dalek = "2" # TOML 1.0 (the 0.8 line; later lines read TOML 1.1, which a policy must not use). toml = { version = "0.8", default-features = false, features = ["parse"] } @@ -36,6 +40,14 @@ sha2 = "0.10" # re-exports): an implementation apart from the packer's own deflate, so a still is # decoded by code that did not write it. +[features] +default = [] +# A GPU backend for the stages §11.6 lets a GPU run (wai-pack-gpu, wgpu: Metal, Vulkan, DX12). +gpu = ["dep:wai-pack-gpu"] +# The fabric meter on macOS (src/fabric_meter.rs): the kernel's account of the process's +# CPU energy, and the GPU rail's energy attributed by GPU time, without privileges. +fabric-meter = [] + # Release builds check integer overflow as debug builds do, so the release tests in CI # catch a wrapped product (a field read as u16 and doubled) rather than run past it. [dev-dependencies] diff --git a/wai/wai-pack/src/bin/wai_pack.rs b/wai/wai-pack/src/bin/wai_pack.rs index b52b3c278..c694c906f 100644 --- a/wai/wai-pack/src/bin/wai_pack.rs +++ b/wai/wai-pack/src/bin/wai_pack.rs @@ -12,6 +12,7 @@ //! wai-pack pack --policy --out --key [--source =]... //! [--floor ] [--signer-id ] [--royalty-free-only] [--meter none|model:] //! [--base-from ] [--link-supplied] [--jobs ] +//! [--fabric cpu|gpu|auto:] [--meter fabric] //! pack the policy's components into : objects, stage indexes, the floor's CMAF //! files, catalogs, the receipt (and, metered, its measurement claim) and LISTING; //! is new or empty (`pack-out-not-empty` otherwise, before any work). Each file @@ -27,7 +28,11 @@ //! taken from that package, verified and matched to this one piece by piece, instead //! of coded, and the receipt names it as the package it re-packs. With //! --link-supplied, a supplied CMAF floor's files (packaging §7.7) are written as hard -//! links to the supplied ones where the file system allows +//! links to the supplied ones where the file system allows. --fabric places the +//! steps a GPU may run (packaging §11.6): the motion search, SSE and the object hashes; +//! the package is byte for byte the CPU's. --meter fabric meters the pack per fabric +//! (the CPU's energy as the kernel attributes it to the process, the GPU's rail by the +//! process's share of GPU time) and writes the measurement claim's fabric record //! wai-pack live --policy --out --key [--signer-id ] [--window ] //! pack a Y4M stream read from standard input as it arrives (packaging §9.2): each //! piece coded as the segmenter closes it, and its objects written to /objects/ @@ -44,9 +49,18 @@ //! the objects it lists, removes the objects only unsealed pieces published, writes //! no plan file or LISTING, and exits 1 saying what it kept. No floor: a supplied //! floor is the on-demand package's (§7.3). is new or empty -//! wai-pack verify [--parent ] +//! wai-pack verify [--parent ] [--fabric cpu|gpu|auto:] //! verify a package (packaging §9): every reason, or its counts and pack digest; with -//! --parent, a re-pack against the parent its receipt names (packaging §11.5) +//! --parent, a re-pack against the parent its receipt names (packaging §11.5). --fabric +//! places the steps a GPU may run (packaging §11.6); the verdict is the same on every +//! fabric +//! wai-pack fabric list [--fabric gpu] +//! the backends this build and host offer for each step, and why any did not qualify +//! (packaging §11.6) +//! wai-pack fabric calibrate --out [--seconds ] +//! measure each qualified backend's energy per call of each step it runs, at two +//! sizes, with the fabric meter, and write the cost table `--fabric auto:` places by +//! (a build with the `fabric-meter` feature, on macOS) //! wai-pack listing [--primary] //! the listing (SPEC §3.1) of every file of but LISTING; with --primary, of the //! plan files and the objects the directory's stage indexes (index-*.wsix, and @@ -100,9 +114,10 @@ fn usage() -> ExitCode { eprintln!( "usage:\n wai-pack policy [--royalty-free-only]\n \ wai-pack plan --policy --component [--source ] [--out ]\n \ - wai-pack pack --policy --out --key [--source =]... [--floor ] [--signer-id ] [--royalty-free-only] [--meter none|model:] [--base-from ] [--link-supplied] [--jobs ]\n \ + wai-pack pack --policy --out --key [--source =]... [--floor ] [--signer-id ] [--royalty-free-only] [--meter none|model:] [--base-from ] [--link-supplied] [--jobs ] [--fabric cpu|gpu|auto:] [--meter fabric]\n \ wai-pack live --policy --out --key [--signer-id ] [--window ]\n \ - wai-pack verify [--parent ]\n \ + wai-pack verify [--parent ] [--fabric cpu|gpu|auto:]\n \ + wai-pack fabric list [--fabric gpu] | fabric calibrate --out [--seconds ]\n \ wai-pack listing [--primary]\n \ wai-pack sim --policy --class --rate --startup [--source ] [--rtt ] [--chunk ] [--enc ] [--cap ] [--fifo]\n \ wai-pack stage-json\n \ @@ -214,8 +229,11 @@ fn cmd_pack(args: &[String]) -> Result<(), String> { o.overrides = Overrides { royalty_free_only: args.iter().any(|a| a == "--royalty-free-only") }; o.base_from = opt(args, "--base-from").map(|d| wai_pack::files::FileSet::Dir(d.into())); o.link_supplied = args.iter().any(|a| a == "--link-supplied"); + // The backends are opened and qualified before the meter starts. + o.fabrics = fabrics_of(args)?; match opt(args, "--meter").unwrap_or("none") { "none" => {} + "fabric" => fabric_meter_into(&mut o)?, m => { let mw: u64 = m.strip_prefix("model:").and_then(|x| x.parse().ok()).ok_or_else(|| format!("pack: --meter {m}: none or model:"))?; o.meter = Some(Box::new(wai::energy_meter::ModelMeter::wall_clock(mw))); @@ -226,20 +244,188 @@ fn cmd_pack(args: &[String]) -> Result<(), String> { } // Every file is written as it is made; a refusal removes what was written. let mut sink = wai_pack::files::DirSink::new(Path::new(out)).map_err(|e| format!("{out}: {e}"))?; - let receipt = wai_pack::pack::pack_into(&bytes, &sources, &mut o, &mut sink).map_err(|e| e.to_string())?; + let receipt = wai_pack::pack::pack_into(&bytes, &sources, &mut o, &mut sink).map_err(|e| match fabric_why() { + Some(why) if e.code == "pack-meter" => format!("{e} ({why})"), + _ => e.to_string(), + })?; sink.keep(); let listing = std::fs::read(Path::new(out).join("LISTING")).map_err(|e| format!("{out}: {e}"))?; println!("receipt {}", hex(&receipt.receipt_hash())); println!("pack digest {}", wai_pack::sha256_hex(&listing)); println!("entries {} ({} distinct, {} bytes referenced, {} stored)", receipt.total_entries, receipt.unique_objects, receipt.total_bytes, receipt.stored_bytes); println!("energy {}", if receipt.energy_provenance.is_some() { format!("{} uJ ({})", receipt.joules_micro, receipt.energy_provenance.as_ref().map(|p| p.label()).unwrap_or("")) } else { "not metered".into() }); + if let Some(split) = &o.fabric_split + && let Some(shares) = split() + { + for (f, uj, how) in shares { + println!("energy {} {uj} uJ ({how})", f.term()); + } + } + print_fabrics(&o.fabrics); Ok(()) } +/// `--fabric cpu|gpu|auto:` (packaging §11.6): the CPU reference alone (the +/// default), every step a qualified GPU backend takes on the GPU, or each call on the +/// fabric a measured cost table prices least. +fn fabrics_of(args: &[String]) -> Result, String> { + use wai_pack::fabric::{Costs, Fabrics, Mode}; + let f = match opt(args, "--fabric").unwrap_or("cpu") { + "cpu" => Fabrics::reference(), + "gpu" => Fabrics::open(Mode::Gpu, Costs::default()), + m => match m.strip_prefix("auto:") { + Some(path) => { + let t = std::fs::read_to_string(path).map_err(|e| format!("{path}: {e}"))?; + Fabrics::open(Mode::Auto, Costs::parse(&t)?) + } + None => return Err(format!("--fabric {m}: cpu, gpu or auto:")), + }, + }; + for (who, why) in f.refused() { + eprintln!("fabric not used: {who}: {why}"); + } + Ok(std::sync::Arc::new(f)) +} + +/// What each fabric ran, and the calls any handed back to the CPU. +fn print_fabrics(f: &wai_pack::fabric::Fabrics) { + for r in f.record() { + println!("fabric {} on {}: {} calls, {} {} ({})", r.step.term(), r.fabric.term(), r.calls, r.units, r.step.unit(), r.backend); + } + for (s, (n, why)) in f.fallbacks() { + println!("fabric {}: {n} calls ran on the CPU instead ({why})", s.term()); + } +} + +/// Why the fabric meter gave no figure, for a pack refused `pack-meter`. +#[cfg(all(target_os = "macos", feature = "fabric-meter"))] +static FABRIC_WHY: std::sync::OnceLock>>> = std::sync::OnceLock::new(); + +fn fabric_why() -> Option { + #[cfg(all(target_os = "macos", feature = "fabric-meter"))] + if let Some(w) = FABRIC_WHY.get() { + return w.lock().ok()?.clone(); + } + None +} + +/// `--meter fabric`: the fabric meter, its reader, and its shares for the claim. +#[cfg(all(target_os = "macos", feature = "fabric-meter"))] +fn fabric_meter_into(o: &mut wai_pack::pack::PackOpts) -> Result<(), String> { + let m = wai_pack::fabric_meter::FabricMeter::open().ok_or("pack: --meter fabric: this process's CPU energy cannot be read")?; + let handle = m.shares_handle(); + let _ = FABRIC_WHY.set(m.why_handle()); + o.power_reader = m.reader(); + o.meter = Some(Box::new(m)); + o.fabric_split = Some(std::sync::Arc::new(move || handle.lock().ok()?.as_ref().map(|s| s.split()))); + let now = std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).map_or(0, |d| d.as_secs()); + o.issued_at = wai::claim_receipt::rfc3339_utc(now); + Ok(()) +} + +#[cfg(not(all(target_os = "macos", feature = "fabric-meter")))] +fn fabric_meter_into(_: &mut wai_pack::pack::PackOpts) -> Result<(), String> { + Err("pack: --meter fabric: this build has no fabric meter (wai-pack's feature `fabric-meter`, on macOS)".into()) +} + +fn cmd_fabric(args: &[String]) -> Result<(), String> { + use wai_pack::fabric::{Costs, Fabrics, Mode}; + match args.first().map(String::as_str) { + Some("list") => { + let f = Fabrics::open(Mode::Gpu, Costs::default()); + for (step, fabric, backend) in f.backends() { + println!("{}\t{}\t{backend}", step.term(), fabric.term()); + } + for (who, why) in f.refused() { + println!("refused\t{who}\t{why}"); + } + Ok(()) + } + Some("calibrate") => calibrate(&args[1..]), + _ => Err("fabric: list, or calibrate --out [--seconds ]".into()), + } +} + +#[cfg(all(target_os = "macos", feature = "fabric-meter"))] +fn calibrate(args: &[String]) -> Result<(), String> { + use wai::int_video_enc::MotionSearch as _; + use wai_pack::fabric::{Cost, Costs, Fabric, Fabrics, Mode, Step}; + let out = opt(args, "--out").ok_or("fabric calibrate: --out")?; + let secs: u64 = opt(args, "--seconds").map(|s| s.parse().map_err(|_| format!("--seconds {s}"))).transpose()?.unwrap_or(4).max(1); + let mut meter = wai_pack::fabric_meter::FabricMeter::open().ok_or("fabric calibrate: this process's CPU energy cannot be read")?; + let gpu = Fabrics::open(Mode::Gpu, Costs::default()); + let cpu = Fabrics::reference(); + let host = std::process::Command::new("sysctl").args(["-n", "machdep.cpu.brand_string"]).output().ok().map(|o| String::from_utf8_lossy(&o.stdout).trim().to_string()).unwrap_or_default(); + let mut costs = Costs { host, costs: Vec::new() }; + // A pseudo-random frame pair, two sizes: a 64x48 frame and big-buck-bunny's 256x144 proxy. + let frames = |h: usize, w: usize| -> (Vec, Vec) { + let mut x = 0x9e37_79b9_7f4a_7c15u64; + let mut next = || { x ^= x << 13; x ^= x >> 7; x ^= x << 17; x as u8 }; + let a: Vec = (0..h * w * 3).map(|_| next()).collect(); + let b: Vec = a.iter().map(|v| v.wrapping_add(next() % 9)).collect(); + (a, b) + }; + for step in [Step::BaseSearch, Step::Sse, Step::ObjectHash] { + for fabric in [Fabric::Cpu, Fabric::Gpu] { + let f = if fabric == Fabric::Cpu { &cpu } else { &gpu }; + if !f.offers(step, fabric) { + continue; + } + let mut points: Vec<(u64, u64)> = Vec::new(); + for size in [0usize, 1] { + let (units, mut call): (u64, Box) = match step { + Step::BaseSearch => { + let (h, w) = if size == 0 { (48, 64) } else { (144, 256) }; + let (a, b) = frames(h, w); + let units = (h * w * 3) as u64 * 17 * 17; + (units, Box::new(move || { let mut v = Vec::new(); f.search().frame(&a, &b, h, w, 16, 8, 2, &mut v); })) + } + Step::Sse => { + let n = if size == 0 { 65_536 } else { 8 << 20 }; + let (a, b) = frames(1, n / 3 + 1); + (2 * a.len() as u64, Box::new(move || { let _ = f.sse(std::slice::from_ref(&a), std::slice::from_ref(&b)); })) + } + _ => { + let n = if size == 0 { 16_384 } else { 4 << 20 }; + let (a, _) = frames(1, n / 3 + 1); + (a.len() as u64 + 15, Box::new(move || { let _ = f.object_hashes(&[a.as_slice()]); })) + } + }; + call(); + let mut calls = 0u64; + meter.begin(); + let t0 = std::time::Instant::now(); + while t0.elapsed() < std::time::Duration::from_millis(500 * secs) { + call(); + calls += 1; + } + let s = meter.end().ok_or("fabric calibrate: the meter gave no figure")?; + let nj = s.total_uj().saturating_mul(1000) / calls.max(1); + println!("{}\t{}\t{units} {}\t{calls} calls\t{nj} nJ a call (cpu {} uJ, gpu {} uJ of a rail's {} uJ)", step.term(), fabric.term(), step.unit(), s.cpu_uj, s.gpu_uj, s.gpu_rail_uj); + points.push((units, nj)); + } + // nJ = a + b * units through the two points, b in thousandths of a nJ. + let ((u0, e0), (u1, e1)) = (points[0], points[1]); + let slope_milli = (e1.saturating_sub(e0) as u128 * 1_000_000 / (u1 - u0).max(1) as u128) as u64; + let fixed_nj = e0.saturating_sub((slope_milli as u128 * u0 as u128 / 1_000_000) as u64); + let backend = f.backends().into_iter().find(|(s, fb, _)| *s == step && *fb == fabric).map(|x| x.2).unwrap_or_default(); + costs.costs.push(Cost { step, fabric, backend, uj_per_call: fixed_nj / 1000, nj_per_unit_milli: slope_milli / 1000 }); + } + } + let now = std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).map_or(0, |d| d.as_secs()); + std::fs::write(out, costs.to_json(&wai::claim_receipt::rfc3339_utc(now), &meter.reader())).map_err(|e| format!("{out}: {e}")) +} + +#[cfg(not(all(target_os = "macos", feature = "fabric-meter")))] +fn calibrate(_: &[String]) -> Result<(), String> { + Err("fabric calibrate: this build has no fabric meter (wai-pack's feature `fabric-meter`, on macOS)".into()) +} + fn cmd_verify(args: &[String]) -> Result<(), String> { let dir = args.first().ok_or("verify: a package directory")?; + let fabrics = fabrics_of(args)?; let verdict = match opt(args, "--parent") { - None => wai_pack::verify::verify_dir(Path::new(dir)), + None => wai_pack::verify::verify_dir_with(Path::new(dir), &fabrics), Some(parent) => { let read = |d: &str| wai_pack::verify::read_strict(Path::new(d)).map_err(|e| vec![wai_pack::verify::Reason { code: "unexpected-file".into(), detail: e }]); read(dir).and_then(|f| read(parent).and_then(|p| wai_pack::verify::verify_repack(&f, &p))) @@ -252,6 +438,7 @@ fn cmd_verify(args: &[String]) -> Result<(), String> { println!("pack digest {}", r.pack_digest); println!("entries {} ({} distinct, {} bytes referenced, {} stored)", r.total_entries, r.unique_objects, r.total_bytes, r.stored_bytes); println!("energy {}", if r.metered { "metered, with its measurement claim" } else { "not metered" }); + print_fabrics(&fabrics); Ok(()) } Err(v) => Err(v.iter().map(|r| r.to_string()).collect::>().join("\n")), @@ -608,6 +795,7 @@ fn main() -> ExitCode { "sim" => cmd_sim(rest), "stage-json" => cmd_stage_json(), "verify" => cmd_verify(rest), + "fabric" => cmd_fabric(rest), "listing" => cmd_listing(rest), "policy-verdict" => cmd_policy_verdict(rest), "source-verdict" => cmd_source_verdict(rest), diff --git a/wai/wai-pack/src/encode.rs b/wai/wai-pack/src/encode.rs index a7dd4e099..7b3b0598a 100644 --- a/wai/wai-pack/src/encode.rs +++ b/wai/wai-pack/src/encode.rs @@ -12,7 +12,7 @@ use crate::policy::Rung; use wai::int_payload::{IntPayloadError, Refusal}; -use wai::int_video_enc::{encode, EncParams, Encoded}; +use wai::int_video_enc::{encode_with, CpuSearch, EncParams, Encoded, MotionSearch}; /// The parameters of a `wai.video.int_motion` rung that fix its encode. #[derive(Debug, Clone, PartialEq, Eq)] @@ -56,12 +56,18 @@ pub fn sse_px_milli(sse: u64, h: u32, w: u32, n: usize) -> u64 { /// Choose the step for a piece of `frames` (each `h × w` RGB8) under `p`, and encode it. pub fn choose_q(frames: &[Vec], h: u32, w: u32, p: &MotionParams) -> Result { + choose_q_with(frames, h, w, p, &mut CpuSearch) +} + +/// [`choose_q`], each encode's motion search run by `search` (packaging §11.6): a search +/// that keeps the encoder's rule gives [`choose_q`]'s step and payload byte for byte. +pub fn choose_q_with(frames: &[Vec], h: u32, w: u32, p: &MotionParams, search: &mut dyn MotionSearch) -> Result { let mut qs: Vec = p.q_candidates.clone(); qs.sort_unstable_by(|a, b| b.cmp(a)); qs.dedup(); let smallest = *qs.last().ok_or_else(|| IntPayloadError::new(Refusal::FieldRange, "no step to choose from"))?; for &q in &qs { - let e = encode(frames, h, w, &EncParams { block: p.block, search: p.search, mv_precision: p.mv_precision, q })?; + let e = encode_with(frames, h, w, &EncParams { block: p.block, search: p.search, mv_precision: p.mv_precision, q }, search)?; if sse_px_milli(e.sse, h, w, frames.len()) <= p.max_sse_px_milli || q == smallest { return Ok(QChoice { q, encoded: e }); } @@ -100,6 +106,7 @@ pub fn encode_refinement(below: &[Vec], src: &[Vec], h: u32, w: u32, q: #[cfg(test)] mod tests { use super::*; + use wai::int_video_enc::encode; /// A layer brings every frame closer to its source, and a finer step closer still. #[test] diff --git a/wai/wai-pack/src/fabric.rs b/wai/wai-pack/src/fabric.rs new file mode 100644 index 000000000..9d3752f59 --- /dev/null +++ b/wai/wai-pack/src/fabric.rs @@ -0,0 +1,612 @@ +//! Fabrics: where each step of a pack or a verify runs ([packaging] §11.6). +//! +//! A step is a pure function of its inputs (§11.2), so where it runs changes no byte of +//! a package and no verdict: only the energy it takes. This module places each call of +//! a step on a fabric (the CPU, a GPU, a media engine, a neural engine), the one whose +//! measured cost for a call of that size is least, the way an energy-aware scheduler +//! places work on the node with the least energy per operation: a backend is a candidate +//! only once it has given the reference's output on the qualifying inputs +//! ([`Fabrics::open`]), and among candidates the least `µJ per call + nJ per unit · units` +//! of a measured cost table ([`Costs`]) wins, the CPU on a tie or where nothing was +//! measured. The CPU is the reference and the fallback: a call another fabric cannot take +//! (a size, a lost device) runs on the CPU, with the same result. +//! +//! What runs where in this revision: +//! +//! - `base-search`, the integer encoder's motion search (§5.5): the CPU, or a GPU through +//! `wai-pack-gpu` (feature `gpu`); +//! - `sse` (§6.6) and `object-hash` (§5.3): the CPU, or a GPU (feature `gpu`); +//! - every other step: the CPU. Their work is sequential (rANS coding, SHA-256), or +//! reading and writing, or too small to pay for a dispatch. +//! +//! [`Fabrics::record`] says which fabric ran each step and on which backend, for a +//! measurement claim's `fabrics` member (jwp-receipts §2.4.8) and for the command line. +//! +//! [packaging]: ../../../extensions/packaging.md + +use std::collections::BTreeMap; +#[cfg(feature = "gpu")] +use std::collections::BTreeSet; +use std::sync::Mutex; +use wai::int_video_enc::{CpuSearch, MotionSearch}; + +/// A kind of processor a step can run on (packaging §11.6). +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Fabric { + Cpu, + Gpu, + Media, + Neural, +} + +impl Fabric { + pub const ALL: [Fabric; 4] = [Fabric::Cpu, Fabric::Gpu, Fabric::Media, Fabric::Neural]; + + /// Its term: `cpu`, `gpu`, `media` or `neural`. + pub fn term(self) -> &'static str { + match self { + Fabric::Cpu => "cpu", + Fabric::Gpu => "gpu", + Fabric::Media => "media", + Fabric::Neural => "neural", + } + } + + pub fn from_term(s: &str) -> Option { + Fabric::ALL.into_iter().find(|f| f.term() == s) + } +} + +/// A step of a pack or a verify (packaging §11.6), named by its term. +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Step { + /// Decoding a source to the frames a packager reads: before a pack, by a producer's + /// tool. + SourceDecode, + /// Reading a source's frames or samples (§4.7). + SourceRead, + /// Scene-cut segmentation and classification (§4.3, §4.6). + Segment, + /// The integer base's motion search (§5.5). + BaseSearch, + /// The integer base's residuals, reconstruction, table and stream, its step (§5.5, + /// §5.6), and stills (§5.7). + BaseCode, + /// Refinement layers (§5.4), each applied by the reference sink. + RefineCode, + /// The sum of squared differences (§6.6). + Sse, + /// An object's content hash (§5.3). + ObjectHash, + /// SHA-256 digests: decoded-output digests (§6.5), listings, file names. + Digest, + /// A supplied floor's structure: its temporal units, CMAF boxes and listing (§7.3, + /// §7.7). + FloorRead, + /// Decoding a floor's units to pictures (§11.6). + FloorDecode, + /// The stage indexes, catalogs, receipt and claim (§6, §8, §9). + Index, + /// Reading and writing files. + Io, +} + +impl Step { + pub const ALL: [Step; 13] = [ + Step::SourceDecode, + Step::SourceRead, + Step::Segment, + Step::BaseSearch, + Step::BaseCode, + Step::RefineCode, + Step::Sse, + Step::ObjectHash, + Step::Digest, + Step::FloorRead, + Step::FloorDecode, + Step::Index, + Step::Io, + ]; + + pub fn term(self) -> &'static str { + match self { + Step::SourceDecode => "source-decode", + Step::SourceRead => "source-read", + Step::Segment => "segment", + Step::BaseSearch => "base-search", + Step::BaseCode => "base-code", + Step::RefineCode => "refine-code", + Step::Sse => "sse", + Step::ObjectHash => "object-hash", + Step::Digest => "digest", + Step::FloorRead => "floor-read", + Step::FloorDecode => "floor-decode", + Step::Index => "index", + Step::Io => "io", + } + } + + pub fn from_term(s: &str) -> Option { + Step::ALL.into_iter().find(|t| t.term() == s) + } + + /// The unit a cost table prices a call of the step in. + pub fn unit(self) -> &'static str { + match self { + Step::BaseSearch => "candidate-samples", + _ => "bytes", + } + } +} + +/// How calls are placed. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Mode { + /// Every step on the CPU reference. + Reference, + /// Every step a qualified GPU backend takes on the GPU, the rest on the CPU. + Gpu, + /// Each call on the fabric whose measured cost for its size is least ([`Costs`]). + Auto, +} + +/// One measured cost: what a call of `step` on `fabric` took on the host that measured +/// it, as `µJ per call + nJ per unit · units`. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Cost { + pub step: Step, + pub fabric: Fabric, + pub backend: String, + pub uj_per_call: u64, + pub nj_per_unit_milli: u64, +} + +impl Cost { + /// The cost of a call of `units`, in nanojoules (saturating). + pub fn nj(&self, units: u64) -> u128 { + self.uj_per_call as u128 * 1000 + self.nj_per_unit_milli as u128 * units as u128 / 1000 + } +} + +/// A cost table (`wai.pack.fabric-costs/1`), as `wai-pack fabric calibrate` writes it: +/// `{"schema", "host", "measured_at", "meter", "costs": [{"step", "fabric", "backend", +/// "uj_per_call", "nj_per_unit_milli", "unit"}]}`. The costs are measurements of one host +/// at one time, so a table is evidence for placing calls there and nowhere else. +#[derive(Clone, Debug, Default, PartialEq, Eq)] +pub struct Costs { + pub host: String, + pub costs: Vec, +} + +pub const COSTS_SCHEMA: &str = "wai.pack.fabric-costs/1"; + +impl Costs { + pub fn parse(text: &str) -> Result { + let v: serde_json::Value = serde_json::from_str(text).map_err(|e| format!("a cost table: {e}"))?; + if v.get("schema").and_then(|s| s.as_str()) != Some(COSTS_SCHEMA) { + return Err(format!("a cost table is of schema {COSTS_SCHEMA}")); + } + let mut costs = Vec::new(); + for c in v.get("costs").and_then(|c| c.as_array()).ok_or("a cost table's costs")? { + let s = |k: &str| c.get(k).and_then(|x| x.as_str()).ok_or_else(|| format!("a cost's {k}")); + let n = |k: &str| c.get(k).and_then(|x| x.as_u64()).ok_or_else(|| format!("a cost's {k}")); + let step = Step::from_term(s("step")?).ok_or("a cost's step is not a step of packaging §11.6")?; + let fabric = Fabric::from_term(s("fabric")?).ok_or("a cost's fabric is not cpu, gpu, media or neural")?; + costs.push(Cost { step, fabric, backend: s("backend")?.to_string(), uj_per_call: n("uj_per_call")?, nj_per_unit_milli: n("nj_per_unit_milli")? }); + } + Ok(Costs { host: v.get("host").and_then(|h| h.as_str()).unwrap_or("").to_string(), costs }) + } + + pub fn to_json(&self, measured_at: &str, meter: &str) -> String { + let costs: Vec = self + .costs + .iter() + .map(|c| serde_json::json!({"step": c.step.term(), "fabric": c.fabric.term(), "backend": c.backend, "uj_per_call": c.uj_per_call, "nj_per_unit_milli": c.nj_per_unit_milli, "unit": c.step.unit()})) + .collect(); + serde_json::to_string_pretty(&serde_json::json!({"schema": COSTS_SCHEMA, "host": self.host, "measured_at": measured_at, "meter": meter, "costs": costs})).expect("JSON") + } + + fn of(&self, step: Step, fabric: Fabric) -> Option<&Cost> { + self.costs.iter().find(|c| c.step == step && c.fabric == fabric) + } +} + +/// What a fabric did for a step over a run: calls, the step's units, and calls it handed +/// back to the CPU. +#[derive(Clone, Debug, Default, PartialEq, Eq)] +pub struct Tally { + pub calls: u64, + pub units: u64, +} + +/// One line of a fabric record: a step, a fabric that ran it, and its backend. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct Ran { + pub step: Step, + pub fabric: Fabric, + pub backend: String, + pub calls: u64, + pub units: u64, +} + +/// The CPU reference that a coder given no fabrics uses; nothing reads its record. +pub fn reference() -> &'static Fabrics { + static R: std::sync::LazyLock = std::sync::LazyLock::new(Fabrics::reference); + &R +} + +/// The CPU reference's backend label. +pub fn cpu_label() -> String { + format!("cpu: wai-pack {} reference ({})", env!("CARGO_PKG_VERSION"), std::env::consts::ARCH) +} + +#[cfg(feature = "gpu")] +struct GpuSide { + gpu: wai_pack_gpu::Gpu, + /// The steps it gave the reference's output for on every qualifying input. + qualified: BTreeSet, +} + +/// The fabrics of one process: the backends that opened, what each was qualified for, +/// how calls are placed, and what each fabric ran. +pub struct Fabrics { + mode: Mode, + costs: Costs, + #[cfg(feature = "gpu")] + gpu: Option, + /// Backends that did not open or did not qualify, and why. + refused: Vec<(String, String)>, + tally: Mutex>, + /// Calls a fabric gave back to the CPU, and why (the first reason per step). + fallbacks: Mutex>, +} + +impl std::fmt::Debug for Fabrics { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("Fabrics").field("mode", &self.mode).field("backends", &self.backends()).field("refused", &self.refused).finish() + } +} + +impl Default for Fabrics { + fn default() -> Fabrics { + Fabrics::reference() + } +} + +fn lock(m: &Mutex) -> std::sync::MutexGuard<'_, T> { + m.lock().unwrap_or_else(|p| p.into_inner()) +} + +impl Fabrics { + /// The CPU reference alone. + pub fn reference() -> Fabrics { + Fabrics { + mode: Mode::Reference, + costs: Costs::default(), + #[cfg(feature = "gpu")] + gpu: None, + refused: Vec::new(), + tally: Mutex::new(BTreeMap::new()), + fallbacks: Mutex::new(BTreeMap::new()), + } + } + + /// Open the backends this build has (a GPU with feature `gpu`), qualify each on every + /// step it offers against the CPU reference, and place calls by `mode`. Under + /// [`Mode::Auto`] a step goes to a fabric only where `costs` prices it. + pub fn open(mode: Mode, costs: Costs) -> Fabrics { + let mut f = Fabrics { mode, costs, ..Fabrics::reference() }; + if mode == Mode::Reference { + return f; + } + #[cfg(feature = "gpu")] + { + let d = wai_pack_gpu::discover(); + for (a, why) in d.refused { + f.refused.push((a.label(), why)); + } + // The first adapter that qualifies for a step at all; on a host with several, + // the platform's first. + for gpu in d.found { + let mut qualified = BTreeSet::new(); + for step in [Step::BaseSearch, Step::Sse, Step::ObjectHash] { + match qualify(&gpu, step) { + Ok(()) => { + qualified.insert(step); + } + Err(why) => f.refused.push((format!("{} for {}", gpu.adapter().label(), step.term()), why)), + } + } + if !qualified.is_empty() && f.gpu.is_none() { + f.gpu = Some(GpuSide { gpu, qualified }); + } + } + } + #[cfg(not(feature = "gpu"))] + f.refused.push(("gpu".into(), "this build has no GPU backend (wai-pack's feature `gpu`)".into())); + f + } + + /// Fabrics over `gpu` for `steps`, without qualifying it: for a test that shows what + /// an unqualified device would do, and that the verifier's verdict does not follow it. + #[cfg(feature = "gpu")] + #[doc(hidden)] + pub fn with_unqualified_gpu(gpu: wai_pack_gpu::Gpu, steps: &[Step], mode: Mode) -> Fabrics { + Fabrics { mode, gpu: Some(GpuSide { gpu, qualified: steps.iter().copied().collect() }), ..Fabrics::reference() } + } + + pub fn mode(&self) -> Mode { + self.mode + } + + /// Each backend that may run a step, as `(step, fabric, backend)`: the CPU for every + /// step, and each qualified backend for its steps. + pub fn backends(&self) -> Vec<(Step, Fabric, String)> { + let mut v: Vec<(Step, Fabric, String)> = Step::ALL.iter().map(|&s| (s, Fabric::Cpu, cpu_label())).collect(); + #[cfg(feature = "gpu")] + if let Some(g) = &self.gpu { + for &s in &g.qualified { + v.push((s, Fabric::Gpu, g.gpu.adapter().label())); + } + } + v.sort(); + v + } + + /// The backends that did not open or did not qualify, and why. + pub fn refused(&self) -> &[(String, String)] { + &self.refused + } + + /// Whether a backend of `fabric` is qualified for `step` (the CPU always is). + pub fn offers(&self, step: Step, fabric: Fabric) -> bool { + self.has(step, fabric) + } + + fn has(&self, step: Step, fabric: Fabric) -> bool { + match fabric { + Fabric::Cpu => true, + #[cfg(feature = "gpu")] + Fabric::Gpu => self.gpu.as_ref().is_some_and(|g| g.qualified.contains(&step)), + _ => { + let _ = step; + false + } + } + } + + /// The fabric a call of `step` over `units` goes to. + pub fn place(&self, step: Step, units: u64) -> Fabric { + match self.mode { + Mode::Reference => Fabric::Cpu, + Mode::Gpu => { + if self.has(step, Fabric::Gpu) { + Fabric::Gpu + } else { + Fabric::Cpu + } + } + Mode::Auto => { + let mut best = (Fabric::Cpu, self.costs.of(step, Fabric::Cpu).map(|c| c.nj(units))); + for f in [Fabric::Gpu, Fabric::Media, Fabric::Neural] { + if !self.has(step, f) { + continue; + } + // A fabric is chosen over the CPU only on a measurement of both. + if let (Some(c), Some(cpu)) = (self.costs.of(step, f), best.1) + && c.nj(units) < cpu + { + best = (f, Some(c.nj(units))); + } + } + best.0 + } + } + } + + fn count(&self, step: Step, fabric: Fabric, units: u64) { + let mut t = lock(&self.tally); + let e = t.entry((step, fabric)).or_default(); + e.calls += 1; + e.units = e.units.saturating_add(units); + } + + /// Count a call of `step` that ran on the CPU outside this module. + pub fn ran_on_cpu(&self, step: Step, units: u64) { + self.count(step, Fabric::Cpu, units); + } + + #[cfg(feature = "gpu")] + fn fell_back(&self, step: Step, why: String) { + let mut f = lock(&self.fallbacks); + let e = f.entry(step).or_insert((0, why)); + e.0 += 1; + } + + /// The steps that ran, each with every fabric that ran it and its backend, in the + /// order of their terms then the fabrics': a measurement claim's `fabrics.steps`. + pub fn record(&self) -> Vec { + let t = lock(&self.tally); + let mut v: Vec = t + .iter() + .map(|(&(step, fabric), n)| Ran { step, fabric, backend: self.label(fabric), calls: n.calls, units: n.units }) + .collect(); + v.sort_by(|a, b| (a.step.term(), a.fabric.term()).cmp(&(b.step.term(), b.fabric.term()))); + v + } + + /// Calls a fabric gave back to the CPU, by step, with the first reason. + pub fn fallbacks(&self) -> BTreeMap { + lock(&self.fallbacks).clone() + } + + fn label(&self, fabric: Fabric) -> String { + match fabric { + #[cfg(feature = "gpu")] + Fabric::Gpu => self.gpu.as_ref().map_or_else(|| "gpu".into(), |g| g.gpu.adapter().label()), + Fabric::Cpu => cpu_label(), + other => other.term().into(), + } + } + + /// A motion search placed frame by frame ([`MotionSearch`]). + pub fn search(&self) -> FabricSearch<'_> { + FabricSearch { f: self } + } + + /// `Σ (a − b)²` over two clips of RGB8 frames (§6.6), on the fabric the call goes to. + pub fn sse(&self, a: &[Vec], b: &[Vec]) -> u64 { + let units: u64 = a.iter().zip(b).map(|(x, y)| x.len().min(y.len()) as u64).sum(); + #[cfg(feature = "gpu")] + if self.place(Step::Sse, units) == Fabric::Gpu + && let Some(g) = &self.gpu + { + let (x, y): (Vec, Vec) = a.iter().zip(b).fold((Vec::with_capacity(units as usize), Vec::with_capacity(units as usize)), |(mut x, mut y), (p, q)| { + let n = p.len().min(q.len()); + x.extend_from_slice(&p[..n]); + y.extend_from_slice(&q[..n]); + (x, y) + }); + match g.gpu.sse(&x, &y) { + Ok(s) => { + self.count(Step::Sse, Fabric::Gpu, units); + return s; + } + Err(e) => self.fell_back(Step::Sse, e.to_string()), + } + } + self.count(Step::Sse, Fabric::Cpu, units); + crate::encode::sse(a, b) + } + + /// The content hash of each envelope (§5.3), each batch on the fabric it goes to. + pub fn object_hashes(&self, envelopes: &[&[u8]]) -> Vec<[u8; 32]> { + let units: u64 = envelopes.iter().map(|e| e.len() as u64 + 15).sum(); + #[cfg(feature = "gpu")] + if self.place(Step::ObjectHash, units) == Fabric::Gpu + && let Some(g) = &self.gpu + { + let msgs: Vec> = envelopes.iter().map(|e| [b"moq-jwp:object\x01".as_slice(), e].concat()).collect(); + let refs: Vec<&[u8]> = msgs.iter().map(|m| m.as_slice()).collect(); + match g.gpu.blake3_many(&refs) { + Ok(h) => { + self.count(Step::ObjectHash, Fabric::Gpu, units); + return h; + } + Err(e) => self.fell_back(Step::ObjectHash, e.to_string()), + } + } + self.count(Step::ObjectHash, Fabric::Cpu, units); + envelopes.iter().map(|e| crate::objects::object_hash(e)).collect() + } + + /// One envelope's content hash ([`Fabrics::object_hashes`]). + pub fn object_hash(&self, envelope: &[u8]) -> [u8; 32] { + self.object_hashes(&[envelope])[0] + } +} + +/// [`Fabrics`]'s motion search: each frame on the fabric the call goes to, the CPU +/// reference wherever another fabric does not take it. +pub struct FabricSearch<'a> { + f: &'a Fabrics, +} + +impl MotionSearch for FabricSearch<'_> { + fn frame(&mut self, src: &[u8], rf: &[u8], h: usize, w: usize, block: usize, range: i64, prec: i64, out: &mut Vec<(i16, i16)>) { + let side = (2 * range.max(0) + 1) as u64; + let units = (src.len() as u64).saturating_mul(side * side); + #[cfg(feature = "gpu")] + if self.f.place(Step::BaseSearch, units) == Fabric::Gpu + && let Some(g) = &self.f.gpu + { + match g.gpu.motion_frame(src, rf, h, w, block, range, prec) { + Ok(v) => { + out.extend(v); + self.f.count(Step::BaseSearch, Fabric::Gpu, units); + return; + } + Err(e) => self.f.fell_back(Step::BaseSearch, e.to_string()), + } + } + CpuSearch.frame(src, rf, h, w, block, range, prec, out); + self.f.count(Step::BaseSearch, Fabric::Cpu, units); + } +} + +/// Seeded qualifying inputs (xorshift64*). +struct Rng(u64); + +impl Rng { + fn next(&mut self) -> u64 { + self.0 ^= self.0 >> 12; + self.0 ^= self.0 << 25; + self.0 ^= self.0 >> 27; + self.0.wrapping_mul(0x2545_F491_4F6C_DD1D) + } + fn bytes(&mut self, n: usize) -> Vec { + (0..n).map(|_| self.next() as u8).collect() + } +} + +/// A qualifying motion-search input: `(h, w, block, range, precision, source, reference)`. +pub type SearchCase = (usize, usize, usize, i64, i64, Vec, Vec); + +/// Frame pairs that exercise the search's rule: noise, a smooth field, a flat field +/// (every candidate ties), alternating columns (two vectors tie at one length), at sizes +/// that are not whole blocks, at both precisions. +pub fn qualifying_frames() -> Vec { + let mut rng = Rng(0x00fa_b41c_0000_0001); + let mut v = Vec::new(); + for &(h, w, block, range, prec) in &[(24usize, 40usize, 8usize, 3i64, 1i64), (24, 40, 8, 3, 2), (19, 23, 4, 2, 2), (33, 17, 16, 8, 2), (36, 64, 16, 4, 2)] { + let n = h * w * 3; + let field = |t: usize| -> Vec { (0..h * w).flat_map(|i| { let (y, x) = (i / w, i % w); let p = ((x * 7 + y * 5 + t * 3) % 256) as u8; [p, p / 2 + (y % 7) as u8, 255 - p] }).collect() }; + let stripes = |t: usize| -> Vec { (0..h * w).flat_map(|i| if (i % w + t).is_multiple_of(2) { [40, 200, 90] } else { [200, 40, 160] }).collect() }; + v.push((h, w, block, range, prec, rng.bytes(n), rng.bytes(n))); + v.push((h, w, block, range, prec, field(1), field(0))); + v.push((h, w, block, range, prec, vec![97; n], vec![101; n])); + v.push((h, w, block, range, prec, stripes(1), stripes(0))); + } + v +} + +/// Whether `gpu` gives the CPU reference's output for `step` on every qualifying input. +#[cfg(feature = "gpu")] +pub fn qualify(gpu: &wai_pack_gpu::Gpu, step: Step) -> Result<(), String> { + match step { + Step::BaseSearch => { + for (i, (h, w, block, range, prec, src, rf)) in qualifying_frames().into_iter().enumerate() { + let mut want = Vec::new(); + CpuSearch.frame(&src, &rf, h, w, block, range, prec, &mut want); + let got = gpu.motion_frame(&src, &rf, h, w, block, range, prec).map_err(|e| e.to_string())?; + if got != want { + return Err(format!("qualifying frame {i} ({h}x{w}, block {block}, range {range}, precision {prec}): vectors other than the reference's")); + } + } + Ok(()) + } + Step::Sse => { + let mut rng = Rng(0x00fa_b41c_0000_0002); + for n in [1usize, 4097, 70_001] { + let (a, b) = (rng.bytes(n), rng.bytes(n)); + let got = gpu.sse(&a, &b).map_err(|e| e.to_string())?; + if got != crate::encode::sse(&[a], &[b]) { + return Err(format!("an SSE of {n} bytes other than the reference's")); + } + } + Ok(()) + } + Step::ObjectHash => { + let inputs: Vec> = [0usize, 1, 1023, 1024, 1025, 4097, 100_000].iter().map(|&n| (0..n).map(|i| (i % 251) as u8).collect()).collect(); + let refs: Vec<&[u8]> = inputs.iter().map(|v| v.as_slice()).collect(); + let got = gpu.blake3_many(&refs).map_err(|e| e.to_string())?; + for (m, h) in refs.iter().zip(got) { + if &h != blake3::hash(m).as_bytes() { + return Err(format!("a BLAKE3 of {} bytes other than the reference's", m.len())); + } + } + Ok(()) + } + _ => Err(format!("no GPU kernel for {}", step.term())), + } +} diff --git a/wai/wai-pack/src/fabric_meter.rs b/wai/wai-pack/src/fabric_meter.rs new file mode 100644 index 000000000..e561b585f --- /dev/null +++ b/wai/wai-pack/src/fabric_meter.rs @@ -0,0 +1,456 @@ +//! A fabric meter for this process on macOS, without privileges ([packaging] §11.6, +//! [energy-measurement] §6.3): the energy each fabric spent on the process's work, read +//! from what the operating system lets an unprivileged process read. +//! +//! - **CPU**: the kernel's account of the process's own CPU energy +//! (`proc_pid_rusage(RUSAGE_INFO_V6).ri_energy_nj`), summed over its threads. It is the +//! kernel's attribution of the cores' energy to the task (attribution `task`), and it is +//! not disturbed by other work on the host. +//! - **GPU**: the IOReport "Energy Model" group's `GPU Energy` channel, the GPU's whole +//! draw, read at each end of the span on its next republish (it can hold for hundreds of +//! milliseconds and then catch up in one step), and the GPU time every process accrued +//! over the span (the IORegistry's per-client `accumulatedGPUTime`, readable by any +//! process). The process's share is an exact 0 where it spent no GPU time, and the rail's +//! advance `· Δt_self / Δt_all` where it was the GPU's sole user, at least 99% of every +//! client's GPU time (attribution `rail`, the rule `jouleclaw-energy`'s `process_gpu` +//! measured and states). Where the GPU was shared the span has no figure: a rail's energy +//! is not proportional to its users' busy time, and a split by it has been measured to +//! charge a workload several times its own draw. +//! - **Media engine, neural engine**: none. On macOS 27 the Energy Model's other channels +//! (the CPU's, `ANE`, `AVE`, `DRAM`) read zero unless the caller holds a private +//! entitlement, and there is no decoder channel, so a span that ran a step there has no +//! figure ([`Meter::stop`] gives none, and a pack refuses `pack-meter`). +//! +//! IOReport is a private interface (`/usr/lib/libIOReport.dylib`), opened with `dlopen`; +//! where it or its channel is absent, the meter does not open. +//! +//! [packaging]: ../../../extensions/packaging.md +//! [energy-measurement]: ../../../extensions/energy-measurement.md + +#![allow(non_camel_case_types, non_upper_case_globals)] + +use crate::fabric::Fabric; +use std::ffi::{c_char, c_void, CStr, CString}; +use std::sync::{Arc, Mutex}; + +type CFTypeRef = *const c_void; +type CFStringRef = *const c_void; +type CFDictionaryRef = *const c_void; +type CFMutableDictionaryRef = *mut c_void; +type CFArrayRef = *const c_void; +type CFIndex = isize; +type io_object_t = u32; + +#[link(name = "CoreFoundation", kind = "framework")] +unsafe extern "C" { + fn CFStringCreateWithCString(alloc: CFTypeRef, s: *const c_char, encoding: u32) -> CFStringRef; + fn CFStringGetCString(s: CFStringRef, buf: *mut c_char, size: CFIndex, encoding: u32) -> u8; + fn CFDictionaryGetValue(d: CFDictionaryRef, key: CFTypeRef) -> CFTypeRef; + fn CFDictionaryGetCount(d: CFDictionaryRef) -> CFIndex; + fn CFDictionaryCreateMutableCopy(alloc: CFTypeRef, cap: CFIndex, d: CFDictionaryRef) -> CFMutableDictionaryRef; + fn CFArrayGetCount(a: CFArrayRef) -> CFIndex; + fn CFArrayGetValueAtIndex(a: CFArrayRef, i: CFIndex) -> CFTypeRef; + fn CFNumberGetValue(n: CFTypeRef, ty: CFIndex, out: *mut c_void) -> u8; + fn CFGetTypeID(x: CFTypeRef) -> usize; + fn CFStringGetTypeID() -> usize; + fn CFArrayGetTypeID() -> usize; + fn CFDictionaryGetTypeID() -> usize; + fn CFNumberGetTypeID() -> usize; + fn CFRelease(x: CFTypeRef); +} + +#[link(name = "IOKit", kind = "framework")] +unsafe extern "C" { + fn IOServiceMatching(name: *const c_char) -> CFMutableDictionaryRef; + fn IOServiceGetMatchingServices(port: u32, matching: CFMutableDictionaryRef, it: *mut io_object_t) -> i32; + fn IOIteratorNext(it: io_object_t) -> io_object_t; + fn IOObjectRelease(o: io_object_t) -> i32; + fn IORegistryEntryGetChildIterator(e: io_object_t, plane: *const c_char, it: *mut io_object_t) -> i32; + fn IORegistryEntryCreateCFProperty(e: io_object_t, key: CFStringRef, alloc: CFTypeRef, opts: u32) -> CFTypeRef; +} + +unsafe extern "C" { + fn dlopen(path: *const c_char, mode: i32) -> *mut c_void; + fn dlsym(handle: *mut c_void, name: *const c_char) -> *mut c_void; + fn proc_pid_rusage(pid: i32, flavor: i32, buffer: *mut c_void) -> i32; + fn getpid() -> i32; +} + +const UTF8: u32 = 0x0800_0100; +const NUMBER_SINT64: CFIndex = 4; +const RUSAGE_INFO_V6: i32 = 6; +/// `ri_energy_nj`'s place among `rusage_info_v6`'s 64-bit fields after its 16-byte UUID. +const RI_ENERGY_NJ: usize = 40; + +type CopyChannels = unsafe extern "C" fn(CFStringRef, CFStringRef, u64, u64, u64) -> CFDictionaryRef; +type CreateSubscription = unsafe extern "C" fn(*const c_void, CFMutableDictionaryRef, *mut CFMutableDictionaryRef, u64, CFTypeRef) -> *mut c_void; +type CreateSamples = unsafe extern "C" fn(*mut c_void, CFMutableDictionaryRef, CFTypeRef) -> CFDictionaryRef; +type CreateDelta = unsafe extern "C" fn(CFDictionaryRef, CFDictionaryRef, CFTypeRef) -> CFDictionaryRef; +type ChannelString = unsafe extern "C" fn(CFDictionaryRef) -> CFStringRef; +type SimpleInteger = unsafe extern "C" fn(CFDictionaryRef, i32) -> i64; + +fn cfstr(s: &str) -> CFStringRef { + let c = CString::new(s).expect("no NUL"); + // SAFETY: a C string and the UTF-8 encoding; the caller releases the result. + unsafe { CFStringCreateWithCString(std::ptr::null(), c.as_ptr(), UTF8) } +} + +fn string_of(s: CFStringRef) -> Option { + if s.is_null() { + return None; + } + let mut buf = [0 as c_char; 256]; + // SAFETY: a CFString and a buffer of its stated size. + let ok = unsafe { CFGetTypeID(s) == CFStringGetTypeID() && CFStringGetCString(s, buf.as_mut_ptr(), buf.len() as CFIndex, UTF8) != 0 }; + // SAFETY: CFStringGetCString wrote a NUL-terminated string into `buf`. + ok.then(|| unsafe { CStr::from_ptr(buf.as_ptr()) }.to_string_lossy().into_owned()) +} + +/// The kernel's account of this process's CPU energy so far, in nanojoules. +pub fn cpu_energy_nj() -> Option { + let mut buf = [0u64; 2 + 64]; + // SAFETY: a buffer larger than rusage_info_v6 for this process's own pid. + let rc = unsafe { proc_pid_rusage(getpid(), RUSAGE_INFO_V6, buf.as_mut_ptr().cast()) }; + (rc == 0).then(|| buf[2 + RI_ENERGY_NJ]) +} + +/// GPU time accrued so far, in nanoseconds: by every client of every accelerator, and by +/// this process's clients. +pub fn gpu_time_ns() -> Option<(u64, u64)> { + let me = format!("pid {}, ", unsafe { getpid() }); + let (mut all, mut mine) = (0u64, 0u64); + let plane = CString::new("IOService").expect("no NUL"); + let class = CString::new("IOAccelerator").expect("no NUL"); + let (k_creator, k_usage, k_time) = (cfstr("IOUserClientCreator"), cfstr("AppUsage"), cfstr("accumulatedGPUTime")); + let mut it: io_object_t = 0; + // SAFETY: IOKit's documented calls; every object obtained is released below. + unsafe { + if IOServiceGetMatchingServices(0, IOServiceMatching(class.as_ptr()), &mut it) != 0 { + return None; + } + loop { + let acc = IOIteratorNext(it); + if acc == 0 { + break; + } + let mut cit: io_object_t = 0; + if IORegistryEntryGetChildIterator(acc, plane.as_ptr(), &mut cit) == 0 { + loop { + let c = IOIteratorNext(cit); + if c == 0 { + break; + } + let creator = IORegistryEntryCreateCFProperty(c, k_creator, std::ptr::null(), 0); + let usage = IORegistryEntryCreateCFProperty(c, k_usage, std::ptr::null(), 0); + let ours = string_of(creator).is_some_and(|s| s.starts_with(&me)); + if !usage.is_null() && CFGetTypeID(usage) == CFArrayGetTypeID() { + for i in 0..CFArrayGetCount(usage) { + let d = CFArrayGetValueAtIndex(usage, i); + if d.is_null() || CFGetTypeID(d) != CFDictionaryGetTypeID() { + continue; + } + let n = CFDictionaryGetValue(d, k_time); + let mut v: i64 = 0; + if !n.is_null() && CFGetTypeID(n) == CFNumberGetTypeID() && CFNumberGetValue(n, NUMBER_SINT64, (&mut v as *mut i64).cast()) != 0 && v > 0 { + all = all.saturating_add(v as u64); + if ours { + mine = mine.saturating_add(v as u64); + } + } + } + } + for x in [creator, usage] { + if !x.is_null() { + CFRelease(x); + } + } + IOObjectRelease(c); + } + IOObjectRelease(cit); + } + IOObjectRelease(acc); + } + IOObjectRelease(it); + for k in [k_creator, k_usage, k_time] { + CFRelease(k); + } + } + Some((all, mine)) +} + +/// A subscription to the Energy Model group, read for its `GPU Energy` channel. +pub struct GpuRail { + sub: *mut c_void, + subd: CFMutableDictionaryRef, + samples: CreateSamples, + delta: CreateDelta, + name: ChannelString, + unit: ChannelString, + value: SimpleInteger, + last: CFDictionaryRef, +} + +// SAFETY: the subscription is used by one thread at a time, behind the meter's lock. +unsafe impl Send for GpuRail {} + +impl GpuRail { + /// Open the subscription; `None` where IOReport or the channel is absent. + pub fn open() -> Option { + let lib = CString::new("/usr/lib/libIOReport.dylib").expect("no NUL"); + // SAFETY: dlopen and dlsym of the system library's documented-by-use symbols; a + // symbol that is missing makes the rail absent. + unsafe { + let h = dlopen(lib.as_ptr(), 2); + if h.is_null() { + return None; + } + let sym = |n: &str| { + let c = CString::new(n).expect("no NUL"); + let p = dlsym(h, c.as_ptr()); + (!p.is_null()).then_some(p) + }; + let copy: CopyChannels = std::mem::transmute(sym("IOReportCopyChannelsInGroup")?); + let create: CreateSubscription = std::mem::transmute(sym("IOReportCreateSubscription")?); + let samples: CreateSamples = std::mem::transmute(sym("IOReportCreateSamples")?); + let delta: CreateDelta = std::mem::transmute(sym("IOReportCreateSamplesDelta")?); + let name: ChannelString = std::mem::transmute(sym("IOReportChannelGetChannelName")?); + let unit: ChannelString = std::mem::transmute(sym("IOReportChannelGetUnitLabel")?); + let value: SimpleInteger = std::mem::transmute(sym("IOReportSimpleGetIntegerValue")?); + let group = cfstr("Energy Model"); + let ch = copy(group, std::ptr::null(), 0, 0, 0); + CFRelease(group); + if ch.is_null() { + return None; + } + let mch = CFDictionaryCreateMutableCopy(std::ptr::null(), CFDictionaryGetCount(ch), ch); + CFRelease(ch); + let mut subd: CFMutableDictionaryRef = std::ptr::null_mut(); + let sub = create(std::ptr::null(), mch, &mut subd, 0, std::ptr::null()); + if sub.is_null() || subd.is_null() { + return None; + } + let last = samples(sub, subd, std::ptr::null()); + if last.is_null() { + return None; + } + Some(GpuRail { sub, subd, samples, delta, name, unit, value, last }) + } + } + + /// The `GPU Energy` channel's energy since the previous read, in nanojoules; `None` + /// where the sample or the channel is absent. + pub fn read_nj(&mut self) -> Option { + // SAFETY: the subscription opened above; every sample and delta is released. + unsafe { + let now = (self.samples)(self.sub, self.subd, std::ptr::null()); + if now.is_null() { + return None; + } + let d = (self.delta)(self.last, now, std::ptr::null()); + CFRelease(self.last); + self.last = now; + if d.is_null() { + return None; + } + let key = cfstr("IOReportChannels"); + let arr = CFDictionaryGetValue(d, key); + CFRelease(key); + let mut total: Option = None; + if !arr.is_null() && CFGetTypeID(arr) == CFArrayGetTypeID() { + for i in 0..CFArrayGetCount(arr) { + let it = CFArrayGetValueAtIndex(arr, i); + if string_of((self.name)(it)).as_deref() != Some("GPU Energy") { + continue; + } + let scale: u64 = match string_of((self.unit)(it)).as_deref() { + Some("nJ") => 1, + Some("uJ") | Some("µJ") => 1_000, + Some("mJ") => 1_000_000, + _ => continue, + }; + let v = (self.value)(it, 0).max(0) as u64; + total = Some(total.unwrap_or(0).saturating_add(v.saturating_mul(scale))); + } + } + CFRelease(d); + total + } + } +} + +/// The least share of every client's GPU time, in percent, for which the rail is this +/// process's ([`FabricMeter`]). +pub const SOLE_USER_PERCENT: u64 = 99; + +/// How long a read at a span's end waits for the rail's next republish. +pub const RAIL_EDGE_WAIT: std::time::Duration = std::time::Duration::from_millis(1000); + +/// What a span gave each fabric: microjoules, and how the share was attributed. +#[derive(Clone, Debug, Default, PartialEq, Eq)] +pub struct Shares { + pub cpu_uj: u64, + pub gpu_uj: u64, + /// The GPU rail's whole energy over the span, and the GPU times behind the share. + pub gpu_rail_uj: u64, + pub gpu_time_self_ns: u64, + pub gpu_time_all_ns: u64, + pub window_us: u64, +} + +impl Shares { + /// The shares as `(fabric, microjoules, attribution)`, the fabrics in order. + pub fn split(&self) -> Vec<(Fabric, u64, &'static str)> { + vec![(Fabric::Cpu, self.cpu_uj, "task"), (Fabric::Gpu, self.gpu_uj, "rail")] + } + + pub fn total_uj(&self) -> u64 { + self.cpu_uj.saturating_add(self.gpu_uj) + } +} + +/// A span's start. +struct Start { + cpu_nj: u64, + gpu: (u64, u64), + at: std::time::Instant, +} + +/// The meter: open it once, then [`FabricMeter::start`] and [`FabricMeter::stop`] around +/// a span. It is also a [`wai::energy_meter::Meter`] whose reading is the shares' sum, +/// classed `ModelBased`; the last span's shares stay readable through +/// [`FabricMeter::shares_handle`]. +pub struct FabricMeter { + rail: Option, + start: Option, + last: Arc>>, + /// Why the last span had no figure, where it had none. + why: Arc>>, +} + +impl FabricMeter { + /// The meter, or `None` where the CPU's account cannot be read. Without the GPU rail + /// it meters the CPU alone, and a span in which the process accrued GPU time then has + /// no figure. + pub fn open() -> Option { + cpu_energy_nj()?; + Some(FabricMeter { rail: GpuRail::open(), start: None, last: Arc::new(Mutex::new(None)), why: Arc::new(Mutex::new(None)) }) + } + + /// Whether the GPU rail opened. + pub fn has_gpu_rail(&self) -> bool { + self.rail.is_some() + } + + /// The shares of the last span that [`FabricMeter::stop`] measured. + pub fn shares_handle(&self) -> Arc>> { + Arc::clone(&self.last) + } + + /// Why the last span had no figure, readable after the meter has been moved. + pub fn why_handle(&self) -> Arc>> { + Arc::clone(&self.why) + } + + /// Why the last span had no figure, where it had none. + pub fn why_none(&self) -> Option { + self.why.lock().unwrap_or_else(|p| p.into_inner()).clone() + } + + fn refuse(&self, why: String) -> Option { + *self.why.lock().unwrap_or_else(|p| p.into_inner()) = Some(why); + None + } + + /// The rail's energy up to its next republish: what it has published since the last + /// read, then reads every 5 ms until one advances, for at most [`RAIL_EDGE_WAIT`]; an + /// idle GPU, whose clients accrue no GPU time over 100 ms, may publish nothing, and its + /// reading stands. + fn rail_to_edge(&mut self) -> Option { + let r = self.rail.as_mut()?; + let mut total = r.read_nj()?; + let t0 = std::time::Instant::now(); + let idle_from = gpu_time_ns().map(|g| g.0); + while t0.elapsed() < RAIL_EDGE_WAIT { + std::thread::sleep(std::time::Duration::from_millis(5)); + let d = r.read_nj()?; + if d > 0 { + return Some(total.saturating_add(d)); + } + if t0.elapsed() >= std::time::Duration::from_millis(100) && gpu_time_ns().map(|g| g.0) == idle_from { + return Some(total); + } + total = total.saturating_add(d); + } + None + } + + pub fn begin(&mut self) -> bool { + // The rail first, to its republish, so that the span starts on one; then the GPU + // times and the CPU, innermost. + if self.rail.is_some() && self.rail_to_edge().is_none() { + return false; + } + let gpu = gpu_time_ns().unwrap_or((0, 0)); + let Some(cpu_nj) = cpu_energy_nj() else { return false }; + *self.why.lock().unwrap_or_else(|p| p.into_inner()) = None; + self.start = Some(Start { cpu_nj, gpu, at: std::time::Instant::now() }); + true + } + + /// The span's shares; `None` with no span begun, a counter that went backwards, or GPU + /// time accrued by this process with no rail to attribute. + pub fn end(&mut self) -> Option { + let s = self.start.take()?; + // The CPU first, innermost; then the GPU times; then the rail, to its republish. + let cpu = cpu_energy_nj()?.checked_sub(s.cpu_nj)?; + let (all, mine) = gpu_time_ns().unwrap_or(s.gpu); + let window_us = s.at.elapsed().as_micros() as u64; + let rail_nj = if self.rail.is_some() { self.rail_to_edge() } else { None }; + let (d_all, d_mine) = (all.saturating_sub(s.gpu.0), mine.saturating_sub(s.gpu.1)); + let gpu_nj = match (d_mine, rail_nj) { + (0, _) => 0, + (_, None) => return self.refuse("the process used the GPU and the GPU rail gave no reading".into()), + (m, Some(e)) => { + let all = d_all.max(m); + if m as u128 * 100 < all as u128 * SOLE_USER_PERCENT as u128 { + return self.refuse(format!("the GPU was shared: this process had {m} ns of its {all} ns, under {SOLE_USER_PERCENT}%")); + } + (e as u128 * m as u128 / all as u128) as u64 + } + }; + let shares = Shares { + cpu_uj: cpu / 1000, + gpu_uj: gpu_nj / 1000, + gpu_rail_uj: rail_nj.unwrap_or(0) / 1000, + gpu_time_self_ns: d_mine, + gpu_time_all_ns: d_all, + window_us, + }; + *self.last.lock().unwrap_or_else(|p| p.into_inner()) = Some(shares.clone()); + Some(shares) + } + + /// What a report names as its power reader. + pub fn reader(&self) -> String { + format!( + "wai-pack fabric meter: cpu = proc_pid_rusage(RUSAGE_INFO_V6).ri_energy_nj of this process; gpu = IOReport Energy Model \"GPU Energy\"{}, this process at least 99% of IORegistry accumulatedGPUTime, else no figure", + if self.rail.is_some() { "" } else { " (absent on this host)" } + ) + } +} + +impl wai::energy_meter::Meter for FabricMeter { + fn start(&mut self) { + self.begin(); + } + + fn stop(&mut self) -> Option { + let s = self.end()?; + let uj = s.total_uj(); + (uj > 0).then_some(wai::energy_meter::EnergyReading { joules_micro: uj, provenance: wai::wai_video_manifest::EnergyProvenance::ModelBased }) + } + + fn kind(&self) -> wai::energy_class::AcquisitionKind { + wai::energy_class::AcquisitionKind::ModelBased + } +} diff --git a/wai/wai-pack/src/lib.rs b/wai/wai-pack/src/lib.rs index fbd97740d..3683e924f 100644 --- a/wai/wai-pack/src/lib.rs +++ b/wai/wai-pack/src/lib.rs @@ -5,7 +5,7 @@ //! may emit ([`capcheck`]), the source readers ([`source`]), `wai.pack.scenecut/1` //! ([`scenecut`]), piece classification ([`classify`]), a piece's plan, ladder and class //! plan ([`plan`]), the base encode's choice of step and the refinement layers -//! ([`encode`]), stills ([`png`]), the floor ([`floor`], [`av1`], [`cmaf`]), the objects +//! ([`encode`]), where each stage runs ([`fabric`]), stills ([`png`]), the floor ([`floor`], [`av1`], [`cmaf`]), the objects //! ([`objects`]), the catalogs ([`catalog`]), where a packer's inputs come from and its //! files go ([`files`]), the packer ([`pack`]) and its verifier //! ([`verify`]), the live packer ([`live`]), delivery over a simulated link @@ -26,6 +26,9 @@ pub mod cmaf_read; pub mod conformance; pub mod delivery; pub mod encode; +pub mod fabric; +#[cfg(all(target_os = "macos", feature = "fabric-meter"))] +pub mod fabric_meter; pub mod files; pub mod fixture; pub mod floor; diff --git a/wai/wai-pack/src/live.rs b/wai/wai-pack/src/live.rs index b6751aa72..d2eba9dfb 100644 --- a/wai/wai-pack/src/live.rs +++ b/wai/wai-pack/src/live.rs @@ -154,7 +154,7 @@ impl LivePacker { let at_frame = self.pushed.saturating_sub(1); for piece in pieces { let comp = &self.policy.components[0]; - let coder = Coder { policy: &self.policy, comp, w: self.w, h: self.h }; + let coder = Coder { policy: &self.policy, comp, w: self.w, h: self.h, fabrics: crate::fabric::reference() }; let from = (piece.start - self.held_from) as usize; let mut cp = coder.code(&piece, &self.held[from..from + piece.len as usize])?; let number = self.first_piece + self.open.len() as u64; diff --git a/wai/wai-pack/src/pack.rs b/wai/wai-pack/src/pack.rs index e79024087..ae782721f 100644 --- a/wai/wai-pack/src/pack.rs +++ b/wai/wai-pack/src/pack.rs @@ -48,7 +48,7 @@ use crate::catalog::{self, CompView, FloorView}; use crate::classify::{self, PieceKind}; -use crate::encode::{choose_q, MotionParams}; +use crate::encode::MotionParams; use crate::files::{FileSet, Input, MemSink, Sink}; use crate::floor::{self, Floor}; use crate::objects; @@ -113,8 +113,18 @@ pub struct PackOpts { /// links to the supplied ones where the file system allows, so a server holds the /// ladder's bytes once; every byte is the same either way. pub link_supplied: bool, + /// Where each stage runs (§11.6): the CPU reference by default. No byte of the + /// package depends on it. + pub fabrics: std::sync::Arc, + /// The meter's figure divided by fabric, read once the meter has stopped, for the + /// measurement claim's `fabrics` member (jwp-receipts §2.4.8); `None` writes a claim + /// without one. + pub fabric_split: Option, } +/// What a fabric meter's last span gave each fabric: `(fabric, µJ, attribution)`. +pub type FabricSplit = std::sync::Arc Option> + Send + Sync>; + impl PackOpts { /// Unmetered options with the grant `wai.video.package` and no ceilings, coding one /// piece at a time, the supplied floor's files given in memory. @@ -136,6 +146,8 @@ impl PackOpts { jobs: 1, base_from: None, link_supplied: false, + fabrics: std::sync::Arc::new(crate::fabric::Fabrics::reference()), + fabric_split: None, } } } @@ -348,6 +360,8 @@ pub struct Coder<'a> { pub comp: &'a crate::policy::Component, pub w: u32, pub h: u32, + /// Where its stages run (§11.6); the CPU reference unless set. + pub fabrics: &'a crate::fabric::Fabrics, } impl<'a> Coder<'a> { @@ -370,7 +384,13 @@ impl<'a> Coder<'a> { return Err(PackError::new(format!("pack-capability-unsupported:{}", r.capability), format!("ladder.{}: its parameters", r.id))); } } - Ok(Coder { policy, comp, w, h }) + Ok(Coder { policy, comp, w, h, fabrics: crate::fabric::reference() }) + } + + /// A clip's decoded-output digest (§6.5), on the CPU. + fn digest(&self, frames: &[Vec]) -> [u8; 32] { + self.fabrics.ran_on_cpu(crate::fabric::Step::Digest, frames.iter().map(|f| f.len() as u64).sum()); + clip_digest(frames) } /// Code `piece`, whose source frames are `src`: its base, then each refinement of its @@ -389,14 +409,18 @@ impl<'a> Coder<'a> { let (payload, recon): (Vec, Vec>) = match ladder.base.capability.as_str() { CAP_INT_MOTION => { let mp = MotionParams::of(ladder.base).expect("checked by Coder::new"); - let q = choose_q(src, h, w, &mp).map_err(|e| enc(e.to_string()))?; + let q = crate::encode::choose_q_with(src, h, w, &mp, &mut self.fabrics.search()).map_err(|e| enc(e.to_string()))?; + self.fabrics.ran_on_cpu(crate::fabric::Step::BaseCode, n * h as u64 * w as u64 * 3); (q.encoded.wiv1, q.encoded.recon) } // A still: the piece's first frame, held for the piece (§5.7). - _ => (crate::png::encode(&src[0], w, h), vec![src[0].clone(); src.len()]), + _ => { + self.fabrics.ran_on_cpu(crate::fabric::Step::BaseCode, h as u64 * w as u64 * 3); + (crate::png::encode(&src[0], w, h), vec![src[0].clone(); src.len()]) + } }; let base_env = objects::base_envelope(self.comp.media.label(), &ladder.base.capability, payload, n, h, w); - let base_hash = objects::object_hash(&base_env); + let base_hash = self.fabrics.object_hash(&base_env); let tier = wsix::capability_prefix_tier(&ladder.base.capability); let mut stages = vec![Stage { hash: base_hash, @@ -404,8 +428,8 @@ impl<'a> Coder<'a> { role: Role::Base, layer: 0, prefix_tier: tier, - prefix_digest: if tier == wsix::TIER_DECODE { clip_digest(&recon) } else { [0u8; 32] }, - sse: crate::encode::sse(&recon, src), + prefix_digest: if tier == wsix::TIER_DECODE { self.digest(&recon) } else { [0u8; 32] }, + sse: self.fabrics.sse(&recon, src), deadline_ms: 0, flags: 0, lens: Lens::of(&base_env)?, @@ -418,6 +442,7 @@ impl<'a> Coder<'a> { let layer = u8::try_from(k + 1).map_err(|_| enc("a layer past 255".into()))?; let q = rung.param_u64("q").and_then(|q| u32::try_from(q).ok()).ok_or_else(|| enc(format!("ladder.{}: its step", rung.id)))?; let (payload, next) = crate::encode::encode_refinement(&below, src, h, w, q).map_err(enc)?; + self.fabrics.ran_on_cpu(crate::fabric::Step::RefineCode, n * h as u64 * w as u64 * 3); let prev = stages.last().expect("the base").hash; let env = objects::refinement_envelope(self.comp.media.label(), &rung.capability, payload, &base_hash, &prev, layer); // The sink's own application of the layer to the decoded base. @@ -433,13 +458,13 @@ impl<'a> Coder<'a> { let below_tier = stages.last().expect("the base").prefix_tier; let tier = if below_tier == wsix::TIER_DECODE && wsix::capability_prefix_tier(&rung.capability) == wsix::TIER_DECODE { wsix::TIER_DECODE } else { wsix::TIER_NONE }; stages.push(Stage { - hash: objects::object_hash(&env), + hash: self.fabrics.object_hash(&env), capability: rung.capability.clone(), role: Role::Refinement, layer, prefix_tier: tier, - prefix_digest: if tier == wsix::TIER_DECODE { clip_digest(&next) } else { [0u8; 32] }, - sse: crate::encode::sse(&next, src), + prefix_digest: if tier == wsix::TIER_DECODE { self.digest(&next) } else { [0u8; 32] }, + sse: self.fabrics.sse(&next, src), deadline_ms: deadline, flags: 0, lens: Lens::of(&env)?, @@ -938,7 +963,9 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt if let Some(m) = opts.meter.as_mut() { m.start(); } - let coder = Coder::new(&policy, comp, w, h)?; + let fabrics = std::sync::Arc::clone(&opts.fabrics); + let mut coder = Coder::new(&policy, comp, w, h)?; + coder.fabrics = &fabrics; // The second read: each piece coded, and each floor rung's units for it. let mut rd = match src { Some(src) => Some(crate::source::y4m::Y4mReader::new(src.open().map_err(|e| io_err("the source", e))?).map_err(source_err)?), @@ -986,6 +1013,7 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt continue; }; let fr = read_frames(rd, pieces[p].len)?; + fabrics.ran_on_cpu(crate::fabric::Step::SourceRead, fr.iter().map(|f| f.len() as u64).sum()); if frames_digest(&fr) != digests[p] { return Err(PackError::new("pack-source-changed", format!("piece {p}'s frames differ on the source's second read"))); } @@ -1059,13 +1087,14 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt } _ => unreachable!("a floor's read is of its form"), }; + fabrics.ran_on_cpu(crate::fabric::Step::FloorRead, units.iter().map(|u| u.len() as u64).sum()); let payload = floor::av1_payload(&units, fh, fw, tb.num, tb.den); let env = match &df { Some(df) => objects::floor_envelope(comp.media.label(), &f.rung.capability, payload, piece.len, fh, fw, df), None => objects::base_envelope(comp.media.label(), &f.rung.capability, payload, piece.len, fh, fw), }; cp.stages.push(Stage { - hash: objects::object_hash(&env), + hash: fabrics.object_hash(&env), capability: f.rung.capability.clone(), role: Role::Floor, layer: 0, @@ -1114,6 +1143,7 @@ pub fn pack_into(policy_bytes: &[u8], sources: &BTreeMap>, opt .map(|((f, init), fragments)| FloorView { name: f.name.clone(), codec: f.check.seq.codec_string(), w: f.check.seq.max_frame_width, h: f.check.seq.max_frame_height, init, fragments }) .collect(); let index_bytes = index.to_bytes(); + fabrics.ran_on_cpu(crate::fabric::Step::Index, index_bytes.len() as u64); let catalogs = { let objs = catalog::SinkObjects(&*sink); let view = CompView { index: &index, tb, w, h, objects: &objs, floors: views, base_cap: catalog::default_base_cap(&policy, &comp.id) }; @@ -1166,6 +1196,30 @@ fn measurement_claim(r: &PackageReceiptV2, index: &[u8], opts: &PackOpts) -> Res use wai::energy_figure::{meter_report, EnergyFigures}; let indexes: Vec<&[u8]> = vec![index]; let view = (r, indexes.as_slice()).figure_view().ok_or("the receipt does not verify")?; - let claim = meter_report::emit(&view, None, None, wai::energy_report::BuildRecord::of_this_build(), &opts.power_reader, &opts.signer, &opts.signer_id, None, &opts.issued_at)?; + let fabrics = match &opts.fabric_split { + None => None, + Some(split) => Some(fabric_record(&opts.fabrics, &split().ok_or("the fabric meter kept no shares")?)?), + }; + let claim = meter_report::emit_with_fabrics(&view, None, None, wai::energy_report::BuildRecord::of_this_build(), &opts.power_reader, fabrics, &opts.signer, &opts.signer_id, None, &opts.issued_at)?; Ok(claim.to_json()) } + +/// A measurement claim's fabric record (jwp-receipts §2.4.8): the steps that ran, each +/// with every fabric that ran it and its backend, and the meter's share on each fabric a +/// step ran on. A share on a fabric no step ran on is refused, not dropped, so the +/// shares always divide the figure. +pub fn fabric_record(f: &crate::fabric::Fabrics, split: &[(crate::fabric::Fabric, u64, &'static str)]) -> Result { + use wai::claim_receipt::{FabricRecord, FabricShare, FabricStep}; + let ran = f.record(); + let on: std::collections::BTreeSet = ran.iter().map(|r| r.fabric).collect(); + let mut shares = Vec::new(); + for &(fabric, uj, attribution) in split { + if on.contains(&fabric) { + shares.push(FabricShare { fabric: fabric.term().into(), joules_micro: uj, attribution: attribution.into() }); + } else if uj > 0 { + return Err(format!("the meter gave the {} {uj} uJ, and no step ran there", fabric.term())); + } + } + let steps = ran.into_iter().map(|r| FabricStep { step: r.step.term().into(), fabric: r.fabric.term().into(), backend: r.backend }).collect(); + Ok(FabricRecord { steps, shares }) +} diff --git a/wai/wai-pack/src/verify.rs b/wai/wai-pack/src/verify.rs index 97418c624..7e9e1ace8 100644 --- a/wai/wai-pack/src/verify.rs +++ b/wai/wai-pack/src/verify.rs @@ -116,8 +116,13 @@ pub fn read_strict(root: &std::path::Path) -> Result>, /// Verify the package in `dir`, read strictly ([`read_strict`]). pub fn verify_dir(dir: &std::path::Path) -> Result> { + verify_dir_with(dir, crate::fabric::reference()) +} + +/// [`verify_dir`], its stages placed by `fabrics` (packaging §11.6). +pub fn verify_dir_with(dir: &std::path::Path, fabrics: &crate::fabric::Fabrics) -> Result> { let files = read_strict(dir).map_err(|e| vec![reason("unexpected-file", e)])?; - verify_files(&files) + verify_files_with(&files, fabrics) } /// The policy's own refusals a package is held to (§11.1, §3.6): its ids and floor names, @@ -142,6 +147,15 @@ pub fn policy_refusal(policy: &Policy) -> Option { /// Verify a package given as its files, by path. pub fn verify_files(files: &BTreeMap>) -> Result> { + verify_files_with(files, crate::fabric::reference()) +} + +/// [`verify_files`], its stages placed by `fabrics` (packaging §11.6). The verdict and its +/// reasons are [`verify_files`]'s for every package: a check whose expected value the +/// package states (an object's content hash) may be computed on another fabric, where a +/// match shows the fabric computed it, and a mismatch is computed again on the CPU +/// reference before it is reported; every other check runs on the CPU. +pub fn verify_files_with(files: &BTreeMap>, fabrics: &crate::fabric::Fabrics) -> Result> { let one = |r: Reason| vec![r]; // 1. Every path one a listing can carry. let bad: Vec<&String> = files.keys().filter(|p| !wai::pin::is_listing_path(p)).collect(); @@ -205,7 +219,7 @@ pub fn verify_files(files: &BTreeMap>) -> Result = Vec::new(); @@ -382,6 +396,7 @@ pub fn index_against_policy(policy: &Policy, comp: &Component, ix: &StageIndex) } /// One component's checks of §11.3 step 6; the catalogs it gives, which the caller compares. +#[allow(clippy::too_many_arguments)] fn verify_component( files: &BTreeMap>, policy: &Policy, @@ -390,6 +405,7 @@ fn verify_component( policy_digest: &[u8; 32], expected: &mut std::collections::BTreeSet, listed_objects: &mut std::collections::BTreeSet, + fabrics: &crate::fabric::Fabrics, ) -> Result>, Vec> { let mut errs: Vec = Vec::new(); if let Some(x) = index_against_policy(policy, comp, ix) { @@ -405,6 +421,16 @@ fn verify_component( } let mut objects: BTreeMap<[u8; 32], Vec> = BTreeMap::new(); let mut dims: Option<(u32, u32)> = None; + // Every present object of the right length hashed in one batch, on the fabric the + // batch goes to; a refusal of its hash is decided again by the CPU reference. + let present: Vec<(usize, &[u8])> = ix + .entries + .iter() + .enumerate() + .filter_map(|(k, e)| files.get(&crate::objects::object_path(&e.content_hash)).filter(|b| b.len() as u64 == e.byte_len).map(|b| (k, b.as_slice()))) + .collect(); + let batch: Vec<&[u8]> = present.iter().map(|&(_, b)| b).collect(); + let hashed: BTreeMap = present.iter().map(|&(k, _)| k).zip(fabrics.object_hashes(&batch)).collect(); for (k, e) in ix.entries.iter().enumerate() { let path = crate::objects::object_path(&e.content_hash); listed_objects.insert(path.clone()); @@ -412,7 +438,14 @@ fn verify_component( errs.push(reason("object-missing", format!("entry {k}: {path}"))); continue; }; - if let Err(x) = wsix::check_object(ix, k, b) { + let checked = match hashed.get(&k) { + Some(&h) => match wsix::check_object_hashed(ix, k, b, &mut |_| h) { + Err(x) if x.code == "object-hash" => wsix::check_object(ix, k, b), + other => other, + }, + None => wsix::check_object(ix, k, b), + }; + if let Err(x) = checked { errs.push(reason(x.code, format!("entry {k}: {}", x.detail))); continue; } @@ -762,5 +795,12 @@ fn check_claim(r: &PackageReceiptV2, indexes: &[&[u8]], b: &[u8]) -> Result<(), if claim.subject != r.receipt_hash() { return Err("the claim's subject is not the receipt".into()); } + // A package's fabric record names the steps of packaging §11.6. + if let wai::claim_receipt::ClaimBody::Measurement(m) = &claim.body + && let Some(f) = &m.fabrics + && let Some(s) = f.steps.iter().find(|s| crate::fabric::Step::from_term(&s.step).is_none()) + { + return Err(format!("the claim's fabric record names {}, which is not a step of packaging §11.6", s.step)); + } Ok(()) } diff --git a/wai/wai-pack/tests/fabric.rs b/wai/wai-pack/tests/fabric.rs new file mode 100644 index 000000000..a95039cfe --- /dev/null +++ b/wai/wai-pack/tests/fabric.rs @@ -0,0 +1,313 @@ +//! Where a step runs changes no byte of a package and no verdict (packaging §11.6). +//! +//! On every build: the reference places every call on the CPU; a cost table places a call +//! on the fabric it prices least, and only on a measurement; a metered pack's claim carries +//! the fabric record and the verifiers accept it, and a record whose shares do not divide +//! the figure is never written. +//! +//! With the `gpu` feature, on every GPU that opens, the differential: the motion search on +//! the device against the CPU reference on seeded frames of every kind the search meets; +//! every golden package packed with the device, byte for byte the committed package; every +//! golden and every package and staged mutation given the CPU's verdict by a verifier that +//! hashes on the device; a device whose kernel is edited refused by the qualification, and, +//! used anyway, still never changing a verdict. With no adapter these print SKIPPED and +//! pass, unless WAI_PACK_GPU_REQUIRE is set. + +use std::collections::BTreeMap; +use std::path::{Path, PathBuf}; +use std::sync::{Arc, Mutex}; +use wai_pack::fabric::{Cost, Costs, Fabric, Fabrics, Mode, Step}; +use wai_pack::golden; + +fn corpus() -> PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")).join("../pack-conformance") +} + +#[test] +fn the_reference_places_every_call_on_the_cpu() { + let f = Fabrics::reference(); + for s in Step::ALL { + for units in [0, 1, u64::MAX] { + assert_eq!(f.place(s, units), Fabric::Cpu, "{}", s.term()); + } + assert!(f.offers(s, Fabric::Cpu) && !f.offers(s, Fabric::Media) && !f.offers(s, Fabric::Neural)); + assert_eq!(Step::from_term(s.term()), Some(s)); + } + for fb in Fabric::ALL { + assert_eq!(Fabric::from_term(fb.term()), Some(fb)); + } +} + +/// A cost table reads back as it was written, and a fabric is chosen over the CPU only +/// where it is qualified and both are priced: an unpriced or unqualified fabric is never +/// chosen, whatever the table says of it. +#[test] +fn a_cost_table_places_only_on_a_measurement() { + let t = Costs { + host: "a host".into(), + costs: vec![ + Cost { step: Step::Sse, fabric: Fabric::Cpu, backend: "cpu".into(), uj_per_call: 0, nj_per_unit_milli: 400 }, + Cost { step: Step::Sse, fabric: Fabric::Gpu, backend: "gpu".into(), uj_per_call: 30, nj_per_unit_milli: 20 }, + Cost { step: Step::BaseSearch, fabric: Fabric::Gpu, backend: "gpu".into(), uj_per_call: 1, nj_per_unit_milli: 1 }, + ], + }; + let back = Costs::parse(&t.to_json("2026-10-22T00:00:00Z", "a meter")).unwrap(); + assert_eq!(back, t); + // 30 uJ a call against 0.4 nJ a unit on the CPU: the GPU's from 78,948 units. + assert!(t.costs[1].nj(78_948) < t.costs[0].nj(78_948)); + assert!(t.costs[1].nj(78_946) >= t.costs[0].nj(78_946)); + let f = Fabrics::open(Mode::Auto, t.clone()); + // No CPU cost for the search: never off the CPU, however cheap the GPU's. + assert_eq!(f.place(Step::BaseSearch, 1 << 40), Fabric::Cpu); + let big = f.place(Step::Sse, 1 << 30); + assert_eq!(big, if f.offers(Step::Sse, Fabric::Gpu) { Fabric::Gpu } else { Fabric::Cpu }); + assert_eq!(f.place(Step::Sse, 1000), Fabric::Cpu, "a small call costs less on the CPU"); + for bad in ["{}", r#"{"schema":"wai.pack.fabric-costs/1","costs":[{"step":"lunch","fabric":"cpu","backend":"x","uj_per_call":0,"nj_per_unit_milli":0}]}"#] { + assert!(Costs::parse(bad).is_err(), "{bad}"); + } +} + +/// A meter whose figure the test reads back, so a fabric split can divide it. +struct Seen { + inner: wai::energy_meter::ModelMeter, + figure: Arc>>, +} + +impl wai::energy_meter::Meter for Seen { + fn start(&mut self) { + self.inner.start(); + } + fn stop(&mut self) -> Option { + let r = self.inner.stop()?; + *self.figure.lock().unwrap() = Some(r.joules_micro); + Some(r) + } + fn kind(&self) -> wai::energy_class::AcquisitionKind { + self.inner.kind() + } +} + +fn metered_pack(fabrics: Arc, split: impl Fn(u64) -> Vec<(Fabric, u64, &'static str)> + Send + Sync + 'static) -> Result { + let (policy, sources, mut o) = golden::golden_inputs(&corpus(), "video-base-01").unwrap(); + let figure = Arc::new(Mutex::new(None)); + let mut t = 0u64; + o.meter = Some(Box::new(Seen { inner: wai::energy_meter::ModelMeter::new(move || { t += 1_000_000; t }, 5_000), figure: Arc::clone(&figure) })); + o.power_reader = "model:5000mW".into(); + o.issued_at = "2026-10-22T00:00:00Z".into(); + o.fabrics = fabrics; + o.fabric_split = Some(Arc::new(move || figure.lock().unwrap().map(&split))); + wai_pack::pack::pack(&policy, &sources, &mut o) +} + +fn claim_body(files: &BTreeMap>) -> serde_json::Value { + let (_, b) = files.iter().find(|(p, _)| p.starts_with("claims/")).expect("a metered package has its claim"); + let v: serde_json::Value = serde_json::from_slice(b).unwrap(); + v["body"].clone() +} + +/// A metered pack writes the fabric record in its measurement claim: every step the pack +/// ran, each on the CPU here, its share the whole figure; both verifiers of a package take +/// it. A split that does not divide the figure is refused, never written. +#[test] +fn the_fabric_record_rides_in_the_measurement_claim() { + let p = metered_pack(Arc::new(Fabrics::reference()), |fig| vec![(Fabric::Cpu, fig, "task"), (Fabric::Gpu, 0, "rail")]).unwrap(); + wai_pack::verify::verify_files(&p.files).unwrap(); + let body = claim_body(&p.files); + let steps: Vec<(String, String)> = body["fabrics"]["steps"].as_array().unwrap().iter().map(|s| (s["step"].as_str().unwrap().to_string(), s["fabric"].as_str().unwrap().to_string())).collect(); + for want in ["base-code", "base-search", "digest", "floor-read", "index", "object-hash", "source-read", "sse"] { + assert!(steps.contains(&(want.to_string(), "cpu".to_string())), "{want} on the CPU in {steps:?}"); + } + let mut sorted = steps.clone(); + sorted.sort(); + assert_eq!(steps, sorted, "steps in the order of their terms"); + let shares = &body["fabrics"]["shares"]; + assert_eq!(shares.as_array().unwrap().len(), 1, "no share for a fabric no step ran on: {shares}"); + assert_eq!(shares[0]["joules_micro"], body["joules_micro"]); + assert_eq!(shares[0]["attribution"], "task"); + // The objects are the unmetered pack's. + let plain = golden::pack_golden(&corpus(), "video-base-01").unwrap(); + for (k, v) in &plain.files { + if k.starts_with("objects/") || k.starts_with("index-") || k.starts_with("floor/") { + assert!(p.files.get(k) == Some(v), "{k}"); + } + } + let short = metered_pack(Arc::new(Fabrics::reference()), |fig| vec![(Fabric::Cpu, fig - 1, "task")]).unwrap_err(); + assert_eq!(short.code, "pack-measurement-claim", "{short}"); + let elsewhere = metered_pack(Arc::new(Fabrics::reference()), |fig| vec![(Fabric::Cpu, fig - 1, "task"), (Fabric::Gpu, 1, "rail")]).unwrap_err(); + assert_eq!(elsewhere.code, "pack-measurement-claim", "a share on a fabric no step ran on: {elsewhere}"); +} + +#[cfg(feature = "gpu")] +mod gpu { + use super::*; + use wai::int_video_enc::{CpuSearch, MotionSearch}; + + fn held(p: &Path) -> BTreeMap> { + wai::pin::read_dir_set(p).unwrap() + } + + const GOLDENS: &[&str] = &["video-base-01", "video-staged-01", "video-ladder-01", "video-cmaf-01", "video-floor-only-01", "video-floor-only-02", "video-repack-01"]; + + fn gpu_fabrics() -> Option { + let f = Fabrics::open(Mode::Gpu, Costs::default()); + for (who, why) in f.refused() { + eprintln!("not used: {who}: {why}"); + } + if !f.offers(Step::BaseSearch, Fabric::Gpu) { + assert!(std::env::var_os("WAI_PACK_GPU_REQUIRE").is_none(), "WAI_PACK_GPU_REQUIRE is set and no GPU qualified"); + eprintln!("SKIPPED: no GPU qualified"); + return None; + } + Some(f) + } + + /// RGB8 frames of a conformance fixture. + fn fixture_frames(name: &str) -> (Vec>, usize, usize) { + let y4m = wai_pack::fixture::generate(name).unwrap(); + let (hd, frames) = wai_pack::source::y4m::read_all(&y4m).unwrap(); + (frames.into_iter().map(|f| f.rgb).collect(), hd.h as usize, hd.w as usize) + } + + /// The device's search is the reference's on the qualifying frames, on seeded noise at + /// every block size and range the policy admits, and on every frame pair of every + /// fixture; and the encoder, its search on the device, writes the reference's payload. + #[test] + fn the_search_on_the_gpu_is_the_reference() { + let Some(f) = gpu_fabrics() else { return }; + let mut n = 0; + let mut check = |src: &[u8], rf: &[u8], h: usize, w: usize, block: usize, range: i64, prec: i64| { + let (mut want, mut got) = (Vec::new(), Vec::new()); + CpuSearch.frame(src, rf, h, w, block, range, prec, &mut want); + f.search().frame(src, rf, h, w, block, range, prec, &mut got); + assert_eq!(got, want, "{h}x{w} block {block} range {range} prec {prec}"); + n += 1; + }; + for (h, w, block, range, prec, src, rf) in wai_pack::fabric::qualifying_frames() { + check(&src, &rf, h, w, block, range, prec); + } + let mut x = 0x5eedu64; + let mut byte = || { + x ^= x << 13; + x ^= x >> 7; + x ^= x << 17; + x as u8 + }; + for block in [4usize, 8, 16, 32] { + for (search, prec) in [(0i64, 1i64), (1, 2), (4, 2), (7, 2), (32, 1), (63, 2)] { + let (h, w) = (37, 53); + let src: Vec = (0..h * w * 3).map(|_| byte()).collect(); + let rf: Vec = src.iter().map(|v| v.wrapping_add(byte() % 5)).collect(); + check(&src, &rf, h, w, block, search * prec, prec); + } + } + for name in wai_pack::fixture::NAMES { + let (frames, h, w) = fixture_frames(name); + for pair in frames.windows(2).take(12) { + check(&pair[1], &pair[0], h, w, 16, 8, 2); + check(&pair[1], &pair[0], h, w, 8, 3, 1); + } + let p = wai::int_video_enc::EncParams { block: 16, search: 4, mv_precision: 2, q: 12 }; + let clip = &frames[..frames.len().min(24)]; + let want = wai::int_video_enc::encode(clip, h as u32, w as u32, &p).unwrap(); + let got = wai::int_video_enc::encode_with(clip, h as u32, w as u32, &p, &mut f.search()).unwrap(); + assert_eq!(got, want, "{name}: the payload with the search on the GPU"); + } + assert!(f.record().iter().any(|r| r.step == Step::BaseSearch && r.fabric == Fabric::Gpu)); + assert!(f.fallbacks().is_empty(), "{:?}", f.fallbacks()); + eprintln!("the search on the GPU: {n} frames, every vector the reference's"); + } + + /// Every golden package, packed with every step a GPU takes on the GPU, is the + /// committed package byte for byte. + #[test] + fn every_golden_packs_the_same_on_the_gpu() { + let Some(f) = gpu_fabrics() else { return }; + let f = Arc::new(f); + for name in GOLDENS { + let (policy, sources, mut o) = golden::golden_inputs(&corpus(), name).unwrap(); + o.fabrics = Arc::clone(&f); + let p = wai_pack::pack::pack(&policy, &sources, &mut o).unwrap(); + let want = held(&corpus().join("packs").join(name).join("package")); + assert_eq!(p.files.keys().collect::>(), want.keys().collect::>(), "{name}"); + for (k, v) in &want { + assert!(p.files[k] == *v, "{name}: {k} differs from the committed golden"); + } + } + let rec = f.record(); + for s in [Step::BaseSearch, Step::Sse, Step::ObjectHash] { + assert!(rec.iter().any(|r| r.step == s && r.fabric == Fabric::Gpu), "{} ran on the GPU: {rec:?}", s.term()); + } + } + + fn verdict(files: &BTreeMap>, f: &Fabrics) -> String { + match wai_pack::verify::verify_files_with(files, f) { + Ok(_) => "ok".into(), + Err(v) => v.into_iter().next().map_or_else(|| "refused".into(), |r| r.code), + } + } + + fn cases() -> Vec<(String, BTreeMap>, String)> { + let mut out: Vec<(String, BTreeMap>, String)> = Vec::new(); + for name in ["video-base-01", "video-staged-01", "video-ladder-01", "video-cmaf-01", "video-floor-only-02"] { + out.push((name.to_string(), held(&corpus().join("packs").join(name).join("package")), "ok".into())); + } + let key = |name: &str| { + let t = std::fs::read_to_string(corpus().join("packs").join(name).join("key.hex")).unwrap(); + let b = wai_pack::unhex(t.trim()).unwrap(); + ed25519_dalek::SigningKey::from_bytes(&b.try_into().unwrap()) + }; + let base = held(&corpus().join("packs/video-base-01/package")); + for m in golden::package_mutations(&base, &key("video-base-01")) { + if m.empty_dirs.is_empty() && m.unreadable_dirs.is_empty() { + out.push((format!("package-mutations/{}", m.name), m.files, m.reason)); + } + } + let staged = held(&corpus().join("packs/video-staged-01/package")); + for m in golden::staged_mutations(&staged, &key("video-staged-01")) { + out.push((format!("staged-mutations/{}", m.name), m.files, m.reason)); + } + out + } + + /// Every golden verifies, and every package and staged mutation gets its reason, from a + /// verifier that hashes on the GPU: the CPU's verdict, case by case. + #[test] + fn every_verdict_is_the_same_on_the_gpu() { + let Some(f) = gpu_fabrics() else { return }; + let cases = cases(); + for (name, files, reason) in &cases { + let cpu = verdict(files, &Fabrics::reference()); + assert_eq!(&cpu, reason, "{name}: the corpus's reason"); + assert_eq!(verdict(files, &f), cpu, "{name}: on the GPU"); + } + assert!(f.record().iter().any(|r| r.step == Step::ObjectHash && r.fabric == Fabric::Gpu)); + eprintln!("{} verdicts, each the CPU's with the hashes on the GPU", cases.len()); + } + + /// An edited kernel does not qualify; used anyway, a search on it writes another + /// package, and a hash on it never changes a verdict, because a refusal it causes is + /// decided again on the CPU and a match it gives is the reference's hash. + #[test] + fn an_edited_kernel_is_refused_and_moves_no_verdict() { + if gpu_fabrics().is_none() { + return; + } + let mut src = wai_pack_gpu::Sources::shipped(); + src.motion = src.motion.replacen("return i < bi;", "return i > bi;", 1); + src.blake3 = src.blake3.replacen("v[b] = rotr(v[b] ^ v[c], 12u);", "v[b] = rotr(v[b] ^ v[c], 11u);", 1); + let mut found = wai_pack_gpu::discover_with(&src, "an edited tie rule and rotation").found; + assert!(!found.is_empty(), "the edited kernels compile"); + let g = found.remove(0); + assert!(wai_pack::fabric::qualify(&g, Step::BaseSearch).is_err(), "the edited search is not qualified"); + assert!(wai_pack::fabric::qualify(&g, Step::ObjectHash).is_err(), "the edited hash is not qualified"); + let bad = Fabrics::with_unqualified_gpu(g, &[Step::BaseSearch, Step::ObjectHash], Mode::Gpu); + for (name, files, _) in cases() { + assert_eq!(verdict(&files, &bad), verdict(&files, &Fabrics::reference()), "{name}: a broken hash on the GPU"); + } + let (policy, sources, mut o) = golden::golden_inputs(&corpus(), "video-base-01").unwrap(); + o.fabrics = Arc::new(bad); + let p = wai_pack::pack::pack(&policy, &sources, &mut o); + let want = held(&corpus().join("packs/video-base-01/package")); + assert!(p.map_or(true, |p| p.files["LISTING"] != want["LISTING"]), "an unqualified search writes another package, or none"); + } +} -- 2.54.0 (Apple Git-157) From 08cd16b4918d2b2bdee0e977e96232ea79b39e49 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 04:51:12 -0400 Subject: [PATCH 18/50] wai-pack floor-decode: a package's floors through a conformant AV1 decoder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `wai-pack floor-decode --decoder dav1d|videotoolbox` decodes every floor rung's CMAF files (init.mp4 and the fragments in the floor playlist's order) through ffmpeg, with libdav1d on the CPU (film grain exported, not applied) or VideoToolbox on the media engine (its frames required to be the hardware's: a decoder that fell back to software fails), and prints each piece's SHA-256 of its 4:2:0 pictures at the stream's bit depth. Informative, for comparing decoders and fabrics (packaging §11.6 item 4): nothing refuses a floor for it. The media engine gives AV1 frames as P010 whatever the stream's bit depth. They are read back exactly: a 10-bit sample is the word's high ten bits, an 8-bit one is recovered only from a shift or a bit replication, and a word with low bits set, or a 10-bit value no 8-bit value widens to, fails the picture. ffmpeg's own 16-to-8-bit conversion rounds and dithers, so it is never used. A rung whose sequence header carries film grain is not decoded on the media engine, which applies grain no rule fixes. av1: SequenceHeader::film_grain_params_present reads the bit after color_config(); SequenceHeader::parse does not, so what a packager accepts is unchanged. Co-Authored-By: Claude Opus 5.5 --- wai/wai-pack/src/av1.rs | 26 ++- wai/wai-pack/src/bin/wai_pack.rs | 24 +++ wai/wai-pack/src/floor_decode.rs | 268 +++++++++++++++++++++++++++++++ wai/wai-pack/src/lib.rs | 1 + 4 files changed, 317 insertions(+), 2 deletions(-) create mode 100644 wai/wai-pack/src/floor_decode.rs diff --git a/wai/wai-pack/src/av1.rs b/wai/wai-pack/src/av1.rs index 387954a13..e28ded464 100644 --- a/wai/wai-pack/src/av1.rs +++ b/wai/wai-pack/src/av1.rs @@ -344,6 +344,19 @@ impl SequenceHeader { /// Read a sequence header OBU's payload through `color_config()`. pub fn parse(payload: &[u8]) -> Result { + Self::parse_with_grain(payload).map(|(s, _)| s) + } + + /// `film_grain_params_present` (AV1 §5.5.1), the bit after `color_config()`'s + /// `separate_uv_delta_q`: `None` where the payload does not reach it. [`parse`] does not + /// read it, so what a packager accepts does not change with it. + /// + /// [`parse`]: SequenceHeader::parse + pub fn film_grain_params_present(payload: &[u8]) -> Option { + Self::parse_with_grain(payload).ok()?.1 + } + + fn parse_with_grain(payload: &[u8]) -> Result<(SequenceHeader, Option), Av1Error> { let mut r = Bits { b: payload, at: 0 }; let seq_profile = r.f(3)? as u8; if seq_profile > 2 { @@ -453,7 +466,15 @@ impl SequenceHeader { csp = r.f(2)? as u8; } } - Ok(SequenceHeader { + // separate_uv_delta_q, but for a monochrome stream; then film_grain_params_present. + let grain = (|| -> Result { + if !mono_chrome { + r.f(1)?; + } + r.flag() + })() + .ok(); + let header = SequenceHeader { seq_profile, still_picture, reduced_still_picture_header: reduced, @@ -467,7 +488,8 @@ impl SequenceHeader { chroma_subsampling_x: ssx, chroma_subsampling_y: ssy, chroma_sample_position: csp, - }) + }; + Ok((header, grain)) } /// The codecs string ([AV1-ISOBMFF] Codecs Parameter String), its short form: diff --git a/wai/wai-pack/src/bin/wai_pack.rs b/wai/wai-pack/src/bin/wai_pack.rs index c694c906f..de73634e1 100644 --- a/wai/wai-pack/src/bin/wai_pack.rs +++ b/wai/wai-pack/src/bin/wai_pack.rs @@ -61,6 +61,11 @@ //! measure each qualified backend's energy per call of each step it runs, at two //! sizes, with the fabric meter, and write the cost table `--fabric auto:` places by //! (a build with the `fabric-meter` feature, on macOS) +//! wai-pack floor-decode [--decoder dav1d|videotoolbox] [--ffmpeg ] +//! decode every floor rung's CMAF files with a conformant AV1 decoder through ffmpeg +//! (libdav1d on the CPU, or VideoToolbox on the media engine), film grain not applied, +//! and print each piece's SHA-256 of its 4:2:0 pictures at the stream's bit depth +//! (packaging §11.6): informative, for comparing decoders; no floor is refused for it //! wai-pack listing [--primary] //! the listing (SPEC §3.1) of every file of but LISTING; with --primary, of the //! plan files and the objects the directory's stage indexes (index-*.wsix, and @@ -118,6 +123,7 @@ fn usage() -> ExitCode { wai-pack live --policy --out --key [--signer-id ] [--window ]\n \ wai-pack verify [--parent ] [--fabric cpu|gpu|auto:]\n \ wai-pack fabric list [--fabric gpu] | fabric calibrate --out [--seconds ]\n \ + wai-pack floor-decode [--decoder dav1d|videotoolbox] [--ffmpeg ]\n \ wai-pack listing [--primary]\n \ wai-pack sim --policy --class --rate --startup [--source ] [--rtt ] [--chunk ] [--enc ] [--cap ] [--fifo]\n \ wai-pack stage-json\n \ @@ -328,6 +334,23 @@ fn fabric_meter_into(_: &mut wai_pack::pack::PackOpts) -> Result<(), String> { Err("pack: --meter fabric: this build has no fabric meter (wai-pack's feature `fabric-meter`, on macOS)".into()) } +fn cmd_floor_decode(args: &[String]) -> Result<(), String> { + use wai_pack::floor_decode::{decode_floors, Decoder}; + let dir = args.first().ok_or("floor-decode: a package directory")?; + let d = opt(args, "--decoder").unwrap_or("dav1d"); + let decoder = Decoder::from_term(d).ok_or_else(|| format!("floor-decode: --decoder {d}: dav1d or videotoolbox"))?; + let ffmpeg = opt(args, "--ffmpeg").unwrap_or("ffmpeg"); + let rungs = decode_floors(Path::new(dir), decoder, ffmpeg, &std::env::temp_dir())?; + for r in &rungs { + for (i, (n, digest)) in r.pieces.iter().enumerate() { + println!("{}\t{i}\t{n}\t{digest}", r.name); + } + let frames: u64 = r.pieces.iter().map(|p| p.0).sum(); + println!("rung {} {}x{} at {} bits: {frames} pictures in {} pieces, {} ({} on {})", r.name, r.w, r.h, r.bit_depth, r.pieces.len(), r.digest(), r.decoder, decoder.fabric().term()); + } + Ok(()) +} + fn cmd_fabric(args: &[String]) -> Result<(), String> { use wai_pack::fabric::{Costs, Fabrics, Mode}; match args.first().map(String::as_str) { @@ -796,6 +819,7 @@ fn main() -> ExitCode { "stage-json" => cmd_stage_json(), "verify" => cmd_verify(rest), "fabric" => cmd_fabric(rest), + "floor-decode" => cmd_floor_decode(rest), "listing" => cmd_listing(rest), "policy-verdict" => cmd_policy_verdict(rest), "source-verdict" => cmd_source_verdict(rest), diff --git a/wai/wai-pack/src/floor_decode.rs b/wai/wai-pack/src/floor_decode.rs new file mode 100644 index 000000000..ed17829db --- /dev/null +++ b/wai/wai-pack/src/floor_decode.rs @@ -0,0 +1,268 @@ +//! A package's floors decoded to pictures by a conformant AV1 decoder ([packaging] §11.6): +//! informative, for comparing decoders and fabrics. Nothing here refuses a floor. +//! +//! The AV1 decoding process fixes every output sample of a stream that carries no film +//! grain parameters, and of every stream before film grain is applied (AV1 §7.2), so two +//! conformant decoders give the same pictures, on any fabric. This decodes each floor +//! rung's CMAF files (§7.6, §7.7: `floor//init.mp4` and the fragments in its floor +//! playlist's order) through `ffmpeg`, with one of two decoders: +//! +//! - [`Decoder::Dav1d`], the CPU: `libdav1d`, film grain exported rather than applied, its +//! pictures at the stream's bit depth as ffmpeg's planar 4:2:0 formats hold them; +//! - [`Decoder::VideoToolbox`], the media engine of an Apple chip that decodes AV1 (M3 and +//! later): its frames required to be the hardware's (`videotoolbox_vld`), downloaded as +//! they are, P010. A rung whose sequence header says `film_grain_params_present` is not +//! decoded on it: it applies grain, which no rule fixes. +//! +//! Each piece's pictures are hashed with SHA-256 in one canonical form: the Y, U and V +//! planes in turn, row by row, a sample a byte for an 8-bit stream and a little-endian +//! 16-bit word for a 10-bit one. P010 holds a sample `s` as `s << 6`; it is read back here +//! exactly, and a word whose low six bits are not zero, or, for an 8-bit stream, a 10-bit +//! value that is not an 8-bit value widened by a shift (`v << 2`) or by bit replication +//! (`v << 2 | v >> 6`), fails the decode rather than being rounded. ffmpeg's own 16-bit to +//! 8-bit conversion rounds and dithers, so it is never used. Equal digests from both +//! decoders are the evidence that the media engine computed the decoding process. +//! +//! [packaging]: ../../../extensions/packaging.md + +use crate::policy::Policy; +use sha2::Digest as _; +use std::io::Read as _; +use std::path::Path; +use wai::stage_index::{Role, StageIndex}; + +/// The decoder a floor is decoded with. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Decoder { + Dav1d, + VideoToolbox, +} + +impl Decoder { + pub fn from_term(s: &str) -> Option { + match s { + "dav1d" => Some(Decoder::Dav1d), + "videotoolbox" => Some(Decoder::VideoToolbox), + _ => None, + } + } + + pub fn fabric(self) -> crate::fabric::Fabric { + match self { + Decoder::Dav1d => crate::fabric::Fabric::Cpu, + Decoder::VideoToolbox => crate::fabric::Fabric::Media, + } + } +} + +/// One floor rung decoded: its name, picture size and bit depth, each piece's frame count +/// and digest, and the decoder's description. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct RungDecode { + pub name: String, + pub w: u32, + pub h: u32, + pub bit_depth: u8, + pub pieces: Vec<(u64, String)>, + pub decoder: String, +} + +impl RungDecode { + /// SHA-256 over the pieces' digests in order: the rung's digest. + pub fn digest(&self) -> String { + let mut h = sha2::Sha256::new(); + for (_, d) in &self.pieces { + h.update(d.as_bytes()); + } + crate::hex(&h.finalize()) + } +} + +/// The units of a floor object: the §7.2 framing of its payload. +fn object_units(env: &[u8]) -> Result>, String> { + let w = wai::Wai::from_bytes(env).map_err(|e| format!("a floor object that is not an envelope: {e}"))?; + crate::floor::av1_units(&w.payload).map(|(u, _)| u).ok_or_else(|| "a floor object whose payload is not the §7.2 framing".into()) +} + +/// The sequence header of a stream's first unit, and whether it carries film grain. +fn first_sequence_header(unit: &[u8]) -> Result<(crate::av1::SequenceHeader, bool), String> { + let obus = crate::av1::obus(unit).map_err(|e| e.to_string())?; + let sh = obus.iter().find(|o| o.obu_type == crate::av1::OBU_SEQUENCE_HEADER).ok_or("the first unit carries no sequence header")?; + let seq = crate::av1::SequenceHeader::parse(sh.payload).map_err(|e| e.to_string())?; + let grain = crate::av1::SequenceHeader::film_grain_params_present(sh.payload).ok_or("a sequence header that ends before film_grain_params_present")?; + Ok((seq, grain)) +} + +/// ffmpeg's version line. +fn ffmpeg_version(ffmpeg: &str) -> String { + std::process::Command::new(ffmpeg).args(["-hide_banner", "-version"]).output().ok().and_then(|o| String::from_utf8_lossy(&o.stdout).lines().next().map(str::to_string)).unwrap_or_else(|| ffmpeg.to_string()) +} + +/// Decode every floor rung of the package in `dir` with `decoder`, through the `ffmpeg` +/// program, each rung's CMAF files joined into one file in `tmp` (removed after). +pub fn decode_floors(dir: &Path, decoder: Decoder, ffmpeg: &str, tmp: &Path) -> Result, String> { + let read = |p: &str| std::fs::read(dir.join(p)).map_err(|e| format!("{p}: {e}")); + let policy = Policy::parse_bytes(&read("policy.toml")?).map_err(|e| e.to_string())?; + let version = ffmpeg_version(ffmpeg); + let mut out = Vec::new(); + for comp in &policy.components { + let ix = StageIndex::parse(&read(&wai::package::index_file(&comp.id))?).map_err(|e| e.detail.clone())?; + let frames: Vec = ix.pieces.iter().map(|p| p.duration as u64).collect(); + for (k, (_, name)) in crate::pack::floor_rungs(&policy, &comp.id).into_iter().enumerate() { + // The stream's sequence header, from its first floor object (§7.2). + let first = ix.piece_entries(0).iter().filter(|e| e.role == Role::Floor).nth(k).map(|e| e.content_hash).ok_or_else(|| format!("{name}: no floor object"))?; + let units = object_units(&read(&crate::objects::object_path(&first))?)?; + let (seq, grain) = first_sequence_header(units.first().ok_or_else(|| format!("{name}: no unit"))?).map_err(|e| format!("{name}: {e}"))?; + if !matches!(seq.bit_depth(), 8 | 10) || !(seq.chroma_subsampling_x && seq.chroma_subsampling_y) || seq.mono_chrome { + return Err(format!("{name}: a floor of {} bits, not 4:2:0 at 8 or 10 bits, is not decoded here", seq.bit_depth())); + } + if grain && decoder == Decoder::VideoToolbox { + return Err(format!("{name}: the stream carries film grain, which VideoToolbox applies and no rule fixes; decode it with dav1d")); + } + // The floor playlist's fragments, after the rung's initialization segment. + let playlist = String::from_utf8(read(&format!("hls/classic/floor-{name}.m3u8"))?).map_err(|_| format!("{name}: the floor playlist is not UTF-8"))?; + let stream = tmp.join(format!(".floor-decode-{}-{name}.mp4", std::process::id())); + { + let mut f = std::io::BufWriter::new(std::fs::File::create(&stream).map_err(|e| format!("{}: {e}", stream.display()))?); + std::io::Write::write_all(&mut f, &read(&format!("floor/{name}/init.mp4"))?).map_err(|e| e.to_string())?; + for line in playlist.lines().filter(|l| !l.starts_with('#') && !l.trim().is_empty()) { + let rel = line.trim().trim_start_matches("../../"); + std::io::Write::write_all(&mut f, &read(rel)?).map_err(|e| e.to_string())?; + } + std::io::Write::flush(&mut f).map_err(|e| e.to_string())?; + } + let r = run(ffmpeg, decoder, &stream, seq.max_frame_width, seq.max_frame_height, seq.bit_depth(), &frames); + let _ = std::fs::remove_file(&stream); + let how = match decoder { + Decoder::Dav1d => "libdav1d, film grain not applied", + Decoder::VideoToolbox => "VideoToolbox, hardware frames read back from P010 exactly", + }; + out.push(RungDecode { name: name.clone(), w: seq.max_frame_width, h: seq.max_frame_height, bit_depth: seq.bit_depth(), pieces: r.map_err(|e| format!("{name}: {e}"))?, decoder: format!("{version}, {how}") }); + } + } + Ok(out) +} + +/// One P010 picture (`w × h` words of Y, then `⌈w/2⌉ × ⌈h/2⌉` interleaved U, V pairs) +/// in the canonical form, every word read back exactly or refused. +pub fn from_p010(p: &[u8], w: usize, h: usize, depth: u8) -> Result, String> { + let (cw, ch) = (w.div_ceil(2), h.div_ceil(2)); + if p.len() != 2 * (w * h + 2 * cw * ch) { + return Err("a P010 picture of another size".into()); + } + let word = |i: usize| u16::from_le_bytes([p[2 * i], p[2 * i + 1]]); + let sample = |s: u16| -> Result { + if s & 0x3f != 0 { + return Err(format!("a P010 word {s:#06x} with low bits set")); + } + let ten = s >> 6; + if depth == 10 { + return Ok(ten); + } + let v = ten >> 2; + if ten == v << 2 || ten == (v << 2) | (v >> 6) { + Ok(v) + } else { + Err(format!("a 10-bit value {ten} that no 8-bit value widens to")) + } + }; + let mut out = Vec::with_capacity(if depth == 8 { 1 } else { 2 } * (w * h + 2 * cw * ch)); + let mut put = |v: u16| { + if depth == 8 { + out.push(v as u8); + } else { + out.extend_from_slice(&v.to_le_bytes()); + } + }; + for i in 0..w * h { + put(sample(word(i))?); + } + for c in 0..2 { + for i in 0..cw * ch { + put(sample(word(w * h + 2 * i + c))?); + } + } + Ok(out) +} + +/// One rung's stream through ffmpeg, its pictures hashed piece by piece. +fn run(ffmpeg: &str, decoder: Decoder, stream: &Path, w: u32, h: u32, depth: u8, frames: &[u64]) -> Result, String> { + let planar = if depth == 8 { "yuv420p" } else { "yuv420p10le" }; + let mut cmd = std::process::Command::new(ffmpeg); + cmd.args(["-hide_banner", "-nostdin", "-v", "error", "-xerror"]); + match decoder { + Decoder::Dav1d => cmd.args(["-c:v", "libdav1d", "-export_side_data", "film_grain", "-i"]).arg(stream).args(["-map", "0:v:0", "-f", "rawvideo", "-pix_fmt", planar, "-"]), + Decoder::VideoToolbox => cmd + .args(["-hwaccel", "videotoolbox", "-hwaccel_output_format", "videotoolbox_vld", "-i"]) + .arg(stream) + .args(["-map", "0:v:0", "-vf", "hwdownload,format=p010le", "-f", "rawvideo", "-pix_fmt", "p010le", "-"]), + }; + cmd.stdout(std::process::Stdio::piped()).stderr(std::process::Stdio::piped()); + let mut child = cmd.spawn().map_err(|e| format!("{ffmpeg}: {e}"))?; + let mut so = child.stdout.take().ok_or("no standard output")?; + let (w, h) = (w as usize, h as usize); + let (cw, ch) = (w.div_ceil(2), h.div_ceil(2)); + let samples = w * h + 2 * cw * ch; + let frame = match decoder { + Decoder::Dav1d => samples * if depth == 8 { 1 } else { 2 }, + Decoder::VideoToolbox => 2 * samples, + }; + let mut buf = vec![0u8; frame]; + let mut out = Vec::with_capacity(frames.len()); + let mut fault: Option = None; + 'pieces: for &n in frames { + let mut d = sha2::Sha256::new(); + for i in 0..n { + if let Err(e) = so.read_exact(&mut buf) { + fault = Some(format!("the decoder gave fewer pictures than units (piece {}, picture {i}): {e}", out.len())); + break 'pieces; + } + match decoder { + Decoder::Dav1d => d.update(&buf), + Decoder::VideoToolbox => match from_p010(&buf, w, h, depth) { + Ok(c) => d.update(&c), + Err(e) => { + fault = Some(format!("piece {}, picture {i}: {e}", out.len())); + break 'pieces; + } + }, + } + } + out.push((n, crate::hex(&d.finalize()))); + } + let mut extra = Vec::new(); + let _ = so.read_to_end(&mut extra); + let o = child.wait_with_output().map_err(|e| e.to_string())?; + if !o.status.success() { + return Err(format!("the decoder refused the stream: {}", String::from_utf8_lossy(&o.stderr).trim())); + } + if let Some(s) = fault { + return Err(s); + } + if !extra.is_empty() { + return Err(format!("the decoder gave {} bytes past the last unit's picture", extra.len())); + } + Ok(out) +} + +#[cfg(test)] +mod tests { + use super::*; + + /// P010 words are read back exactly at 10 bits and, for an 8-bit stream, from a shift + /// or a bit replication; a word with low bits set, or an 8-bit read of a value no 8-bit + /// value widens to, is refused. + #[test] + fn p010_is_read_back_exactly_or_refused() { + let pic = |ys: [u16; 4], u: u16, v: u16| -> Vec { ys.iter().chain([u, v].iter()).flat_map(|s| s.to_le_bytes()).collect() }; + let ten = pic([64 << 6, 940 << 6, 513 << 6, 1023 << 6], 512 << 6, 7 << 6); + assert_eq!(from_p010(&ten, 2, 2, 10).unwrap(), [64u16, 940, 513, 1023, 512, 7].iter().flat_map(|s| s.to_le_bytes()).collect::>()); + let shifted = pic([16 << 8, 235 << 8, 128 << 8, 0], 255 << 8, 1 << 8); + assert_eq!(from_p010(&shifted, 2, 2, 8).unwrap(), vec![16, 235, 128, 0, 255, 1]); + let rep = |v: u16| ((v << 2) | (v >> 6)) << 6; + assert_eq!(from_p010(&pic([rep(200), rep(255), rep(3), rep(64)], rep(128), rep(250)), 2, 2, 8).unwrap(), vec![200, 255, 3, 64, 128, 250]); + assert!(from_p010(&pic([(64 << 6) | 1, 0, 0, 0], 0, 0), 2, 2, 10).is_err(), "low bits"); + assert!(from_p010(&pic([802 << 6, 0, 0, 0], 0, 0), 2, 2, 8).is_err(), "802 is no 8-bit value widened"); + assert!(from_p010(&ten[..ten.len() - 2], 2, 2, 10).is_err(), "a short picture"); + } +} diff --git a/wai/wai-pack/src/lib.rs b/wai/wai-pack/src/lib.rs index 3683e924f..0572de51f 100644 --- a/wai/wai-pack/src/lib.rs +++ b/wai/wai-pack/src/lib.rs @@ -32,6 +32,7 @@ pub mod fabric_meter; pub mod files; pub mod fixture; pub mod floor; +pub mod floor_decode; pub mod golden; pub mod live; pub mod objects; -- 2.54.0 (Apple Git-157) From e898de04cdcacf89fb7e46e90dba17ea0206b609 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 05:13:34 -0400 Subject: [PATCH 19/50] pack-conformance: a metered package's fabric record, and one naming no step MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two package mutations of the metered golden (§9.4): `metered-fabrics`, whose measurement claim carries a fabric record of two steps on the CPU and the figure as its one share, which both verifiers accept; and `metered-fabrics-unknown-step`, a claim that keeps every rule of jwp-receipts §2.4.8 but whose record names a step packaging §11.6 does not define, refused measurement-claim-invalid by wai-pack and pack_verify.py alike. Every other file of the corpus regenerates unchanged. Co-Authored-By: Claude Opus 5.5 --- .../package-mutations/expected.json | 10 ++++++ .../metered-fabrics-unknown-step/LISTING | 36 +++++++++++++++++++ ...84b5d45994dd713e7576673f2.measurement.json | 1 + .../package.receipt.json | 1 + .../package-mutations/metered-fabrics/LISTING | 36 +++++++++++++++++++ ...84b5d45994dd713e7576673f2.measurement.json | 1 + .../metered-fabrics/package.receipt.json | 1 + wai/wai-pack/src/golden.rs | 17 +++++++++ 8 files changed, 103 insertions(+) create mode 100644 wai/pack-conformance/package-mutations/metered-fabrics-unknown-step/LISTING create mode 100644 wai/pack-conformance/package-mutations/metered-fabrics-unknown-step/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json create mode 100644 wai/pack-conformance/package-mutations/metered-fabrics-unknown-step/package.receipt.json create mode 100644 wai/pack-conformance/package-mutations/metered-fabrics/LISTING create mode 100644 wai/pack-conformance/package-mutations/metered-fabrics/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json create mode 100644 wai/pack-conformance/package-mutations/metered-fabrics/package.receipt.json diff --git a/wai/pack-conformance/package-mutations/expected.json b/wai/pack-conformance/package-mutations/expected.json index 6da029e10..ac38988bf 100644 --- a/wai/pack-conformance/package-mutations/expected.json +++ b/wai/pack-conformance/package-mutations/expected.json @@ -297,6 +297,16 @@ "reason": "measurement-claim-missing", "remove": [] }, + { + "name": "metered-fabrics", + "reason": "ok", + "remove": [] + }, + { + "name": "metered-fabrics-unknown-step", + "reason": "measurement-claim-invalid", + "remove": [] + }, { "name": "empty-directory", "reason": "unexpected-file", diff --git a/wai/pack-conformance/package-mutations/metered-fabrics-unknown-step/LISTING b/wai/pack-conformance/package-mutations/metered-fabrics-unknown-step/LISTING new file mode 100644 index 000000000..cc1ce69ce --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered-fabrics-unknown-step/LISTING @@ -0,0 +1,36 @@ +6b414a7fc1d9ee44a40aa79b9c3338d04ec00dbfbf88d39f5965ce65a6804890 claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json +91b8aba2292191f2046eb841fe6fcb7b214826cecd9e06a3c193a68e7089e144 dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6 floor/v/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf floor/v/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b floor/v/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a floor/v/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +99a24de04f7be9fc21097e69d2d61b222e458b1f93b8082026a9874aeb9f4c15 floor/v/99a24de04f7be9fc21097e69d2d61b222e458b1f93b8082026a9874aeb9f4c15.m4s +58c598174eed554cd0d1bc8abedca8c9d51d992c8e3b963bcb7574da4983ed9f floor/v/init.mp4 +289bfcb09eb25124ac19597bc624371c34bea00aa1011ced9372d96b5e14b2bd hls/classic/floor-v.m3u8 +3026d7f11005e34ff66298175777ee6806d649cf9d5c1467aaa4fb00ac5987e6 hls/classic/master.m3u8 +3026d7f11005e34ff66298175777ee6806d649cf9d5c1467aaa4fb00ac5987e6 hls/legacy/master.m3u8 +c5902f61ffaf77f940c4d3dc6e850340aaaeb3f433e4541f935c32443c50b341 hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +c5902f61ffaf77f940c4d3dc6e850340aaaeb3f433e4541f935c32443c50b341 hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +0b65400d0bbde57ed6a2c19d90cb72ec753de0e76165e4f286acfd5a7bda14d2 index-v.wsix +115e8e1e7ee0765de9bd2f71576cae01ce6576a5ce2a24f3374879eb74d9a6af moq/catalog.json +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +4d583d03292b77f9d46b02f2c80a774b1cda1b07df38243d18fe586b82eaca60 objects/35c7a45323b7afe979c123fa885f35cc55fabd2a1954759aebe4b95dbc76361f.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +9fdf29f5c9536d1f7701c791328d656ef725ba9b8cb3760bdb00f5a503c69338 objects/761c4649427c51796a2b699568775765b209ee80d2f4fc1cf040838c6724aa2d.wai +a3135205d3139b39409d4e4e2aafed2c042797d293a9f9fc8664467165336e25 objects/7cc2b824ad6105abfccae27093190311b6a2348842e571684b021a213341b94a.wai +3c66c0b25b759cd1fe6245d282ba928441b873d62e4ac62c95260e45a80fff77 objects/8f748dc64787b5c5ece081270c8559277f926322dd6ddc345306b8231f2d1752.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +4a2370c37281e64f30cb66a4bd7125854d6280855e90f00229b177bd70af3d8c package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +a497fdf29528c4744ce8548e3b430d6311f15c10ca2a4cb548fb9958d3d98f07 policy.json +d667cfa0c1e4e52f254f3a89a80cb0d3b6be0d833c40c8b44f60be33765859b0 policy.toml +59b343802800c815390b840da3ee6981367b495a30d8a1952f6484d04271caf9 stages/legacy.json +b7514cb869338126e4785943a4624e9dbfa44464fa450c55341b7931bd9c19f9 stages/mobile.json +33898452413a8fe209fb6b158bfd1e9b06a74fc3ab7639810522a586a4aa6ac6 stages/tv.json diff --git a/wai/pack-conformance/package-mutations/metered-fabrics-unknown-step/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json b/wai/pack-conformance/package-mutations/metered-fabrics-unknown-step/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json new file mode 100644 index 000000000..92216c412 --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered-fabrics-unknown-step/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json @@ -0,0 +1 @@ +{"body":{"bracket":null,"build":{"profile":"release","target":null,"toolchain":null},"energy_calibration_ref":null,"energy_counter_filtering":null,"energy_provenance":"ModelBased","energy_uncertainty":null,"fabrics":{"shares":[{"attribution":"task","fabric":"cpu","joules_micro":500000}],"steps":[{"backend":"cpu: the reference implementation","fabric":"cpu","step":"base-code"},{"backend":"cpu: the reference implementation","fabric":"cpu","step":"lunch"}]},"figure_index":null,"figure_profile":"wai:video-package-receipt-id","group":null,"joules_micro":500000,"power_reader":"model:500mW"},"class":"measurement","issued_at":"2026-10-21T00:00:00Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"3d1c9daf255ffd4eded9a09f2ed4d9376ff7a94a28e179e2961aa354255aa3bcca287ac7d201a610fa5f87a527fb31718729fddd5982cb3fe2398a4b1e884806","signer_id":"did:key:z6MkfMo6gxqdBhaHMNnmfhgZFBjpCDTkmJMJLoypsBZS9PwD","signer_pubkey":"0d7550754e0800a5d237eef5826035766b9b3e5a15868a940ab289958788e3b0","subject":"01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2","subject_type":"receipt"} \ No newline at end of file diff --git a/wai/pack-conformance/package-mutations/metered-fabrics-unknown-step/package.receipt.json b/wai/pack-conformance/package-mutations/metered-fabrics-unknown-step/package.receipt.json new file mode 100644 index 000000000..a59cb6c3b --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered-fabrics-unknown-step/package.receipt.json @@ -0,0 +1 @@ +{"asset_id":"video-base-01","components":[{"id":"v","index":"index-v.wsix","index_digest":"5ffc2be3f21af79078a1158e3d669e4268a35b0ca61a6e73ff252fdf38f346d0","media_class":"video","stage_root":"bd0c7799633b108cf9ccb0c7a4cedbdf6173a83470d3d96b94d075c03e0db7b6"}],"energy_provenance":"ModelBased","grant":{"capability":"wai.video.package","funds_ceiling":null,"grant_hash":"0000000000000000000000000000000000000000000000000000000000000000","joule_ceiling_micro":null},"joules_micro":500000,"kind":"package","packager":"builtin:wai-pack@0.1.0","parent_kind":"none","parent_receipt_hash":null,"policy_digest":"e1c131d56798eb840e22736076d74908bca2b7585aeae7e4bb1698218c01a35e","receipt_hash":"01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2","sig":"eb052a53c735830304a6c74230dcc348ca6d0c8110497e916407062da83e627db36ba165167ed217e451a26dfa1f5b5e21cf766725063c4532df82ff9d949604","signer_id":"did:key:z6MkfMo6gxqdBhaHMNnmfhgZFBjpCDTkmJMJLoypsBZS9PwD","signer_pubkey":"0d7550754e0800a5d237eef5826035766b9b3e5a15868a940ab289958788e3b0","stored_bytes":119779,"total_bytes":130963,"total_entries":10,"unique_objects":8,"version":2,"work_units":10} \ No newline at end of file diff --git a/wai/pack-conformance/package-mutations/metered-fabrics/LISTING b/wai/pack-conformance/package-mutations/metered-fabrics/LISTING new file mode 100644 index 000000000..472110750 --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered-fabrics/LISTING @@ -0,0 +1,36 @@ +4c26bc6aa2694b67430cf49ce8632588c97927c6c776d62295704036a3049d38 claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json +91b8aba2292191f2046eb841fe6fcb7b214826cecd9e06a3c193a68e7089e144 dash/classic.mpd +a3aa7658db9b85a9d9a1fed977825189f75c5adad0f5fdfcd70ebd604824c138 dash/mobile.mpd +3f520749a6d2f231cddfd17804ee3629439f3678515e424c44e36cff54d89de9 dash/tv.mpd +04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6 floor/v/04c948608aaa7b5d78ad5355042a2ff65b0f75d9d4b1ad78f3ebffb886a74be6.m4s +06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf floor/v/06d5cd79ba3860cccdc252fe915de0902f941a3c6a000295714f7cab193aa6cf.m4s +2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b floor/v/2f93f0ad449f9cc881b7816c6ab33fd445037d6538b445bcc76431f9c9f91c5b.m4s +420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a floor/v/420ae4c941bba6e12a6c7fdb7d01dc69170ecb4240dffd2e86808ddf87baa12a.m4s +99a24de04f7be9fc21097e69d2d61b222e458b1f93b8082026a9874aeb9f4c15 floor/v/99a24de04f7be9fc21097e69d2d61b222e458b1f93b8082026a9874aeb9f4c15.m4s +58c598174eed554cd0d1bc8abedca8c9d51d992c8e3b963bcb7574da4983ed9f floor/v/init.mp4 +289bfcb09eb25124ac19597bc624371c34bea00aa1011ced9372d96b5e14b2bd hls/classic/floor-v.m3u8 +3026d7f11005e34ff66298175777ee6806d649cf9d5c1467aaa4fb00ac5987e6 hls/classic/master.m3u8 +3026d7f11005e34ff66298175777ee6806d649cf9d5c1467aaa4fb00ac5987e6 hls/legacy/master.m3u8 +c5902f61ffaf77f940c4d3dc6e850340aaaeb3f433e4541f935c32443c50b341 hls/mobile/master.m3u8 +c4044eca76959c9f87230484a2b207fb12c0bcaedb8d921eab806014fca53cb8 hls/mobile/wai-v.m3u8 +60a6378f46afc9308dc4ac4d138602b16568577616ea0bf4526b142d86899151 hls/mobile/wai.m3u8 +c5902f61ffaf77f940c4d3dc6e850340aaaeb3f433e4541f935c32443c50b341 hls/tv/master.m3u8 +ff4edf2929e380d205c1c74156621185feec53d593ffa968b8dfaf0d05448bcd hls/tv/wai-v.m3u8 +5d42147b308330913c3d9c8a868ca83ce4d3f3e460da8d84c84014eb24aaf9d7 hls/tv/wai.m3u8 +0b65400d0bbde57ed6a2c19d90cb72ec753de0e76165e4f286acfd5a7bda14d2 index-v.wsix +115e8e1e7ee0765de9bd2f71576cae01ce6576a5ce2a24f3374879eb74d9a6af moq/catalog.json +07e98fb9ef9ff3fa6bf04f9078da2a3d2423e586feea1061256131a1d1fbb943 objects/24761a434c91c627f11abd6265371966b50573602a200dd7bb04e0d90889326d.wai +4d583d03292b77f9d46b02f2c80a774b1cda1b07df38243d18fe586b82eaca60 objects/35c7a45323b7afe979c123fa885f35cc55fabd2a1954759aebe4b95dbc76361f.wai +cfb71256ef44758ea279846a8938823994d321abce83ef73afd2ed269a8e0259 objects/618e0a89be8c7e556b380326b219c2f6fbfc5a0cb97754e871c1c23a99bdb481.wai +f3eedf9eb2870c0160801397412e7a4c3aca4a6e16f1a69a276e1356d38c9220 objects/61c7c3b7ccab07ed01df5b0d7ca0240598b914dbf2cabe545aa001e8de12d365.wai +9fdf29f5c9536d1f7701c791328d656ef725ba9b8cb3760bdb00f5a503c69338 objects/761c4649427c51796a2b699568775765b209ee80d2f4fc1cf040838c6724aa2d.wai +a3135205d3139b39409d4e4e2aafed2c042797d293a9f9fc8664467165336e25 objects/7cc2b824ad6105abfccae27093190311b6a2348842e571684b021a213341b94a.wai +3c66c0b25b759cd1fe6245d282ba928441b873d62e4ac62c95260e45a80fff77 objects/8f748dc64787b5c5ece081270c8559277f926322dd6ddc345306b8231f2d1752.wai +b2a40a9a8cec3dcaf6c92a07d6765203c412c57ec879b7e33a52eabb2e74609d objects/c2ce1907255a041c388afd06ccd007436368e8d20467fdec2a1eebbb84b03bf2.wai +4a2370c37281e64f30cb66a4bd7125854d6280855e90f00229b177bd70af3d8c package.receipt.json +517630d9bee1f5559baff3bb3e642f6aa7b5276226f6e3bdba4f3f9724794859 plan-v.txt +a497fdf29528c4744ce8548e3b430d6311f15c10ca2a4cb548fb9958d3d98f07 policy.json +d667cfa0c1e4e52f254f3a89a80cb0d3b6be0d833c40c8b44f60be33765859b0 policy.toml +59b343802800c815390b840da3ee6981367b495a30d8a1952f6484d04271caf9 stages/legacy.json +b7514cb869338126e4785943a4624e9dbfa44464fa450c55341b7931bd9c19f9 stages/mobile.json +33898452413a8fe209fb6b158bfd1e9b06a74fc3ab7639810522a586a4aa6ac6 stages/tv.json diff --git a/wai/pack-conformance/package-mutations/metered-fabrics/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json b/wai/pack-conformance/package-mutations/metered-fabrics/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json new file mode 100644 index 000000000..2f0b235e0 --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered-fabrics/claims/01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2.measurement.json @@ -0,0 +1 @@ +{"body":{"bracket":null,"build":{"profile":"release","target":null,"toolchain":null},"energy_calibration_ref":null,"energy_counter_filtering":null,"energy_provenance":"ModelBased","energy_uncertainty":null,"fabrics":{"shares":[{"attribution":"task","fabric":"cpu","joules_micro":500000}],"steps":[{"backend":"cpu: the reference implementation","fabric":"cpu","step":"base-code"},{"backend":"cpu: the reference implementation","fabric":"cpu","step":"object-hash"}]},"figure_index":null,"figure_profile":"wai:video-package-receipt-id","group":null,"joules_micro":500000,"power_reader":"model:500mW"},"class":"measurement","issued_at":"2026-10-21T00:00:00Z","kind":"claim","parent_receipt_hash":null,"seq":0,"sig":"9888011d5eee7d70fe6f5671e2ad170c05d503b0977bfeacbd23bfb80bd27b95d54ba165c6b4066ce677217b949c5b4da10e251e6c857457c1743f122b9da90f","signer_id":"did:key:z6MkfMo6gxqdBhaHMNnmfhgZFBjpCDTkmJMJLoypsBZS9PwD","signer_pubkey":"0d7550754e0800a5d237eef5826035766b9b3e5a15868a940ab289958788e3b0","subject":"01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2","subject_type":"receipt"} \ No newline at end of file diff --git a/wai/pack-conformance/package-mutations/metered-fabrics/package.receipt.json b/wai/pack-conformance/package-mutations/metered-fabrics/package.receipt.json new file mode 100644 index 000000000..a59cb6c3b --- /dev/null +++ b/wai/pack-conformance/package-mutations/metered-fabrics/package.receipt.json @@ -0,0 +1 @@ +{"asset_id":"video-base-01","components":[{"id":"v","index":"index-v.wsix","index_digest":"5ffc2be3f21af79078a1158e3d669e4268a35b0ca61a6e73ff252fdf38f346d0","media_class":"video","stage_root":"bd0c7799633b108cf9ccb0c7a4cedbdf6173a83470d3d96b94d075c03e0db7b6"}],"energy_provenance":"ModelBased","grant":{"capability":"wai.video.package","funds_ceiling":null,"grant_hash":"0000000000000000000000000000000000000000000000000000000000000000","joule_ceiling_micro":null},"joules_micro":500000,"kind":"package","packager":"builtin:wai-pack@0.1.0","parent_kind":"none","parent_receipt_hash":null,"policy_digest":"e1c131d56798eb840e22736076d74908bca2b7585aeae7e4bb1698218c01a35e","receipt_hash":"01d891a6690096d3de7c8e7cec802cb95f82deb84b5d45994dd713e7576673f2","sig":"eb052a53c735830304a6c74230dcc348ca6d0c8110497e916407062da83e627db36ba165167ed217e451a26dfa1f5b5e21cf766725063c4532df82ff9d949604","signer_id":"did:key:z6MkfMo6gxqdBhaHMNnmfhgZFBjpCDTkmJMJLoypsBZS9PwD","signer_pubkey":"0d7550754e0800a5d237eef5826035766b9b3e5a15868a940ab289958788e3b0","stored_bytes":119779,"total_bytes":130963,"total_entries":10,"unique_objects":8,"version":2,"work_units":10} \ No newline at end of file diff --git a/wai/wai-pack/src/golden.rs b/wai/wai-pack/src/golden.rs index 361ab49c6..a9072d108 100644 --- a/wai/wai-pack/src/golden.rs +++ b/wai/wai-pack/src/golden.rs @@ -641,6 +641,12 @@ enum Claim { AnotherFigure, /// No claim. None, + /// The written claim with a fabric record (§11.6): two steps on the CPU, the figure + /// its one share. + Fabrics, + /// A fabric record that is a well-formed claim's but names a step §11.6 does not + /// define. + FabricUnknownStep, } /// The golden re-sealed as a metered pack (§9.4): a model meter of 500 mW over one second, @@ -684,6 +690,14 @@ fn metered(g: &Files, key: &SigningKey, claim: Claim) -> Files { Some(ClaimReceipt::seal_unchecked(key, &did, SubjectType::Receipt, view.identity, 0, issued, body, None).expect("the claim seals")) } Claim::None => None, + Claim::Fabrics | Claim::FabricUnknownStep => { + use wai::claim_receipt::{FabricRecord, FabricShare, FabricStep}; + let fig = view.figure(None).expect("a figure").joules_micro; + let step = |s: &str| FabricStep { step: s.into(), fabric: "cpu".into(), backend: "cpu: the reference implementation".into() }; + let other = if claim == Claim::Fabrics { "object-hash" } else { "lunch" }; + let record = FabricRecord { steps: vec![step("base-code"), step(other)], shares: vec![FabricShare { fabric: "cpu".into(), joules_micro: fig, attribution: "task".into() }] }; + Some(wai::energy_figure::meter_report::emit_with_fabrics(&view, None, None, build, "model:500mW", Some(record), key, &did, None, issued).expect("the claim checks against the receipt")) + } }; if let Some(c) = written { f.insert(crate::pack::claim_path(&r), c.to_json().into_bytes()); @@ -1037,6 +1051,9 @@ pub fn package_mutations(g: &Files, key: &SigningKey) -> Vec { add("metered", "ok", metered(g, key, Claim::Written)); add("metered-claim-another-figure", "measurement-claim-invalid", metered(g, key, Claim::AnotherFigure)); add("metered-claim-missing", "measurement-claim-missing", metered(g, key, Claim::None)); + // A claim with a fabric record (§11.6), and one whose record names no step of §11.6. + add("metered-fabrics", "ok", metered(g, key, Claim::Fabrics)); + add("metered-fabrics-unknown-step", "measurement-claim-invalid", metered(g, key, Claim::FabricUnknownStep)); // Directories (§11.1, "no other"): one that holds nothing, one that holds nothing // under a dot-name (a version-control directory's), and one that cannot be read. let dir = |name: &'static str, empty: &[&str], unreadable: &[&str]| PackageMutation { -- 2.54.0 (Apple Git-157) From 8f0331e936fc27bcc55c2ba77572770fe01608d9 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 05:13:34 -0400 Subject: [PATCH 20/50] =?UTF-8?q?packaging=20=C2=A711.6:=20steps=20and=20f?= =?UTF-8?q?abrics?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The computations of a pack and a verify are named steps, each of which may run on a CPU, a GPU, a media engine or a neural engine. Every step is a function of its inputs, defined in integers (and floor-decode by the AV1 decoding process), and none names a fabric: 1. a packager runs a step only on a backend that has given the reference's output on qualifying inputs, never on one that computes otherwise than the step's definition, and leaves a call a backend does not take to the CPU; so §11.2 holds across fabrics (amended to say so), and only a metered package's claim says where steps ran; 2. a verifier computes a check on another fabric only where the package states the value it compares with, and decides a mismatch again on the reference: a verdict that changes with the fabric is the verifier's fault; 3. no step is computed by a hardware encoder, whose output no rule fixes; a floor encoded on one is a §7.5 floor naming its encoder, version, device and driver; 4. a floor states no decoded-output digest, so no floor verdict comes from a hardware decode; wider hardware formats are read back exactly or refused, never rounded; 5. a metered package's claim may carry the fabric record (jwp-receipts §2.4.8), its steps §11.6's terms (§11.3 step 7); an unmetered package carries none. Terms gain Step and Fabric; §11.4 says what the reference packager places where. Co-Authored-By: Claude Opus 5.5 --- wai/extensions/packaging.md | 85 ++++++++++++++++++++++++++++++++++--- 1 file changed, 79 insertions(+), 6 deletions(-) diff --git a/wai/extensions/packaging.md b/wai/extensions/packaging.md index 6705aa135..1a4b02359 100644 --- a/wai/extensions/packaging.md +++ b/wai/extensions/packaging.md @@ -7,10 +7,12 @@ > piece's ladder (§5), the stage index (§6), the floor, one or several, supplied as OBU > streams or as an existing ladder's CMAF files (§7), what each class is offered > over HTTP and MoQ and how its delivery is simulated (§8), the package receipt and live -> windows (§9), and the package, its verification and a re-pack from a parent (§11). +> windows (§9), the package, its verification and a re-pack from a parent (§11), and +> where each step of a pack or a verify may run (§11.6). > Reference impl: `wai-pack` — > `policy`, `capcheck`, `source`, `scenecut`, `classify`, `plan`, `encode`, `png`, -> `floor`, `cmaf`, `cmaf_read`, `catalog`, `files`, `pack`, `live`, `delivery`, `verify`; +> `floor`, `cmaf`, `cmaf_read`, `catalog`, `files`, `pack`, `live`, `delivery`, `verify`, +> `fabric`, `fabric_meter`, `floor_decode`, and `wai-pack-gpu` for the steps a GPU runs; > in `wai-rs`, the > encoder `int_video_enc`, the refinement encoder `staged::wir1`, the stage index > `stage_index`, the receipt `package` and the delivery simulator `stage_measure::sim`; @@ -40,6 +42,10 @@ where it names them. several. - **Timebase** of a component: `num / den` units per second. For video one unit is one frame; for audio, one sample. +- **Step**: one of the computations of a pack or a verify (§11.6), such as the base's + motion search or an object's content hash. +- **Fabric**: the kind of processor a step runs on: `cpu`, `gpu`, `media` (a hardware + video engine) or `neural` (a neural-network engine) (§11.6). ## 3. Policy @@ -1192,8 +1198,9 @@ are refused (`pack-id`). **11.2** *Re-pack equivalence.* Given the same source bytes, effective policy, supplied floor, signing key and packager identity, a conforming reference packager **MUST** -produce byte-identical package files on every machine, except the energy figure and -measurement claim of a metered package and floor objects §7.5 covers. A verifier +produce byte-identical package files on every machine and whichever fabric runs each +step (§11.6), except the energy figure and measurement claim of a metered package and +floor objects §7.5 covers. A verifier **MAY** pack again and compare listings. A packager whose identity differs is not held to this. A re-pack from a parent (§11.5) is held to it with the parent among its inputs; and where the parent was packed by a conforming packager from the same source under base @@ -1276,7 +1283,8 @@ failed check names is not applied: index no catalog can be written for (a start past `2^53 − 1`) is refused (`catalog-mismatch`). 7. A metered package's measurement claim (§9.4: `measurement-claim-missing`, - `measurement-claim-invalid`); an object file no entry names (`object-unlisted`); a + `measurement-claim-invalid`, a fabric record naming a step this extension does not + define, §11.6, among the latter); an object file no entry names (`object-unlisted`); a catalog file past the ones given (`catalog-unexpected`); any other file (`unexpected-file`). @@ -1286,7 +1294,9 @@ refinements of `wai.video.int_refine` over an `int_motion` base (§5.4); each pi ladder, a rule's ladder subset included (§5.7); and a supplied AV1 floor per floor rung, one or several (§7.1), in the OBU form (§7.3) or the CMAF form (§7.7); and floor-only components (§7.8). Its live -packer packs the same pieces in windows, without a floor (§9.2). It refuses by name, +packer packs the same pieces in windows, without a floor (§9.2). It runs `base-search`, +`sse` and `object-hash` on a GPU that qualifies, where it is built to and asked to, and +every other step on the CPU (§11.6). It refuses by name, before writing anything, what it does not pack yet: another medium (`pack-media-unsupported`), a floor to encode (`pack-floor-encode-unsupported`), and a rung of a capability it does not encode, or a refinement over a base it does not refine @@ -1347,6 +1357,69 @@ entries decide (`repack-parent-mismatch`). A re-pack holds no source of its pare bases; what binds a reused base to this source is the third check, and what binds it to the parent is the receipt. +**11.6** *Steps and fabrics.* The steps of a pack and a verify are named by these terms: + +| Step | What it computes | +|---|---| +| `source-decode` | a source's frames from a coded rendition, before a pack, by a producer's tool (§4.7 reads the result) | +| `source-read` | a source's frames or samples (§4.7) | +| `segment` | the pieces (§4.3) and their kinds (§4.6) | +| `base-search` | the integer base's motion search (§5.5) | +| `base-code` | the rest of the integer base (§5.5), its step (§5.6) and a still (§5.7) | +| `refine-code` | refinement layers, each applied by the reference sink (§5.4) | +| `sse` | an entry's `sse` (§6.6) | +| `object-hash` | an object's content hash (§5.3) | +| `digest` | the SHA-256 digests: decoded-output digests (§6.5), listings, file names | +| `floor-read` | a supplied floor's units, CMAF boxes and listing (§7.3, §7.7) | +| `floor-decode` | a floor's units decoded to pictures (item 4 below) | +| `index` | the stage indexes, catalogs, receipt and claim (§6, §8, §9) | +| `io` | reading and writing files | + +Every step is a function of its inputs, defined in integers (and `floor-decode` by the +AV1 decoding process), and none names a fabric: + +1. *Packages.* A packager **MAY** run a step on any fabric whose output is the step's + for every input. It **MUST NOT** run a step on a backend that has not given the + reference implementation's output on the qualifying inputs before it is used (the + reference packager's: the frame pairs of `wai_pack::fabric::qualifying_frames` for + the motion search, and seeded inputs for SSE and BLAKE3, on each device it opens), nor + at all on one that computes otherwise than the step's definition, such as in floating + point where the step is defined in integers, or with a learned approximation. A + backend that cannot take a call (a size, a lost device) leaves it to the CPU, with the + same output. So §11.2 holds across fabrics: the package files are the same bytes + whichever fabric ran each step, and only a metered package's measurement claim says + where they ran. +2. *Verdicts.* A verifier's verdict and its reason are functions of the package + (§11.3). A verifier **MAY** compute a check on another fabric where the package states + the value the check compares with, such as an object's content hash: a match shows + that the fabric computed the check, and a mismatch **MUST** be computed again on the + reference implementation before it is reported. Every other check runs on a backend + held to the reference's output as item 1 holds a packager's. A verdict that changes + with the fabric is the verifier's fault, never the package's. +3. *Hardware encoders.* A hardware encoder's output depends on the chip, its firmware + and driver, and its settings, and no rule fixes it, so no step of this extension is + computed by one. A floor a packager is given is an input, whatever made it (§7.3, + §7.7); a floor a packager encodes on such hardware is one §7.5 covers, whose + `derived_from.renderer` names the encoder, its version, and the device and driver that + ran it, and §11.2 does not hold its bytes. +4. *Decoding a floor.* The AV1 decoding process fixes every output sample of a stream + whose sequence header has `film_grain_params_present` 0, and of every stream before + film grain is applied (AV1 §7.2), so conformant decoders on any fabric give the same + pictures of a floor's units. A floor states no decoded-output digest (§7.4), so a + decode of it has no stated value to compare with: a verifier that decodes floors + **MUST NOT** refuse a package for what a decoder other than the reference gives, nor + read a hardware decoder's error or concealment as a verdict. A hardware decoder's + frames may be held in a wider format than the stream's bit depth (a 10-bit sample + shifted into the high bits of a 16-bit word); a reader of them recovers each sample + exactly or refuses the frame, and never rounds. (Informative: `wai-pack floor-decode` + reports each piece's digest from either decoder, for comparing them.) +5. *The fabric record.* A metered package's measurement claim **MAY** carry a fabric + record (jwp-receipts §2.4.8, energy-measurement §6.3): each step the metered span ran, + with every fabric that ran it and its backend, and the figure's share on each. Its + steps are this section's terms (§11.3 step 7). An unmetered package carries no claim, + so no record: which fabric ran a step is not part of the package, and two packages + that differ only in where their steps ran are the same files. + ## 12. Reasons | Reason | Where | -- 2.54.0 (Apple Git-157) From b75a22b567ac9c6fbfc60922490bbff7c00ee7a1 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 05:13:34 -0400 Subject: [PATCH 21/50] ci(wai-pack): the GPU steps on the macOS leg, and the fabric test's floor The macOS leg, whose host has a GPU, runs wai-pack-gpu's clippy, its kernels against their references and its mutants, and wai-pack's fabric differential with the `gpu` feature, with WAI_PACK_GPU_REQUIRE set so that an absent adapter fails rather than skips; each step requires its report lines. The paths include wai/wai-pack-gpu. The test-count floors gain --test=fabric and raise --lib to the target's count. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-pack.yml | 40 ++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/.github/workflows/wai-pack.yml b/.github/workflows/wai-pack.yml index ca27f97a1..2af5fb42e 100644 --- a/.github/workflows/wai-pack.yml +++ b/.github/workflows/wai-pack.yml @@ -6,7 +6,11 @@ name: wai-pack # - legs: on each architecture of the fleet, clippy with float arithmetic denied (no # float decides anything in a package), the tests in release with a floor on how many # each target lists, and the corpus recomputed by the crate: the golden packages -# packed again byte for byte and verified, every mutation's reason. +# packed again byte for byte and verified, every mutation's reason. On the macOS leg, +# whose host has a GPU, the steps a GPU runs (packaging §11.6): wai-pack-gpu's kernels +# against their references and every edited kernel caught, and wai-pack's fabric +# differential (every golden packed on the GPU byte for byte, every verdict the CPU's), +# an absent adapter a failure there (WAI_PACK_GPU_REQUIRE), never a skip. # - independent: the corpus recomputed by its second implementation, written in Python # from the extension text and sharing no code with wai-pack, the golden packages # verified and re-derived from their sources among it (every refinement layer and @@ -32,6 +36,7 @@ on: pull_request: paths: - 'wai/wai-pack/**' + - 'wai/wai-pack-gpu/**' - 'wai/wai-rs/**' - 'wai/pack-conformance/**' - 'wai/claim-conformance/_blake3.py' @@ -129,9 +134,10 @@ jobs: echo "$target: $n tests (floor $floor)" [ "$n" -ge "$floor" ] || { echo "::error::$target lists $n tests, under its floor of $floor"; fail=1; } done <<'EOF' - --lib 34 + --lib 39 --test=cmaf 4 --test=conformance 1 + --test=fabric 3 --test=floor_only 2 --test=ladder 3 --test=pack_alloc 1 @@ -149,6 +155,36 @@ jobs: working-directory: wai/wai-pack run: cargo run --release --locked --bin wai-pack -- conformance check ../pack-conformance + # The steps a GPU runs (packaging §11.6), on the one leg whose host has a GPU. Each + # test prints the adapter it ran on; the step requires those lines, so a run that + # found no adapter, or filtered the tests away, fails. + - name: wai-pack-gpu, clippy and its kernels against their references (Metal) + if: matrix.os == 'macos' + shell: bash + working-directory: wai/wai-pack-gpu + env: + WAI_PACK_GPU_REQUIRE: '1' + run: | + set -euo pipefail + cargo clippy --locked --all-targets -- -D warnings + cargo test --release --locked -- --nocapture 2>&1 | tee "$RUNNER_TEMP/gpu.txt" + grep -q 'motion search, 54 frames, every vector the text' "$RUNNER_TEMP/gpu.txt" + grep -q 'every hash the reference crate' "$RUNNER_TEMP/gpu.txt" + [ "$(grep -c '^caught: ' "$RUNNER_TEMP/gpu.txt")" -ge 12 ] + - name: wai-pack's fabric differential on the GPU (Metal) + if: matrix.os == 'macos' + shell: bash + working-directory: wai/wai-pack + env: + WAI_PACK_GPU_REQUIRE: '1' + run: | + set -euo pipefail + cargo clippy --locked --all-targets --features gpu,fabric-meter -- -D warnings + cargo test --release --locked --features gpu --test fabric -- --nocapture 2>&1 | tee "$RUNNER_TEMP/fabric.txt" + grep -q 'the search on the GPU: ' "$RUNNER_TEMP/fabric.txt" + grep -q 'verdicts, each the CPU' "$RUNNER_TEMP/fabric.txt" + grep -q 'test result: ok. 7 passed' "$RUNNER_TEMP/fabric.txt" + independent: name: wai-pack · independent verifier (Python) needs: relevant -- 2.54.0 (Apple Git-157) From ca6aa92cab8ca1606b597e539cb82f232406a244 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 06:45:24 -0400 Subject: [PATCH 22/50] wai-pack-gpu: wait for a buffer map itself, not only for its submission With several threads polling one device, a map's callback can run inside another thread's poll, after this thread's wait for its submission has returned. The read then found no result and handed the call back to the CPU: correct, since the CPU computes the same vectors, but it happened to 15 of 24,930 motion-search calls of a 12-piece pack of big-buck-bunny. The read now waits for the callback, polling without blocking until a deadline, and fails only past it. tests/concurrent.rs: 16 threads share one device, 9,600 calls of the search and of BLAKE3, every one required to complete on the device with the reference's result. With the old wait the test fails. Also clippy's clamp and as_chunks forms. Co-Authored-By: Claude Opus 5.5 --- wai/wai-pack-gpu/src/lib.rs | 34 ++++++++++++++----- wai/wai-pack-gpu/tests/concurrent.rs | 47 +++++++++++++++++++++++++++ wai/wai-pack-gpu/tests/support/mod.rs | 3 +- 3 files changed, 74 insertions(+), 10 deletions(-) create mode 100644 wai/wai-pack-gpu/tests/concurrent.rs diff --git a/wai/wai-pack-gpu/src/lib.rs b/wai/wai-pack-gpu/src/lib.rs index 328585a01..c8bc845f8 100644 --- a/wai/wai-pack-gpu/src/lib.rs +++ b/wai/wai-pack-gpu/src/lib.rs @@ -271,7 +271,7 @@ fn words(bytes: &[u8]) -> Vec { /// A grid of `n` workgroups of 64 threads as `(x, y)`, rows of at most 65,535. fn grid(n: u64) -> (u32, u32) { - let x = n.min(65_535).max(1); + let x = n.clamp(1, 65_535); (x as u32, n.div_ceil(x).max(1) as u32) } @@ -362,16 +362,32 @@ impl Gpu { let slot: Arc>>> = Arc::new(Mutex::new(None)); let filled = Arc::clone(&slot); staging.map_async(wgpu::MapMode::Read, 0..len, move |r| *lock(&filled) = Some(r)); - let poll = || self.device.poll(wgpu::PollType::Wait { submission_index: Some(index), timeout: Some(POLL_TIMEOUT) }); - match std::panic::catch_unwind(std::panic::AssertUnwindSafe(poll)) { + // Wait for the submission, then for the map's callback itself: with several threads + // polling one device, the callback can run inside another thread's poll, after this + // thread's wait has returned. + let deadline = std::time::Instant::now() + POLL_TIMEOUT; + let poll = |p: wgpu::PollType| std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| self.device.poll(p))); + match poll(wgpu::PollType::Wait { submission_index: Some(index), timeout: Some(POLL_TIMEOUT) }) { Ok(Ok(_)) => {} Ok(Err(e)) => return Err(GpuError::Device(format!("wait: {e}"))), Err(_) => return Err(GpuError::Device("the device poll panicked".into())), } - match lock(&slot).take() { - Some(Ok(())) => {} - Some(Err(e)) => return Err(GpuError::Device(format!("map: {e}"))), - None => return Err(GpuError::Device("the map did not complete within its wait".into())), + let mapped = loop { + if let Some(r) = lock(&slot).take() { + break r; + } + if std::time::Instant::now() >= deadline { + return Err(GpuError::Device("the map did not complete within its wait".into())); + } + match poll(wgpu::PollType::Poll) { + Ok(Ok(_)) => {} + Ok(Err(e)) => return Err(GpuError::Device(format!("poll: {e}"))), + Err(_) => return Err(GpuError::Device("the device poll panicked".into())), + } + std::thread::yield_now(); + }; + if let Err(e) = mapped { + return Err(GpuError::Device(format!("map: {e}"))); } let out = { let view = staging.get_mapped_range(0..len).map_err(|e| GpuError::Device(format!("mapped range: {e}")))?; @@ -409,7 +425,7 @@ impl Gpu { let params = [h as u32, w as u32, block as u32, nbx as u32, range as i32 as u32, prec as u32, side, side * side]; let nb = nby * nbx; let out = self.run(&self.pipes.motion, ¶ms, src, rf, 8 * nb as u64, (nbx as u32, nby as u32))?; - Ok(out.chunks_exact(8).map(|c| (i32::from_le_bytes([c[0], c[1], c[2], c[3]]) as i16, i32::from_le_bytes([c[4], c[5], c[6], c[7]]) as i16)).collect()) + Ok(out.as_chunks::<8>().0.iter().map(|c| (i32::from_le_bytes([c[0], c[1], c[2], c[3]]) as i16, i32::from_le_bytes([c[4], c[5], c[6], c[7]]) as i16)).collect()) } /// `Σ (a_i − b_i)²` over two byte strings of one length (packaging §6.6), in partial @@ -429,7 +445,7 @@ impl Gpu { let (gx, gy) = grid(threads.div_ceil(64)); let params = [a.len() as u32, PER as u32, gx * 64, 0]; let out = self.run(&self.pipes.sse, ¶ms, a, b, 4 * threads, (gx, gy))?; - Ok(out.chunks_exact(4).map(|c| u32::from_le_bytes([c[0], c[1], c[2], c[3]]) as u64).sum()) + Ok(out.as_chunks::<4>().0.iter().map(|c| u32::from_le_bytes(*c) as u64).sum()) } /// BLAKE3 (the default hash mode) of each message: every chunk compressed on the diff --git a/wai/wai-pack-gpu/tests/concurrent.rs b/wai/wai-pack-gpu/tests/concurrent.rs new file mode 100644 index 000000000..dfaad9824 --- /dev/null +++ b/wai/wai-pack-gpu/tests/concurrent.rs @@ -0,0 +1,47 @@ +//! One device shared by many threads, as a pack that codes many pieces at once shares +//! it: every call of every thread completes on the device (none is handed back to the +//! CPU) and gives the reference's result. A call whose buffer map is completed by another +//! thread's poll is the case this holds: the wait is for the map, not only for the +//! submission. + +mod support; + +use support::*; + +#[test] +fn every_call_completes_under_many_threads() { + for g in gpus() { + let (h, w, block, range, prec) = (24usize, 40usize, 8usize, 3i64, 2i64); + let mut rng = Rng(0x5eed_0004); + let pairs: Vec<(Vec, Vec)> = (0..8).map(|_| (rng.bytes(h * w * 3), rng.bytes(h * w * 3))).collect(); + let want: Vec> = pairs.iter().map(|(s, r)| search(s, r, h, w, block, range, prec)).collect(); + let msgs: Vec> = (0..8).map(|i| rng.bytes(1000 + 997 * i)).collect(); + let failures = std::sync::atomic::AtomicU64::new(0); + std::thread::scope(|s| { + for t in 0..16 { + let (g, pairs, want, msgs, failures) = (&g, &pairs, &want, &msgs, &failures); + s.spawn(move || { + for i in 0..600 { + let k = (t + i) % pairs.len(); + let ok = if i % 3 == 0 { + let m: Vec<&[u8]> = vec![msgs[k].as_slice()]; + g.blake3_many(&m).map(|h| &h[0] == blake3::hash(&msgs[k]).as_bytes()) + } else { + g.motion_frame(&pairs[k].0, &pairs[k].1, h, w, block, range, prec).map(|v| v == want[k]) + }; + match ok { + Ok(true) => {} + Ok(false) => panic!("{}: thread {t} call {i}: a result other than the reference's", g.adapter().label()), + Err(_) => { + failures.fetch_add(1, std::sync::atomic::Ordering::Relaxed); + } + } + } + }); + } + }); + let n = failures.load(std::sync::atomic::Ordering::Relaxed); + assert_eq!(n, 0, "{}: {n} of 9,600 calls did not complete on the device", g.adapter().label()); + eprintln!("{}: 16 threads, 9,600 calls, every one completed with the reference's result", g.adapter().label()); + } +} diff --git a/wai/wai-pack-gpu/tests/support/mod.rs b/wai/wai-pack-gpu/tests/support/mod.rs index 051fb1dc5..9d53f9a91 100644 --- a/wai/wai-pack-gpu/tests/support/mod.rs +++ b/wai/wai-pack-gpu/tests/support/mod.rs @@ -47,6 +47,7 @@ impl Rng { /// integer-payloads §3's prediction: whole-pel, or half-pel bilinear with integer /// rounding, every coordinate clamped to the frame. +#[allow(clippy::too_many_arguments)] pub fn predict(rf: &[u8], h: usize, w: usize, y: i64, x: i64, dy: i64, dx: i64, c: usize, prec: i64) -> i64 { let p = |yy: i64, xx: i64| rf[((yy.clamp(0, h as i64 - 1) as usize) * w + xx.clamp(0, w as i64 - 1) as usize) * 3 + c] as i64; if prec == 1 { @@ -132,7 +133,7 @@ pub fn frame_pairs(rng: &mut Rng, h: usize, w: usize) -> Vec<(&'static str, Vec< // frame a vector one column left and one right match alike, at the same |dy| + |dx|, // so the earlier vector decides. let stripes = |t: usize| -> Vec { - (0..h * w).flat_map(|i| if (i % w + t) % 2 == 0 { [40, 200, 90] } else { [200, 40, 160] }).collect() + (0..h * w).flat_map(|i| if (i % w + t).is_multiple_of(2) { [40, 200, 90] } else { [200, 40, 160] }).collect() }; vec![ ("noise", noise_a.clone(), noise_b), -- 2.54.0 (Apple Git-157) From fb00a03f3d3f77290728289facabc4e6375dbaf4 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 06:45:24 -0400 Subject: [PATCH 23/50] wai-pack tests: a share on a fabric no step ran on is refused for itself The fabric test held a split with a GPU share and no GPU step to pack-measurement-claim, which the claim's own sum rule would also give were the share silently dropped; it now requires the packer's reason, so the refusal in fabric_record is what the test holds. Co-Authored-By: Claude Opus 5.5 --- wai/wai-pack/tests/fabric.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/wai/wai-pack/tests/fabric.rs b/wai/wai-pack/tests/fabric.rs index a95039cfe..592a54244 100644 --- a/wai/wai-pack/tests/fabric.rs +++ b/wai/wai-pack/tests/fabric.rs @@ -135,6 +135,7 @@ fn the_fabric_record_rides_in_the_measurement_claim() { assert_eq!(short.code, "pack-measurement-claim", "{short}"); let elsewhere = metered_pack(Arc::new(Fabrics::reference()), |fig| vec![(Fabric::Cpu, fig - 1, "task"), (Fabric::Gpu, 1, "rail")]).unwrap_err(); assert_eq!(elsewhere.code, "pack-measurement-claim", "a share on a fabric no step ran on: {elsewhere}"); + assert!(elsewhere.detail.contains("no step ran there"), "refused for the share itself, not only by the claim's sum: {elsewhere}"); } #[cfg(feature = "gpu")] -- 2.54.0 (Apple Git-157) From 9e86b63fab1c6a9a8be5d8136ec17c785cc97626 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 06:45:44 -0400 Subject: [PATCH 24/50] wai CHANGELOG, claim-conformance README: steps on every fabric MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The changelog's v0.4.0 entry for packaging §11.6, the measurement claim's fabric record, wai-pack-gpu, wai-pack's fabric dispatch, meter and floor-decode, and their conformance; the claim corpus's README describes the fabric record's vectors. Co-Authored-By: Claude Opus 5.5 --- wai/CHANGELOG.md | 38 +++++++++++++++++++++++++++++++++ wai/claim-conformance/README.md | 8 +++++++ 2 files changed, 46 insertions(+) diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md index 8606f8934..ed3812b63 100644 --- a/wai/CHANGELOG.md +++ b/wai/CHANGELOG.md @@ -6,6 +6,44 @@ wire format may change and such changes are recorded here. ## v0.4.0 — current +### Packaging: each step on the fabric that does it with the least energy + +- **Steps and fabrics** ([packaging](extensions/packaging.md) §11.6). The computations of + a pack and a verify are named steps (`source-read`, `segment`, `base-search`, + `base-code`, `refine-code`, `sse`, `object-hash`, `digest`, `floor-read`, + `floor-decode`, `index`, `io`, and `source-decode` before a pack), and each may run on a + CPU, a GPU, a media engine or a neural engine. Every step is defined in integers (and + AV1 decoding by its decoding process), so where it runs changes no byte of a package + and no verdict: §11.2 holds across fabrics. A packager runs a step on a backend only + after it has given the reference's output on qualifying inputs; a verifier computes a + check on another fabric only where the package states the value it compares with, and + decides any mismatch again on the reference. No hardware encoder computes a WAI step; a + floor encoded on one is a §7.5 floor. A floor states no decoded-output digest, so a + hardware decode never decides a floor verdict. +- **The fabric record** ([jwp-receipts](extensions/jwp-receipts.md) §2.4.8, + [energy-measurement](extensions/energy-measurement.md) §6.3). A measurement claim may + carry `fabrics`: each step with every fabric that ran it and its backend, and the + figure divided into one share per fabric, attributed `task` (the operating system's + account of the work's own energy) or `rail` (the fabric's whole rail, the work its sole + user). A rail shared with other work is never divided by busy time. `fabrics` is the one + claim member that is absent rather than null, so every existing claim and package keeps + its bytes. New reasons: `measurement_fabric_unknown`, `measurement_fabric_order`, + `measurement_fabric_unmetered`, `measurement_fabric_unused`, `measurement_fabric_sum`. +- **wai-pack** places each call of a step on the fabric whose measured cost for its size + is least (`--fabric cpu|gpu|auto:`, `wai-pack fabric list|calibrate`), the + CPU on a tie, where unmeasured, and for every call another fabric does not take. With + feature `gpu`, the motion search, SSE and the object hashes run on a GPU through + **wai-pack-gpu**, exact integer WGSL kernels through wgpu (Metal, Vulkan, DX12). With + feature `fabric-meter` on macOS, `--meter fabric` meters a pack per fabric without + privileges and writes the claim's fabric record. `wai-pack floor-decode` decodes a + package's floors with libdav1d or the media engine and prints each piece's digest, for + comparing decoders. The Python verifiers stay on the CPU and share no code with wai-rs; + `claim_verify.py` and `pack_verify.py` read the fabric record. +- **Conformance.** Claim vectors of the fabric record appended after the existing ones, which a test + pins by digest. wai-pack-gpu's kernels are held to references transcribed from the text + and every edited kernel is caught; wai-pack's fabric differential packs every golden on + a GPU byte for byte and gives every package and staged mutation the CPU's verdict. + ### Packaging: a title's whole ladder in one package - **Several floor rungs per package** ([packaging](extensions/packaging.md) §7.1). A diff --git a/wai/claim-conformance/README.md b/wai/claim-conformance/README.md index 31933c47a..b7086d78c 100644 --- a/wai/claim-conformance/README.md +++ b/wai/claim-conformance/README.md @@ -136,6 +136,14 @@ the figure with its class. The vectors cover: - **The labelled delivery leaf:** an `energy` claim against an object whose leaf carries a class, agreeing, and disagreeing in figure, class or evidence; an `OnChipCounter` label with no filtering state reads as `Unknown`. +- **The fabric record (§2.4.8 rule 6, energy-measurement §6.3),** appended after every + earlier vector, which a test pins by digest: accepted, a figure divided between the CPU + (`task`) and a GPU (`rail`) over steps that ran on each; at step 2, a record written + `null` (a report without one has no member), a step with a member it does not define, + an empty backend and a share written as a string; at step 4, a fabric and an + attribution outside §6.3, a share divided by GPU time (which names no attribution), + steps out of order, a fabric twice, no step, a step on an unmetered fabric, a share on + a fabric no step ran on, and shares that do not sum to the figure. ## What a party observed of a stage set: `stage` and `delivery-gap` -- 2.54.0 (Apple Git-157) From 30f3ece5b7a3cdce08742ddcee7d0f3c6576cee0 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 07:08:03 -0400 Subject: [PATCH 25/50] docs/research: WAI across fabrics, the research and the measurements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Which fabric can run each step of a WAI pack and verify, on the fleet as probed, through which API, with the primary sources: VideoToolbox and the media engines (AV1 decode from M3; no AV1 encode on any Apple chip through the 2026 launches), WGSL, Metal and CUDA integer semantics, the neural engine (FP16: no exact step), NVENC/NVDEC, QSV, VCN and Vulkan Video; AV1 §7.2's exactness and film grain; hardware encoders' irreproducibility; and energy without root on macOS 27 (only IOReport's GPU rail is live; the kernel's per-task CPU energy; per-client GPU time; the sole-user rule), Linux and Windows. The design choice each finding decided, what was judged unsound, and the big-buck-bunny measurements: packages byte-identical on the GPU, the media engine's pictures dav1d's, and joules per fabric against the CPU baselines. Co-Authored-By: Claude Opus 5.5 --- docs/research/wai-cross-fabric.md | 413 ++++++++++++++++++++++++++++++ 1 file changed, 413 insertions(+) create mode 100644 docs/research/wai-cross-fabric.md diff --git a/docs/research/wai-cross-fabric.md b/docs/research/wai-cross-fabric.md new file mode 100644 index 000000000..739a148d7 --- /dev/null +++ b/docs/research/wai-cross-fabric.md @@ -0,0 +1,413 @@ +# WAI across fabrics: research for the packer and the verifiers + +Research and measurements of 2026-10-22, for the change that lets each step of a WAI +pack or verify run on the fabric that does it with the least measured energy (CPU, GPU, +a hardware media engine, or a neural engine): [packaging](../../wai/extensions/packaging.md) +§11.6, [jwp-receipts](../../wai/extensions/jwp-receipts.md) §2.4.8 and +[energy-measurement](../../wai/extensions/energy-measurement.md) §6.3. + +**Method.** Every claim about a product, an API or a specification links the page it +was checked against, fetched on the date above. Where a vendor publishes nothing, the +entry says *unconfirmed*. Items marked **[measured]** were run on the fleet for this +document (commands in §9); items marked **[local]** were read from the macOS 27 SDK on a +fleet machine. Exact counts and digests are exact; times and energies are indicative, +from a shared host whose load is given beside each. + +## 1. The fleet, as probed + +Each Mac was queried read-only over SSH (`sw_vers`, `sysctl machdep.cpu.brand_string +hw.memsize`, `system_profiler SPDisplaysDataType`) **[measured]**: + +| Host | Chip | GPU cores | Memory | OS | AV1 decode engines | AV1 encode | +|---|---|---:|---:|---|---:|---| +| build host (`100.100.141.123`) | M3 Ultra | 80 | 256 GB | macOS 27.0.1 | 2 | none | +| `.3` (`10.10.10.3`) | M3 Ultra | 60 | 96 GB | macOS 27.0.1 | 2 | none | +| `.1` (`100.98.101.113`) | M4 Max | 40 | 128 GB | macOS 27.0.1 | 1 | none | +| prod (`100.64.224.0`) | M4 Max | 32 | 36 GB | macOS 27.0.1 | 1 | none | +| dev | M5 Max | | | macOS 27.0.1 | 1 | none | + +The engine counts are Apple's: M3 Ultra "Two video decode engines · Four video encode +engines · Four ProRes encode and decode engines · AV1 decode", M4 Max "Video decode +engine · Two video encode engines · Two ProRes encode and decode engines · AV1 decode" +(https://support.apple.com/en-us/122211), M5 Max the same as M4 Max +(https://www.apple.com/macbook-pro/specs/). Every Mac reports Metal 4. + +- **cbio-device** (Windows, x86_64), queried with `Get-CimInstance Win32_VideoController` + **[measured]**: an Intel Iris Xe (PCI `8086:9A49`, Tiger Lake) and an NVIDIA GeForce + RTX 2060 (PCI `10DE:1F15`, Turing), on an i7-1165G7. Turing has neither AV1 decode nor + AV1 encode in NVDEC/NVENC (§3.2); Tiger Lake decodes AV1, with a film-grain path that is + not bit-exact (§6). +- **jetson-hub** (Ubuntu, x86_64) was not probed: its SSH goes through Tailscale SSH, + which asked for an interactive browser check that this work did not perform. The + repository's own record (wai/extensions/determinism-tiers.md §5) lists a Linux x86_64 + host with a discrete GPU of PCI `10de:28e1` and an integrated `8086:a7a0` and another + with `1002:1586`; which hosts those are was not confirmed. + +## 2. The steps, and the fabrics that can run each + +| Step | CPU | GPU | Media engine | Neural engine | Placed on | +|---|---|---|---|---|---| +| `source-decode` (a coded source to frames, before a pack) | dav1d | | AV1 decode, M3 and later (VideoToolbox); NVDEC Ampere+; QSV Tiger Lake+; VCN 3+ | | either, on equal pictures (§6) | +| `source-read`, `segment` | yes | | | | CPU (sequential, cheap) | +| `base-search` (the integer motion search) | reference | exact integer kernel | none (no hardware runs WAI's search; VideoToolbox's motion estimation is not the encoder's search, §3.1) | unsound (FP16, §5) | GPU where it qualifies | +| `base-code`, `refine-code` (residuals, rANS) | reference | | none: no media engine codes WIV1 or WIR1 | | CPU (rANS is sequential) | +| `sse` | reference | exact (partial sums under 2^32) | | unsound | by measured cost | +| `object-hash` (BLAKE3) | reference | exact (chunks on the device, parents on the host) | | | by measured cost | +| `digest` (SHA-256) | yes | no: one message is one chain (FIPS 180-4 §6.2.2, https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf) | | | CPU | +| `floor-read` (AV1 and CMAF structure) | yes | | | | CPU | +| `floor-decode` | dav1d | | AV1 decode, as above | | informative only (§6.3) | +| `index`, `io` | yes | | | | CPU | + +What this decides: the GPU takes the one step that dominates a pack's work (the motion +search: at least 96.8% of phase 0's CPU time, §9.2), plus SSE and BLAKE3 where the +measured cost says so, which on the build host it does not (§9.3). No hardware encoder computes any WAI step. The media engine decodes AV1 sources and +floors. The neural engine computes nothing exact. + +## 3. Media engines + +### 3.1 Apple: VideoToolbox + +- **AV1 decode starts with M3 and A17 Pro.** "the media engine supports AV1 decoding, + enabling power-efficient playback of streaming services" + (https://www.apple.com/newsroom/2023/10/apple-unveils-m3-m3-pro-and-m3-max-the-most-advanced-chips-for-a-personal-computer/); + M1 and M2 spec pages list no AV1 (https://support.apple.com/kb/SP825, + https://support.apple.com/kb/SP869). +- **No Apple chip encodes AV1 in hardware**, through the 2026 launches: every spec page + and press release says "AV1 decode" only. M5 Pro and M5 Max: "Apple's latest Media + Engine with support for hardware-accelerated H.264 and HEVC, AV1 decode, and ProRes + encode" + (https://www.apple.com/newsroom/2026/03/apple-debuts-m5-pro-and-m5-max-to-supercharge-the-most-demanding-pro-workflows/); + M6 and M5 Ultra: "hardware-accelerated AV1 decode" + (https://www.apple.com/newsroom/2026/08/apple-introduces-m6-and-m5-ultra-for-a-big-leap-in-performance-and-ai-compute/). + VideoToolbox's compression headers name no AV1 encoder **[local]**, and FFmpeg's + VideoToolbox encoders are `h264_videotoolbox`, `hevc_videotoolbox` and + `prores_videotoolbox` only + (https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/videotoolboxenc.c). +- **API.** `kCMVideoCodecType_AV1 = 'av01'` **[local]**; + `kVTVideoDecoderSpecification_RequireHardwareAcceleratedVideoDecoder`: "If it cannot, it + returns an error and the session creation fails" + (https://developer.apple.com/documentation/videotoolbox/kvtvideodecoderspecification_requirehardwareacceleratedvideodecoder). + A session needs an `av1C` atom carrying the sequence header OBU + (https://developer.apple.com/forums/thread/739953). FFmpeg's `av1_videotoolbox` hwaccel + was added in commit `f9c5c53` on 2024-10-02 and first released in FFmpeg 8.0 + (https://github.com/FFmpeg/FFmpeg/commit/f9c5c5358cfef3847674c6f3b3ded9611ebc5647); it + requires hardware for AV1 (`videotoolbox.c`, + https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/videotoolbox.c). +- **What the media engine gives back [measured]** (FFmpeg 9.0.2, M3 Ultra, macOS 27.0.1): + - The big-buck-bunny ladder's four AV1 rungs are Main profile, **10-bit** (each rung's + `av1C`). VideoToolbox's hardware frames are P010; `hwdownload,format=nv12` is refused + ("Invalid output format nv12 for hwframe download"). + - A low-overhead OBU stream (`-f obu`) does not decode on it: the demuxer gives the + session no sequence header up front, and the filter graph fails. The ladder's CMAF + (with `av1C`) decodes. So the reference tool decodes floors from the package's CMAF + files. + - Its raw P010 frames equal, frame by frame (MD5 of each of 240 frames of the 1080p + rung), dav1d's planar 10-bit output repacked to P010; but FFmpeg's P010-to-8-bit + conversion of them does not equal dav1d's own 10-to-8-bit conversion. That + conversion rounds and dithers, so a comparison has to stay at the stream's bit depth + or convert exactly. + - Earlier runs of this document's test compared `-f framemd5` outputs whose stderr had + been piped into the hash; the "difference" they showed was FFmpeg's error text. Every + comparison in §9 hashes the output file, not the console. +- **Motion estimation in hardware.** `VTMotionEstimationSession` (macOS 26) returns 4×4 or + 16×16 vectors (https://developer.apple.com/documentation/videotoolbox/vtmotionestimationsessioncreate); + Apple documents neither the engine, the cost metric, the search window nor + determinism, so it cannot compute §5.5's normative search. + +### 3.2 NVIDIA, Intel, AMD, Vulkan Video + +- **NVIDIA** (https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new): + AV1 NVDEC on Ampere and later, AV1 NVENC on Ada Lovelace and Blackwell; Turing has + neither (so cbio-device's RTX 2060 has no AV1 engine). NVDEC "runs completely + independent of compute/graphics engine" + (https://docs.nvidia.com/video-technologies/video-codec-sdk/13.0/nvdec-video-decoder-api-prog-guide/index.html). +- **Intel** (https://raw.githubusercontent.com/intel/media-driver/master/README.md): AV1 + decode from Tiger Lake (Gen12) in the Full-Feature build (on Ubuntu, + `intel-media-va-driver-non-free`), AV1 encode from Arc Alchemist and Meteor Lake. +- **AMD** (https://raw.githubusercontent.com/torvalds/linux/master/drivers/gpu/drm/amd/amdgpu/nv.c, + `soc21.c`): AV1 decode on VCN 3 (RDNA2) except VCN 3.0.33, AV1 encode from VCN 4; AV1 + on instance 0 only of a dual-VCN part. +- **Vulkan Video**: `VK_KHR_video_decode_av1` in Vulkan 1.3.277 + (https://www.khronos.org/blog/khronos-releases-vulkan-video-av1-decode-extension-vulkan-sdk-now-supports-h.264-h.265-encode), + `VK_KHR_video_encode_av1` in 1.3.302 + (https://www.khronos.org/blog/khronos-announces-vulkan-video-encode-av1-encode-quantization-map-extensions); + MoltenVK lists no video extension + (https://raw.githubusercontent.com/KhronosGroup/MoltenVK/main/Docs/MoltenVK_Runtime_UserGuide.md). + +## 4. GPU compute + +- **WGSL integer semantics** (W3C WGSL, https://www.w3.org/TR/WGSL/): "i32 operations use + two's complement arithmetic and have defined overflow behavior. Wrapping occurs."; `>>` + on a signed value inserts copies of the sign bit (§8.10, Bit Expressions); integer + division by zero evaluates to `e1` (§8.8); an out-of-bounds access is a dynamic error + that the implementation "will not perform ... as written" (§6.5.7). So a WGSL kernel + that keeps every value inside its type, and every index inside its buffer, has one + result on every conformant device. The WAI kernels do: a block's cost is at most + `block² · 765`, refused on the host where that passes 2^32 − 1. +- **Metal** (MSL 4.1, https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf): + unsigned integers wrap modulo 2^n and "The result of signed integer overflow is + undefined"; atomics are relaxed, so only commutative integer reductions are order + free. The WAI kernels use no atomics: each block's minimum is a tree reduction over a + total order, so it does not depend on which thread visits which candidate. +- **CUDA** (PTX, https://docs.nvidia.com/cuda/parallel-thread-execution/index.html): `sad` + is `d = c + ((a` too. Big-buck-bunny-v2's run B (four + floor rungs, the ladder's own CMAF, the base coded once): pack digest `3912bd7c…b9b7f` + and receipt `e0256cd9…`, v2's. Its run C (floor-only): `f8871444…e032`, v2's. +- **The media engine decodes what dav1d decodes.** Each of the four rungs, all 14,315 + frames: the SHA-256 of every frame in P010 equal between VideoToolbox's hardware frames + and dav1d's output. And `wai-pack floor-decode` of the four-rung package: the same + digest from both decoders for each of its 600 pieces, in the stream's own 10-bit form, + the P010 words read back exactly. +- **A source decoded by the media engine is the same source.** The proxy decoded from the + 1080p rung by VideoToolbox, then by the same scaler: SHA-256 `8d236f5b…b56d`, phase 0's + `proxy.y4m` byte for byte, as dav1d's decode is. +- **Placement.** In a 12-piece pack, 24,915 of 24,930 motion-search calls ran on the GPU + before the map-wait fix. The other 15 were handed back to the CPU, with the same + vectors. +- **Instructions.** Phase 0's av1-360 pack retired 98.3 × 10¹² CPU instructions; the GPU + pack retired 2.05 × 10¹². + +### 9.2 Pack and verify, joules per fabric + +Run 2, the GPU otherwise idle (its other clients under 1% of GPU time in every pack). + +| Run | Wall | CPU (task) | GPU (rail) | Media | Total | Peak memory | CPU baseline | +|---|---:|---:|---:|---:|---:|---:|---| +| av1-360 pack, search on the GPU | 56 s | 573 J | 1,284 J | – | **1,857 J** | 0.95 GB | 20,299 J, 3,689 s, 3.04 GB (phase 0) | +| av1-360 pack, `auto` (search on the GPU; SSE and hashes on the CPU) | 56 s | 571 J | 1,283 J | – | **1,854 J** | 0.76 GB | as above | +| run B pack (4 floor rungs, CMAF floor), search on the GPU, `--jobs 12` | 71 s | 525 J | 1,239 J | – | **1,763 J** | 1.62 GB | 19,541 J, 980 s at `--jobs 6`, 0.17 GB (v2) | +| run C pack (floor-only), hashes on the GPU | 2.2 s | 4.4 J | 2.3 J | – | **6.7 J** | 0.65 GB | 3.7 J, 1.5 s, 0.04 GB (v2) | +| `wai-pack verify` av1-360, CPU | 32 s | 118 J | 0 | – | 118 J | 0.58 GB | 31–33 s (phase 0) | +| `wai-pack verify` av1-360, hashes on the GPU | 31 s | 120 J | – (GPU shared) | – | ≥ 120 J | 2.04 GB | | +| `wai-pack verify` run B, CPU | 34 s | 119 J | 0 | – | 119 J | 1.55 GB | 35 s, 121 J (v2) | +| `wai-pack verify` run B, hashes on the GPU | 32 s | 122 J | 0.2 J | – | 122 J | 3.44 GB | | + +What the table shows: +- Moving the motion search to the GPU cuts a pack's energy about elevenfold. The CPU work + left (residuals, rANS, digests, I/O: 116 s of CPU against phase 0's 3,635 s) shows that + the search was at least 96.8% of phase 0's CPU time. +- Moving the object hashes or SSE gains nothing: the floor-only pack, whose only movable + step is hashing, costs more on the GPU. +- `wai-pack verify` is dominated by the integer base's decode, which is sequential rANS, + so it stays on the CPU. + +### 9.3 The measured cost table (`wai-pack fabric calibrate`) + +Each backend, two call sizes, 6 s each, fitted to `µJ per call + nJ per unit`: + +| Step | CPU | GPU | Placement | +|---|---|---|---| +| `base-search` (unit: candidate-sample) | 0 + 20.2 nJ | 11,276 µJ + 1.47 nJ | GPU from about 600,000 units, a 32×24 frame at the policy's range; every BBB frame is 32 million | +| `sse` (unit: byte) | 0 + 0.85 nJ | 3,136 µJ + 0.76 nJ | CPU below about 35 MB a call; a BBB piece is 5 MB | +| `object-hash` (unit: byte) | 7 µJ + 1.33 nJ | 1,699 µJ + 1.43 nJ | CPU always: the GPU's BLAKE3 is no cheaper per byte either | + +The GPU's per-call cost includes its idle and static draw over the call, since the rail is +the whole GPU's. + +### 9.4 Decoding: CPU against the media engine + +Run 3 (VideoToolbox's XPC service counted; the GPU was shared in this run, which no +decode used). + +| Decode of the whole floor | dav1d: wall, CPU | VideoToolbox: wall, CPU (FFmpeg + its service), media engine | +|---|---|---| +| 1080p (`av1-1080`) | 23.1 s, 198.7 J | 22.0 s, 17.4 J, + unmetered | +| 720p | 12.4 s, 111.0 J | 17.3 s, 11.3 J, + unmetered | +| 540p | 7.7 s, 73.3 J | 14.1 s, 8.5 J, + unmetered | +| 360p | 5.1 s, 53.8 J | 11.3 s, 15.9 J, + unmetered | +| proxy source (1080p decoded and scaled to 256×144) | 22.7 s, 304.1 J | 25.6 s, 350.5 J, + unmetered | + +What the table shows: +- A floor decode on the media engine costs the CPU 8 to 11 times less at 540p to 1080p, + and 3.4 times less at 360p, where the per-frame download dominates. +- The engine's own draw is not visible to any unprivileged reader on macOS 27 (§7.1), so + these are lower bounds. +- For the proxy source, VideoToolbox saves nothing: the Lanczos scale and the P010 repack + on the CPU cost more than the decode saved. +- Placing `source-decode` on the media engine is therefore worth it only where the + scaling also moves. Moving it would change the source's bytes, unless the scaler is + exact. + +### 9.5 Load, and what is indicative + +- Times and energies are indicative. The host's one-minute load average was 14 to 50 over + the runs in §9.2 and 25 to 90 in §9.4. Every run's load before and after is in its + report. +- The CPU figures are each process's own, by the kernel's attribution, so other load + changes them only through contention. +- The GPU figures in §9.2 are from runs that held the GPU alone. In run 3 another process + held about a third of the GPU's time; the GPU packs then had no GPU figure, and the + metered packs were refused `pack-meter` ("the GPU was shared: this process had 45.2 s + of its 65.0 s, under 99%"), as §7.1's rule requires. +- Instruction counts and digests are exact. + +## 10. Judged unsound + +- **Any WAI step on the neural engine** (§5). +- **A hardware encoder for any WAI step**, and NVENC in particular for the floors here: + floors are supplied, the packer refuses to encode one (`pack-floor-encode-unsupported`), + and no hardware encoder's bytes are reproducible (§6.2). cbio-device's RTX 2060 has no + AV1 encoder anyway; jetson-hub's GPU was not probed. +- **VideoToolbox's motion estimation in place of §5.5's search** (§3.1). +- **Dividing a shared GPU rail by GPU time** (§7.1). +- **Media-engine and neural-engine energy on macOS 27**: no live unprivileged counter + (§7.1); a step run there makes a metered span refuse rather than guess. +- **A floor verdict from a hardware decoder** (§6.3). +- **FFmpeg's P010-to-8-bit conversion in a comparison** (§3.1). -- 2.54.0 (Apple Git-157) From a56f22cddf31a40d5f2cc94c74abf70213398430 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 07:25:56 -0400 Subject: [PATCH 26/50] docs/research: a metered pack sealed with its fabric record The av1-360 pack with --fabric gpu --meter fabric, run when the GPU was otherwise idle: a ModelBased figure of 2,248.4 J divided into the CPU's 475.4 J (task) and the GPU's 1,773.0 J (rail), the claim's steps the search, SSE and hashes on the GPU and the rest on the CPU, accepted by wai-pack verify and by pack_verify.py; and the same pack of run B, refused pack-meter a minute later when the GPU was shared. Co-Authored-By: Claude Opus 5.5 --- docs/research/wai-cross-fabric.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/research/wai-cross-fabric.md b/docs/research/wai-cross-fabric.md index 739a148d7..8441a2fbb 100644 --- a/docs/research/wai-cross-fabric.md +++ b/docs/research/wai-cross-fabric.md @@ -385,7 +385,24 @@ What the table shows: scaling also moves. Moving it would change the source's bytes, unless the scaler is exact. -### 9.5 Load, and what is indicative +### 9.5 A metered pack, sealed + +- **Sealed.** The av1-360 pack with `--fabric gpu --meter fabric` was run when the GPU's + other clients had held under 0.5% of its time over the preceding 10 s. It sealed a + `ModelBased` figure of 2,248.4 J, whose measurement claim carries the fabric record: + - the CPU's share is 475.4 J (`task`) and the GPU's 1,773.0 J (`rail`, the pack its sole + user); + - the steps are `base-search`, `sse` and `object-hash` on the GPU and every other step + on the CPU, with no search call handed back to the CPU now that the map wait is fixed. +- **Verified.** `wai-pack verify` accepts the package, and `pack_verify.py` holds every + check of it (3622 of 3622), the claim among them. +- **Refused.** The same metered pack of run B, a minute later, found the GPU shared (39.9 s + of its 50.0 s) and was refused `pack-meter`, as was the calibration then. +- The GPU figure here (1,773 J) and run 2's (1,284 J) differ by the GPU's state in each + window. Both are indicative; the rule that the pack held the rail alone is what each + states exactly. + +### 9.6 Load, and what is indicative - Times and energies are indicative. The host's one-minute load average was 14 to 50 over the runs in §9.2 and 25 to 90 in §9.4. Every run's load before and after is in its -- 2.54.0 (Apple Git-157) From df5ea962f912b3671403782a5025179f1c44d818 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 13:20:28 -0400 Subject: [PATCH 27/50] wai: HwShunt closed to every profile defined after the hardware class was refined MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit energy-measurement §2.6, New profiles: the profiles that could have sealed HwShunt keep their acceptance, listed by name; a profile, record, claim, table or registration member defined since refuses it from every producer and reads it as no other class. A RAPL or system-management-unit package counter is OnChipCounter. wai-rs: energy_class::check_new_profile (AcquisitionError::LegacyInNewProfile), with its test. Co-Authored-By: Claude Opus 5.5 --- wai/extensions/energy-measurement.md | 47 ++++++++++++++++++++++-- wai/wai-rs/src/energy_class.rs | 55 ++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 3 deletions(-) diff --git a/wai/extensions/energy-measurement.md b/wai/extensions/energy-measurement.md index 4cbb0ae3b..2eda62442 100644 --- a/wai/extensions/energy-measurement.md +++ b/wai/extensions/energy-measurement.md @@ -521,6 +521,42 @@ Receipts sealed before this revision carry `HwShunt`. Its meaning is fixed as declared uncertainty, a filtering state or a calibration reference is ambiguous and **MUST** be rejected. +**New profiles.** The acceptance above is for receipts that could have been +sealed before the refinement, and it is closed. The profiles that keep it are +the ones listed in §2 whose figure carries a class from the start and that a +verifier cannot date: the energy binding and its C2PA companion assertion, the +`wai.video.int_motion` receipt and the `wai.video.*` OTT receipts, and the +`energy` claim; in each, an issued `HwShunt` keeps the meaning above. Every +other profile already refuses it: an optional label (§2.8), the label of a JWP +object's leaf or group, the `measurement` and `operating-point` claims, the +per-hop record of [live-metering](live-metering.md) §3.6 and the measurement a +page reports under [browser-sink](browser-sink.md) §6. + +A receipt profile, record, claim, table or registration member that carries an +acquisition class and is defined after this revision (a **new profile**) +**MUST NOT** accept `HwShunt`, in any position, from any producer: + +- its verifier refuses a figure classed `HwShunt` under that profile's reason + for an invalid class, and **MUST NOT** read it as `OnChipCounter`, + `CalibratedInstrument` or any weaker class; +- a figure that reaches a new profile from a vocabulary with only the three + names, as `HwShunt`, enters it only where its producer states the refined + class and its evidence again; otherwise it is carried as the unmetered + marker. Mapping a refined class out to the three-name vocabulary (§2) is + unchanged; +- a new profile states in its own refusals table which reason refuses + `HwShunt`. + +The reference implementation checks a new profile's class with +`energy_class::check_new_profile`, which refuses `HwShunt` +(`AcquisitionError::LegacyInNewProfile`), a class beside a zero figure, a +refined class without its evidence and a declaration below the resolution +floor of §2.3. The energy budget of SPEC §4 is the first profile it governs. + +A package counter read through RAPL or the platform's system management unit +is an on-chip counter (§2.2): a figure read from one is `OnChipCounter`, with its +filtering state (§2.4), never `HwShunt`. + ### 2.7 Signed encoding Receipts that sign a binary payload encode the class as one tag byte, followed @@ -672,8 +708,12 @@ What the reference implementation seals in these families: - Two producers seal a new non-zero figure without a label, and so fall short of the **SHOULD** above. `world_model::frame_receipt` is handed its caller's figures without their class; a caller that knows the class builds - the steps itself with `ProvStep::with_energy_class`. The in-browser demos of - `wai-web` seal illustrative figures, fixed in code or passed in by the page. + the steps itself with `ProvStep::with_energy_class`. Two in-browser demos of + `wai-web`, the phasor kernel and the quantum calibration and job demos, seal + an illustrative figure the page passes in. The other in-browser quantum demos + of `wai-web` seal the unmetered marker, since a page reads no counter, and the + world demo seals the page's figure (wall time times a coefficient the page + declares) labelled `Estimator`. - A generator that recreates a committed conformance corpus byte for byte seals that corpus's figures unlabelled; `wai_quantum_ops_vectors gen` seals non-zero ones. Every committed corpus predates the label, so these @@ -923,7 +963,8 @@ Producers that fall short of this section, recorded rather than exempted: the generators that recreate a committed corpus with its unlabelled legacy figures (§2.8); `world_model::frame_receipt`, which is handed its caller's figures without their class or their bracket; and the in-browser demos of -`wai-web`, which seal illustrative figures. A figure sealed with no class +`wai-web` that seal a figure, illustrative (unlabelled) or estimated (labelled +`Estimator`), with no measurement behind it. A figure sealed with no class cannot meet this section, because a `measurement` claim restates a class. A figure published without these is not wrong so much as unusable: nothing about diff --git a/wai/wai-rs/src/energy_class.rs b/wai/wai-rs/src/energy_class.rs index 8d3037404..76274c507 100644 --- a/wai/wai-rs/src/energy_class.rs +++ b/wai/wai-rs/src/energy_class.rs @@ -322,6 +322,10 @@ pub enum AcquisitionError { /// `joules_micro × relative_ppm` below [`RESOLUTION_FLOOR_UJ_PPM`] states /// less uncertainty than the integer can carry (§2.3). BelowResolution, + /// Legacy `HwShunt` in a profile defined after the hardware class was + /// refined (§2.6, *New profiles*): such a profile accepts it from no + /// producer, and reads it as no other class. + LegacyInNewProfile, } impl core::fmt::Display for AcquisitionError { @@ -351,6 +355,9 @@ impl core::fmt::Display for AcquisitionError { AcquisitionError::BelowResolution => { "the declared uncertainty is below the 0.5/√3 µJ (about 0.289 µJ) that rounding the figure to whole microjoules adds: joules_micro × relative_ppm must be at least 288 676" } + AcquisitionError::LegacyInNewProfile => { + "HwShunt is accepted only in the profiles that could have sealed it before the hardware class was refined; a profile defined since refuses it" + } }; f.write_str(s) } @@ -668,6 +675,30 @@ pub fn check_label(joules_micro: u64, label: Option<&EnergyProvenance>) -> Resul check_resolution(joules_micro, p) } +/// The rule every profile defined after the hardware class was refined applies +/// to a figure and its class (`extensions/energy-measurement.md` §2.6, *New +/// profiles*): +/// +/// - legacy `HwShunt` is refused ([`AcquisitionError::LegacyInNewProfile`]), +/// whatever the figure, and is read as no other class; +/// - a class beside a zero figure is refused ([`AcquisitionError::NoFigure`]): +/// a new profile marks unmetered with no class; +/// - the class must pass [`EnergyProvenance::validate`], and a declared +/// uncertainty must reach the resolution floor ([`check_resolution`]). +/// +/// The issued receipts of the profiles §2.6 lists keep their acceptance of +/// `HwShunt`; this check is for everything defined since. +pub fn check_new_profile(joules_micro: u64, p: &EnergyProvenance) -> Result<(), AcquisitionError> { + if p.is_legacy() { + return Err(AcquisitionError::LegacyInNewProfile); + } + if joules_micro == 0 { + return Err(AcquisitionError::NoFigure); + } + p.validate()?; + check_resolution(joules_micro, p) +} + /// [`check_label`] as a predicate, for `verify()`. pub fn label_coheres(joules_micro: u64, label: Option<&EnergyProvenance>) -> bool { check_label(joules_micro, label).is_ok() @@ -1114,6 +1145,30 @@ mod tests { Uncertainty { relative_ppm: ppm, window_us: win } } + /// §2.6, *New profiles*: a profile defined since the refinement refuses legacy + /// `HwShunt` from any producer, as well as a class beside a zero figure, a + /// refined class without its evidence and a declaration below the floor; it + /// accepts the refined and the weaker classes beside a figure. + #[test] + fn a_new_profile_refuses_hwshunt_from_every_producer() { + assert_eq!(check_new_profile(1_000, &EnergyProvenance::HwShunt), Err(AcquisitionError::LegacyInNewProfile)); + assert_eq!(check_new_profile(0, &EnergyProvenance::HwShunt), Err(AcquisitionError::LegacyInNewProfile)); + // The legacy label parsed from text is the same class, and is refused the same way. + let parsed = EnergyProvenance::from_label("HwShunt").unwrap(); + assert_eq!(check_new_profile(1_000, &parsed), Err(AcquisitionError::LegacyInNewProfile)); + let chip = EnergyProvenance::on_chip_counter(u(30_000, 2_000_000), CounterFiltering::Unknown).unwrap(); + assert_eq!(check_new_profile(1_000, &chip), Ok(())); + assert_eq!(check_new_profile(0, &chip), Err(AcquisitionError::NoFigure)); + assert_eq!(check_new_profile(9, &chip), Err(AcquisitionError::BelowResolution), "9 × 30 000 < 288 676"); + let bare = EnergyProvenance::OnChipCounter { uncertainty: u(0, 1), filtering: CounterFiltering::Off }; + assert_eq!(check_new_profile(1_000, &bare), Err(AcquisitionError::NoUncertainty)); + assert_eq!(check_new_profile(1_000, &EnergyProvenance::ModelBased), Ok(())); + assert_eq!(check_new_profile(1_000, &EnergyProvenance::Estimator), Ok(())); + // The profiles that could have sealed it keep their acceptance: the coupling + // they apply still takes an issued HwShunt figure. + assert!(figure_and_class_cohere(1_000, Some(&EnergyProvenance::HwShunt))); + } + #[test] fn refined_classes_require_an_uncertainty_and_a_window() { assert_eq!(Uncertainty::new(0, 1_000_000), Err(AcquisitionError::NoUncertainty)); -- 2.54.0 (Apple Git-157) From 11b2556827f2a00f89e94a5e33c47aa83f06b027 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 13:20:28 -0400 Subject: [PATCH 28/50] wai: the energy order of dispatch, and the energy budget that lifts a learned capability MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SPEC §4, §7.1 step 2: a sink tries an envelope's capabilities in the energy order unless its deployer configures another: a decode the platform answers supported and power-efficient first, a learned capability (NeuralIntegerExact, NeuralEntropyExact, NeuralFloat, Behavioral) with no energy budget after every other, the envelope's order within each. The order changes which capability decodes, never a reason. An energy budget is a decode figure measured on a named reference sink under OnChipCounter or CalibratedInstrument, in a record named by its digest; no registration states one yet (REGISTRY, Energy budgets; the export's optional energy_budget, schema only). wai-rs: energy_order (DispatchPolicy, Budgets, EnergyBudget, is_learned); Wai::dispatch_verified and WaiMulti::pick apply it, dispatch_with and pick_with take another order, the HTTP client's default order and the C ABI's wai_envelope_select follow it. Tests that are about pins state the manifest order they run in. browser-sink §4.7: objects sharing a choice are alternatives; the page decodes the first in the energy order that routes (no_alternative otherwise). browser_sink::choose_report, the page's chooseReport (wai-live-web, binding.js), a choices section in live-conformance/browser (existing sections unchanged), checked by wai-rs, the page's corpus run and browser_sink_verify.py (34 of 34 mutations caught). Co-Authored-By: Claude Opus 5.5 --- .../crates/joule-moq-web/web/binding/test.js | 5 + .../crates/joule-moq-web/web/room/binding.js | 8 +- wai/REGISTRY.md | 17 + wai/SPEC.md | 76 +- wai/extensions/browser-sink.md | 60 +- wai/live-conformance/browser/vectors.json | 922 +++++++++++++++++- wai/live-conformance/browser_sink_verify.py | 68 +- wai/registry/capabilities.schema.json | 85 ++ wai/wai-live-web/src/browser.rs | 18 +- wai/wai-live-web/src/browser_tests.rs | 8 + wai/wai-rs/include/wai.h | 3 +- wai/wai-rs/src/bin/wai.rs | 3 +- wai/wai-rs/src/browser_sink.rs | 55 +- wai/wai-rs/src/browser_sink/corpus.rs | 136 ++- wai/wai-rs/src/codecs/registry.rs | 43 +- wai/wai-rs/src/container.rs | 183 +++- wai/wai-rs/src/energy_order.rs | 445 +++++++++ wai/wai-rs/src/ffi.rs | 3 +- wai/wai-rs/src/http_binding/session.rs | 6 +- wai/wai-rs/src/key_log/tests.rs | 12 +- wai/wai-rs/src/lib.rs | 7 + wai/wai-rs/tests/browser_sink.rs | 6 + 22 files changed, 2117 insertions(+), 52 deletions(-) create mode 100644 wai/wai-rs/src/energy_order.rs diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/web/binding/test.js b/joule-code/joule-code-rs/crates/joule-moq-web/web/binding/test.js index 0c391aa20..efc56a1ae 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/web/binding/test.js +++ b/joule-code/joule-code-rs/crates/joule-moq-web/web/binding/test.js @@ -30,6 +30,11 @@ function corpusInPage(v) { const got = JSON.parse(wai.routeReport(JSON.stringify(c.report))); if (got.outcome !== c.outcome || (c.outcome === "routed" ? !same(got.table, c.table) : got.reason !== c.reason)) fails.push(`route ${c.name}`); } + for (const c of v.choices || []) { + n++; + const got = JSON.parse(wai.chooseReport(JSON.stringify(c.report))); + if (got.outcome !== c.outcome || (c.outcome === "chosen" ? !same(got.choices, c.choices) : got.reason !== c.reason)) fails.push(`choice ${c.name}`); + } for (const c of v.constraints) { n++; const got = JSON.parse(wai.evaluateConstraints(JSON.stringify(c.sets), JSON.stringify(c.params))); diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/binding.js b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/binding.js index 97e30f9c5..f0d5c308d 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/binding.js +++ b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/binding.js @@ -4,7 +4,7 @@ // the state of the frame on screen (§10). // // What is normative is computed by wai-live-web's wasm, the same Rust the corpus -// live-conformance/browser holds: `routeReport`, `makeBinding`, `frameTier`, `frameState`. +// live-conformance/browser holds: `routeReport`, `chooseReport`, `makeBinding`, `frameTier`, `frameState`. // This module asks the user agent what the report needs, keeps the side table over live // decoders and frames, and draws the state behind a debug control. @@ -204,7 +204,11 @@ export async function buildReport(wai, objects, { host = {}, wasm = [], constrai } } const routed = JSON.parse(wai.routeReport(JSON.stringify(report))); - return { report, asked, outcome: routed.outcome, reason: routed.reason || null, table: routed.table || [] }; + // §4.7: where objects are alternatives of one content (a shared `choice`), the one to + // decode, in SPEC §4's energy order: the user agent's power-efficient answer first, a + // learned capability with no energy budget last. + const chosen = routed.outcome === "routed" ? JSON.parse(wai.chooseReport(JSON.stringify(report))) : null; + return { report, asked, outcome: routed.outcome, reason: routed.reason || null, table: routed.table || [], choices: chosen && chosen.outcome === "chosen" ? chosen.choices : [] }; } // ------------------------------------------------------------------ §10: the frame on screen diff --git a/wai/REGISTRY.md b/wai/REGISTRY.md index 5cf04f36e..c8e9ebdb2 100644 --- a/wai/REGISTRY.md +++ b/wai/REGISTRY.md @@ -128,6 +128,23 @@ cannot be established. Every derivation operation carries the class `codecs::derivation::derivation_license` gives it; a record carries none. +## Energy budgets + +A learned capability (replicate class `neural-int-exact`, `neural-entropy-exact`, +`neural-float` or `behavioral`) is dispatched after every other capability an +envelope offers, unless it carries an energy budget (SPEC §4, *Energy order* and +*Energy budget*). A registration states one by adding a row to +`energy_order::REGISTERED` in `wai-rs`, which the export writes as the +capability's `energy_budget`: the decode figure per frame or per second of +content, at a stated resolution, its class (`OnChipCounter` or +`CalibratedInstrument`) with its evidence, the reference sink it was measured on, +and the SHA-256 of the signed record that holds the measurement. The tests refuse +a row whose budget does not check (`EnergyBudget::check`): a `ModelBased` or +`Estimator` figure, legacy `HwShunt`, a declaration below the resolution floor, +no sink, or no record. The member is absent for every capability that states +none, which in this revision is every capability. A budget states what a +measurement found on one sink; it is not a claim about any other sink. + ## How to register a string 1. Add the capability constant to `wai-rs/src/codecs/mod.rs` and, for a payload, diff --git a/wai/SPEC.md b/wai/SPEC.md index 18d124311..f988bc226 100644 --- a/wai/SPEC.md +++ b/wai/SPEC.md @@ -484,6 +484,57 @@ against the wrong parameters yields plausible output, not an error. An encoder that needs an alternative for sinks that hold another parameter set carries one pinned rendition per set in a `WAI2` envelope (§7.1). +**Energy order.** Steps 3 and 5 are tried in the **energy order**, which a sink +applies unless its deployer configures another (below). Each capability the +sink may take ranks: + +1. first, where the sink can ask its platform about a decode (a page's Media + Capabilities `decodingInfo`, a native platform's hardware-decode query) and + the platform answers the capability's configuration both supported and + power-efficient: on the platforms that answer so, that is the hardware + decode path; +2. last, where the capability is **learned** — its replicate class (§7) is + `NeuralIntegerExact`, `NeuralEntropyExact`, `NeuralFloat` or `Behavioral` — + and carries no energy budget (below); +3. between them, every other capability. + +Where `fb` ranks before `cap`, the sink takes steps 4 and 5 before step 3, and +step 3 only if step 5 does not decode; otherwise it takes them as listed. So a +learned capability is never decoded above a classical fallback by default, and +a decode the platform answers power-efficient is decoded above a software or a +learned one. The order changes which capability decodes and nothing else: an +inert envelope reports the reason kept at step 3, else the one kept at step 5, +whichever was tried first. A sink whose deployer configures the manifest's +order instead takes the steps as listed, and says so wherever it reports a +decode (a capability report, a receipt's notes, its logs). The energy order +reads no energy figure the envelope carries: a manifest states no energy, and a +figure in a receipt is the producer's (encode) energy, not the sink's decode. + +**Energy budget.** A learned capability carries an energy budget where its +registration states one ([REGISTRY](REGISTRY.md), *Energy budgets*; the +registry export's `energy_budget`), or where the sink holds one from a +published decode table its deployer pins. A budget is the capability's decode +energy per frame, or per second of content, at a stated resolution, measured on +a named reference sink, with: + +- the figure's class, `OnChipCounter` or `CalibratedInstrument`, with its + evidence ([energy-measurement](extensions/energy-measurement.md) §2.3–§2.5), + meeting the resolution floor of §2.3 there; a `ModelBased` or `Estimator` + figure backs no budget (`budget_not_hardware`), and a budget is a profile + defined after the hardware class was refined, so `HwShunt` is refused + (`budget_legacy_class`, energy-measurement §2.6, *New profiles*); a class + that otherwise breaks those rules is `budget_class_invalid`; +- the reference sink named, and the SHA-256 of the signed record the figure is + in, so that the figure can be found and checked + (`budget_malformed` otherwise). + +A budget that does not meet these is not held, and a deployer's table is held +whole or not at all. No registration states a budget in this revision, so a +sink that applies the energy order takes a classical fallback before every +learned capability. The reference dispatcher applies it in +`Wai::dispatch_verified` and `WaiMulti::pick`, takes another order through +`dispatch_with` and `pick_with`, and holds budgets in `energy_order::Budgets`. + A capability is **dispatchable** unless this revision registers it as something a sink does not decode on its own: a candidate (§5, *Candidate capabilities*), a companion-only capability (§5, *Companion-only capabilities*), a refinement-only @@ -563,7 +614,9 @@ that object when the route is not `none`. It evaluates the capability's constrai ([capability-constraints](extensions/capability-constraints.md)) before dispatch, reports a measured figure per decode beside the user agent's own power-efficiency answer, which stays the user agent's, and binds every frame it decodes to the receipted object it came from -(browser-sink §7). The algorithm above is unchanged. +(browser-sink §7). Where it holds several objects that are alternatives of one +content, it decodes the one the energy order above puts first among those it can +route (browser-sink §4.7). The algorithm above is unchanged. --- @@ -1007,8 +1060,12 @@ The room authority, or a key its origin's key log lists with `live/meter`, signs receipt, `WMR1`, naming the records, the takes and the composition receipts it aggregates and stating publisher-seconds, subscriber-seconds by layer class, composition-seconds, events sent and delivered and recorded-seconds, every hop's joules with its class and a total per class, -never one across classes, and each grant's consumption against its joule and funds ceilings; -a verifier recomputes every number from the records. Clients' QoE observations ride the CMCD +never one across classes, and each grant's consumption against its joule and funds ceilings, +a hop's joules attributed to grants by the bytes each moved, an accounting convention and not a +saving any grant made; a verifier recomputes every number from the records. The reference relay +signs its own energy read from the host's counter (its process's per-task energy on macOS, the +CPU packages' on a Linux host it runs alone), `OnChipCounter` with its uncertainty, where the +counter was live and the relay served the room alone, and the unmetered marker otherwise. Clients' QoE observations ride the CMCD event timeline, and only a cell of at least fifty sessions reaches the receipt. The receipt maps onto C2PA's `c2pa.environmental-sustainability` assertion where one class covers the session whole: [`extensions/live-metering.md`](extensions/live-metering.md). @@ -1030,7 +1087,10 @@ second at the floor tier, from those records with their acquisition class, compa only within a class, ranks a pathway whose energy is not known (an unmetered hop, two classes, stale records) after every pathway whose energy is, holds a client against a figure within a margin, and signs a steering decision, `WSD1`, naming the records, the client's -report, its own inputs and the output, which a verifier recomputes. The output is the steering +report, its own inputs and the output, which a verifier recomputes. The figure is the hops' own +energy averaged over their delivery, not the network's, which is largely flat against the +traffic it carries: a pathway chosen by it spends what its hops spend, and no claim is made that +moving a client lowers a network's energy. The output is the steering manifest HLS and DASH players already read, written byte for byte, with the decision's URI in one member players ignore: [`extensions/energy-steering.md`](extensions/energy-steering.md). @@ -2644,8 +2704,12 @@ A v1.1-aware sink MUST: entry carries one and a pin applies to its capability (§3.1), resolves at the sink. An entry whose payload digest does not match, or whose pin is refused, is skipped as if the sink did not advertise its capability, and the sink keeps the - reason. A deployer policy MAY reorder or restrict the entries the sink - considers; it MUST NOT pick an entry skipped for its digest or its pin. + reason. Without a deployer policy, the sink walks the entries in §4's + energy order: an entry the platform answers supported and power-efficient + first, an entry whose capability is learned and carries no energy budget + after every other, table order within each. A deployer policy MAY reorder or + restrict the entries the sink considers; it MUST NOT pick an entry skipped + for its digest or its pin. 3. Read the corresponding rendition's bytes from the payload block. 4. Dispatch as in v1.0 §4, with the entry's `capability` and `prior` in place of `model_requirement.capability` and `conditioning.prior`, and no fallback. A diff --git a/wai/extensions/browser-sink.md b/wai/extensions/browser-sink.md index 27fbeb693..ca3df7516 100644 --- a/wai/extensions/browser-sink.md +++ b/wai/extensions/browser-sink.md @@ -5,7 +5,9 @@ > to decode, the page **routes** the object's capability to the user agent's decoder, a native > host's or WAI's own WebAssembly decoder (§4): the user agent is asked only about codec strings > the WebCodecs Codec Registry lists, and its decoder is preferred where it is exact for the -> tier the object needs. The page evaluates the constraint sets of +> tier the object needs. Among objects that are alternatives of one content, the page decodes +> the one SPEC §4's energy order puts first: a decode the user agent answers power-efficient +> before a software or a learned one (§4.7). The page evaluates the constraint sets of > [capability-constraints](capability-constraints.md) itself (§5), and reports the joules a > decode was measured to cost beside the user agent's `powerEfficient` boolean, which stays the > user agent's word (§6). Every frame the page decodes carries a **content binding** (§7): the @@ -38,7 +40,8 @@ ## 1. Scope -In scope: the capability report a page builds (§3); routing an object to a decoder (§4); +In scope: the capability report a page builds (§3); routing an object to a decoder (§4), and +choosing among alternatives (§4.7); constraint sets evaluated in the page (§5); the energy entry beside `powerEfficient` (§6); the content binding, its form and when a page writes one (§7); what happens to it through a frame's life (§8); how a page carries it (§9); the state of the frame on screen (§10); and the reasons @@ -52,7 +55,8 @@ with a state. Relationship to the core spec and the other extensions: - **SPEC §4.** A page answers step 3's "the sink advertises `cap`" for an object with its route - (§4): it advertises `cap` for that object when the route is not `none`. + (§4): it advertises `cap` for that object when the route is not `none`. Among alternatives it + applies SPEC §4's energy order (§4.7). - **[http-delivery](http-delivery.md) §4.3 and §12.** A WAI element is never put to a user-agent interface (§4.3 there). The route gives the Sink Capability Descriptor's `via` (§4.6). - **[capability-constraints](capability-constraints.md).** §5 is its evaluation in a page, over @@ -118,7 +122,7 @@ report**: one JSON object. "calibration_ref": "", "coverage": "Whole" | "Partial", "fabrics": [ "cpu" ] } }, "objects": [ { "name": "", "capability": "", "codec": "" | null, - "need": "", "params": { "": 0 } } ] } + "need": "", "params": { "": 0 }, "choice": "" } ] } ``` - `browser_sink` is `1`. @@ -134,11 +138,14 @@ report**: one JSON object. - `energy` holds measurements, by capability and route (§6). - `objects` lists what the page is about to decode, each object (or each track, whose objects share these values) with a `name`, its `capability`, the codec string a UA decoder would be - asked under (`null` where none applies), its need, and its declared parameters (§5). + asked under (`null` where none applies), its need, and its declared parameters (§5); and, + optionally, a `choice`, a non-empty string that objects which are alternatives of one content + share (§4.7). A report that does not read in this shape, or whose `browser_sink` is not `1`, is refused whole -(`report_malformed`): every member above is required, `objects` may be empty, and a member this -text does not define is ignored. A codec string with an answer in `ua` that §4.2's gate refuses is +(`report_malformed`): every member above is required but an object's `choice`, which, when +present, is a non-empty string; `objects` may be empty, and a member this text does not define is +ignored. A codec string with an answer in `ua` that §4.2's gate refuses is never read (§4.2). ## 4. Routing @@ -280,6 +287,35 @@ answered `supported` (http-delivery §12.2). A capability routed `ua`, `wasm` or http-delivery §12.1's descriptor, `via` `"ua"` (with the codec strings asked and their answers, `provisional` true), `"wasm"` or `"host"`; one routed `none` is absent from it. +### 4.7 Choosing among alternatives + +Objects of a report that carry the same `choice` are **alternatives**: renditions of one content +of which the page decodes one, such as the entries of a `WAI2` envelope or the renditions of one +track. For each `choice`, in order of its first appearance in `objects`, the page puts the +alternatives in SPEC §4's energy order: + +1. first, an alternative routed `ua` whose energy entry's `power_efficient` is `true`: the user + agent answered that it decodes the configuration supported and power-efficient, which on the + platforms that answer so is the hardware decode path; +2. last, an alternative whose capability is learned (SPEC §4: its replicate class in the + registry export is `neural-int-exact`, `neural-entropy-exact`, `neural-float` or `behavioral`) + and carries no energy budget (the export's `energy_budget`); +3. between them, every other alternative; + +in report order within each. A `power_efficient` of `false` or `null` does not put an alternative +first: no answer is not a power-efficient one. The **chosen** alternative is the first in that +order whose route is not `none`, and where every route is `none` nothing is chosen +(`no_alternative`). A page **MUST** decode the chosen alternative of a choice and no other, and +reads the order as SPEC §4 has it: a learned alternative is decoded only where no alternative +before it can be routed. The order reads no energy figure (§6 keeps a figure from changing a +route) and uses the user agent's `powerEfficient` as the user agent gave it. + +The **choice table** has one entry a choice: `choice`; `order`, the alternatives' names in that +order, those routed `none` included; `chosen`, a name or `null`; and `reason`, `null` or +`no_alternative`. An object with no `choice` is in no entry, and a report whose objects carry +none has an empty table. A page holds the budgets the registrations state; this revision +registers none, so in a page every learned alternative comes after every other. + ## 5. Constraint sets in the page A page evaluates [capability-constraints](capability-constraints.md) §2 in this form: @@ -518,6 +554,7 @@ display's colour space, which no tier covers. | `host_inexact` | §4.3 step 5 | | `no_wasm` | §4.3 step 6 | | `no_decoder` | §4.3 step 7 | +| `no_alternative` | §4.7 | | `constraint_malformed` | §5 step 2 | | `parameter_unregistered` | §5 step 3 | | `energy_class_invalid` | §6 | @@ -542,6 +579,11 @@ written by `wai_browser_sink_vectors gen`. It has: `supported` and never read, a need of `decode-equivalence` refused a UA decoder whose probe did not run and taken by one whose probe matched, the host and wasm fallbacks, and a malformed report. +- **Choices**: reports whose objects are alternatives, each with its routing table and the choice + table §4.7 gives it: a power-efficient answer first, a classical alternative before a learned + one, a learned one chosen where nothing before it routes, no answer read as not power-efficient, + two choices beside an object in none, a choice with nothing to choose (`no_alternative`), and an + empty and a non-string `choice`, each refused whole. - **Constraints**: constraint sets and declared parameters, with §5's outcome: satisfied by one set of several, by an empty set, by `enum`, `minimum` and `maximum`; unsatisfied by an undeclared parameter and by a value of the wrong type; each malformed form and an unregistered @@ -564,8 +606,8 @@ regenerates byte for byte, that `wai-rs` gives every case its stated outcome, th it shares no code with `wai-rs`, reads each capability's kind, status and replicate class from the registry export ([`registry/capabilities.json`](../registry/capabilities.json)), checks signatures with WAI's strict rule and hashes with BLAKE3 from `claim-conformance/`, and mutates -copies of the corpus and requires every copy to fail. The page runs the route, constraint, energy, -binding and frame cases through its wasm build, and its side table through the sequences, in a +copies of the corpus and requires every copy to fail. The page runs the route, choice, constraint, +energy, binding and frame cases through its wasm build, and its side table through the sequences, in a browser (`joule-moq-web`'s end-to-end scenario `binding`). ## 13. Security and privacy considerations diff --git a/wai/live-conformance/browser/vectors.json b/wai/live-conformance/browser/vectors.json index 5df13d13c..8ecfa2004 100644 --- a/wai/live-conformance/browser/vectors.json +++ b/wai/live-conformance/browser/vectors.json @@ -1,6 +1,6 @@ { "format": "wai-browser-sink-vectors/1", - "about": "extensions/browser-sink.md §12: routing tables of capability reports, constraint sets, energy entries, content bindings, a chain of signed group receipts whose objects bind, frame states and side-table sequences. Synthetic: no case describes a user agent or a device.", + "about": "extensions/browser-sink.md §12: routing tables of capability reports, the choice among alternatives in SPEC §4's energy order, constraint sets, energy entries, content bindings, a chain of signed group receipts whose objects bind, frame states and side-table sequences. Synthetic: no case describes a user agent or a device.", "routes": [ { "name": "room_tracks", @@ -1468,6 +1468,926 @@ "table": null } ], + "choices": [ + { + "name": "hardware_first", + "about": "one clip as AV1 the user agent answers supported and power-efficient, as the learned int_hyper on the wasm route, and as VP9 answered supported and not power-efficient: AV1 first, VP9, the learned one last; AV1 chosen", + "report": { + "browser_sink": 1, + "ua": { + "av01.0.04M.08": { + "supported": true, + "smooth": true, + "power_efficient": true, + "probe": "not_run" + }, + "vp09.00.10.08": { + "supported": true, + "smooth": true, + "power_efficient": false, + "probe": "not_run" + }, + "avc1.64001f": { + "supported": true, + "smooth": true, + "power_efficient": null, + "probe": "not_run" + }, + "hvc1.1.6.L93.B0": { + "supported": false, + "smooth": null, + "power_efficient": null, + "probe": "not_run" + } + }, + "host": {}, + "wasm": [ + "wai.video.int_motion", + "wai.video.int_hyper", + "wai.neural.int_hyper" + ], + "constraints": {}, + "energy": {}, + "objects": [ + { + "name": "int_hyper", + "capability": "wai.video.int_hyper", + "codec": null, + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "clip" + }, + { + "name": "vp9", + "capability": "wai.video.vp9", + "codec": "vp09.00.10.08", + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "clip" + }, + { + "name": "av1", + "capability": "wai.video.av1", + "codec": "av01.0.04M.08", + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "clip" + } + ] + }, + "outcome": "chosen", + "reason": null, + "table": [ + { + "name": "int_hyper", + "route": "wasm", + "reason": null, + "legs": { + "ua": "no_ua_mapping", + "host": "no_host", + "wasm": "taken" + }, + "asked": false, + "tier": "decode-equivalence", + "energy": { + "power_efficient": null, + "figure": null, + "reason": null + } + }, + { + "name": "vp9", + "route": "ua", + "reason": null, + "legs": { + "ua": "taken", + "host": "not_reached", + "wasm": "not_reached" + }, + "asked": true, + "tier": "none", + "energy": { + "power_efficient": false, + "figure": null, + "reason": null + } + }, + { + "name": "av1", + "route": "ua", + "reason": null, + "legs": { + "ua": "taken", + "host": "not_reached", + "wasm": "not_reached" + }, + "asked": true, + "tier": "none", + "energy": { + "power_efficient": true, + "figure": null, + "reason": null + } + } + ], + "choices": [ + { + "choice": "clip", + "order": [ + "av1", + "vp9", + "int_hyper" + ], + "chosen": "av1", + "reason": null + } + ] + }, + { + "name": "classical_before_learned", + "about": "the learned int_hyper and the classical int_motion, both on the wasm route and neither answered by the user agent: the classical one first, whatever the report's order", + "report": { + "browser_sink": 1, + "ua": { + "av01.0.04M.08": { + "supported": true, + "smooth": true, + "power_efficient": true, + "probe": "not_run" + }, + "vp09.00.10.08": { + "supported": true, + "smooth": true, + "power_efficient": false, + "probe": "not_run" + }, + "avc1.64001f": { + "supported": true, + "smooth": true, + "power_efficient": null, + "probe": "not_run" + }, + "hvc1.1.6.L93.B0": { + "supported": false, + "smooth": null, + "power_efficient": null, + "probe": "not_run" + } + }, + "host": {}, + "wasm": [ + "wai.video.int_motion", + "wai.video.int_hyper", + "wai.neural.int_hyper" + ], + "constraints": {}, + "energy": {}, + "objects": [ + { + "name": "int_hyper", + "capability": "wai.video.int_hyper", + "codec": null, + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "clip" + }, + { + "name": "int_motion", + "capability": "wai.video.int_motion", + "codec": null, + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "clip" + } + ] + }, + "outcome": "chosen", + "reason": null, + "table": [ + { + "name": "int_hyper", + "route": "wasm", + "reason": null, + "legs": { + "ua": "no_ua_mapping", + "host": "no_host", + "wasm": "taken" + }, + "asked": false, + "tier": "decode-equivalence", + "energy": { + "power_efficient": null, + "figure": null, + "reason": null + } + }, + { + "name": "int_motion", + "route": "wasm", + "reason": null, + "legs": { + "ua": "no_ua_mapping", + "host": "no_host", + "wasm": "taken" + }, + "asked": false, + "tier": "decode-equivalence", + "energy": { + "power_efficient": null, + "figure": null, + "reason": null + } + } + ], + "choices": [ + { + "choice": "clip", + "order": [ + "int_motion", + "int_hyper" + ], + "chosen": "int_motion", + "reason": null + } + ] + }, + { + "name": "learned_when_nothing_else_routes", + "about": "HEVC the user agent answers unsupported, and the learned int_hyper on the wasm route: the order keeps HEVC first, but it routes none, so the learned alternative is chosen", + "report": { + "browser_sink": 1, + "ua": { + "av01.0.04M.08": { + "supported": true, + "smooth": true, + "power_efficient": true, + "probe": "not_run" + }, + "vp09.00.10.08": { + "supported": true, + "smooth": true, + "power_efficient": false, + "probe": "not_run" + }, + "avc1.64001f": { + "supported": true, + "smooth": true, + "power_efficient": null, + "probe": "not_run" + }, + "hvc1.1.6.L93.B0": { + "supported": false, + "smooth": null, + "power_efficient": null, + "probe": "not_run" + } + }, + "host": {}, + "wasm": [ + "wai.video.int_motion", + "wai.video.int_hyper", + "wai.neural.int_hyper" + ], + "constraints": {}, + "energy": {}, + "objects": [ + { + "name": "int_hyper", + "capability": "wai.video.int_hyper", + "codec": null, + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "clip" + }, + { + "name": "hevc", + "capability": "wai.video.hevc", + "codec": "hvc1.1.6.L93.B0", + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "clip" + } + ] + }, + "outcome": "chosen", + "reason": null, + "table": [ + { + "name": "int_hyper", + "route": "wasm", + "reason": null, + "legs": { + "ua": "no_ua_mapping", + "host": "no_host", + "wasm": "taken" + }, + "asked": false, + "tier": "decode-equivalence", + "energy": { + "power_efficient": null, + "figure": null, + "reason": null + } + }, + { + "name": "hevc", + "route": "none", + "reason": "no_decoder", + "legs": { + "ua": "ua_unsupported", + "host": "no_host", + "wasm": "no_wasm" + }, + "asked": true, + "tier": "none", + "energy": { + "power_efficient": null, + "figure": null, + "reason": null + } + } + ], + "choices": [ + { + "choice": "clip", + "order": [ + "hevc", + "int_hyper" + ], + "chosen": "int_hyper", + "reason": null + } + ] + }, + { + "name": "power_efficient_not_stated", + "about": "AVC answered supported with no powerEfficient answer, and AV1 answered power-efficient: the user agent's power-efficient answer first; no answer is not a power-efficient one", + "report": { + "browser_sink": 1, + "ua": { + "av01.0.04M.08": { + "supported": true, + "smooth": true, + "power_efficient": true, + "probe": "not_run" + }, + "vp09.00.10.08": { + "supported": true, + "smooth": true, + "power_efficient": false, + "probe": "not_run" + }, + "avc1.64001f": { + "supported": true, + "smooth": true, + "power_efficient": null, + "probe": "not_run" + }, + "hvc1.1.6.L93.B0": { + "supported": false, + "smooth": null, + "power_efficient": null, + "probe": "not_run" + } + }, + "host": {}, + "wasm": [ + "wai.video.int_motion", + "wai.video.int_hyper", + "wai.neural.int_hyper" + ], + "constraints": {}, + "energy": {}, + "objects": [ + { + "name": "avc", + "capability": "wai.video.avc", + "codec": "avc1.64001f", + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "clip" + }, + { + "name": "av1", + "capability": "wai.video.av1", + "codec": "av01.0.04M.08", + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "clip" + } + ] + }, + "outcome": "chosen", + "reason": null, + "table": [ + { + "name": "avc", + "route": "ua", + "reason": null, + "legs": { + "ua": "taken", + "host": "not_reached", + "wasm": "not_reached" + }, + "asked": true, + "tier": "none", + "energy": { + "power_efficient": null, + "figure": null, + "reason": null + } + }, + { + "name": "av1", + "route": "ua", + "reason": null, + "legs": { + "ua": "taken", + "host": "not_reached", + "wasm": "not_reached" + }, + "asked": true, + "tier": "none", + "energy": { + "power_efficient": true, + "figure": null, + "reason": null + } + } + ], + "choices": [ + { + "choice": "clip", + "order": [ + "av1", + "avc" + ], + "chosen": "av1", + "reason": null + } + ] + }, + { + "name": "two_choices_and_one_alone", + "about": "two contents, each with its alternatives, and an object that carries no choice: one table entry per choice, in order of first appearance, and the lone object in none", + "report": { + "browser_sink": 1, + "ua": { + "av01.0.04M.08": { + "supported": true, + "smooth": true, + "power_efficient": true, + "probe": "not_run" + }, + "vp09.00.10.08": { + "supported": true, + "smooth": true, + "power_efficient": false, + "probe": "not_run" + }, + "avc1.64001f": { + "supported": true, + "smooth": true, + "power_efficient": null, + "probe": "not_run" + }, + "hvc1.1.6.L93.B0": { + "supported": false, + "smooth": null, + "power_efficient": null, + "probe": "not_run" + } + }, + "host": {}, + "wasm": [ + "wai.video.int_motion", + "wai.video.int_hyper", + "wai.neural.int_hyper" + ], + "constraints": {}, + "energy": {}, + "objects": [ + { + "name": "b_neural", + "capability": "wai.neural.int_hyper", + "codec": null, + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "b" + }, + { + "name": "a_vp9", + "capability": "wai.video.vp9", + "codec": "vp09.00.10.08", + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "a" + }, + { + "name": "alone", + "capability": "wai.video.int_motion", + "codec": null, + "need": "none", + "params": {} + }, + { + "name": "b_motion", + "capability": "wai.video.int_motion", + "codec": null, + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "b" + }, + { + "name": "a_av1", + "capability": "wai.video.av1", + "codec": "av01.0.04M.08", + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "a" + } + ] + }, + "outcome": "chosen", + "reason": null, + "table": [ + { + "name": "b_neural", + "route": "wasm", + "reason": null, + "legs": { + "ua": "no_ua_mapping", + "host": "no_host", + "wasm": "taken" + }, + "asked": false, + "tier": "decode-equivalence", + "energy": { + "power_efficient": null, + "figure": null, + "reason": null + } + }, + { + "name": "a_vp9", + "route": "ua", + "reason": null, + "legs": { + "ua": "taken", + "host": "not_reached", + "wasm": "not_reached" + }, + "asked": true, + "tier": "none", + "energy": { + "power_efficient": false, + "figure": null, + "reason": null + } + }, + { + "name": "alone", + "route": "wasm", + "reason": null, + "legs": { + "ua": "no_ua_mapping", + "host": "no_host", + "wasm": "taken" + }, + "asked": false, + "tier": "decode-equivalence", + "energy": { + "power_efficient": null, + "figure": null, + "reason": null + } + }, + { + "name": "b_motion", + "route": "wasm", + "reason": null, + "legs": { + "ua": "no_ua_mapping", + "host": "no_host", + "wasm": "taken" + }, + "asked": false, + "tier": "decode-equivalence", + "energy": { + "power_efficient": null, + "figure": null, + "reason": null + } + }, + { + "name": "a_av1", + "route": "ua", + "reason": null, + "legs": { + "ua": "taken", + "host": "not_reached", + "wasm": "not_reached" + }, + "asked": true, + "tier": "none", + "energy": { + "power_efficient": true, + "figure": null, + "reason": null + } + } + ], + "choices": [ + { + "choice": "b", + "order": [ + "b_motion", + "b_neural" + ], + "chosen": "b_motion", + "reason": null + }, + { + "choice": "a", + "order": [ + "a_av1", + "a_vp9" + ], + "chosen": "a_av1", + "reason": null + } + ] + }, + { + "name": "no_alternative", + "about": "a choice none of whose alternatives routes: HEVC answered unsupported and VVC with no decoder; nothing is chosen", + "report": { + "browser_sink": 1, + "ua": { + "av01.0.04M.08": { + "supported": true, + "smooth": true, + "power_efficient": true, + "probe": "not_run" + }, + "vp09.00.10.08": { + "supported": true, + "smooth": true, + "power_efficient": false, + "probe": "not_run" + }, + "avc1.64001f": { + "supported": true, + "smooth": true, + "power_efficient": null, + "probe": "not_run" + }, + "hvc1.1.6.L93.B0": { + "supported": false, + "smooth": null, + "power_efficient": null, + "probe": "not_run" + } + }, + "host": {}, + "wasm": [ + "wai.video.int_motion", + "wai.video.int_hyper", + "wai.neural.int_hyper" + ], + "constraints": {}, + "energy": {}, + "objects": [ + { + "name": "hevc", + "capability": "wai.video.hevc", + "codec": "hvc1.1.6.L93.B0", + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "clip" + }, + { + "name": "vvc", + "capability": "wai.video.vvc", + "codec": null, + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "clip" + } + ] + }, + "outcome": "chosen", + "reason": null, + "table": [ + { + "name": "hevc", + "route": "none", + "reason": "no_decoder", + "legs": { + "ua": "ua_unsupported", + "host": "no_host", + "wasm": "no_wasm" + }, + "asked": true, + "tier": "none", + "energy": { + "power_efficient": null, + "figure": null, + "reason": null + } + }, + { + "name": "vvc", + "route": "none", + "reason": "no_decoder", + "legs": { + "ua": "no_ua_mapping", + "host": "no_host", + "wasm": "no_wasm" + }, + "asked": false, + "tier": "none", + "energy": { + "power_efficient": null, + "figure": null, + "reason": null + } + } + ], + "choices": [ + { + "choice": "clip", + "order": [ + "hevc", + "vvc" + ], + "chosen": null, + "reason": "no_alternative" + } + ] + }, + { + "name": "empty_choice", + "about": "an object whose choice is the empty string: the report does not read", + "report": { + "browser_sink": 1, + "ua": { + "av01.0.04M.08": { + "supported": true, + "smooth": true, + "power_efficient": true, + "probe": "not_run" + }, + "vp09.00.10.08": { + "supported": true, + "smooth": true, + "power_efficient": false, + "probe": "not_run" + }, + "avc1.64001f": { + "supported": true, + "smooth": true, + "power_efficient": null, + "probe": "not_run" + }, + "hvc1.1.6.L93.B0": { + "supported": false, + "smooth": null, + "power_efficient": null, + "probe": "not_run" + } + }, + "host": {}, + "wasm": [ + "wai.video.int_motion", + "wai.video.int_hyper", + "wai.neural.int_hyper" + ], + "constraints": {}, + "energy": {}, + "objects": [ + { + "name": "av1", + "capability": "wai.video.av1", + "codec": "av01.0.04M.08", + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": "" + } + ] + }, + "outcome": "refused", + "reason": "report_malformed", + "table": null, + "choices": null + }, + { + "name": "choice_not_a_string", + "about": "an object whose choice is a number: the report does not read", + "report": { + "browser_sink": 1, + "ua": { + "av01.0.04M.08": { + "supported": true, + "smooth": true, + "power_efficient": true, + "probe": "not_run" + }, + "vp09.00.10.08": { + "supported": true, + "smooth": true, + "power_efficient": false, + "probe": "not_run" + }, + "avc1.64001f": { + "supported": true, + "smooth": true, + "power_efficient": null, + "probe": "not_run" + }, + "hvc1.1.6.L93.B0": { + "supported": false, + "smooth": null, + "power_efficient": null, + "probe": "not_run" + } + }, + "host": {}, + "wasm": [ + "wai.video.int_motion", + "wai.video.int_hyper", + "wai.neural.int_hyper" + ], + "constraints": {}, + "energy": {}, + "objects": [ + { + "name": "av1", + "capability": "wai.video.av1", + "codec": "av01.0.04M.08", + "need": "none", + "params": { + "wai:frame_width": 640, + "wai:frame_height": 360 + }, + "choice": 1 + } + ] + }, + "outcome": "refused", + "reason": "report_malformed", + "table": null, + "choices": null + } + ], "constraints": [ { "name": "no_sets", diff --git a/wai/live-conformance/browser_sink_verify.py b/wai/live-conformance/browser_sink_verify.py index 7ef501858..2191fcf78 100644 --- a/wai/live-conformance/browser_sink_verify.py +++ b/wai/live-conformance/browser_sink_verify.py @@ -14,6 +14,8 @@ For every case of vectors.json it recomputes, from the text: - `routes`: the report read or refused (§3), and each object's route, reason, legs, `asked`, tier and energy entry (§4, §6); +- `choices`: the choice table of §4.7, each choice's alternatives in SPEC §4's energy + order and the one chosen; - `constraints`: §5's outcome and reason; - `bindings`: §7.1's reading and canonical form; `frame_tiers`: §7.2's tier; - `chain`: each group receipt's signature (jwp-receipts §2.3, legacy form), its root and @@ -270,6 +272,8 @@ def report_reads(r): and "codec" in o and (o["codec"] is None or isinstance(o["codec"], str)) and isinstance(o.get("need"), str) and isinstance(o.get("params"), dict)): return False + if "choice" in o and not (isinstance(o["choice"], str) and o["choice"]): + return False return True @@ -391,6 +395,46 @@ def route_report(r): # ─────────────────────────────── §7 ─────────────────────────────── +# SPEC §4, *Energy order*: the replicate classes of a learned capability, as the registry +# export labels them. +LEARNED = ("neural-int-exact", "neural-entropy-exact", "neural-float", "behavioral") + + +def learned_unbudgeted(cap): + c = CAPS.get(cap) + return bool(c) and c["replicate"] in LEARNED and c.get("energy_budget") is None + + +def choose_report(r): + """§4.7: (choice table, None) or (None, reason).""" + table, reason = route_report(r) + if reason is not None: + return None, reason + groups = [] + for i, o in enumerate(r["objects"]): + if "choice" not in o: + continue + for g in groups: + if g[0] == o["choice"]: + g[1].append(i) + break + else: + groups.append((o["choice"], [i])) + out = [] + for choice, members in groups: + def place(i): + e = table[i] + if e["route"] == "ua" and e["energy"]["power_efficient"] is True: + return 0 + return 2 if learned_unbudgeted(r["objects"][i]["capability"]) else 1 + order = sorted(members, key=lambda i: (place(i), i)) + chosen = next((i for i in order if table[i]["route"] != "none"), None) + out.append({"choice": choice, "order": [r["objects"][i]["name"] for i in order], + "chosen": None if chosen is None else r["objects"][chosen]["name"], + "reason": None if chosen is not None else "no_alternative"}) + return out, None + + def hex32(s): return isinstance(s, str) and re.fullmatch(r"[0-9a-f]{64}", s) is not None @@ -579,6 +623,15 @@ def verify(doc, load): take(e["energy"]["reason"]) for leg in e["legs"].values(): take(leg) + for c in doc["choices"]: + got, reason = choose_report(c["report"]) + table = route_report(c["report"])[0] if reason is None else None + want = ("refused", reason, None, None) if reason is not None else ("chosen", None, table, got) + if want != (c["outcome"], c["reason"], c["table"], c["choices"]): + fails.append("choice %s: %s" % (c["name"], json.dumps(got if got is not None else reason)[:300])) + take(c["reason"]) + for g in c["choices"] or []: + take(g["reason"]) for c in doc["constraints"]: o, r = evaluate(c["sets"], c["params"]) if (o, r) != (c["outcome"], c["reason"]): @@ -620,7 +673,8 @@ def verify(doc, load): KNOWN = ["report_malformed", "not_dispatchable", "tier_exceeds_class", "constraints_unevaluable", "constraints_unmet", "no_ua_mapping", "codec_mismatch", "codec_unregistered", "ua_not_asked", "ua_unsupported", "ua_inexact", - "ua_unprobed", "ua_probe_mismatch", "no_host", "host_inexact", "no_wasm", "no_decoder", "constraint_malformed", + "ua_unprobed", "ua_probe_mismatch", "no_host", "host_inexact", "no_wasm", "no_decoder", "no_alternative", + "constraint_malformed", "parameter_unregistered", "energy_class_invalid", "unmetered_as_zero", "energy_count_invalid", "energy_evidence_missing", "binding_malformed", "binding_alg_unknown", "binding_unverified_reference", "binding_ambiguous"] @@ -658,6 +712,12 @@ def mutations(doc): out.append(("powerEfficient stated off the ua route", m(lambda d: entry(d, "energy", "estimator_wasm")["energy"].update(power_efficient=True)), None)) out.append(("powerEfficient inverted", m(lambda d: find(d, "routes", "room_tracks")["report"]["ua"]["vp09.00.10.08"].update(power_efficient=False)), None)) out.append(("a zero read as a figure", m(lambda d: entry(d, "energy", "zero_with_class")["energy"].update(reason=None)), None)) + out.append(("a learned alternative chosen above a classical one", m(lambda d: find(d, "choices", "classical_before_learned")["choices"][0].update(order=["int_hyper", "int_motion"], chosen="int_hyper")), None)) + out.append(("the power-efficient answer withdrawn", m(lambda d: find(d, "choices", "hardware_first")["report"]["ua"]["av01.0.04M.08"].update(power_efficient=False)), None)) + out.append(("no answer read as power-efficient", m(lambda d: find(d, "choices", "power_efficient_not_stated")["report"]["ua"]["avc1.64001f"].update(power_efficient=True)), None)) + out.append(("an alternative routed none chosen", m(lambda d: find(d, "choices", "no_alternative")["choices"][0].update(chosen="hevc", reason=None)), None)) + out.append(("an empty choice read", m(lambda d: find(d, "choices", "empty_choice")["report"]["objects"][0].update(choice="clip")), None)) + out.append(("a learned capability given a budget", m(lambda d: CAPS["wai.video.int_hyper"].__setitem__("energy_budget", {})), None)) out.append(("a constraint bound moved", m(lambda d: find(d, "constraints", "bounds_inclusive")["sets"][0]["wai:frame_height"].update(minimum=1081)), None)) out.append(("an unregistered parameter registered", m(lambda d: find(d, "constraints", "unregistered").update(outcome="unsatisfied", reason="constraints_unmet")), None)) out.append(("a digest upper-cased", m(lambda d: find(d, "bindings", "canonical")["value"].update(digest="1F" * 32)), None)) @@ -736,7 +796,7 @@ def main(): fails = verify(doc, loader()) for f in fails: print("FAIL " + f) - n = sum(len(doc[k]) for k in ("routes", "constraints", "bindings", "frame_tiers", "frames", "tables")) + n = sum(len(doc[k]) for k in ("routes", "choices", "constraints", "bindings", "frame_tiers", "frames", "tables")) n += sum(len(g["objects"]) for g in doc["chain"]["groups"]) print("%s every case gets the outcome the corpus states (%d cases; every reason of §11 given)" % ("PASS" if not fails else "FAIL", n)) bad += bool(fails) @@ -748,9 +808,13 @@ def main(): muts = mutations(doc) for name, change, file_change in muts: d2 = copy.deepcopy(doc) + # A mutation may change the registry export as read; each is undone after its run. + saved = copy.deepcopy(CAPS) if change: change(d2) f2 = verify(d2, loader(file_change)) + CAPS.clear() + CAPS.update(saved) if f2: caught += 1 else: diff --git a/wai/registry/capabilities.schema.json b/wai/registry/capabilities.schema.json index 8cc578282..6b9900298 100644 --- a/wai/registry/capabilities.schema.json +++ b/wai/registry/capabilities.schema.json @@ -241,6 +241,91 @@ } } } + }, + "energy_budget": { + "type": "object", + "description": "A learned capability's decode energy, measured on a reference sink under OnChipCounter or CalibratedInstrument (SPEC §4, Energy budget). Absent for a capability whose registration states none; no registration states one in this revision.", + "additionalProperties": false, + "required": [ + "joules_micro", + "per", + "resolution", + "energy_provenance", + "energy_uncertainty", + "sink", + "record" + ], + "properties": { + "joules_micro": { + "type": "integer", + "minimum": 1 + }, + "per": { + "enum": [ + "frame", + "second" + ] + }, + "resolution": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 1 + } + } + ] + }, + "energy_provenance": { + "enum": [ + "OnChipCounter", + "CalibratedInstrument" + ] + }, + "energy_uncertainty": { + "type": "object", + "additionalProperties": false, + "required": [ + "relative_ppm", + "window_us" + ], + "properties": { + "relative_ppm": { + "type": "integer", + "minimum": 1 + }, + "window_us": { + "type": "integer", + "minimum": 1 + } + } + }, + "energy_counter_filtering": { + "enum": [ + "On", + "Off", + "Unknown" + ] + }, + "energy_calibration_ref": { + "type": "string", + "minLength": 1 + }, + "sink": { + "type": "string", + "minLength": 1 + }, + "record": { + "type": "string", + "pattern": "^[0-9a-f]{64}$" + } + } } } } diff --git a/wai/wai-live-web/src/browser.rs b/wai/wai-live-web/src/browser.rs index be0fef48c..1965d89f6 100644 --- a/wai/wai-live-web/src/browser.rs +++ b/wai/wai-live-web/src/browser.rs @@ -1,5 +1,5 @@ //! The browser sink ([browser-sink](../../extensions/browser-sink.md)) for a page: the route -//! of each object (§4), constraint sets (§5), the energy entry (§6), the content binding +//! of each object (§4), the choice among alternatives (§4.7), constraint sets (§5), the energy entry (§6), the content binding //! (§7) and the state of the frame on screen (§10), each the `wai::browser_sink` function the //! corpus `live-conformance/browser` holds. With the feature `int_video`, a decoder on the //! wasm route that verifies the object against its receipts, decodes it and binds every @@ -24,6 +24,22 @@ pub fn route_report(report: &str) -> String { route_report_json(report).to_string() } +/// §4.7: a report's choice table, `{"outcome":"chosen","choices":[…]}`, or +/// `{"outcome":"refused","reason":…}`: for each `choice`, its alternatives in SPEC §4's +/// energy order and the one the page decodes. +pub fn choose_report_json(report: &str) -> Value { + let chosen = serde_json::from_str::(report).map_err(|_| bs::Reason::ReportMalformed).and_then(|r| bs::choose_report(&r)); + match chosen { + Ok(c) => json!({ "outcome": "chosen", "choices": c }), + Err(r) => json!({ "outcome": "refused", "reason": r.code() }), + } +} + +#[wasm_bindgen(js_name = chooseReport)] +pub fn choose_report(report: &str) -> String { + choose_report_json(report).to_string() +} + /// §5: `{"outcome":…,"reason":…}`; `sets` is `null` for none. pub fn evaluate_constraints_json(sets: &str, params: &str) -> Result { let sets: Value = serde_json::from_str(sets).map_err(|e| e.to_string())?; diff --git a/wai/wai-live-web/src/browser_tests.rs b/wai/wai-live-web/src/browser_tests.rs index ce0fbdc5a..b505cfbf1 100644 --- a/wai/wai-live-web/src/browser_tests.rs +++ b/wai/wai-live-web/src/browser_tests.rs @@ -21,6 +21,14 @@ fn every_route_constraint_binding_and_frame_case_gives_the_corpus_outcome() { assert_eq!(got["reason"], c["reason"], "{}", c["name"]); } } + for c in v["choices"].as_array().unwrap() { + let got = choose_report_json(&c["report"].to_string()); + if c["outcome"] == "chosen" { + assert_eq!((&got["outcome"], &got["choices"]), (&c["outcome"], &c["choices"]), "{}", c["name"]); + } else { + assert_eq!((&got["outcome"], &got["reason"]), (&c["outcome"], &c["reason"]), "{}", c["name"]); + } + } for c in v["constraints"].as_array().unwrap() { let got = evaluate_constraints_json(&c["sets"].to_string(), &c["params"].to_string()).unwrap(); assert_eq!((&got["outcome"], &got["reason"]), (&c["outcome"], &c["reason"]), "{}", c["name"]); diff --git a/wai/wai-rs/include/wai.h b/wai/wai-rs/include/wai.h index 273f76eeb..1e87ee8ba 100644 --- a/wai/wai-rs/include/wai.h +++ b/wai/wai-rs/include/wai.h @@ -671,7 +671,8 @@ int wai_envelope_unpack(const uint8_t *bytes, * SPEC §7.1 selection for a `WAI2` envelope at a sink that advertises the * capabilities in `advertised_json` (a NUL-terminated JSON array of capability * strings). Writes the index of the picked rendition to `out_index`: the first - * entry that is selectable (never a companion, nor a capability that is not + * entry, in SPEC §4's energy order (table order, but an entry whose capability is + * learned and carries no energy budget after every other), that is selectable (never a companion, nor a capability that is not * dispatchable under SPEC §4: companion-only, a candidate, a record or a * derivation), advertised, and whose payload matches its `sha256`. This call holds no * parameter set, so an entry whose pin applies is skipped (`prior_not_held`); a diff --git a/wai/wai-rs/src/bin/wai.rs b/wai/wai-rs/src/bin/wai.rs index e0e931cdb..469e797af 100644 --- a/wai/wai-rs/src/bin/wai.rs +++ b/wai/wai-rs/src/bin/wai.rs @@ -810,7 +810,8 @@ fn unwrap_component(input: &str, bytes: &[u8], out: Option<&str>, let idx = match component { Some(s) => s.parse::().map_err(|_| format!("--component takes an index, got '{s}'"))?, // SPEC §7.1 selection at a sink that advertises everything and holds no - // parameter set (pins not checked: a pinned rendition is skipped). + // parameter set (pins not checked: a pinned rendition is skipped), in SPEC + // §4's energy order. None => m.primary(wai::container::no_parameter_sets()).map(|p| p.index) .map_err(|_| "no selectable rendition without a pin; name one with --component ")?, }; diff --git a/wai/wai-rs/src/browser_sink.rs b/wai/wai-rs/src/browser_sink.rs index 6bb5f2e8e..d9589e05a 100644 --- a/wai/wai-rs/src/browser_sink.rs +++ b/wai/wai-rs/src/browser_sink.rs @@ -10,6 +10,7 @@ //! the routing table; //! - §5: constraint sets and their evaluation over capability-constraints §3.1's register //! ([`evaluate`], [`REGISTER`]); +//! - §4.7: the choice among alternatives, in SPEC §4's energy order ([`choose_report`]); //! - §6: the energy entry beside `powerEfficient`; //! - §7: the content binding, its canonical form and its reading ([`Binding`]), and the tier a //! frame holds ([`frame_tier`]); @@ -115,6 +116,7 @@ pub enum Reason { HostInexact, NoWasm, NoDecoder, + NoAlternative, ConstraintMalformed, ParameterUnregistered, EnergyClassInvalid, @@ -129,7 +131,7 @@ pub enum Reason { /// Every code, in §11's order. Private: a public array constant is one the C header /// generator would try to export, and none of this module belongs in `include/wai.h`. -const ALL_REASONS: [Reason; 27] = [ +const ALL_REASONS: [Reason; 28] = [ Reason::ReportMalformed, Reason::NotDispatchable, Reason::TierExceedsClass, @@ -147,6 +149,7 @@ const ALL_REASONS: [Reason; 27] = [ Reason::HostInexact, Reason::NoWasm, Reason::NoDecoder, + Reason::NoAlternative, Reason::ConstraintMalformed, Reason::ParameterUnregistered, Reason::EnergyClassInvalid, @@ -184,6 +187,7 @@ impl Reason { Reason::HostInexact => "host_inexact", Reason::NoWasm => "no_wasm", Reason::NoDecoder => "no_decoder", + Reason::NoAlternative => "no_alternative", Reason::ConstraintMalformed => "constraint_malformed", Reason::ParameterUnregistered => "parameter_unregistered", Reason::EnergyClassInvalid => "energy_class_invalid", @@ -454,6 +458,7 @@ fn report_reads(r: &Value) -> bool { && x.get("codec").is_some_and(|c| c.is_string() || c.is_null()) && x.get("need").is_some_and(Value::is_string) && x.get("params").is_some_and(Value::is_object) + && x.get("choice").is_none_or(|c| c.as_str().is_some_and(|c| !c.is_empty())) }) }) } @@ -623,6 +628,54 @@ pub fn route_report(report: &Value) -> Result, Reason> { Ok(r["objects"].as_array().expect("read").iter().map(|o| route_object(r, o.as_object().expect("read"))).collect()) } +// ─────────────────────────────── §4.7: alternatives ─────────────────────────────── + +/// §4.7: the choice table of a report: for each `choice`, in order of first appearance, +/// its alternatives' names in SPEC §4's energy order and the one the page decodes; or the +/// report refused whole (`report_malformed`). A report whose objects carry no `choice` +/// has an empty table. +/// +/// The order: an alternative routed `ua` whose energy entry's `power_efficient` is `true` +/// first; an alternative whose capability is learned and carries no energy budget +/// ([`crate::energy_order`]) last; every other between; report order within each. The +/// chosen alternative is the first in that order whose route is not `none`. +pub fn choose_report(report: &Value) -> Result, Reason> { + use crate::energy_order::{DispatchPolicy, EnergyRank, PlatformAnswer}; + let table = route_report(report)?; + let objects = report["objects"].as_array().expect("read"); + let mut groups: Vec<(String, Vec)> = Vec::new(); + for (i, o) in objects.iter().enumerate() { + let Some(c) = o.get("choice").and_then(Value::as_str) else { continue }; + match groups.iter_mut().find(|(g, _)| g == c) { + Some((_, members)) => members.push(i), + None => groups.push((c.to_string(), vec![i])), + } + } + Ok(groups + .into_iter() + .map(|(choice, members)| { + let rank = |i: usize| { + let e = &table[i]; + let capability = objects[i]["capability"].as_str().unwrap_or_default(); + // The user agent's answer, for this object's route alone: only a `ua` route + // states one (§6), and only `true` puts it first. + let answered = e["route"] == "ua" && e["energy"]["power_efficient"] == Value::Bool(true); + let platform = move |_: &str| answered.then_some(PlatformAnswer { supported: true, power_efficient: true }); + DispatchPolicy::energy().with_platform(&platform).rank(capability) + }; + let mut ordered: Vec<(EnergyRank, usize)> = members.iter().map(|&i| (rank(i), i)).collect(); + ordered.sort(); + let chosen = ordered.iter().map(|&(_, i)| i).find(|&i| table[i]["route"] != "none"); + json!({ + "choice": choice, + "order": ordered.iter().map(|&(_, i)| objects[i]["name"].clone()).collect::>(), + "chosen": chosen.map(|i| objects[i]["name"].clone()).unwrap_or(Value::Null), + "reason": if chosen.is_some() { Value::Null } else { json!(Reason::NoAlternative.code()) }, + }) + }) + .collect()) +} + // ─────────────────────────────── §7: the binding ─────────────────────────────── /// jwp-receipts §3 step 3: a group receipt's link hash, over its canonical bytes. diff --git a/wai/wai-rs/src/browser_sink/corpus.rs b/wai/wai-rs/src/browser_sink/corpus.rs index ad3850ee2..e2da6558f 100644 --- a/wai/wai-rs/src/browser_sink/corpus.rs +++ b/wai/wai-rs/src/browser_sink/corpus.rs @@ -439,6 +439,129 @@ fn routes() -> Vec { out } +// ─────────────────────────────── §4.7: alternatives ─────────────────────────────── + +/// (name, about, report, for each choice its order and the alternative chosen, or the +/// report's refusal when the list is empty). +type ChoiceCase = (&'static str, &'static str, Value, Vec<(&'static str, Vec<&'static str>, Option<&'static str>)>); + +fn alt(name: &str, capability: &str, codec: Option<&str>, choice: &str) -> Value { + let mut o = object(name, capability, codec, "none", json!({ "wai:frame_width": 640, "wai:frame_height": 360 })); + o["choice"] = json!(choice); + o +} + +fn choice_cases() -> Vec { + let ua = json!({ + "av01.0.04M.08": answer(true, Some(true), Some(true), "not_run"), + "vp09.00.10.08": answer(true, Some(true), Some(false), "not_run"), + "avc1.64001f": answer(true, Some(true), None, "not_run"), + "hvc1.1.6.L93.B0": answer(false, None, None, "not_run"), + }); + let wasm = json!(["wai.video.int_motion", "wai.video.int_hyper", "wai.neural.int_hyper"]); + let rep = |objects: Vec| report(ua.clone(), json!({}), wasm.clone(), json!({}), json!({}), objects); + vec![ + ( + "hardware_first", + "one clip as AV1 the user agent answers supported and power-efficient, as the learned int_hyper on the wasm route, and as VP9 answered supported and not power-efficient: AV1 first, VP9, the learned one last; AV1 chosen", + rep(vec![ + alt("int_hyper", "wai.video.int_hyper", None, "clip"), + alt("vp9", "wai.video.vp9", Some("vp09.00.10.08"), "clip"), + alt("av1", "wai.video.av1", Some("av01.0.04M.08"), "clip"), + ]), + vec![("clip", vec!["av1", "vp9", "int_hyper"], Some("av1"))], + ), + ( + "classical_before_learned", + "the learned int_hyper and the classical int_motion, both on the wasm route and neither answered by the user agent: the classical one first, whatever the report's order", + rep(vec![ + alt("int_hyper", "wai.video.int_hyper", None, "clip"), + alt("int_motion", "wai.video.int_motion", None, "clip"), + ]), + vec![("clip", vec!["int_motion", "int_hyper"], Some("int_motion"))], + ), + ( + "learned_when_nothing_else_routes", + "HEVC the user agent answers unsupported, and the learned int_hyper on the wasm route: the order keeps HEVC first, but it routes none, so the learned alternative is chosen", + rep(vec![ + alt("int_hyper", "wai.video.int_hyper", None, "clip"), + alt("hevc", "wai.video.hevc", Some("hvc1.1.6.L93.B0"), "clip"), + ]), + vec![("clip", vec!["hevc", "int_hyper"], Some("int_hyper"))], + ), + ( + "power_efficient_not_stated", + "AVC answered supported with no powerEfficient answer, and AV1 answered power-efficient: the user agent's power-efficient answer first; no answer is not a power-efficient one", + rep(vec![ + alt("avc", "wai.video.avc", Some("avc1.64001f"), "clip"), + alt("av1", "wai.video.av1", Some("av01.0.04M.08"), "clip"), + ]), + vec![("clip", vec!["av1", "avc"], Some("av1"))], + ), + ( + "two_choices_and_one_alone", + "two contents, each with its alternatives, and an object that carries no choice: one table entry per choice, in order of first appearance, and the lone object in none", + rep(vec![ + alt("b_neural", "wai.neural.int_hyper", None, "b"), + alt("a_vp9", "wai.video.vp9", Some("vp09.00.10.08"), "a"), + object("alone", "wai.video.int_motion", None, "none", json!({})), + alt("b_motion", "wai.video.int_motion", None, "b"), + alt("a_av1", "wai.video.av1", Some("av01.0.04M.08"), "a"), + ]), + vec![("b", vec!["b_motion", "b_neural"], Some("b_motion")), ("a", vec!["a_av1", "a_vp9"], Some("a_av1"))], + ), + ( + "no_alternative", + "a choice none of whose alternatives routes: HEVC answered unsupported and VVC with no decoder; nothing is chosen", + rep(vec![ + alt("hevc", "wai.video.hevc", Some("hvc1.1.6.L93.B0"), "clip"), + alt("vvc", "wai.video.vvc", None, "clip"), + ]), + vec![("clip", vec!["hevc", "vvc"], None)], + ), + ( + "empty_choice", + "an object whose choice is the empty string: the report does not read", + rep(vec![alt("av1", "wai.video.av1", Some("av01.0.04M.08"), "")]), + vec![], + ), + ( + "choice_not_a_string", + "an object whose choice is a number: the report does not read", + { + let mut o = alt("av1", "wai.video.av1", Some("av01.0.04M.08"), "clip"); + o["choice"] = json!(1); + rep(vec![o]) + }, + vec![], + ), + ] +} + +fn choices() -> Vec { + let mut out = Vec::new(); + for (name, about, rep, expect) in choice_cases() { + let v = match choose_report(&rep) { + Ok(got) => { + assert_eq!(got.len(), expect.len(), "{name}"); + for (g, (choice, order, chosen)) in got.iter().zip(&expect) { + assert_eq!(g["choice"], *choice, "{name}"); + assert_eq!(g["order"], json!(order), "{name}: {choice}"); + assert_eq!(g["chosen"], chosen.map_or(Value::Null, |c| json!(c)), "{name}: {choice}"); + assert_eq!(g["reason"], if chosen.is_some() { Value::Null } else { json!(Reason::NoAlternative.code()) }, "{name}"); + } + json!({ "name": name, "about": about, "report": rep, "outcome": "chosen", "reason": null, "table": route_report(&rep).expect("routed"), "choices": got }) + } + Err(r) => { + assert!(expect.is_empty(), "{name}: refused {r}"); + json!({ "name": name, "about": about, "report": rep, "outcome": "refused", "reason": r.code(), "table": null, "choices": null }) + } + }; + out.push(v); + } + out +} + // ─────────────────────────────── constraints ─────────────────────────────── fn constraint_cases() -> Vec<(&'static str, Option, Value, &'static str)> { @@ -670,9 +793,10 @@ pub fn generate() -> String { out.insert("format".into(), json!("wai-browser-sink-vectors/1")); out.insert( "about".into(), - json!("extensions/browser-sink.md §12: routing tables of capability reports, constraint sets, energy entries, content bindings, a chain of signed group receipts whose objects bind, frame states and side-table sequences. Synthetic: no case describes a user agent or a device."), + json!("extensions/browser-sink.md §12: routing tables of capability reports, the choice among alternatives in SPEC §4's energy order, constraint sets, energy entries, content bindings, a chain of signed group receipts whose objects bind, frame states and side-table sequences. Synthetic: no case describes a user agent or a device."), ); out.insert("routes".into(), Value::Array(routes())); + out.insert("choices".into(), Value::Array(choices())); out.insert("constraints".into(), Value::Array(constraints())); out.insert("bindings".into(), Value::Array(bindings())); out.insert("frame_tiers".into(), Value::Array(frame_tiers())); @@ -706,6 +830,16 @@ pub fn verify(doc: &str) -> Vec { fails.push(format!("route {n}: {got}")); } } + for c in arr("choices") { + let n = &c["name"]; + let got = match choose_report(&c["report"]) { + Ok(ch) => json!({ "outcome": "chosen", "reason": null, "table": route_report(&c["report"]).ok(), "choices": ch }), + Err(r) => json!({ "outcome": "refused", "reason": r.code(), "table": null, "choices": null }), + }; + if got["outcome"] != c["outcome"] || got["reason"] != c["reason"] || got["table"] != c["table"] || got["choices"] != c["choices"] { + fails.push(format!("choice {n}: {got}")); + } + } for c in arr("constraints") { let e = evaluate(if c["sets"].is_null() { None } else { Some(&c["sets"]) }, &c["params"]); if e.outcome() != c["outcome"] || e.reason().map(|r| json!(r.code())).unwrap_or(Value::Null) != c["reason"] { diff --git a/wai/wai-rs/src/codecs/registry.rs b/wai/wai-rs/src/codecs/registry.rs index 9ed0a7939..75256e200 100644 --- a/wai/wai-rs/src/codecs/registry.rs +++ b/wai/wai-rs/src/codecs/registry.rs @@ -1003,6 +1003,11 @@ pub fn capabilities_json() -> String { if let Some(o) = r.ops { v["ops"] = ops_json(&o); } + // SPEC §4, *Energy budget*: written only for a registration that states one, so + // the export of a capability without one is unchanged. + if let Some(b) = crate::energy_order::registered(r.capability) { + v["energy_budget"] = b.to_json(); + } v }) .collect(); @@ -1067,6 +1072,41 @@ fn nullable_enum(labels: &[&str]) -> serde_json::Value { } /// The schema of a capability's `ops` member (`extensions/integer-operators.md` §11). +/// The registry export's `energy_budget` (SPEC §4, *Energy budget*; +/// `energy_order::EnergyBudget::to_json`). +fn energy_budget_schema() -> serde_json::Value { + serde_json::json!({ + "type": "object", + "description": "A learned capability's decode energy, measured on a reference sink under OnChipCounter or CalibratedInstrument (SPEC §4, Energy budget). Absent for a capability whose registration states none; no registration states one in this revision.", + "additionalProperties": false, + "required": ["joules_micro", "per", "resolution", "energy_provenance", "energy_uncertainty", "sink", "record"], + "properties": { + "joules_micro": { "type": "integer", "minimum": 1 }, + "per": { "enum": ["frame", "second"] }, + "resolution": { + "oneOf": [ + { "type": "null" }, + { "type": "array", "minItems": 2, "maxItems": 2, "items": { "type": "integer", "minimum": 1 } } + ] + }, + "energy_provenance": { "enum": ["OnChipCounter", "CalibratedInstrument"] }, + "energy_uncertainty": { + "type": "object", + "additionalProperties": false, + "required": ["relative_ppm", "window_us"], + "properties": { + "relative_ppm": { "type": "integer", "minimum": 1 }, + "window_us": { "type": "integer", "minimum": 1 } + } + }, + "energy_counter_filtering": { "enum": ["On", "Off", "Unknown"] }, + "energy_calibration_ref": { "type": "string", "minLength": 1 }, + "sink": { "type": "string", "minLength": 1 }, + "record": { "type": "string", "pattern": "^[0-9a-f]{64}$" } + } + }) +} + fn ops_schema() -> serde_json::Value { serde_json::json!({ "type": "object", @@ -1162,7 +1202,8 @@ pub fn capabilities_schema() -> String { "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", "description": "The date of the first commit of this repository that registers the string; the specification entered the repository on 2026-06-12." }, - "ops": ops_schema() + "ops": ops_schema(), + "energy_budget": energy_budget_schema() } } }, diff --git a/wai/wai-rs/src/container.rs b/wai/wai-rs/src/container.rs index b7b223f05..52a618edc 100644 --- a/wai/wai-rs/src/container.rs +++ b/wai/wai-rs/src/container.rs @@ -26,6 +26,7 @@ //! code that builds them. use serde::{Deserialize, Serialize}; +pub use crate::energy_order::{DispatchPolicy, PlatformAnswer}; use serde_json::{Map, Value}; use std::fs; use std::path::Path; @@ -1370,9 +1371,28 @@ impl Wai { /// codec for it says so by advertising it (SPEC §4, step 3). A pin on it is /// verified as a set of several files ([`pin_applies_to`]), so it fails /// closed. + /// + /// The two capabilities are tried in SPEC §4's energy order + /// ([`crate::energy_order`]): a learned capability that carries no energy budget is + /// tried after a fallback that is not learned. [`Self::dispatch_with`] takes another + /// order. pub fn dispatch_verified( &self, advertises: impl Fn(&str) -> bool, + verify: impl FnMut(&str, &Prior) -> Result, + ) -> Result, Inert> { + self.dispatch_with(&DispatchPolicy::energy(), advertises, verify) + } + + /// [`Self::dispatch_verified`] in the order `policy` gives (SPEC §4, *Energy order*): + /// the fallback is tried first when it ranks before the capability, and the + /// capability first otherwise. The order changes which capability decodes and + /// nothing else: an inert envelope reports the reason kept for the capability, else + /// the one kept for the fallback, whichever was tried first. + pub fn dispatch_with( + &self, + policy: &DispatchPolicy<'_>, + advertises: impl Fn(&str) -> bool, mut verify: impl FnMut(&str, &Prior) -> Result, ) -> Result, Inert> { // SPEC §6.4 step 2, before §4: an encrypted payload is inert at a sink that @@ -1387,8 +1407,14 @@ impl Wai { if crate::codecs::is_companion_only(primary) || crate::codecs::is_refinement_only(primary) { return Err(Inert::MissingCapability); } - let mut first_refusal: Option = None; - for cap in [Some(primary), self.fallback()].into_iter().flatten() { + // (is the capability, not the fallback; the string), in the order tried. + let mut tries: Vec<(bool, &str)> = [Some((true, primary)), self.fallback().map(|f| (false, f))].into_iter().flatten().collect(); + if tries.len() == 2 && policy.rank(tries[1].1) < policy.rank(tries[0].1) { + tries.swap(0, 1); + } + // The reason kept at step 3 (the capability), else at step 5 (the fallback). + let mut kept: [Option; 2] = [None, None]; + for (is_primary, cap) in tries { if !crate::codecs::is_dispatchable(cap) || !advertises(cap) { continue; } @@ -1396,15 +1422,14 @@ impl Wai { Some(p) if pin_applies_to(cap) => match verify(cap, p) { Ok(v) => return Ok(Dispatch { capability: cap, verified: Some(v) }), Err(refusal) => { - if first_refusal.is_none() { - first_refusal = Some(Inert::PinRefused { capability: cap.to_string(), refusal }); - } + kept[usize::from(!is_primary)] = Some(Inert::PinRefused { capability: cap.to_string(), refusal }); } }, _ => return Ok(Dispatch { capability: cap, verified: None }), } } - Err(first_refusal.unwrap_or(Inert::MissingCapability)) + let [step3, step5] = kept; + Err(step3.or(step5).unwrap_or(Inert::MissingCapability)) } /// What a verifier can decide about this envelope's pin without holding a @@ -3018,16 +3043,31 @@ impl WaiMulti { /// an encryption other than `"none"` is inert before any entry is considered (SPEC /// §6.4 step 2; this dispatcher opens no scheme): every entry is /// [`Skip::Encrypted`]. + /// + /// The entries are walked in SPEC §7.1's default order, the energy order of SPEC §4 + /// ([`energy_order`]); [`Self::pick_with`] takes another. pub fn pick( &self, advertises: impl Fn(&str) -> bool, verify: impl FnMut(&str, &Prior) -> Result, ) -> Result, Vec<(usize, Skip)>> { - self.pick_where(|_, m| if advertises(&m.capability) { Ok(()) } else { Err(Skip::NotEligible) }, verify) + self.pick_with(&DispatchPolicy::energy(), advertises, verify) + } + + /// [`Self::pick`], walking the entries in the order `policy` gives. + pub fn pick_with( + &self, + policy: &DispatchPolicy<'_>, + advertises: impl Fn(&str) -> bool, + verify: impl FnMut(&str, &Prior) -> Result, + ) -> Result, Vec<(usize, Skip)>> { + let order = energy_order(&self.manifest, policy); + self.pick_in(&order, |_, m| if advertises(&m.capability) { Ok(()) } else { Err(Skip::NotEligible) }, verify) } /// [`Self::pick`] at a sink that advertises every capability — the first entry - /// in deployer-preferred order that passes the component digest and pin checks. + /// in the energy order (SPEC §4, §7.1 step 2) that passes the component digest and + /// pin checks. pub fn primary( &self, verify: impl FnMut(&str, &Prior) -> Result, @@ -3044,9 +3084,18 @@ impl WaiMulti { eligible: impl Fn(usize, &RenditionMeta) -> Result<(), Skip>, verify: impl FnMut(&str, &Prior) -> Result, ) -> Result, Vec<(usize, Skip)>> { - let order: Vec = (0..self.manifest.renditions.len()).collect(); + let order = energy_order(&self.manifest, &DispatchPolicy::energy()); + self.pick_in(&order, eligible, verify) + } + + fn pick_in( + &self, + order: &[usize], + eligible: impl Fn(usize, &RenditionMeta) -> Result<(), Skip>, + verify: impl FnMut(&str, &Prior) -> Result, + ) -> Result, Vec<(usize, Skip)>> { let digest_ok = |i: usize, m: &RenditionMeta| self.renditions.get(i).is_some_and(|p| m.payload_digest_matches(p)); - let (index, verified, skipped) = select_entries(&self.manifest, &order, eligible, digest_ok, verify)?; + let (index, verified, skipped) = select_entries(&self.manifest, order, eligible, digest_ok, verify)?; Ok(Picked { index, meta: &self.manifest.renditions[index], @@ -3171,6 +3220,13 @@ impl WaiMulti { pub fn intent(&self) -> &str { &self.manifest.intent } } +/// SPEC §7.1 step 2's default order: every entry index, in the energy order `policy` +/// gives (SPEC §4, *Energy order*). Under [`DispatchPolicy::manifest_order`] it is table +/// order. +pub fn energy_order(manifest: &ManifestV2, policy: &DispatchPolicy<'_>) -> Vec { + policy.order(manifest.renditions.iter().map(|m| m.capability.as_str())) +} + /// SPEC §7.1 selection over a `WAI2` manifest's entries alone, with no payload in /// hand: the walk [`WaiMulti::pick`] makes, in `order` (a deployer policy, SPEC §7.1 /// step 2: a permutation of a subset of the entry indices; an index not in it is not @@ -3976,9 +4032,78 @@ pub(crate) mod tests { let picked = m.pick(|c| c == "wai.audio.opus", accept).unwrap(); assert_eq!(picked.meta.capability, "wai.audio.opus"); assert_eq!(picked.payload, b"OPUS-PAYLOAD-4411-BYTES"); - // primary = first rendition (deployer-preferred order) + // primary = the first rendition in SPEC §7.1's default order, the energy order: + // the learned encodec32, with no energy budget, after the classical opus + // (SPEC §4, *Energy order*). let pmeta = m.primary(accept).unwrap().meta; - assert_eq!(pmeta.capability, "wai.neural.encodec32"); + assert_eq!(pmeta.capability, "wai.audio.opus"); + // A deployer that configures the table's own order picks the first rendition. + let table = m.pick_with(&DispatchPolicy::manifest_order(), |_| true, accept).unwrap(); + assert_eq!(table.meta.capability, "wai.neural.encodec32"); + } + + /// SPEC §4, *Energy order*, for a `WAI1`: a learned capability with no energy budget + /// is tried after a fallback that is not learned; with a budget, or under the + /// manifest's order, it keeps its place; the platform's power-efficient answer for + /// the fallback puts the fallback first even then; and the order changes no reason. + #[test] + fn wai1_dispatch_tries_a_classical_fallback_before_an_unbudgeted_learned_capability() { + use crate::energy_order::{Budgets, BudgetUnit, EnergyBudget}; + use crate::energy_class::{CounterFiltering, EnergyProvenance, Uncertainty}; + let env = |cap: &str, fb: Option<&str>| { + let mut req = ModelRequirement::new(cap); + req.fallback = fb.map(String::from); + Wai::new(Manifest::new("video", "improve", req, Conditioning::new("bytes")), b"payload".to_vec()) + }; + let all = |_: &str| true; + let (learned, classical) = ("wai.video.int_hyper", "wai.video.av1"); + let w = env(learned, Some(classical)); + assert_eq!(dispatched(&w, all), Some(classical), "the classical fallback first by default"); + assert_eq!(dispatched(&w, |c| c == learned), Some(learned), "the learned capability still decodes where the fallback is not advertised"); + assert_eq!(w.dispatch_with(&DispatchPolicy::manifest_order(), all, no_parameter_sets()).unwrap().capability, learned); + let chip = EnergyProvenance::on_chip_counter(Uncertainty { relative_ppm: 25_000, window_us: 7_000_000 }, CounterFiltering::Unknown).unwrap(); + let budget = EnergyBudget { joules_micro: 41_250, per: BudgetUnit::Frame, resolution: Some((1920, 1080)), class: chip, sink: "a reference sink".into(), record: "ab".repeat(32) }; + let held = Budgets::registry().with_table(&serde_json::json!({ learned: budget.to_json() })).unwrap(); + assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_budgets(&held), all, no_parameter_sets()).unwrap().capability, learned, "a budget keeps the learned capability's place"); + let hw = |c: &str| (c == classical).then_some(PlatformAnswer { supported: true, power_efficient: true }); + assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_budgets(&held).with_platform(&hw), all, no_parameter_sets()).unwrap().capability, classical, "the hardware decode path first"); + // Two classical capabilities, or a classical capability over a learned fallback, + // keep the manifest's order. + assert_eq!(dispatched(&env("wai.image.jxl", Some("wai.image.png")), all), Some("wai.image.jxl")); + assert_eq!(dispatched(&env(classical, Some(learned)), all), Some(classical)); + assert_eq!(dispatched(&env(learned, Some("wai.image.jpegai")), all), Some(learned), "two learned capabilities keep their order"); + // The reason an inert envelope reports is still step 3's before step 5's, whichever + // was tried first. + let pin = Prior::new("m", MODEL_SHA, "int"); + let mut c = Conditioning::new("int"); + c.prior = Some(pin); + let mut req = ModelRequirement::new("wai.neural.int_mlicpp"); + // A string this revision does not register: not learned, and a pin applies to it. + req.fallback = Some("wai.future.codec".into()); + let pinned = Wai::new(Manifest::new("image", "replicate", req, c), vec![]); + let mut seen = Vec::new(); + let e = pinned + .dispatch_verified(all, |cap, _| { seen.push(cap.to_string()); Err::<(), _>(PinRefusal::NotHeld { capability: cap.into() }) }) + .unwrap_err(); + assert_eq!(seen, ["wai.future.codec", "wai.neural.int_mlicpp"], "the fallback that is not learned tried first"); + assert_eq!(e, Inert::PinRefused { capability: "wai.neural.int_mlicpp".into(), refusal: PinRefusal::NotHeld { capability: "wai.neural.int_mlicpp".into() } }); + } + + /// SPEC §7.1 step 2's default order: the energy order over the entries. + #[test] + fn wai2_default_order_is_the_energy_order() { + let m = WaiMulti::new("image", "improve", Value::Null, vec![ + Rendition::media("wai.neural.elic", "elic", b"a".to_vec()), + Rendition::media("wai.image.jxl", "jxl", b"b".to_vec()), + Rendition::media("wai.image.jpegai", "jpegai", b"c".to_vec()), + Rendition::media("wai.image.png", "png", b"d".to_vec()), + ]); + assert_eq!(energy_order(&m.manifest, &DispatchPolicy::energy()), vec![1, 3, 0, 2]); + assert_eq!(energy_order(&m.manifest, &DispatchPolicy::manifest_order()), vec![0, 1, 2, 3]); + assert_eq!(m.pick(|_| true, accept).unwrap().meta.capability, "wai.image.jxl"); + assert_eq!(m.pick(|c| c.starts_with("wai.neural") || c == "wai.image.jpegai", accept).unwrap().meta.capability, "wai.neural.elic"); + let hw = |c: &str| (c == "wai.image.png").then_some(PlatformAnswer { supported: true, power_efficient: true }); + assert_eq!(m.pick_with(&DispatchPolicy::energy().with_platform(&hw), |_| true, accept).unwrap().meta.capability, "wai.image.png"); } /// SPEC §5, *Candidate capabilities*: a candidate is never dispatched, picked @@ -4375,16 +4500,22 @@ pub(crate) mod tests { let all = |_: &str| true; let pin = Prior::new("m", MODEL_SHA, "int"); let refuse = |c: &str, _: &Prior| -> Result<(), PinRefusal> { Err(PinRefusal::NotHeld { capability: c.into() }) }; - // A refused pin falls back to png. + // A refused pin falls back to png. (In the manifest's order: by default the + // classical png is tried before the learned int_mlicpp, which carries no energy + // budget, and the pin is never reached; SPEC §4, *Energy order*.) let w = mlic_env(Some(pin.clone()), Some("wai.image.png")); - let d = w.dispatch_verified(all, refuse).unwrap(); + let table = DispatchPolicy::manifest_order(); + let d = w.dispatch_with(&table, all, refuse).unwrap(); assert_eq!((d.capability, d.verified), ("wai.image.png", None)); + let mut calls = 0; + let d = w.dispatch_verified(all, |c, _| { calls += 1; refuse(c, &pin) }).unwrap(); + assert_eq!((d.capability, calls), ("wai.image.png", 0)); // With no fallback the envelope is inert and names the reason. let e = mlic_env(Some(pin.clone()), None).dispatch_verified(all, refuse).unwrap_err(); assert_eq!(e.code(), "prior_not_held"); assert!(matches!(e, Inert::PinRefused { ref capability, .. } if capability == MLIC)); // A verified pin dispatches the primary, carrying what the verifier returned. - let d = w.dispatch_verified(all, |_, p: &Prior| Ok::<_, PinRefusal>(p.sha256.clone())).unwrap(); + let d = w.dispatch_with(&table, all, |_, p: &Prior| Ok::<_, PinRefusal>(p.sha256.clone())).unwrap(); assert_eq!((d.capability, d.verified.as_deref()), (MLIC, Some(MODEL_SHA))); // A pin on a capability that decodes against no parameter set never calls the verifier. let mut calls = 0; @@ -4448,19 +4579,31 @@ pub(crate) mod tests { ]); let all = |_: &str| true; let codes = |s: &[(usize, Skip)]| s.iter().map(|(i, k)| (*i, k.code())).collect::>(); - let p = m.pick(all, holding(&[A])).unwrap(); + // In the table's order, which a deployer may configure: by default the classical + // avif is walked before the learned int_mlicpp entries (SPEC §4, *Energy order*; + // §7.1 step 2), which the last lines check. + let table = DispatchPolicy::manifest_order(); + let pick = |adv: &dyn Fn(&str) -> bool, held: &'static [&'static str]| m.pick_with(&table, adv, holding(held)); + let p = pick(&all, &[A]).unwrap(); assert_eq!((p.index, p.payload), (1, &b"A"[..])); assert_eq!(codes(&p.skipped), [(0, "digest_superseded")]); - assert_eq!(m.pick(all, holding(&[B])).unwrap().index, 0); - let p = m.pick(all, holding(&[C])).unwrap(); + assert_eq!(pick(&all, &[B]).unwrap().index, 0); + let p = pick(&all, &[C]).unwrap(); assert_eq!(p.index, 2); assert_eq!(codes(&p.skipped), [(0, "prior_not_held"), (1, "prior_not_held")]); // Nothing left: inert, with a reason for every entry. - let e = m.pick(|c| c != "wai.image.avif", holding(&[C])).unwrap_err(); + let e = pick(&|c| c != "wai.image.avif", &[C]).unwrap_err(); assert_eq!(codes(&e), [(0, "prior_not_held"), (1, "prior_not_held"), (2, "missing_capability")]); // The pin decides, not the capability. + assert_eq!(pick(&|c| c == MLIC, &[A]).unwrap().index, 1); + assert_eq!(pick(&all, &[B]).unwrap().index, 0); + // The default order: avif first, so no pin is verified while avif is advertised; + // without it, the learned entries are walked in their table order. + let p = m.pick(all, holding(&[A])).unwrap(); + assert_eq!((p.index, codes(&p.skipped)), (2, vec![])); + let e = m.pick(|c| c != "wai.image.avif", holding(&[C])).unwrap_err(); + assert_eq!(codes(&e), [(2, "missing_capability"), (0, "prior_not_held"), (1, "prior_not_held")]); assert_eq!(m.pick(|c| c == MLIC, holding(&[A])).unwrap().index, 1); - assert_eq!(m.primary(holding(&[B])).unwrap().index, 0); // A candidate is never picked, whatever its pin and whatever the sink // advertises: it is skipped as not selectable before its pin is verified // (SPEC §4, §7.1). diff --git a/wai/wai-rs/src/energy_order.rs b/wai/wai-rs/src/energy_order.rs new file mode 100644 index 000000000..d6541cda9 --- /dev/null +++ b/wai/wai-rs/src/energy_order.rs @@ -0,0 +1,445 @@ +//! The energy order of dispatch (SPEC §4, *Energy order*; §7.1 step 2): which of the +//! capabilities an envelope offers a sink tries first when it applies no deployer policy +//! of its own. +//! +//! - A decode the sink's platform answers is **supported and power-efficient** (a page's +//! Media Capabilities `decodingInfo`, a native platform's hardware-decode query) comes +//! first: on the platforms that answer so, that is the hardware decode path. +//! - A **learned** capability (replicate class `NeuralIntegerExact`, `NeuralEntropyExact`, +//! `NeuralFloat` or `Behavioral`) that carries no [`EnergyBudget`] comes after every +//! other capability, so it is never tried above a classical fallback by default. +//! - Everything else keeps the envelope's order, and so does every tie. +//! +//! The order changes which capability decodes, never a verdict or a refusal: a sink that +//! cannot take the first capability in it goes on to the next, exactly as SPEC §4 and +//! §7.1 walk them. +//! +//! An [`EnergyBudget`] is the one thing that lifts a learned capability back to its place: +//! a decode figure per frame or per second of content, measured on a named reference sink +//! under `OnChipCounter` or `CalibratedInstrument` with its evidence +//! (`extensions/energy-measurement.md` §2.3), in a record named by its digest. A budget is +//! a profile defined after the hardware class was refined, so it refuses `HwShunt` +//! (energy-measurement §2.6, *New profiles*). A registration may state one (REGISTRY.md, +//! the registry export's `energy_budget`), and a deployer may hold more from a published +//! table it pins ([`Budgets::with_table`]). No registration states one in this revision, +//! so the default takes every classical fallback before every learned capability. +//! +//! Pure std plus `serde_json`, compiled unconditionally, so the browser sink's wasm build +//! applies the same order. + +use std::collections::BTreeMap; + +use serde_json::{json, Value}; + +use crate::codecs::{self, ReplicateClass}; +use crate::energy_class::{self, AcquisitionError, EnergyProvenance}; + +/// What a budget's figure is per. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum BudgetUnit { + /// One decoded frame (an image is one frame). + Frame, + /// One second of decoded content. + ContentSecond, +} + +impl BudgetUnit { + pub const fn token(self) -> &'static str { + match self { + BudgetUnit::Frame => "frame", + BudgetUnit::ContentSecond => "second", + } + } +} + +/// A learned capability's declared decode energy, backed by a hardware-class figure on a +/// reference sink (SPEC §4, *Energy budget*). +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct EnergyBudget { + /// The figure, in microjoules per [`Self::per`]. + pub joules_micro: u64, + pub per: BudgetUnit, + /// The decoded resolution the figure was measured at, width × height; `None` for + /// content without one (audio). + pub resolution: Option<(u32, u32)>, + /// `OnChipCounter` or `CalibratedInstrument`, with its evidence. + pub class: EnergyProvenance, + /// The reference sink the figure was measured on. + pub sink: String, + /// SHA-256, 64 lowercase hexadecimal digits, of the signed record the figure is in. + pub record: String, +} + +/// Why a budget does not read, or does not count. +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum BudgetError { + /// A member missing or of the wrong form; the member named. + Malformed(&'static str), + /// The class is `ModelBased` or `Estimator`: a budget rests on a hardware-class + /// figure, and a model or a constant does not back one. + NotHardware, + /// The class or the figure breaks energy-measurement §2.6 (*New profiles*), §2.3 or + /// §2's coupling: `HwShunt`, a class beside zero, a refined class without its + /// evidence, or a declaration below the resolution floor. + Class(AcquisitionError), +} + +impl BudgetError { + /// The reason code SPEC §4 gives this refusal. + pub fn code(&self) -> &'static str { + match self { + BudgetError::Malformed(_) => "budget_malformed", + BudgetError::NotHardware => "budget_not_hardware", + BudgetError::Class(AcquisitionError::LegacyInNewProfile) => "budget_legacy_class", + BudgetError::Class(_) => "budget_class_invalid", + } + } +} + +impl std::fmt::Display for BudgetError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + BudgetError::Malformed(m) => write!(f, "budget_malformed: {m}"), + BudgetError::NotHardware => f.write_str("budget_not_hardware: a budget rests on an OnChipCounter or CalibratedInstrument figure"), + BudgetError::Class(e) => write!(f, "{}: {e}", self.code()), + } + } +} + +impl std::error::Error for BudgetError {} + +fn is_hex64(s: &str) -> bool { + s.len() == 64 && s.bytes().all(|b| b.is_ascii_digit() || (b'a'..=b'f').contains(&b)) +} + +impl EnergyBudget { + /// SPEC §4, *Energy budget*: the class is a hardware class that passes + /// [`energy_class::check_new_profile`] beside the figure; the sink is named; the + /// record is a SHA-256 digest; a resolution is two positive integers. + pub fn check(&self) -> Result<(), BudgetError> { + energy_class::check_new_profile(self.joules_micro, &self.class).map_err(BudgetError::Class)?; + if !matches!(self.class, EnergyProvenance::OnChipCounter { .. } | EnergyProvenance::CalibratedInstrument { .. }) { + return Err(BudgetError::NotHardware); + } + if self.sink.trim().is_empty() { + return Err(BudgetError::Malformed("sink")); + } + if !is_hex64(&self.record) { + return Err(BudgetError::Malformed("record")); + } + if matches!(self.resolution, Some((0, _)) | Some((_, 0))) { + return Err(BudgetError::Malformed("resolution")); + } + Ok(()) + } + + /// The budget as JSON: `joules_micro`, `per`, `resolution` (`[w, h]` or `null`), the + /// class in energy-measurement §2.7's snake_case fields, `sink` and `record`. + pub fn to_json(&self) -> Value { + let mut o = serde_json::Map::new(); + o.insert("joules_micro".into(), json!(self.joules_micro)); + o.insert("per".into(), json!(self.per.token())); + o.insert("resolution".into(), self.resolution.map(|(w, h)| json!([w, h])).unwrap_or(Value::Null)); + for (k, v) in energy_class::json_fields(&self.class) { + o.insert(k.into(), v); + } + o.insert("sink".into(), json!(self.sink)); + o.insert("record".into(), json!(self.record)); + Value::Object(o) + } + + /// Read a budget from [`Self::to_json`]'s form and [`Self::check`] it. A member this + /// form does not define is refused: a budget is a statement about a measurement, and + /// a member nobody reads could change what it states. + pub fn from_json(v: &Value) -> Result { + const MEMBERS: [&str; 9] = [ + "joules_micro", "per", "resolution", energy_class::JSON_CLASS, energy_class::JSON_UNCERTAINTY, + energy_class::JSON_FILTERING, energy_class::JSON_CALIBRATION_REF, "sink", "record", + ]; + let o = v.as_object().ok_or(BudgetError::Malformed("not an object"))?; + if o.keys().any(|k| !MEMBERS.contains(&k.as_str())) { + return Err(BudgetError::Malformed("a member this form does not define")); + } + let joules_micro = o.get("joules_micro").and_then(Value::as_u64).ok_or(BudgetError::Malformed("joules_micro"))?; + let per = match o.get("per").and_then(Value::as_str) { + Some("frame") => BudgetUnit::Frame, + Some("second") => BudgetUnit::ContentSecond, + _ => return Err(BudgetError::Malformed("per")), + }; + let resolution = match o.get("resolution") { + Some(Value::Null) => None, + Some(Value::Array(a)) if a.len() == 2 => { + let dim = |x: &Value| x.as_u64().and_then(|n| u32::try_from(n).ok()); + match (dim(&a[0]), dim(&a[1])) { + (Some(w), Some(h)) => Some((w, h)), + _ => return Err(BudgetError::Malformed("resolution")), + } + } + _ => return Err(BudgetError::Malformed("resolution")), + }; + let label = o.get(energy_class::JSON_CLASS).and_then(Value::as_str).ok_or(BudgetError::Malformed(energy_class::JSON_CLASS))?; + let uncertainty = match o.get(energy_class::JSON_UNCERTAINTY) { + None => None, + Some(u) => { + let ppm = u.get("relative_ppm").and_then(Value::as_u64).and_then(|n| u32::try_from(n).ok()); + let win = u.get("window_us").and_then(Value::as_u64); + match (ppm, win, u.as_object().map(|m| m.len())) { + (Some(p), Some(w), Some(2)) => Some(energy_class::Uncertainty::new(p, w).map_err(BudgetError::Class)?), + _ => return Err(BudgetError::Malformed(energy_class::JSON_UNCERTAINTY)), + } + } + }; + let filtering = match o.get(energy_class::JSON_FILTERING) { + None => None, + Some(f) => Some( + f.as_str() + .and_then(energy_class::CounterFiltering::from_label) + .ok_or(BudgetError::Malformed(energy_class::JSON_FILTERING))?, + ), + }; + let calibration_ref = match o.get(energy_class::JSON_CALIBRATION_REF) { + None => None, + Some(c) => Some(c.as_str().ok_or(BudgetError::Malformed(energy_class::JSON_CALIBRATION_REF))?), + }; + let class = EnergyProvenance::from_parts(label, uncertainty, filtering, calibration_ref).map_err(BudgetError::Class)?; + let text = |k: &'static str| o.get(k).and_then(Value::as_str).map(str::to_string).ok_or(BudgetError::Malformed(k)); + let b = EnergyBudget { joules_micro, per, resolution, class, sink: text("sink")?, record: text("record")? }; + b.check()?; + Ok(b) + } +} + +/// The budgets registrations state, by capability (REGISTRY.md, *Energy budgets*): none in +/// this revision. A row is added with the registration that states it, and the registry +/// export writes it as the capability's `energy_budget`. +pub const REGISTERED: &[(&str, fn() -> EnergyBudget)] = &[]; + +/// The budget a capability's registration states, if any. +pub fn registered(capability: &str) -> Option { + REGISTERED.iter().find(|(c, _)| *c == capability).map(|(_, b)| b()) +} + +/// The budgets a sink holds: the registrations' ([`Budgets::registry`]), and any a +/// deployer adds from a published table it pins ([`Budgets::with_table`]). +#[derive(Clone, Debug, Default, PartialEq, Eq)] +pub struct Budgets { + table: BTreeMap, +} + +impl Budgets { + /// The budgets the registrations state. + pub fn registry() -> Budgets { + Budgets { table: REGISTERED.iter().map(|(c, b)| (c.to_string(), b())).collect() } + } + + /// Add a deployer's table, `{"": , …}`. Every entry must read and + /// check, or the whole table is refused with the first capability that does not: a + /// sink does not hold half a table it pinned. + pub fn with_table(mut self, table: &Value) -> Result { + let t = table.as_object().ok_or_else(|| (String::new(), BudgetError::Malformed("not an object")))?; + for (cap, v) in t { + let b = EnergyBudget::from_json(v).map_err(|e| (cap.clone(), e))?; + self.table.insert(cap.clone(), b); + } + Ok(self) + } + + /// The budget held for `capability`. + pub fn get(&self, capability: &str) -> Option<&EnergyBudget> { + self.table.get(capability) + } +} + +/// SPEC §4: a learned capability, by its replicate class (§7). +pub fn is_learned(capability: &str) -> bool { + matches!( + codecs::capability_replicate_class(capability), + Some(ReplicateClass::NeuralIntegerExact | ReplicateClass::NeuralEntropyExact | ReplicateClass::NeuralFloat | ReplicateClass::Behavioral) + ) +} + +/// What a sink's platform answers about decoding one capability, where it can ask: a +/// page's Media Capabilities `decodingInfo` for the capability's configuration, a native +/// platform's hardware-decode query. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct PlatformAnswer { + pub supported: bool, + pub power_efficient: bool, +} + +/// A capability's place in the energy order, lowest first. +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum EnergyRank { + /// The platform answers the decode supported and power-efficient. + PowerEfficient, + /// Every other capability, in the envelope's order. + Other, + /// A learned capability that carries no budget. + LearnedUnbudgeted, +} + +/// Whether a sink applies the energy order or the envelope's own. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum OrderKind { + /// SPEC §4's default. + Energy, + /// The envelope's order, by the deployer's configuration: SPEC §4 has a sink that + /// takes it say so where it reports a decode. + Manifest, +} + +/// The order a sink tries an envelope's capabilities in. +pub struct DispatchPolicy<'a> { + pub kind: OrderKind, + /// The platform's answer for a capability, where the sink can ask. + pub platform: Option<&'a dyn Fn(&str) -> Option>, + /// The budgets the sink holds; `None` is the registrations' alone. + pub budgets: Option<&'a Budgets>, +} + +impl Default for DispatchPolicy<'_> { + fn default() -> Self { + DispatchPolicy::energy() + } +} + +impl<'a> DispatchPolicy<'a> { + /// SPEC §4's default: the energy order, with the registrations' budgets and no + /// platform answer. + pub fn energy() -> DispatchPolicy<'a> { + DispatchPolicy { kind: OrderKind::Energy, platform: None, budgets: None } + } + + /// The envelope's own order, as a deployer may configure. + pub fn manifest_order() -> DispatchPolicy<'a> { + DispatchPolicy { kind: OrderKind::Manifest, platform: None, budgets: None } + } + + /// The energy order with the platform's answers. + pub fn with_platform(mut self, platform: &'a dyn Fn(&str) -> Option) -> Self { + self.platform = Some(platform); + self + } + + /// The energy order with the budgets a sink holds. + pub fn with_budgets(mut self, budgets: &'a Budgets) -> Self { + self.budgets = Some(budgets); + self + } + + fn has_budget(&self, capability: &str) -> bool { + match self.budgets { + Some(b) => b.get(capability).is_some(), + None => registered(capability).is_some(), + } + } + + /// `capability`'s rank under this policy. Under the envelope's order every capability + /// ranks [`EnergyRank::Other`]. + pub fn rank(&self, capability: &str) -> EnergyRank { + if self.kind == OrderKind::Manifest { + return EnergyRank::Other; + } + if self.platform.and_then(|p| p(capability)).is_some_and(|a| a.supported && a.power_efficient) { + return EnergyRank::PowerEfficient; + } + if is_learned(capability) && !self.has_budget(capability) { + return EnergyRank::LearnedUnbudgeted; + } + EnergyRank::Other + } + + /// The positions of `capabilities` in the order this policy tries them: by rank, the + /// envelope's order within a rank. + pub fn order<'c>(&self, capabilities: impl IntoIterator) -> Vec { + let mut ranked: Vec<(EnergyRank, usize)> = capabilities.into_iter().enumerate().map(|(i, c)| (self.rank(c), i)).collect(); + ranked.sort(); + ranked.into_iter().map(|(_, i)| i).collect() + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::energy_class::{CounterFiltering, Uncertainty}; + + fn chip() -> EnergyProvenance { + EnergyProvenance::on_chip_counter(Uncertainty { relative_ppm: 25_000, window_us: 7_000_000 }, CounterFiltering::Unknown).unwrap() + } + + fn budget() -> EnergyBudget { + EnergyBudget { joules_micro: 41_250, per: BudgetUnit::Frame, resolution: Some((1920, 1080)), class: chip(), sink: "a reference sink".into(), record: "ab".repeat(32) } + } + + #[test] + fn learned_capabilities_are_the_neural_and_behavioral_classes() { + for c in ["wai.neural.int_hyper", "wai.video.int_hyper", "wai.image.jpegai", "wai.neural.bmshj2018", "wai.semantic.clip"] { + assert!(is_learned(c), "{c}"); + } + for c in ["wai.video.av1", "wai.image.png", "wai.video.int_motion", "wai.generate.spectral", "wai.unregistered.string"] { + assert!(!is_learned(c), "{c}"); + } + } + + /// Every registered budget checks and names a learned capability (REGISTRY.md, *Energy + /// budgets*); none is registered in this revision. + #[test] + fn every_registered_budget_checks() { + for (cap, b) in REGISTERED { + assert!(is_learned(cap), "{cap}: a budget names a learned capability"); + assert_eq!(b().check(), Ok(()), "{cap}"); + assert_eq!(registered(cap), Some(b())); + } + assert!(REGISTERED.is_empty(), "no registration states a budget in this revision"); + assert_eq!(registered("wai.neural.int_hyper"), None); + } + + /// A learned capability with no budget goes after the classical one; with a budget it + /// keeps its place; a power-efficient platform answer goes first; the envelope's order + /// breaks every tie, and the manifest order keeps it whole. + #[test] + fn the_energy_order() { + let (neural, av1, png) = ("wai.neural.int_hyper", "wai.video.av1", "wai.image.png"); + let e = DispatchPolicy::energy(); + assert_eq!(e.order([neural, av1]), vec![1, 0]); + assert_eq!(e.order([av1, neural]), vec![0, 1]); + assert_eq!(e.order([neural, "wai.image.jpegai", av1, png]), vec![2, 3, 0, 1], "two learned, kept in their order, after both classical"); + assert_eq!(DispatchPolicy::manifest_order().order([neural, av1]), vec![0, 1]); + let held = Budgets::registry().with_table(&json!({ neural: budget().to_json() })).unwrap(); + assert_eq!(DispatchPolicy::energy().with_budgets(&held).order([neural, av1]), vec![0, 1]); + let hw = |c: &str| (c == av1).then_some(PlatformAnswer { supported: true, power_efficient: true }); + assert_eq!(DispatchPolicy::energy().with_budgets(&held).with_platform(&hw).order([neural, png, av1]), vec![2, 0, 1], "the hardware decode first, even above a budgeted learned one"); + let sw = |_: &str| Some(PlatformAnswer { supported: true, power_efficient: false }); + assert_eq!(DispatchPolicy::energy().with_platform(&sw).order([neural, av1]), vec![1, 0], "supported but not power-efficient is not the hardware path"); + } + + #[test] + fn a_budget_reads_back_and_refuses_what_does_not_back_it() { + let b = budget(); + assert_eq!(EnergyBudget::from_json(&b.to_json()), Ok(b.clone())); + let with = |f: &dyn Fn(&mut serde_json::Map)| { + let mut v = b.to_json(); + f(v.as_object_mut().unwrap()); + EnergyBudget::from_json(&v).map_err(|e| e.code()) + }; + assert_eq!(with(&|o| { o.insert("energy_provenance".into(), json!("HwShunt")); o.remove("energy_uncertainty"); o.remove("energy_counter_filtering"); }), Err("budget_legacy_class")); + assert_eq!(with(&|o| { o.insert("energy_provenance".into(), json!("ModelBased")); o.remove("energy_uncertainty"); o.remove("energy_counter_filtering"); }), Err("budget_not_hardware")); + assert_eq!(with(&|o| { o.insert("energy_provenance".into(), json!("Estimator")); o.remove("energy_uncertainty"); o.remove("energy_counter_filtering"); }), Err("budget_not_hardware")); + assert_eq!(with(&|o| { o.insert("joules_micro".into(), json!(0)); }), Err("budget_class_invalid")); + assert_eq!(with(&|o| { o.insert("joules_micro".into(), json!(11)); }), Err("budget_class_invalid"), "below the resolution floor"); + assert_eq!(with(&|o| { o.remove("energy_uncertainty"); }), Err("budget_class_invalid")); + assert_eq!(with(&|o| { o.insert("record".into(), json!("AB".repeat(32))); }), Err("budget_malformed")); + assert_eq!(with(&|o| { o.insert("sink".into(), json!(" ")); }), Err("budget_malformed")); + assert_eq!(with(&|o| { o.insert("per".into(), json!("decode")); }), Err("budget_malformed")); + assert_eq!(with(&|o| { o.insert("resolution".into(), json!([0, 1080])); }), Err("budget_malformed")); + assert_eq!(with(&|o| { o.insert("note".into(), json!("x")); }), Err("budget_malformed")); + // A table is held whole or not at all. + let mut bad = b.to_json(); + bad["energy_provenance"] = json!("Estimator"); + let o = bad.as_object_mut().unwrap(); + o.remove("energy_uncertainty"); + o.remove("energy_counter_filtering"); + let t = json!({ "wai.neural.int_hyper": b.to_json(), "wai.neural.elic": bad }); + assert_eq!(Budgets::registry().with_table(&t).map(|_| ()).map_err(|(c, e)| (c, e.code())), Err(("wai.neural.elic".into(), "budget_not_hardware"))); + } +} diff --git a/wai/wai-rs/src/ffi.rs b/wai/wai-rs/src/ffi.rs index 45b1c58e6..c17660909 100644 --- a/wai/wai-rs/src/ffi.rs +++ b/wai/wai-rs/src/ffi.rs @@ -551,7 +551,8 @@ pub unsafe extern "C" fn wai_envelope_unpack( /// SPEC §7.1 selection for a `WAI2` envelope at a sink that advertises the /// capabilities in `advertised_json` (a NUL-terminated JSON array of capability /// strings). Writes the index of the picked rendition to `out_index`: the first -/// entry that is selectable (never a companion, nor a capability that is not +/// entry, in SPEC §4's energy order (table order, but an entry whose capability is +/// learned and carries no energy budget after every other), that is selectable (never a companion, nor a capability that is not /// dispatchable under SPEC §4: companion-only, a candidate, a record or a /// derivation), advertised, and whose payload matches its `sha256`. This call holds no /// parameter set, so an entry whose pin applies is skipped (`prior_not_held`); a diff --git a/wai/wai-rs/src/http_binding/session.rs b/wai/wai-rs/src/http_binding/session.rs index 20ad9792f..0daae514d 100644 --- a/wai/wai-rs/src/http_binding/session.rs +++ b/wai/wai-rs/src/http_binding/session.rs @@ -139,7 +139,9 @@ pub struct Selector { impl Selector { /// A sink that advertises what `advertises` accepts, holds no parameter set, - /// applies every companion and refinement, and keeps table order. + /// applies every companion and refinement, and walks a `WAI2`'s entries in SPEC + /// §7.1's default order, SPEC §4's energy order (table order, but a learned + /// capability with no energy budget after every other). pub fn new(advertises: impl Fn(&str) -> bool + 'static) -> Self { Selector { advertises: Box::new(advertises), @@ -154,7 +156,7 @@ impl Selector { fn order_of(&self, h: &Head, m: &ManifestV2) -> Vec { match &self.order { Some(f) => f(h, m), - None => (0..m.renditions.len()).collect(), + None => crate::container::energy_order(m, &crate::container::DispatchPolicy::energy()), } } diff --git a/wai/wai-rs/src/key_log/tests.rs b/wai/wai-rs/src/key_log/tests.rs index 2929360d7..38073c607 100644 --- a/wai/wai-rs/src/key_log/tests.rs +++ b/wai/wai-rs/src/key_log/tests.rs @@ -504,7 +504,10 @@ mod pinned_sets_through_dispatch { let (listing, model) = set(); let files: std::collections::BTreeMap = [("model.wmb".to_owned(), model.as_slice())].into_iter().collect(); let held = [HeldBytes::Set { listing: &listing, files: &files }]; - w.dispatch_verified(|_| true, |c, p| pin::verify_bytes_with(c, p, &held, READABLE_FORMS, key_log).map(|_| ())) + // In the manifest's order, as a deployer may configure: these tests are about the + // pin's check 5, which the energy order would not reach while the classical + // fallback is advertised (SPEC §4, *Energy order*). + w.dispatch_with(&crate::container::DispatchPolicy::manifest_order(), |_| true, |c, p| pin::verify_bytes_with(c, p, &held, READABLE_FORMS, key_log).map(|_| ())) .map(|d| d.capability) } @@ -596,10 +599,13 @@ mod pinned_sets_through_dispatch { vec![Rendition::media(MLIC, "int_mlicpp", b"a".to_vec()).with_prior(pin()), Rendition::media(PNG, "png", b"b".to_vec())], ); let k = sink(&[digest()]); - let p = m.pick(|_| true, |c, p| pin::verify_bytes_with(c, p, &held, READABLE_FORMS, Some(&k)).map(|_| ())).unwrap(); + // In the table's order, as a deployer may configure (by default the classical png + // is walked first, and the pinned entry's check 5 is not reached). + let table = crate::container::DispatchPolicy::manifest_order(); + let p = m.pick_with(&table, |_| true, |c, p| pin::verify_bytes_with(c, p, &held, READABLE_FORMS, Some(&k)).map(|_| ())).unwrap(); assert_eq!(p.index, 1); assert!(matches!(p.skipped.as_slice(), [(0, Skip::Pin(PinRefusal::Revoked { .. }))]), "{:?}", p.skipped); - let p = m.pick(|_| true, |c, p| pin::verify_bytes_with(c, p, &held, READABLE_FORMS, Some(&sink(&[]))).map(|_| ())).unwrap(); + let p = m.pick_with(&table, |_| true, |c, p| pin::verify_bytes_with(c, p, &held, READABLE_FORMS, Some(&sink(&[]))).map(|_| ())).unwrap(); assert_eq!(p.index, 0); } } diff --git a/wai/wai-rs/src/lib.rs b/wai/wai-rs/src/lib.rs index 073498658..0e36782ef 100644 --- a/wai/wai-rs/src/lib.rs +++ b/wai/wai-rs/src/lib.rs @@ -299,6 +299,13 @@ pub mod reconstruction_binding; // dependencies, so it is compiled unconditionally. pub mod energy_class; +// The energy order of dispatch (SPEC §4, §7.1): a decode the platform answers +// power-efficient first, a learned capability with no energy budget after every other, +// the envelope's order otherwise; and the energy budget a registration or a deployer's +// pinned table states. Pure std and serde_json, compiled unconditionally, so the browser +// sink's wasm build applies the same order. +pub mod energy_order; + // The integers a measurement report carries for a figure obtained under the // bracketed protocol, the exact arithmetic every reader applies to them (the figure // they give, the least declaration they support, the derived attribution verdict), diff --git a/wai/wai-rs/tests/browser_sink.rs b/wai/wai-rs/tests/browser_sink.rs index d2a280ef8..9fd223f61 100644 --- a/wai/wai-rs/tests/browser_sink.rs +++ b/wai/wai-rs/tests/browser_sink.rs @@ -72,6 +72,12 @@ fn the_corpus_gives_every_reason() { } } } + for c in v["choices"].as_array().unwrap() { + take(&c["reason"]); + for g in c["choices"].as_array().into_iter().flatten() { + take(&g["reason"]); + } + } for c in v["constraints"].as_array().unwrap() { take(&c["reason"]); } -- 2.54.0 (Apple Git-157) From ff069acc246e149f9eb8ef2c49a4a3d79159a70c Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 13:20:38 -0400 Subject: [PATCH 29/50] joule-moq-relay: meter the relay's own energy for real, or sign the unmetered marker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A sampler reads a counter every 100 ms while the relay runs: on macOS the relay process's own CPU energy (ri_energy_nj, unprivileged; scope task), on a Linux host the operator states runs the relay alone the CPU packages' RAPL energy (scope package). A room's WMH1 record carries the advance over its span as OnChipCounter (tag 4, filtering Unknown, window the span, a declared uncertainty: interpolation and counter lag at each end, the vendor's filtering noise for a package counter, the rounding) where the counter was live across the span (energy-measurement §3.1) and the relay served that room alone; the unmetered marker otherwise, logged with why. A session summary stays unmetered: sessions share one process. [metering] energy = auto|off and dedicated_host. The corpus test's record keeps its bytes with the meter off. Tests: src/energy.rs (arithmetic, liveness, uncertainty, a made powercap tree), metering's tag-4 round trip and refusals, tests/relay_energy.rs (a measured record on a host with a counter, the marker beside another room's session and with the meter off; SKIPPED where the host has no counter, failing under JOULE_MOQ_RELAY_ENERGY_REQUIRE). CI: a macos job requires the measured figure. live-metering §8 and §4.6 say what the relay signs, and that the allocation of a hop's joules by bytes is an accounting convention. joule-moq: the mock relay's figure is documented as carrying no class. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/joule-code-conformance.yml | 26 + .../crates/joule-moq-relay/README.md | 44 +- .../crates/joule-moq-relay/relay.example.toml | 8 + .../crates/joule-moq-relay/src/config.rs | 19 + .../crates/joule-moq-relay/src/energy.rs | 592 ++++++++++++++++++ .../crates/joule-moq-relay/src/lib.rs | 15 +- .../crates/joule-moq-relay/src/metering.rs | 71 ++- .../crates/joule-moq-relay/src/relay.rs | 59 +- .../crates/joule-moq-relay/src/summary.rs | 12 +- .../joule-moq-relay/tests/relay_energy.rs | 139 ++++ .../joule-moq-relay/tests/room_metering.rs | 5 +- .../crates/joule-moq/src/endpoint.rs | 8 +- .../crates/joule-moq/src/mock.rs | 4 +- wai/extensions/live-metering.md | 29 +- 14 files changed, 997 insertions(+), 34 deletions(-) create mode 100644 joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs create mode 100644 joule-code/joule-code-rs/crates/joule-moq-relay/tests/relay_energy.rs diff --git a/.github/workflows/joule-code-conformance.yml b/.github/workflows/joule-code-conformance.yml index 5e53fe191..756d3df6b 100644 --- a/.github/workflows/joule-code-conformance.yml +++ b/.github/workflows/joule-code-conformance.yml @@ -235,6 +235,32 @@ jobs: shell: bash run: cargo test --locked -p wtransport --lib + # The relay's own energy on a counter (WAI live-metering §8): tests/relay_energy.rs on + # macOS, where the relay reads its process's per-task CPU energy unprivileged. The test + # is required here (JOULE_MOQ_RELAY_ENERGY_REQUIRE): a host with no counter fails it + # rather than skipping. On linux-arm64 above the same test prints SKIPPED, which is not a + # pass of the measurement: that VM has no counter the relay reads. + moq-relay-energy: + name: joule-moq-relay, its own energy on a counter (macos) + runs-on: macos + timeout-minutes: 45 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: The room's record carries the relay's measured energy, and the marker where it is not the room's + working-directory: joule-code/joule-code-rs + shell: bash + env: + JOULE_MOQ_RELAY_ENERGY_REQUIRE: '1' + run: | + set -euo pipefail + export PATH="$HOME/.cargo/bin:$PATH" + cargo test --locked -p joule-moq-relay --test relay_energy -- --nocapture --test-threads=1 2>&1 | tee "$RUNNER_TEMP/relay-energy.log" + grep -q "test result: ok. 3 passed; 0 failed" "$RUNNER_TEMP/relay-energy.log" + grep -q "^measured: .* scope task" "$RUNNER_TEMP/relay-energy.log" + ! grep -q "SKIPPED" "$RUNNER_TEMP/relay-energy.log" + # The WHIP and WHEP gateway. Every test is on loopback, against a relay that checks # every receipt at its door: a WHIP publisher (str0m as the client) of H.264 and Opus # whose frames a relay subscriber receives whole with every receipt verified, and DELETE diff --git a/joule-code/joule-code-rs/crates/joule-moq-relay/README.md b/joule-code/joule-code-rs/crates/joule-moq-relay/README.md index f55876b9f..91c0e4c14 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-relay/README.md +++ b/joule-code/joule-code-rs/crates/joule-moq-relay/README.md @@ -414,9 +414,11 @@ holds, for the session: room's media tracks it held, or 8 when it held none of them but other tracks of the room; - as a publisher: objects and bytes received, objects refused at the door, objects deduplicated, and the same per track; -- `relay_energy`: `{"acquisition": "unmetered", "joules_micro": 0}`. No meter backs this - relay. The 0 is the unmetered marker of WAI `extensions/energy-measurement.md` §2, never - a measurement of zero joules, and must not be read or shown as one; +- `relay_energy`: `{"acquisition": "unmetered", "joules_micro": 0}`. A session's own share + of the relay's energy is not read: the counter covers the whole relay process, in which + sessions run together (a room's record carries the relay's figure where it can, below). + The 0 is the unmetered marker of WAI `extensions/energy-measurement.md` §2, never a + measurement of zero joules, and must not be read or shown as one; - `publisher_signed`: where the door verified an object's receipt, the publisher's signed figure for producing it, summed under the acquisition class its leaf was signed with. These are the publisher's statements about the objects, not the relay's energy; @@ -446,7 +448,33 @@ track of the room otherwise. The record holds: delivered to them; - the root of its ledger, one entry for each room grant its sessions ran under (or none, for sessions with no grant): the sessions, the bytes in and out and the subscriber time; -- its energy, the unmetered marker. +- its energy over the span (below). + +**Its energy.** The relay reads a counter the host keeps, every 100 ms while it runs, and +keeps four hours of samples (`src/energy.rs`): + +- on macOS, the relay process's own CPU energy, `ri_energy_nj` from + `proc_pid_rusage(getpid(), RUSAGE_INFO_V6)`, unprivileged: scope **task**, every thread of + the relay and nothing else (not other processes, the GPU, the network interface, or work a + system service does for the relay); +- on Linux, the CPU packages' RAPL counters through powercap, scope **package**: the whole + package, every process on it. It is read only with `[metering] dedicated_host = true`, + the operator's statement that the host runs the relay alone, since it is otherwise not the + relay's energy; +- elsewhere, or with `[metering] energy = "off"`, none. + +A record carries the counter's advance over its span as `OnChipCounter`, filtering state +`Unknown`, with a declared uncertainty (the interpolation at each end of the span, the +counter's lag at each end, for a package counter the noise a filtered counter's vendor +states for the window, and the rounding to whole microjoules) over the span as its window, +when three things hold: the counter was live across the span (WAI energy-measurement §3.1: +it advanced in two consecutive intervals, in at least five, and in four of every five, over +at least 300 ms); the relay served that room alone in the span (every session that +overlapped it has ended and carried tracks of that room and of no other); and the figure is +at least one microjoule. Otherwise the record carries the unmetered marker, and the relay +logs why. A figure of the task scope covers the relay's CPU and nothing past it; a figure of +the package scope covers the whole package of a host the operator stated was the relay's +alone. As a session closes, the relay ends its subscriptions one at a time, each when its request stream fails; the moments between are classed by what the session still holds, so a @@ -624,8 +652,11 @@ SHA-256. `JOULE_MOQ_RELAY_LOG` sets the log level. - **Receipts:** the receipts track of a media track is found by the configured suffix, not by reading the catalog's `wai_receipts_track`; the relay signs no `delivery-gap` claim; datagrams at the door are checked against their group's receipts, not a property. -- **Energy:** no meter backs the relay, so its own figure is always the unmetered marker. - Attributing a metered host's energy to sessions is not done here. +- **Energy:** a room's record carries the relay's own energy only where the relay served + that room alone across the record's span; dividing the counter among rooms or sessions + that ran together is not done here, and a session's summary always carries the unmetered + marker. No figure is read on a host whose counter is neither the macOS task counter nor + the RAPL package counter of a host stated to run the relay alone. - **The DVR store:** decisions withhold from FETCH and fills, not yet from live subscriptions (a reviewed item's `held` state, live-moderation §6.3, needs the review policy); objects are checked against their receipts at a restart, and by the door as they arrive where a door @@ -648,6 +679,7 @@ All on loopback, every wait bounded: | `auth_tokens` | Tokens in SETUP, by value and by alias; UNAUTHORIZED; UNKNOWN_AUTH_TOKEN_ALIAS. | | `grant_proof` | A room grant with its proof over each transport gives its rights, each session with a challenge of its own; the grant as a bare token, a proof by another key, one for another relay and one over an earlier session's challenge each close the session with UNAUTHORIZED; a grant presented only in a request is refused it. | | `request_ids` | INVALID_REQUEST_ID for the wrong parity and for a repeat; requests in flight bounded by the stream limit. | +| `relay_energy` | On a host with a counter (macOS's task counter; on Linux, the package counter with `dedicated_host`): a room's record, after a publisher sends for over a second, carries `OnChipCounter` with its evidence, reads back, and verifies; with a second room's session in the span it carries the unmetered marker; with `energy = "off"` it carries the marker. Where the host has no counter the test says SKIPPED, and with `JOULE_MOQ_RELAY_ENERGY_REQUIRE=1` it fails instead. The figure's arithmetic, its liveness rule and its uncertainty are `src/energy.rs`'s unit tests, which run on every host. | | `dvr` | A long publish crosses the window: the oldest groups go, whole, each media group with its receipts group, within the byte budget; a window by age empties as its groups pass it. FETCH inside the window (ascending and descending), across it (an End of Unknown Range through the last evicted group, then every object, from the store and the cache together) and before it (the marker alone); every object verifies against the fetched receipts. A restart keeps the store, drops and counts a flipped byte and bytes changed with their checks made again (only the receipt finds those), removes a cut-short write, and never serves what it dropped. A room key's redaction erases its target and withholds it, a deny withholds until an allow, a redacted event leaves the object that carries it, a decision by no moderator changes nothing, and the decisions hold across a restart. Without the seek power a FETCH and a fill below the live edge are refused `seek_not_granted`, and a FETCH at the live edge is served; with it, the window. The record of the room is `WMH1` version 2 with the store's figures. A room whose objects are sealed is never kept: its first sealed group is not written, its events and receipts already held and its decisions are deleted, nothing more of it is written, and so after a restart, while a room in the clear beside it keeps its window. A room in which a session proves a minor's publishing grant is never kept from then on, likewise, while a minor's grant that publishes nothing changes nothing. A window past 24 hours is refused. | | `age_serving` | A room rated 13 by its authority, the claim on the publisher's PUBLISH, and a stranger's rating ignored: a session at no threshold is refused the subscription `below_threshold`; the performer rates groups 5 to 7 of its track 18 on group 5's object, after group 4 went out, and from then the viewer at 16 is forwarded none of them while the viewer at 18 is forwarded all; a FETCH across the span is answered up to group 4 and one from inside it is refused; a SUBSCRIBE at a live edge rated 18 is refused. | | `age_rising` | A rating that rises while a subscriber's objects wait at the relay: a viewer at 18 that reads nothing, with small QUIC windows and the relay a small send window, holds groups 0 to 9 queued when the performer rates its whole track 21 on group 10's object; once the relay holds the claim the viewer is given no more of what waited (those streams ended, `CANCELLED`) and nothing of group 10, while a viewer at 21 is given every group. | diff --git a/joule-code/joule-code-rs/crates/joule-moq-relay/relay.example.toml b/joule-code/joule-code-rs/crates/joule-moq-relay/relay.example.toml index 1c1e54119..a6ae5a29a 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-relay/relay.example.toml +++ b/joule-code/joule-code-rs/crates/joule-moq-relay/relay.example.toml @@ -61,6 +61,14 @@ hold_ms = 2000 # key_path = "/etc/joule-moq-relay/summary-seed" # out_path = "/var/log/joule-moq-relay/sessions.jsonl" +# The relay's own energy in its per-hop session records (WAI live-metering §8): "auto" +# reads the counter the host offers (macOS: the relay process's CPU energy; Linux: the CPU +# packages' RAPL energy, only with dedicated_host = true, the statement that this host runs +# the relay alone); "off" reads none, and every record carries the unmetered marker. +[metering] +energy = "auto" +dedicated_host = false + # The room grants tokens carry, for the per-hop session records of WAI rooms (an example; # not a default): a session whose SETUP presents this token runs under this grant. [[metering.grants]] diff --git a/joule-code/joule-code-rs/crates/joule-moq-relay/src/config.rs b/joule-code/joule-code-rs/crates/joule-moq-relay/src/config.rs index 308cfb836..e8ceb9790 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-relay/src/config.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-relay/src/config.rs @@ -458,6 +458,25 @@ impl DvrConfig { pub struct MeteringConfig { #[serde(default)] pub grants: Vec, + /// Whether the relay reads its own energy ([`crate::energy`]): `"auto"`, the default, + /// reads the counter the host offers; `"off"` reads none, and every record carries the + /// unmetered marker. + #[serde(default)] + pub energy: EnergyMode, + /// The operator's statement that this host runs the relay alone. Only then is a Linux + /// host's CPU package counter, which covers every process on the package, read as the + /// relay's energy. + #[serde(default)] + pub dedicated_host: bool, +} + +/// [`MeteringConfig::energy`]. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum EnergyMode { + #[default] + Auto, + Off, } #[derive(Clone, Debug, Deserialize)] diff --git a/joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs b/joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs new file mode 100644 index 000000000..532206e78 --- /dev/null +++ b/joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs @@ -0,0 +1,592 @@ +//! The relay's own energy, read from a counter the host keeps (WAI `live-metering.md` §8, +//! `energy-measurement.md` §2, §2.3, §3.1). +//! +//! A sampler thread reads one counter every [`INTERVAL`] for as long as the relay runs and +//! keeps the samples of the last [`Meter::KEEP`]. A span's figure is the counter's advance +//! across it, interpolated between the samples on either side of each end, and is a figure +//! only where the counter was **live** across it (energy-measurement §3.1: it advanced in +//! two consecutive intervals, in at least five, and in at least four of every five, over at +//! least 300 ms). Otherwise there is no figure, and the relay signs the unmetered marker. +//! +//! The counters, and what each covers: +//! +//! - **macOS: the relay process's own CPU energy** (`ri_energy_nj` from +//! `proc_pid_rusage(getpid(), RUSAGE_INFO_V6)`, public and unprivileged), scope +//! [`Scope::Task`]: every thread of the relay process, as the kernel accounts it. Not +//! other processes, not the GPU or the Neural Engine (the relay uses neither), not the +//! network interface, and not work a system service does for the relay. +//! - **Linux: the CPU packages' energy** (RAPL through powercap: every top-level zone whose +//! name is `package-`, each counter's wrap corrected at its `max_energy_range_uj`), +//! scope [`Scope::Package`]: the whole package, every process on it included. It is read +//! only where the operator states the host runs the relay alone (`dedicated_host`), since +//! it is otherwise not the relay's energy. +//! - Anywhere else, or where the counter cannot be read: none, and every figure is the +//! unmetered marker. +//! +//! Both are on-chip counters, so a figure is `OnChipCounter`, with its filtering state +//! `Unknown` (an unprivileged reader cannot see one) and a declared uncertainty +//! ([`figure`]): the interpolation at each end, the counter's lag at each end (the relay's +//! running threads' unfolded quanta for the task counter; the register's update period for +//! the package counter), the noise a filtered package counter's vendor states for the +//! window, and the rounding to whole microjoules. + +use std::collections::VecDeque; +use std::sync::atomic::{AtomicBool, Ordering}; +use std::sync::{Arc, Mutex}; +use std::time::Duration; + +/// How often the sampler reads its counter. +pub const INTERVAL: Duration = Duration::from_millis(100); +/// The shortest span a figure covers (energy-measurement §3.1). +pub const MIN_SPAN_US: u64 = 300_000; +/// The task counter folds a running thread's energy at its context switch or its quantum, +/// about 10 ms of the thread's CPU time: what a running thread can hold unfolded at a read. +pub const QUANTUM_NS: u64 = 10_000_000; +/// The package counter's register update period, about 1 ms. +pub const REGISTER_PERIOD_NS: u64 = 1_000_000; +/// The resolution floor of energy-measurement §2.3: `joules_micro × relative_ppm` at least. +pub const RESOLUTION_FLOOR: u64 = 288_676; + +/// What a counter covers. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Scope { + /// The relay process's own CPU energy. + Task, + /// The CPU packages of a host that runs the relay alone. + Package, +} + +impl Scope { + pub const fn label(self) -> &'static str { + match self { + Scope::Task => "task", + Scope::Package => "package", + } + } +} + +/// One read of a counter. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Reading { + /// The counter's energy since an arbitrary origin, in nanojoules, never decreasing: a + /// counter that wraps has its wrap corrected before it is a reading. + pub nj: u64, + /// The process's CPU time, user and system, in nanoseconds, where the counter has one. + pub cpu_ns: Option, + /// The threads of the process on a core at the read, where the counter has them. + pub running: u32, +} + +/// A counter the sampler reads. +pub trait Counter: Send + 'static { + fn scope(&self) -> Scope; + fn read(&mut self) -> Option; +} + +/// One sample: a reading and when it was taken. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Sample { + /// Microseconds since the Unix epoch. + pub unix_us: u64, + pub reading: Reading, +} + +/// A figure for a span: what [`figure`] gives where it can. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Figure { + pub joules_micro: u64, + /// The declared standard relative uncertainty, in parts per million, rounded up. + pub relative_ppm: u32, + /// The span, in microseconds. + pub window_us: u64, + pub scope: Scope, +} + +impl Figure { + /// energy-measurement §2.7's evidence after tag 4 (`OnChipCounter`): `relative_ppm` u32 + /// BE, `window_us` u64 BE, filtering `0` (`Unknown`). + pub fn evidence(&self) -> Vec { + let mut o = Vec::with_capacity(13); + o.extend_from_slice(&self.relative_ppm.to_be_bytes()); + o.extend_from_slice(&self.window_us.to_be_bytes()); + o.push(0); + o + } +} + +/// Why a span has no figure, so that its record carries the unmetered marker. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Unmetered { + /// No counter backs the relay on this host, or the configuration turns it off. + NoCounter, + /// The span is shorter than 300 ms. + SpanTooShort, + /// The samples kept do not reach both ends of the span. + NotSampled, + /// The counter was not live across the span (energy-measurement §3.1). + NotLive, + /// The figure rounds to zero microjoules: no measurement of nothing (§4 there). + Zero, + /// The declared uncertainty does not fit its field. + Uncertain, + /// The relay did other work in the span (another room's sessions, a session still + /// open), so its energy over the span is not this room's. + Shared, +} + +impl Unmetered { + pub const fn label(self) -> &'static str { + match self { + Unmetered::NoCounter => "no counter on this host", + Unmetered::SpanTooShort => "span under 300 ms", + Unmetered::NotSampled => "span outside the samples kept", + Unmetered::NotLive => "counter not live across the span", + Unmetered::Zero => "figure rounds to zero", + Unmetered::Uncertain => "uncertainty does not fit", + Unmetered::Shared => "the relay served other work in the span", + } + } +} + +/// The counter's value at `t`, interpolated between the samples either side of it, in +/// nanojoules, with the energy of the interval it falls in. `None` where no sample is at or +/// before `t`, or none at or after it. +fn at(samples: &[Sample], t: u64) -> Option<(u128, u128, usize)> { + let after = samples.iter().position(|s| s.unix_us >= t)?; + let s1 = samples[after]; + if s1.unix_us == t { + // On a sample: the interval is the one before it, or after it at the first sample. + let e = match (after.checked_sub(1).map(|i| samples[i]), samples.get(after + 1)) { + (Some(s0), _) => u128::from(s1.reading.nj - s0.reading.nj), + (None, Some(s2)) => u128::from(s2.reading.nj - s1.reading.nj), + (None, None) => 0, + }; + return Some((u128::from(s1.reading.nj), e, after)); + } + let s0 = samples[after.checked_sub(1)?]; + let (dt, dx) = (u128::from(s1.unix_us - s0.unix_us), u128::from(s1.reading.nj - s0.reading.nj)); + let v = u128::from(s0.reading.nj) + dx * u128::from(t - s0.unix_us) / dt; + Some((v, dx, after)) +} + +/// The figure for the span `[from_us, to_us)`, from samples in time order. +pub fn figure(samples: &[Sample], from_us: u64, to_us: u64, scope: Scope) -> Result { + if to_us <= from_us || to_us - from_us < MIN_SPAN_US { + return Err(Unmetered::SpanTooShort); + } + let (e0, edge0, i0) = at(samples, from_us).ok_or(Unmetered::NotSampled)?; + let (e1, edge1, i1) = at(samples, to_us).ok_or(Unmetered::NotSampled)?; + // The bracket: from the sample at or before the span's start to the one at or after its + // end. Liveness over its intervals (§3.1). + let first = if samples[i0].unix_us == from_us { i0 } else { i0 - 1 }; + let bracket = &samples[first..=i1]; + let advanced: Vec = bracket.windows(2).map(|w| w[1].reading.nj > w[0].reading.nj).collect(); + let n = advanced.len(); + let live_count = advanced.iter().filter(|a| **a).count(); + let consecutive = advanced.windows(2).any(|w| w[0] && w[1]); + if live_count < 5 || live_count * 5 < n * 4 || !consecutive { + return Err(Unmetered::NotLive); + } + let nj = e1.saturating_sub(e0); + let f = (nj + 500) / 1000; + if f == 0 { + return Err(Unmetered::Zero); + } + let f = u64::try_from(f).map_err(|_| Unmetered::Uncertain)?; + // The uncertainty, in nanojoules squared. + let sq = |x: f64| x * x; + // Interpolation: within the interval an end falls in, the counter's course is unknown, + // and the error is taken as rectangular over half that interval's energy either way. + let mut var = (sq(edge0 as f64) + sq(edge1 as f64)) / 12.0; + // The counter's lag at each end, rectangular over [0, L]. + let lag = |i: usize| -> f64 { + match scope { + Scope::Task => { + // The energy a CPU-nanosecond costs, at its highest over the bracket's + // intervals, times a quantum, for each thread on a core at the read. + let per_ns = bracket + .windows(2) + .filter_map(|w| { + let c = w[1].reading.cpu_ns?.checked_sub(w[0].reading.cpu_ns?)?; + (c >= 1_000_000).then(|| (w[1].reading.nj - w[0].reading.nj) as f64 / c as f64) + }) + .fold(nj as f64 / (to_us - from_us) as f64 / 1000.0, f64::max); + let running = samples[i].reading.running.max(samples[i.saturating_sub(1)].reading.running).max(1); + f64::from(running) * QUANTUM_NS as f64 * per_ns + } + Scope::Package => { + // The register's update period at the bracket's highest interval power. + let watts = bracket + .windows(2) + .map(|w| (w[1].reading.nj - w[0].reading.nj) as f64 / ((w[1].unix_us - w[0].unix_us).max(1) as f64 * 1000.0)) + .fold(0.0, f64::max); + REGISTER_PERIOD_NS as f64 * watts + } + } + }; + var += (sq(lag(i0)) + sq(lag(i1))) / 12.0; + if scope == Scope::Package { + // Two whole-microjoule register reads at each end (energy-measurement §2.3). + var += 2.0 * sq(1000.0 / 6f64.sqrt()); + // A package counter may be filtered (§2.4): the noise INTEL-SA-00389's guidance + // states, under 2 % at 1 s intervals and 5–15 % at 100 ms, taken at its top. + let rel = if to_us - from_us >= 1_000_000 { 0.02 } else { 0.15 }; + var += sq(rel * nj as f64); + } + // The figure's own rounding to whole microjoules. + var += sq(500.0 / 3f64.sqrt()); + let ppm = (var.sqrt() * 1e6 / (f as f64 * 1000.0)).ceil(); + let floor = RESOLUTION_FLOOR.div_ceil(f) as f64; + let ppm = ppm.max(floor); + if !ppm.is_finite() || ppm > f64::from(u32::MAX) || ppm < 1.0 { + return Err(Unmetered::Uncertain); + } + Ok(Figure { joules_micro: f, relative_ppm: ppm as u32, window_us: to_us - from_us, scope }) +} + +/// The sampler: a thread reading one counter, and the samples it keeps. +pub struct Meter { + scope: Scope, + samples: Arc>>, + stop: Arc, +} + +impl Meter { + /// How long the samples reach back: a record signed later than this after its span + /// began carries the unmetered marker. + pub const KEEP: Duration = Duration::from_secs(4 * 3600); + + /// Start sampling `counter` every `interval`. + pub fn start(mut counter: Box, interval: Duration) -> Meter { + let scope = counter.scope(); + let samples = Arc::new(Mutex::new(VecDeque::new())); + let stop = Arc::new(AtomicBool::new(false)); + let keep = (Self::KEEP.as_micros() / interval.as_micros().max(1)) as usize + 1; + let (s, halt) = (samples.clone(), stop.clone()); + std::thread::Builder::new() + .name("relay-energy".into()) + .spawn(move || { + while !halt.load(Ordering::Relaxed) { + if let Some(reading) = counter.read() { + let mut q = s.lock().unwrap(); + if q.len() >= keep { + q.pop_front(); + } + q.push_back(Sample { unix_us: now_unix_us(), reading }); + } + std::thread::sleep(interval); + } + }) + .expect("the energy sampler's thread starts"); + Meter { scope, samples, stop } + } + + /// The counter this host offers the relay: macOS's task counter, or, where `dedicated` + /// and readable, Linux's package counter. `None` elsewhere. + pub fn host(dedicated: bool) -> Option> { + #[cfg(target_os = "macos")] + { + let _ = dedicated; + macos::TaskCounter::open().map(|c| Box::new(c) as Box) + } + #[cfg(target_os = "linux")] + { + if !dedicated { + return None; + } + powercap::PackageCounter::open_in(std::path::Path::new("/sys/class/powercap")).map(|c| Box::new(c) as Box) + } + #[cfg(not(any(target_os = "macos", target_os = "linux")))] + { + let _ = dedicated; + None + } + } + + pub fn scope(&self) -> Scope { + self.scope + } + + /// The figure for `[from_us, to_us)`, Unix microseconds. + pub fn figure(&self, from_us: u64, to_us: u64) -> Result { + let q = self.samples.lock().unwrap(); + let v: Vec = q.iter().copied().collect(); + figure(&v, from_us, to_us, self.scope) + } + + /// The most recent sample's time, Unix microseconds, once there is one. + pub fn last_sample_us(&self) -> Option { + self.samples.lock().unwrap().back().map(|s| s.unix_us) + } +} + +impl Drop for Meter { + fn drop(&mut self) { + self.stop.store(true, Ordering::Relaxed); + } +} + +fn now_unix_us() -> u64 { + std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).map(|d| d.as_micros() as u64).unwrap_or(0) +} + +#[cfg(target_os = "macos")] +#[allow(unsafe_code)] +mod macos { + use super::{Counter, Reading, Scope}; + use std::os::raw::{c_int, c_void}; + + /// `RUSAGE_INFO_V6`, its size, and the offsets read: `ri_user_time`, `ri_system_time` + /// (Mach absolute time units) and `ri_energy_nj`, from `` (the struct is + /// a 16-byte UUID then 56 `uint64_t`s; the same layout `jcp-energy` reads). + const FLAVOR: c_int = 6; + const SIZE: usize = 464; + const USER_TIME: usize = 16; + const SYSTEM_TIME: usize = 24; + const ENERGY_NJ: usize = 336; + + unsafe extern "C" { + fn proc_pid_rusage(pid: c_int, flavor: c_int, buffer: *mut c_void) -> c_int; + fn proc_pidinfo(pid: c_int, flavor: c_int, arg: u64, buffer: *mut c_void, buffersize: c_int) -> c_int; + fn mach_timebase_info(info: *mut [u32; 2]) -> c_int; + fn getpid() -> c_int; + } + + #[repr(C, align(8))] + struct Info([u8; SIZE]); + + fn word(b: &[u8; SIZE], at: usize) -> u64 { + u64::from_ne_bytes(b[at..at + 8].try_into().expect("8 bytes")) + } + + /// The relay process's own CPU energy counter. + pub struct TaskCounter { + /// Mach absolute time units to nanoseconds: numer / denom. + timebase: (u64, u64), + } + + impl TaskCounter { + pub fn open() -> Option { + let mut tb = [0u32; 2]; + if unsafe { mach_timebase_info(&mut tb) } != 0 || tb[1] == 0 { + return None; + } + let mut c = TaskCounter { timebase: (u64::from(tb[0]), u64::from(tb[1])) }; + c.read()?; + Some(c) + } + + /// `pti_numrunning` of `struct proc_taskinfo` (`PROC_PIDTASKINFO`, 4): 96 bytes, the + /// running-thread count at byte 88 after eleven 64-bit and integer fields. + fn running() -> u32 { + let mut b = [0u8; 96]; + let n = unsafe { proc_pidinfo(getpid(), 4, 0, b.as_mut_ptr().cast(), 96) }; + if n != 96 { + return 1; + } + i32::from_ne_bytes(b[88..92].try_into().expect("4 bytes")).max(1) as u32 + } + } + + impl Counter for TaskCounter { + fn scope(&self) -> Scope { + Scope::Task + } + + fn read(&mut self) -> Option { + let mut info = Info([0; SIZE]); + if unsafe { proc_pid_rusage(getpid(), FLAVOR, info.0.as_mut_ptr().cast()) } != 0 { + return None; + } + let mach = word(&info.0, USER_TIME).saturating_add(word(&info.0, SYSTEM_TIME)); + let cpu_ns = (u128::from(mach) * u128::from(self.timebase.0) / u128::from(self.timebase.1)) as u64; + Some(Reading { nj: word(&info.0, ENERGY_NJ), cpu_ns: Some(cpu_ns), running: Self::running() }) + } + } +} + +/// The CPU packages' RAPL counters through powercap: built everywhere, so its tests run on +/// a tree made for them; read on Linux alone. +#[cfg_attr(not(target_os = "linux"), allow(dead_code))] +mod powercap { + use super::{Counter, Reading, Scope}; + use std::path::{Path, PathBuf}; + + /// The CPU packages' RAPL counters through powercap. + pub struct PackageCounter { + /// Per package: its `energy_uj`, its `max_energy_range_uj`, and its last raw value. + zones: Vec<(PathBuf, u64, u64)>, + /// The sum of every package's wrap-corrected advance since the counter opened, in µJ. + total_uj: u64, + } + + fn read_u64(p: &std::path::Path) -> Option { + std::fs::read_to_string(p).ok()?.trim().parse().ok() + } + + impl PackageCounter { + /// Every top-level `intel-rapl:` zone whose `name` is `package-`, each readable + /// with a known range; none if any package cannot be read, so the figure never + /// leaves a package out. + pub fn open_in(root: &Path) -> Option { + let mut zones = Vec::new(); + for e in std::fs::read_dir(root).ok()?.flatten() { + let name = e.file_name().to_string_lossy().into_owned(); + let Some(rest) = name.strip_prefix("intel-rapl:") else { continue }; + if rest.is_empty() || !rest.bytes().all(|b| b.is_ascii_digit()) { + continue; + } + let zone = std::fs::read_to_string(e.path().join("name")).ok()?; + let zone = zone.trim(); + let Some(n) = zone.strip_prefix("package-") else { continue }; + if n.is_empty() || !n.bytes().all(|b| b.is_ascii_digit()) { + continue; + } + let energy = e.path().join("energy_uj"); + let range = read_u64(&e.path().join("max_energy_range_uj")).filter(|r| *r > 0)?; + let now = read_u64(&energy)?; + zones.push((energy, range, now)); + } + if zones.is_empty() { + return None; + } + zones.sort(); + Some(PackageCounter { zones, total_uj: 0 }) + } + } + + #[cfg(test)] + mod tests { + use super::*; + + fn zone(root: &Path, dir: &str, name: &str, energy: u64, range: u64) { + let d = root.join(dir); + std::fs::create_dir_all(&d).unwrap(); + std::fs::write(d.join("name"), format!("{name}\n")).unwrap(); + std::fs::write(d.join("energy_uj"), format!("{energy}\n")).unwrap(); + std::fs::write(d.join("max_energy_range_uj"), format!("{range}\n")).unwrap(); + } + + /// Every package zone and nothing else is summed, each wrap corrected at its own + /// range; a tree with no package, or a package that cannot be read, opens nothing. + #[test] + fn packages_alone_each_wrap_corrected() { + let root = std::env::temp_dir().join(format!("relay-powercap-{}", std::process::id())); + let _ = std::fs::remove_dir_all(&root); + zone(&root, "intel-rapl:0", "package-0", 1_000, 10_000); + zone(&root, "intel-rapl:0:0", "core", 5, 10_000); + zone(&root, "intel-rapl:1", "psys", 70, 10_000); + zone(&root, "intel-rapl:2", "package-1", 9_990, 10_000); + let mut c = PackageCounter::open_in(&root).expect("two packages"); + assert_eq!(c.zones.len(), 2); + assert_eq!(c.read().unwrap().nj, 0); + std::fs::write(root.join("intel-rapl:0/energy_uj"), "1500\n").unwrap(); + std::fs::write(root.join("intel-rapl:2/energy_uj"), "20\n").unwrap(); // wrapped: 10 + 20 + std::fs::write(root.join("intel-rapl:1/energy_uj"), "99999\n").unwrap(); // psys: never read + assert_eq!(c.read().unwrap().nj, (500 + 30) * 1000); + std::fs::write(root.join("intel-rapl:0/energy_uj"), "20000\n").unwrap(); // past its range + assert_eq!(c.read(), None, "a value past its range is no reading"); + std::fs::remove_file(root.join("intel-rapl:2/energy_uj")).unwrap(); + assert!(PackageCounter::open_in(&root).is_none(), "a package that cannot be read: nothing opens"); + let empty = root.join("empty"); + std::fs::create_dir_all(empty.join("intel-rapl:1")).unwrap(); + std::fs::write(empty.join("intel-rapl:1/name"), "psys\n").unwrap(); + assert!(PackageCounter::open_in(&empty).is_none(), "no package zone"); + let _ = std::fs::remove_dir_all(&root); + } + } + + impl Counter for PackageCounter { + fn scope(&self) -> Scope { + Scope::Package + } + + fn read(&mut self) -> Option { + let mut add = 0u64; + let mut now = Vec::with_capacity(self.zones.len()); + for (p, range, last) in &self.zones { + let v = read_u64(p)?; + if v > *range { + return None; + } + add += if v >= *last { v - last } else { range - last + v }; + now.push(v); + } + for (z, v) in self.zones.iter_mut().zip(now) { + z.2 = v; + } + self.total_uj += add; + Some(Reading { nj: self.total_uj.saturating_mul(1000), cpu_ns: None, running: 1 }) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + /// Samples every 100 ms from `t0`, the counter advancing by `step(i)` nJ before sample + /// `i`, with `cpu` ns of CPU per interval and `running` threads. + fn series(t0: u64, n: usize, step: impl Fn(usize) -> u64, cpu: u64, running: u32) -> Vec { + let (mut nj, mut c) = (0u64, 0u64); + (0..n) + .map(|i| { + if i > 0 { + nj += step(i); + c += cpu; + } + Sample { unix_us: t0 + 100_000 * i as u64, reading: Reading { nj, cpu_ns: Some(c), running } } + }) + .collect() + } + + #[test] + fn a_steady_counter_gives_its_advance_with_an_uncertainty_over_the_floor() { + // 50 mJ an interval: 0.5 W over 2 s. + let s = series(1_000_000, 30, |_| 50_000_000, 20_000_000, 2); + let f = figure(&s, 1_000_000 + 250_000, 1_000_000 + 2_250_000, Scope::Task).unwrap(); + assert_eq!(f.joules_micro, 1_000_000, "the interpolated advance over 2 s"); + assert_eq!(f.window_us, 2_000_000); + assert!(f.joules_micro * u64::from(f.relative_ppm) >= RESOLUTION_FLOOR); + // Each end's interval energy (50 mJ) and two threads' quantum at 2.5 W/CPU-s each. + let want = ((2.0 * 5e7f64.powi(2) + 2.0 * (2.0 * 1e7 * 2.5f64).powi(2)) / 12.0 + (500.0f64 / 3f64.sqrt()).powi(2)).sqrt() * 1e6 / 1e9; + assert!((f64::from(f.relative_ppm) - want.ceil()).abs() <= 1.0, "{} against {}", f.relative_ppm, want.ceil()); + assert_eq!(f.evidence().len(), 13); + } + + #[test] + fn a_frozen_or_sparse_counter_is_not_live() { + let frozen = series(0, 30, |_| 0, 0, 1); + assert_eq!(figure(&frozen, 100_000, 2_100_000, Scope::Task), Err(Unmetered::NotLive)); + // A counter refreshed every fifth interval: one advance in five. + let lumpy = series(0, 30, |i| if i % 5 == 0 { 250_000_000 } else { 0 }, 0, 1); + assert_eq!(figure(&lumpy, 100_000, 2_100_000, Scope::Task), Err(Unmetered::NotLive)); + // Every other interval: two in four, under four in five. + let half = series(0, 30, |i| if i % 2 == 0 { 100_000_000 } else { 0 }, 0, 1); + assert_eq!(figure(&half, 100_000, 2_100_000, Scope::Task), Err(Unmetered::NotLive)); + } + + #[test] + fn a_span_the_samples_do_not_hold_or_too_short_has_no_figure() { + let s = series(1_000_000, 10, |_| 1_000_000, 1_000_000, 1); + assert_eq!(figure(&s, 500_000, 1_600_000, Scope::Task), Err(Unmetered::NotSampled)); + assert_eq!(figure(&s, 1_100_000, 2_000_000, Scope::Task), Err(Unmetered::NotSampled)); + assert_eq!(figure(&s, 1_100_000, 1_300_000, Scope::Task), Err(Unmetered::SpanTooShort)); + // 1 µJ an interval over 0.8 s: 8 µJ, live, and sealed with a declaration at the floor. + let f = figure(&s, 1_050_000, 1_850_000, Scope::Task).unwrap(); + assert_eq!(f.joules_micro, 8); + assert!(8 * u64::from(f.relative_ppm) >= RESOLUTION_FLOOR); + // Less than half a microjoule in all: no figure, never a figure of zero. + let tiny = series(0, 12, |_| 40, 0, 1); + assert_eq!(figure(&tiny, 0, 1_000_000, Scope::Task), Err(Unmetered::Zero)); + } + + #[test] + fn a_package_figure_declares_the_filtering_noise_for_its_window() { + let s = series(0, 40, |_| 2_500_000_000, 0, 1); // 25 W + let long = figure(&s, 0, 2_000_000, Scope::Package).unwrap(); + assert!(long.relative_ppm >= 20_000, "{}", long.relative_ppm); + let short = figure(&s, 0, 500_000, Scope::Package).unwrap(); + assert!(short.relative_ppm >= 150_000, "{}", short.relative_ppm); + } +} diff --git a/joule-code/joule-code-rs/crates/joule-moq-relay/src/lib.rs b/joule-code/joule-code-rs/crates/joule-moq-relay/src/lib.rs index 7c3ae6d08..10ecac92a 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-relay/src/lib.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-relay/src/lib.rs @@ -18,13 +18,19 @@ //! - **Receipts at the door** ([`door`]): optional per namespace, with `joule-moq`'s //! verifier. //! - **Session summaries** ([`summary`]): bytes and objects per subscriber, signed by the -//! relay at session end; its own energy is reported as unmetered, since no meter backs -//! it. +//! relay at session end; a session's own energy is reported as unmetered, since sessions +//! run together in one process and a counter cannot tell their shares apart. +//! - **Its own energy** ([`energy`]): a counter the host keeps, sampled while the relay +//! runs: macOS's per-task CPU energy of the relay process, or, on a Linux host the +//! operator states runs the relay alone, the CPU packages' RAPL energy; `OnChipCounter` +//! with its scope and declared uncertainty, or the unmetered marker where it is not live +//! or not the room's. //! - **Per-hop session records** ([`metering`]): WAI's `WMH1` record of a room //! (`live-metering.md` §3), signed by the relay from its summaries: per track the //! objects and bytes in and out and the drops by reason, its subscribers' time by layer -//! class, the events it delivered, and a ledger of the room grants its sessions ran under. -//! With a DVR store it signs version 2, with the store's figures (§3.9). +//! class, the events it delivered, a ledger of the room grants its sessions ran under, and +//! its own energy over the span where it served that room alone. With a DVR store it +//! signs version 2, with the store's figures (§3.9). //! - **DVR** ([`dvr`]): a window of the tracks under each configured prefix, with their //! receipts, on disk, served to FETCH below the live edge (WAI `live-recording.md` §8): //! evicted oldest first by whole group, kept across a restart with every object checked @@ -45,6 +51,7 @@ pub mod client; pub mod config; pub mod door; pub mod dvr; +pub mod energy; pub mod events; pub mod floor; pub mod metering; diff --git a/joule-code/joule-code-rs/crates/joule-moq-relay/src/metering.rs b/joule-code/joule-code-rs/crates/joule-moq-relay/src/metering.rs index 415273ce6..eadb7fcfb 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-relay/src/metering.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-relay/src/metering.rs @@ -5,9 +5,12 @@ //! the room id), the objects and bytes in and out, the objects dropped by reason with those //! whose receipts it forwarded; its subscriber sessions' time by layer class, from the //! subscriptions each held; the events it delivered; and a ledger, one entry for each room -//! grant its sessions ran under, by the token each presented in SETUP. Its own energy is the -//! unmetered marker, since no meter backs this relay. It connects to no other hop, so every -//! session of it that subscribes is a subscriber session (§3.3 there). +//! grant its sessions ran under, by the token each presented in SETUP. Its own energy is read +//! from the counter the host keeps ([`crate::energy`]): `OnChipCounter` with its declared +//! uncertainty, where the counter was live across the record's span and the relay served +//! that room alone in it; the unmetered marker otherwise, never a figure of zero. It +//! connects to no other hop, so every session of it that subscribes is a subscriber session +//! (§3.3 there). //! //! A relay that keeps a DVR store signs version 2 of the record, which adds the store's //! figures for the room over the span (§3.9): the objects and bytes it served from the @@ -200,7 +203,11 @@ pub struct HopRecord { pub end: u64, /// 0 with class tag 0: the unmetered marker. pub joules: u64, + /// energy-measurement §2.7's tag: 0 (the unmetered marker) or 4 (`OnChipCounter`). pub class_tag: u8, + /// The tag's evidence as §2.7 writes it: none for tag 0; for tag 4, `relative_ppm` u32 + /// BE, `window_us` u64 BE and the filtering byte. + pub class_evidence: Vec, pub entries: Vec, pub sessions: u32, pub subscriber_us: [u64; CLASSES], @@ -224,6 +231,7 @@ impl HopRecord { o.extend_from_slice(&self.end.to_le_bytes()); o.extend_from_slice(&self.joules.to_le_bytes()); o.push(self.class_tag); + o.extend_from_slice(&self.class_evidence); o.extend_from_slice(&(self.entries.len() as u16).to_le_bytes()); for e in &self.entries { o.push(e.kind); @@ -276,6 +284,15 @@ impl HopRecord { self } + /// The record with the relay's own energy over its span, `OnChipCounter` with its + /// evidence, signed again with `key`. + pub fn with_energy(mut self, f: &crate::energy::Figure, key: &SigningKey) -> HopRecord { + self.joules = f.joules_micro; + self.class_tag = 4; + self.class_evidence = f.evidence(); + self.sign(key) + } + /// Check the signature under the key the record names. pub fn verify(&self) -> Result<(), String> { let key = VerifyingKey::from_bytes(&self.hop).map_err(|e| e.to_string())?; @@ -284,7 +301,8 @@ impl HopRecord { key.verify(&m, &Signature::from_bytes(&self.sig)).map_err(|e| e.to_string()) } - /// Read a record this module wrote: an unmetered one, as the relay signs. + /// Read a record this module wrote: unmetered, or `OnChipCounter` with its evidence + /// (live-metering §3.6's rules on the class), as the relay signs. pub fn decode(b: &[u8], ledger: &[u8]) -> Result { let mut p = 0usize; let mut take = |n: usize| -> Result<&[u8], String> { @@ -305,9 +323,20 @@ impl HopRecord { let role = take(1)?[0]; let (start, end, joules) = (u64_of(take(8)?), u64_of(take(8)?), u64_of(take(8)?)); let class_tag = take(1)?[0]; - if class_tag != 0 { - return Err("this reader reads the unmetered marker alone".into()); - } + let class_evidence = match class_tag { + 0 if joules == 0 => Vec::new(), + 4 if joules > 0 => { + let e = take(13)?.to_vec(); + let ppm = u64::from(u32::from_be_bytes(e[..4].try_into().expect("4"))); + let window = u64::from_be_bytes(e[4..12].try_into().expect("8")); + if ppm == 0 || window == 0 || e[12] > 2 || u128::from(joules) * u128::from(ppm) < u128::from(crate::energy::RESOLUTION_FLOOR) { + return Err("an OnChipCounter class whose evidence breaks live-metering §3.6".into()); + } + e + } + 0 | 4 => return Err("the tag is 0 exactly when the figure is 0".into()), + _ => return Err("this reader reads the unmetered marker or OnChipCounter, as this relay signs".into()), + }; let n = u16::from_le_bytes(take(2)?.try_into().expect("2")) as usize; let mut entries = Vec::with_capacity(n); for _ in 0..n { @@ -363,7 +392,7 @@ impl HopRecord { } }) .collect(); - let r = HopRecord { room, hop, role, start, end, joules, class_tag, entries, sessions, subscriber_us, events, ledger, dvr, sig }; + let r = HopRecord { room, hop, role, start, end, joules, class_tag, class_evidence, entries, sessions, subscriber_us, events, ledger, dvr, sig }; if r.ledger_root() != ledger_root { return Err("the ledger is not the one the record signs".into()); } @@ -471,6 +500,7 @@ pub fn hop_record(summaries: &[SessionSummary], room: [u8; 32], t0_unix_us: u64, end, joules: 0, class_tag: 0, + class_evidence: Vec::new(), entries: entries.into_values().collect(), sessions, subscriber_us, @@ -501,6 +531,31 @@ mod tests { assert_eq!(layer_class([format!("{room}-{owner}-events--0")].iter().map(String::as_str)), NO_MEDIA); } + /// A record with the relay's measured energy carries tag 4 and its evidence, reads + /// back, and verifies; the reader refuses what live-metering §3.6 refuses of the class. + #[test] + fn a_measured_record_reads_back_and_a_bad_class_does_not() { + let key = SigningKey::from_bytes(&[3; 32]); + let rec = hop_record(&[], [9; 32], 0, &key, None); + assert_eq!((rec.joules, rec.class_tag, rec.class_evidence.len()), (0, 0, 0)); + let f = crate::energy::Figure { joules_micro: 52_000, relative_ppm: 41_000, window_us: 2_000_000, scope: crate::energy::Scope::Task }; + let m = rec.clone().with_energy(&f, &key); + m.verify().unwrap(); + assert_eq!(HopRecord::decode(&m.to_bytes(), &m.ledger_bytes()).unwrap(), m); + assert_eq!(m.to_bytes().len(), rec.to_bytes().len() + 13); + let bad = |edit: &dyn Fn(&mut HopRecord)| { + let mut r = m.clone(); + edit(&mut r); + HopRecord::decode(&r.sign(&key).to_bytes(), &m.ledger_bytes()) + }; + assert!(bad(&|r| r.class_evidence[..4].copy_from_slice(&5u32.to_be_bytes())).is_err(), "below the resolution floor"); + assert!(bad(&|r| r.class_evidence[4..12].copy_from_slice(&0u64.to_be_bytes())).is_err(), "no window"); + assert!(bad(&|r| r.class_evidence[12] = 3).is_err(), "a filtering byte past 2"); + assert!(bad(&|r| r.joules = 0).is_err(), "a class beside zero"); + assert!(bad(&|r| { r.class_tag = 1; r.class_evidence.clear(); }).is_err(), "HwShunt"); + assert!(bad(&|r| { r.class_tag = 0; r.class_evidence.clear(); }).is_err(), "a figure with no class"); + } + /// The root is RFC 6962's: two leaves are one node. #[test] fn the_ledger_root() { diff --git a/joule-code/joule-code-rs/crates/joule-moq-relay/src/relay.rs b/joule-code/joule-code-rs/crates/joule-moq-relay/src/relay.rs index f7d9e7fe2..10c692c4b 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-relay/src/relay.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-relay/src/relay.rs @@ -342,6 +342,9 @@ pub struct Inner { pub budget: Mutex, pub ids: AtomicU64, pub summaries: Mutex>, + /// The sampler of the relay's own energy, where the host offers a counter and the + /// configuration reads it. + pub meter: Option, pub going_away: AtomicBool, pub stats: Stats, /// Woken when a publisher or a session appears or leaves. @@ -419,6 +422,10 @@ impl Relay { } None => None, }; + let meter = match cfg.metering.energy { + crate::config::EnergyMode::Off => None, + crate::config::EnergyMode::Auto => crate::energy::Meter::host(cfg.metering.dedicated_host).map(|c| crate::energy::Meter::start(c, crate::energy::INTERVAL)), + }; Ok(Relay { inner: Arc::new(Inner { cfg, @@ -433,6 +440,7 @@ impl Relay { budget: Mutex::new(budget), ids: AtomicU64::new(1), summaries: Mutex::new(Vec::new()), + meter, going_away: AtomicBool::new(false), stats: Stats::default(), change: Notify::new(), @@ -497,11 +505,58 @@ impl Relay { /// The relay's per-hop session record of `room` over the sessions that ended (WAI /// live-metering §3), on the room clock of `t0_unix_us`, signed with the relay's key. /// A relay that keeps a DVR store signs version 2, with the store's figures for the - /// room over the record's span (§3.9). + /// room over the record's span (§3.9). Its energy is [`Self::record_energy`]'s figure, + /// or the unmetered marker. pub fn hop_record(&self, room: [u8; 32], t0_unix_us: u64) -> crate::metering::HopRecord { let summaries: Vec<_> = self.summaries().into_iter().map(|s| s.summary).collect(); let figures = self.inner.dvr.as_ref().map(|d| move |from: u64, to: u64| d.figures(room, from, to)); - crate::metering::hop_record(&summaries, room, t0_unix_us, &self.inner.key, figures.as_ref().map(|f| f as &dyn Fn(u64, u64) -> crate::dvr::RoomFigures)) + let rec = crate::metering::hop_record(&summaries, room, t0_unix_us, &self.inner.key, figures.as_ref().map(|f| f as &dyn Fn(u64, u64) -> crate::dvr::RoomFigures)); + match self.record_energy(&summaries, room, t0_unix_us + rec.start, t0_unix_us + rec.end) { + Ok(f) => rec.with_energy(&f, &self.inner.key), + Err(why) => { + tracing::info!(room = hex::encode(room), why = why.label(), "the room's record carries the unmetered marker"); + rec + } + } + } + + /// The relay's own energy over `[from_us, to_us)` (Unix microseconds), as a room's + /// record may carry it: the meter's figure ([`crate::energy`]), where the relay has a + /// meter and served that room alone across the span: every session that overlapped the + /// span has ended, and carried tracks of `room` and of no other room or none. + pub fn record_energy(&self, summaries: &[crate::summary::SessionSummary], room: [u8; 32], from_us: u64, to_us: u64) -> Result { + let meter = self.inner.meter.as_ref().ok_or(crate::energy::Unmetered::NoCounter)?; + let room_hex = hex::encode(room); + let overlaps = |open_ms: u64, closed_ms: Option| open_ms * 1000 < to_us && closed_ms.is_none_or(|c| (c + 1) * 1000 > from_us); + let this_room_only = |s: &crate::summary::SessionSummary| { + let t = &s.tally; + let names = t.subscriber.tracks.keys().chain(t.publisher.tracks.keys()); + let mut any = false; + for n in names { + match crate::metering::classify(n) { + Some((r, _)) if r == room => any = true, + _ => return false, + } + } + t.subscriber.layer_spans.iter().all(|x| x.room == room_hex) && (any || !t.subscriber.layer_spans.is_empty()) + }; + if summaries.iter().any(|s| overlaps(s.opened_unix_ms, Some(s.closed_unix_ms)) && !this_room_only(s)) { + return Err(crate::energy::Unmetered::Shared); + } + if self.inner.state.lock().unwrap().sessions.values().any(|c| overlaps(c.opened_unix_ms, None)) { + return Err(crate::energy::Unmetered::Shared); + } + meter.figure(from_us, to_us) + } + + /// Where the relay reads its own energy: the counter's scope, or `None`. + pub fn energy_scope(&self) -> Option { + self.inner.meter.as_ref().map(crate::energy::Meter::scope) + } + + /// The time of the energy sampler's latest sample, Unix microseconds, once it has one. + pub fn energy_sampled_until(&self) -> Option { + self.inner.meter.as_ref().and_then(crate::energy::Meter::last_sample_us) } pub fn stats(&self) -> RelayStats { diff --git a/joule-code/joule-code-rs/crates/joule-moq-relay/src/summary.rs b/joule-code/joule-code-rs/crates/joule-moq-relay/src/summary.rs index ed104823b..7f975ab75 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-relay/src/summary.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-relay/src/summary.rs @@ -4,9 +4,12 @@ //! The summary is relay-scoped telemetry (WAI `jwp-receipts.md` §4.2: "local to the relay //! and MUST NOT be conflated with publisher-issued receipts"), signed by the relay's own //! key. It counts bytes and objects. It states energy only as its acquisition class -//! allows: no meter backs this relay, so its own figure is the unmetered marker, 0 with -//! the class `unmetered`, which a reader must not present as zero joules (WAI -//! `energy-measurement.md` §2). Where the door verified an object's receipt, the +//! allows: a session's own share of the relay's energy is the unmetered marker, 0 with the +//! class `unmetered`, which a reader must not present as zero joules (WAI +//! `energy-measurement.md` §2). The relay's counter ([`crate::energy`]) reads the whole +//! process, and sessions run together in it, so no read of it is one session's; a room's +//! record carries the relay's figure where the relay served that room alone +//! ([`crate::relay::Relay::hop_record`]). Where the door verified an object's receipt, the //! publisher's signed figure for producing that object is summed under the class it was //! signed with, and labelled as the publisher's: it is not the relay's energy. //! @@ -243,7 +246,8 @@ impl Tally { /// The relay's own energy for the session, as its acquisition class allows. #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct RelayEnergy { - /// `unmetered`: no meter backs the figure. + /// `unmetered`: a session's share of the relay process's energy is not read, since + /// sessions run together and the counter cannot tell their shares apart. pub acquisition: String, /// 0 is the unmetered marker, never a measurement of zero joules. pub joules_micro: u64, diff --git a/joule-code/joule-code-rs/crates/joule-moq-relay/tests/relay_energy.rs b/joule-code/joule-code-rs/crates/joule-moq-relay/tests/relay_energy.rs new file mode 100644 index 000000000..870631e32 --- /dev/null +++ b/joule-code/joule-code-rs/crates/joule-moq-relay/tests/relay_energy.rs @@ -0,0 +1,139 @@ +//! The relay's own energy in a room's per-hop session record (WAI `live-metering.md` §8, +//! `energy-measurement.md` §2.3, §3.1), on a host whose counter the relay reads: macOS's task +//! counter, or Linux's package counter where the configuration states the host runs the +//! relay alone (this test states it, to read the counter; the record is not published). +//! +//! A publisher sends a room's video for over a second to one subscriber. The record then +//! carries `OnChipCounter` with its evidence, reads back and verifies; the same room beside a +//! second room's session carries the unmetered marker, as does a relay whose configuration +//! turns the meter off. Where the host offers no counter (a container, another platform) the +//! test prints SKIPPED and passes only if `JOULE_MOQ_RELAY_ENERGY_REQUIRE` is unset: a skip is +//! never a pass where the counter is required. + +mod common; + +use common::*; +use joule_moq_relay::config::EnergyMode; +use joule_moq_relay::metering::HopRecord; +use std::time::Duration; + +const ROOM: &str = "5f3c2b1a09f8e7d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a39281706f5e"; +const OTHER_ROOM: &str = "a0b1c2d3e4f5061728394a5b6c7d8e9fa0b1c2d3e4f5061728394a5b6c7d8e9f"; +const GROUPS: u64 = 40; + +fn key(i: u8) -> ed25519_dalek::SigningKey { + ed25519_dalek::SigningKey::from_bytes(&[i; 32]) +} + +fn required() -> bool { + std::env::var_os("JOULE_MOQ_RELAY_ENERGY_REQUIRE").is_some() +} + +/// A publisher of `room` sends `GROUPS` groups over about 1.6 s to one subscriber; with +/// `other`, a second room's publisher stays connected across it. Both close before the +/// record is signed, and the sampler has passed the span's end. +async fn session(server: &joule_moq_relay::RelayServer, other: bool) -> HopRecord { + let relay = server.relay().clone(); + assert!(until(STEP, || relay.energy_sampled_until().is_some()).await, "the sampler has a first sample"); + let k = key(7); + let owner = hex::encode(k.verifying_key().to_bytes()); + let t = Tracks::new(ns(&[ROOM, &owner, "video"]), "0", 10, 1, 0); + let (p, _ep) = connect(server, Via::Quic, Default::default()).await; + let _pt = publish_tracks(&p, &t, None).await; + let second = if other { + let (q, eq) = connect(server, Via::Quic, Default::default()).await; + let u = Tracks::new(ns(&[OTHER_ROOM, &owner, "video"]), "0", 20, 2, 0); + let pu = publish_tracks(&q, &u, None).await; + Some((q, eq, pu)) + } else { + None + }; + let (s, _es) = connect(server, Via::Quic, Default::default()).await; + let next = joule_moq::draft22::Parameters::new().with(joule_moq::draft22::Parameter::LocationFilter(joule_moq::draft22::LocationFilter::NextObject)); + let v = subscribe_both(&s, &t, next).await; + let publish = async { + for g in 0..GROUPS { + publish_group(&p, &k, &t, g, &payload("e", g, 4096)).await; + tokio::time::sleep(Duration::from_millis(40)).await; + } + }; + let read = collect_concurrent(&s, STEP, Duration::from_secs(1), |got| got.iter().filter(|x| x.header.track_alias == v.media_alias).count() as u64 == GROUPS); + let ((), got) = tokio::join!(publish, read); + assert_eq!(got.iter().filter(|x| x.header.track_alias == v.media_alias).count() as u64, GROUPS, "every group reached the subscriber"); + s.close(0, "done"); + p.close(0, "done"); + let want = if other { 3 } else { 2 }; + if let Some((q, _, _)) = &second { + q.close(0, "done"); + } + assert!(until(STEP, || relay.summaries().len() >= want).await, "the sessions' summaries"); + let closed_us = relay.summaries().iter().map(|s| (s.summary.closed_unix_ms + 1) * 1000).max().unwrap(); + assert!(until(STEP, || relay.energy_sampled_until().is_some_and(|t| t > closed_us + 200_000)).await, "the sampler passed the span's end"); + let room: [u8; 32] = hex::decode(ROOM).unwrap().try_into().unwrap(); + relay.hop_record(room, 0) +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn a_room_served_alone_carries_the_relays_own_energy() { + let server = relay(|c| c.metering.dedicated_host = true).await; + let Some(scope) = server.relay().energy_scope() else { + assert!(!required(), "JOULE_MOQ_RELAY_ENERGY_REQUIRE is set, and this host offers the relay no counter"); + println!("SKIPPED: this host offers the relay no energy counter (macOS task counter, or a readable RAPL package counter); nothing was measured"); + server.shutdown().await; + return; + }; + let rec = tokio::time::timeout(Duration::from_secs(120), session(&server, false)).await.expect("in time"); + let bytes = rec.to_bytes(); + let back = HopRecord::decode(&bytes, &rec.ledger_bytes()).expect("the record reads back"); + assert_eq!(back, rec); + rec.verify().expect("the record verifies under the relay's key"); + assert_eq!(rec.class_tag, 4, "OnChipCounter: the counter was live, the room alone ({} µJ)", rec.joules); + assert!(rec.joules > 0); + let ppm = u32::from_be_bytes(rec.class_evidence[..4].try_into().unwrap()); + let window = u64::from_be_bytes(rec.class_evidence[4..12].try_into().unwrap()); + assert_eq!(rec.class_evidence[12], 0, "filtering Unknown: an unprivileged reader cannot see one"); + assert_eq!(window, rec.end - rec.start, "the window is the record's span"); + assert!(rec.joules * u64::from(ppm) >= 288_676, "the resolution floor"); + assert_eq!(bytes.len(), 281 + 13 + 90 * rec.entries.len(), "tag 4's evidence, and nothing per object or per viewer"); + println!( + "measured: {} µJ over {} µs, scope {}, relative standard uncertainty {} ppm ({:.3} W)", + rec.joules, + window, + scope.label(), + ppm, + rec.joules as f64 / window as f64 + ); + server.shutdown().await; +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn a_room_beside_another_rooms_session_carries_the_unmetered_marker() { + let server = relay(|c| c.metering.dedicated_host = true).await; + if server.relay().energy_scope().is_none() { + assert!(!required(), "JOULE_MOQ_RELAY_ENERGY_REQUIRE is set, and this host offers the relay no counter"); + println!("SKIPPED: this host offers the relay no energy counter; nothing was measured"); + server.shutdown().await; + return; + } + let rec = tokio::time::timeout(Duration::from_secs(120), session(&server, true)).await.expect("in time"); + assert_eq!((rec.joules, rec.class_tag, rec.class_evidence.len()), (0, 0, 0), "another room's work in the span: the relay's energy is not this room's"); + server.shutdown().await; +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn a_relay_whose_meter_is_off_carries_the_unmetered_marker() { + let server = relay(|c| c.metering.energy = EnergyMode::Off).await; + assert!(server.relay().energy_scope().is_none()); + let relay = server.relay().clone(); + let k = key(9); + let t = Tracks::new(ns(&[ROOM, &hex::encode(k.verifying_key().to_bytes()), "video"]), "0", 10, 1, 0); + let (p, _ep) = connect(&server, Via::Quic, Default::default()).await; + let _pt = publish_tracks(&p, &t, None).await; + publish_group(&p, &k, &t, 0, &payload("e", 0, 64)).await; + p.close(0, "done"); + assert!(until(STEP, || !relay.summaries().is_empty()).await); + let rec = relay.hop_record(hex::decode(ROOM).unwrap().try_into().unwrap(), 0); + assert_eq!((rec.joules, rec.class_tag), (0, 0)); + assert_eq!(relay.summaries()[0].summary.relay_energy.acquisition, "unmetered", "a session's share is never read"); + server.shutdown().await; +} diff --git a/joule-code/joule-code-rs/crates/joule-moq-relay/tests/room_metering.rs b/joule-code/joule-code-rs/crates/joule-moq-relay/tests/room_metering.rs index 2e74838af..fc193964b 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-relay/tests/room_metering.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-relay/tests/room_metering.rs @@ -83,6 +83,9 @@ async fn run() { let server = relay(|c| { c.limits.quic_send_window_bytes = 64 * 1024; c.summary.key_path = Some(seed_path.clone()); + // The corpus holds this record, so its bytes must not depend on the host: its energy + // is the unmetered marker here, and tests/relay_energy.rs reads the meter. + c.metering.energy = joule_moq_relay::config::EnergyMode::Off; c.metering.grants = GRANTS .iter() .map(|&(i, g, jc, fc, cur)| MeteredGrant { @@ -178,7 +181,7 @@ async fn run() { assert_eq!(back, rec); rec.verify().expect("the record verifies under the relay's key"); assert_eq!(rec.hop, key(RELAY).verifying_key().to_bytes()); - assert_eq!((rec.joules, rec.class_tag), (0, 0), "the unmetered marker: no meter backs this relay"); + assert_eq!((rec.joules, rec.class_tag), (0, 0), "the unmetered marker: the meter is off for the corpus's record"); assert_eq!(rec.to_bytes().len(), 281 + 90 * rec.entries.len(), "no class evidence, and nothing per object or per viewer"); assert!(rec.start < rec.end); diff --git a/joule-code/joule-code-rs/crates/joule-moq/src/endpoint.rs b/joule-code/joule-code-rs/crates/joule-moq/src/endpoint.rs index 7f73e2726..df3717859 100644 --- a/joule-code/joule-code-rs/crates/joule-moq/src/endpoint.rs +++ b/joule-code/joule-code-rs/crates/joule-moq/src/endpoint.rs @@ -123,7 +123,11 @@ pub trait Relay: MoqEndpoint { /// Unregister a downstream by handle. async fn unregister_downstream(&mut self, handle: u64) -> MoqResult<()>; - /// Joules consumed by this relay forwarding objects (used for joule - /// receipts on egress). + /// Microjoules this relay has accounted for forwarding objects. `0` is the + /// unmetered marker (WAI energy-measurement §2), never a figure of zero joules, + /// and a caller shows it as unmetered. The figure carries no acquisition class: + /// it is what the implementation was told to account (`MockRelay::meter_egress`), + /// not a reading, and is never presented as a measurement. A relay's measured + /// energy, with its class, is `joule-moq-relay`'s record of a room. fn relay_joules_consumed_micro(&self) -> u64; } diff --git a/joule-code/joule-code-rs/crates/joule-moq/src/mock.rs b/joule-code/joule-code-rs/crates/joule-moq/src/mock.rs index 3aec100e7..605fd3556 100644 --- a/joule-code/joule-code-rs/crates/joule-moq/src/mock.rs +++ b/joule-code/joule-code-rs/crates/joule-moq/src/mock.rs @@ -623,7 +623,9 @@ impl MockRelay { } } - /// Account for joules consumed forwarding an object. + /// Account `joules` µJ to forwarding an object: a figure the caller supplies, with + /// no class and no reading behind it. Nothing in this crate calls it, so the mock's + /// figure stays the unmetered marker unless a test supplies one. pub fn meter_egress(&self, joules: u64) { self.joules_consumed.fetch_add(joules, Ordering::SeqCst); } diff --git a/wai/extensions/live-metering.md b/wai/extensions/live-metering.md index 18c655a7b..862060b64 100644 --- a/wai/extensions/live-metering.md +++ b/wai/extensions/live-metering.md @@ -425,7 +425,10 @@ and every grant that was in effect for a present principal at some instant of th class, nothing when *B* is 0, and the remainder is attributed to no grant. An attributed share is an allocation of a hop's figure, not a measurement of the grant's use, and keeps the figure's class; it is **unmetered** for the grant when an unmetered record's entry for - it moved bytes; + it moved bytes. The allocation by bytes is an accounting convention: a hop's energy over + its span is largely what running the hop costs, not a cost per byte, so a grant that moves + fewer bytes is attributed a smaller share of the same figure and does not lower the hop's + energy by that share, and nothing here states what the network between hops spent; - **funds**, where the tariff's `currency` is the grant's: ⌈*N* / 10^12⌉ minor units of it, with *N* = `publisher_us` × *p*pub + Σ*c* `subscriber_us`[*c*] × *p*sub,*c* + `composition_us` × *p*comp + `recorded_us` × @@ -446,7 +449,9 @@ no tariff, past, within for the funds ceiling: A joule ceiling is one number, and holding a use to it adds what each hop spent, whatever its class. The verdict is that comparison; the sum it compares is stated nowhere as a -figure, and the attributed joules stay per class. +figure, and the attributed joules stay per class. A joule ceiling is held against the +attributed shares, so it caps what is accounted to a grant; it is not a statement that the +grant's use changed by that much what the hops, or the network, spent. A grant's **consumption entry** is 198 bytes: `grant` (32), `joules_ceiling` (8), `funds_ceiling` (8), `currency` (3), `publisher_us` (8), `subscriber_us` (9 × 8), @@ -687,10 +692,22 @@ room its sessions carried, the objects and bytes in and out, the drops by reason receipts forwarded, its subscriber sessions' time by layer class from the subscriptions each held, the events it delivered, and a ledger from the room grants its tokens map to. It signs version 2 when it keeps a DVR store, with that store's figures (§3.9), and version 1 -otherwise. Its own energy is the unmetered marker, since no meter backs it. It connects to -no other hop, so every session it serves that subscribes is a subscriber session. Its record -recomputes from its summaries, which its own test checks, and the corpus holds a record it -signed in that test (§10). +otherwise. Its own energy is read from a counter the host keeps, sampled every 100 ms while +the relay runs: on macOS the relay process's own CPU energy (`ri_energy_nj`, unprivileged; +scope **task**: every thread of the relay and nothing else), and on a Linux host the +operator states runs the relay alone, the CPU packages' RAPL energy (scope **package**). A +record carries the counter's advance over its span as `OnChipCounter` (tag 4), filtering +state `Unknown`, `window_us` the span, and a declared uncertainty covering the interpolation +at each end of the span, the counter's lag at each end, for the package counter the noise +its vendor states for a filtered counter at that window, and the rounding to whole +microjoules; and only where the counter was live across the span (energy-measurement §3.1) +and the relay served that room alone in it. Otherwise, and where the host offers no counter +or the configuration turns it off, the record carries the unmetered marker. A session's own +summary carries the unmetered marker always, since sessions run together in one process +and the counter cannot tell their shares apart. It connects to no other hop, so every +session it serves that subscribes is a subscriber session. Its record recomputes from its +summaries, which its own test checks, and the corpus holds a record it signed in that test +with its meter off (§10), so that its bytes do not depend on the host. ## 9. Reasons -- 2.54.0 (Apple Git-157) From cdbefd67178c86a75484998b3ca8b8d454e45452 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 13:45:32 -0400 Subject: [PATCH 30/50] wai-ops-gpu: WGSL's integer semantics on every adapter before it runs a graph A suite of every integer operation WGSL defines on i32, u32 and their two-component vectors, at the run-time cases MSL, HLSL and SPIR-V leave open: wrapping arithmetic and negation, division and remainder by zero and of the most negative i32 by -1, shift amounts 0..40 and past them, clamp bounds in and out of order, bit fields at and past the word. Each result is written from the WGSL text (semantics::reference), never from a shader. Discovery runs it after the arithmetic probe and refuses an adapter that differs on a guarded case. The cases no kernel reaches (a shift of 32 or more, clamp bounds out of order) are marked unguarded: reported, not deciding. wgsl-conformance/integer.jsonl holds the edge cases, written by wai-wgsl-vectors; tests/semantics.rs holds the file to the reference, runs it and SplitMix64 cases on every adapter, and shows a remainder written by hand refused at discovery. Co-Authored-By: Claude Opus 5.5 --- wai/wai-ops-gpu/src/bin/wai-wgsl-vectors.rs | 28 + wai/wai-ops-gpu/src/device.rs | 30 +- wai/wai-ops-gpu/src/kernels.rs | 17 +- wai/wai-ops-gpu/src/lib.rs | 2 + wai/wai-ops-gpu/src/semantics.rs | 925 ++++++++++++++++++++ wai/wai-ops-gpu/src/wgsl/semantics.wgsl | 125 +++ wai/wai-ops-gpu/tests/semantics.rs | 113 +++ wai/wgsl-conformance/.gitattributes | 2 + wai/wgsl-conformance/README.md | 37 + wai/wgsl-conformance/integer.jsonl | 56 ++ 10 files changed, 1325 insertions(+), 10 deletions(-) create mode 100644 wai/wai-ops-gpu/src/bin/wai-wgsl-vectors.rs create mode 100644 wai/wai-ops-gpu/src/semantics.rs create mode 100644 wai/wai-ops-gpu/src/wgsl/semantics.wgsl create mode 100644 wai/wai-ops-gpu/tests/semantics.rs create mode 100644 wai/wgsl-conformance/.gitattributes create mode 100644 wai/wgsl-conformance/README.md create mode 100644 wai/wgsl-conformance/integer.jsonl diff --git a/wai/wai-ops-gpu/src/bin/wai-wgsl-vectors.rs b/wai/wai-ops-gpu/src/bin/wai-wgsl-vectors.rs new file mode 100644 index 000000000..5f38ef4dc --- /dev/null +++ b/wai/wai-ops-gpu/src/bin/wai-wgsl-vectors.rs @@ -0,0 +1,28 @@ +//! Writes WGSL's integer semantics vectors (`wai/wgsl-conformance/integer.jsonl`): +//! every edge case of `wai_ops_gpu::semantics`, with the result the WGSL text gives. +//! +//! ```text +//! wai-wgsl-vectors +//! ``` +//! +//! `tests/semantics.rs` holds the committed file to this output, byte for byte. + +use std::process::ExitCode; + +use wai_ops_gpu::semantics; + +fn main() -> ExitCode { + let Some(out) = std::env::args().nth(1) else { + eprintln!("usage: wai-wgsl-vectors "); + return ExitCode::from(2); + }; + let cases = semantics::edge_cases(); + let text = semantics::vector_file(&cases); + if let Err(e) = std::fs::write(&out, &text) { + eprintln!("wai-wgsl-vectors: {out}: {e}"); + return ExitCode::FAILURE; + } + let unguarded = cases.iter().filter(|c| !c.guarded()).count(); + eprintln!("wai-wgsl-vectors: wrote {out}: {} operations, {} cases ({unguarded} unguarded)", semantics::ALL.len(), cases.len()); + ExitCode::SUCCESS +} diff --git a/wai/wai-ops-gpu/src/device.rs b/wai/wai-ops-gpu/src/device.rs index 18fb2d779..f39111f22 100644 --- a/wai/wai-ops-gpu/src/device.rs +++ b/wai/wai-ops-gpu/src/device.rs @@ -2,9 +2,16 @@ //! //! [`discover`] opens every adapter of the platform's primary GPU interfaces (Metal, //! Vulkan, DX12; a browser's WebGPU on `wasm32-unknown-unknown`), compiles the kernels -//! on it and runs the arithmetic probe ([`crate::probe`]) against the host. An adapter -//! that cannot host the kernels, or whose arithmetic disagrees with the host's on any -//! word, is listed with the reason and never runs a graph. +//! on it and runs the arithmetic probe ([`crate::probe`]) and WGSL's integer semantics +//! ([`crate::semantics`]) against the host. An adapter that cannot host the kernels, +//! whose arithmetic disagrees with the host's on any word, or that gives another result +//! than WGSL's for an operation the kernels may use, is listed with the reason and never +//! runs a graph. +//! +//! Every module is created with `create_shader_module`, which keeps the translator's +//! run-time checks on: bounds checks, and the guarded integer division and remainder +//! (`wgpu::ShaderRuntimeChecks::int_div_checks`). The unchecked form is never used +//! (`tests/wgsl_rules.rs` holds the crate to that). use std::borrow::Cow; use std::collections::HashMap; @@ -126,6 +133,7 @@ pub(crate) struct Pipelines { pub ops64: Vec, pub mv: wgpu::ComputePipeline, pub probe: wgpu::ComputePipeline, + pub semantics: wgpu::ComputePipeline, } /// One adapter opened as a device, its kernels compiled and its arithmetic probed. @@ -169,7 +177,7 @@ pub async fn discover() -> Discovery { } /// [`discover`], with the kernels compiled from `src` and labelled `label` (a test's -/// mutant). The probe runs `src.probe`. +/// mutant). The probe runs `src.probe`, and the semantics suite `src.semantics`. pub async fn discover_with(src: &Sources, label: &str) -> Discovery { let mut d = Discovery::default(); if wgpu::Instance::enabled_backend_features().is_empty() { @@ -264,7 +272,10 @@ async fn open(adapter: wgpu::Adapter, src: &Sources, label: &str) -> Result Ok(gpu), Err(why) => Err(Box::new((gpu.adapter.clone(), why))), } @@ -328,6 +339,7 @@ async fn pipelines(device: &wgpu::Device, src: &Sources) -> Result Result Result, GpuError> { resolve(crate::probe::run(g, recs))? } + + /// [`crate::semantics::run`]. + pub fn semantics(g: &crate::Gpu, cases: &[crate::semantics::Case]) -> Result, GpuError> { + resolve(crate::semantics::run(g, cases))? + } } diff --git a/wai/wai-ops-gpu/src/kernels.rs b/wai/wai-ops-gpu/src/kernels.rs index e7ab2834d..f22947209 100644 --- a/wai/wai-ops-gpu/src/kernels.rs +++ b/wai/wai-ops-gpu/src/kernels.rs @@ -11,7 +11,9 @@ //! (`wgsl/move.wgsl`). //! //! `probe` (`wgsl/probe.wgsl`) evaluates every arithmetic function on records the host -//! gives, so a device's arithmetic can be held to the host's before it runs a graph. +//! gives, so a device's arithmetic can be held to the host's before it runs a graph, and +//! `semantics` (`wgsl/semantics.wgsl`) evaluates WGSL's integer operations themselves, +//! the cases a translation has to guard included ([`crate::semantics`]). pub const ARITH: &str = include_str!("wgsl/arith.wgsl"); pub const COMMON: &str = include_str!("wgsl/common.wgsl"); @@ -19,6 +21,7 @@ pub const OPS32: &str = include_str!("wgsl/ops32.wgsl"); pub const OPS64: &str = include_str!("wgsl/ops64.wgsl"); pub const MOVE: &str = include_str!("wgsl/move.wgsl"); pub const PROBE: &str = include_str!("wgsl/probe.wgsl"); +pub const SEMANTICS: &str = include_str!("wgsl/semantics.wgsl"); /// The text of one module: the arithmetic, the bindings, then `body`. pub fn module(body: &str) -> String { @@ -31,19 +34,25 @@ pub fn module(body: &str) -> String { s } -/// The sources of the four modules, in the order [`Sources::ALL`] names them, so a test -/// can run a device on an edited text (a mutant) and see the edit caught. +/// The sources of the five modules, so a test can run a device on an edited text (a +/// mutant) and see the edit caught. #[derive(Clone, Debug, PartialEq, Eq)] pub struct Sources { pub ops32: String, pub ops64: String, pub mv: String, pub probe: String, + pub semantics: String, } impl Sources { pub fn shipped() -> Sources { - Sources { ops32: module(OPS32), ops64: module(OPS64), mv: module(MOVE), probe: module(PROBE) } + Sources { ops32: module(OPS32), ops64: module(OPS64), mv: module(MOVE), probe: module(PROBE), semantics: module(SEMANTICS) } + } + + /// Every module's name and text, in the order above. + pub fn named(&self) -> [(&'static str, &str); 5] { + [("ops32", &self.ops32), ("ops64", &self.ops64), ("move", &self.mv), ("probe", &self.probe), ("semantics", &self.semantics)] } } diff --git a/wai/wai-ops-gpu/src/lib.rs b/wai/wai-ops-gpu/src/lib.rs index 19461b93f..a0e060a75 100644 --- a/wai/wai-ops-gpu/src/lib.rs +++ b/wai/wai-ops-gpu/src/lib.rs @@ -25,6 +25,7 @@ //! //! - [`device`]: discovery, devices, the pipelines and waiting ([`blocking`] natively); //! - [`probe`]: the arithmetic probe each device passes before it runs a graph; +//! - [`semantics`]: WGSL's integer semantics, which each device also passes first; //! - [`prepare`]: where a graph runs, and its parameters on the device; //! - [`exec`]: one decode; //! - [`kernels`]: the shader sources and the record each dispatch reads. @@ -34,6 +35,7 @@ pub mod exec; pub mod kernels; pub mod prepare; pub mod probe; +pub mod semantics; pub use device::{Adapter, Discovery, Gpu, GpuError, discover, discover_with}; #[cfg(not(target_arch = "wasm32"))] diff --git a/wai/wai-ops-gpu/src/semantics.rs b/wai/wai-ops-gpu/src/semantics.rs new file mode 100644 index 000000000..92efb8c85 --- /dev/null +++ b/wai/wai-ops-gpu/src/semantics.rs @@ -0,0 +1,925 @@ +//! WGSL's integer semantics, held on the device: the conformance suite every adapter +//! passes before it runs a graph (determinism-tiers §5, *Claiming the tier on a GPU*). +//! +//! WGSL defines every integer operation at run time, the cases that are errors when the +//! operands are known before the shader runs included: addition, subtraction, +//! multiplication and negation wrap modulo 2^32; `e1 / 0` is `e1` and `e1 % 0` is 0; the +//! most negative i32 over −1 is itself, with remainder 0; a shift amount is taken modulo +//! 32; `clamp` on an integer type is `min(max(e, low), high)`; a bit field's offset and +//! count are clamped to the word (WGSL §8.7, §8.9, §17.5). MSL and HLSL leave signed +//! overflow undefined, and MSL, HLSL and SPIR-V leave a zero divisor, an out-of-range +//! shift and an out-of-range bit field undefined or implementation-defined, so a +//! translator that targets them has to produce WGSL's result itself. This module states +//! each operation's result from the WGSL text ([`reference`]), and [`run`] evaluates the +//! same operations in a kernel (`wgsl/semantics.wgsl`) whose operands the device reads +//! from memory, so nothing is folded before the shader runs. +//! +//! [`Op::guarded`] says which operations the shipped kernels may use: those that the +//! translators this crate runs through give WGSL's result on every adapter the suite +//! has been run on. [`Op::Shl`] and the other operations listed in [`UNGUARDED`] are +//! defined by WGSL but reach the backend unchanged (naga 30.0.1 masks no shift amount), +//! so their results on an amount of 32 or more, or bounds out of order, are the +//! hardware's. The suite runs them on every adapter and reports what it gives; the +//! kernels never depend on them (integer-operators §6: every shift that reaches the +//! width is handled explicitly), and `tests/wgsl_rules.rs` holds the kernels to the +//! guarded set. +//! +//! The committed vectors (`wai/wgsl-conformance/integer.jsonl`) are [`edge_cases`] with +//! their results, written by `src/bin/wai-wgsl-vectors.rs`; a test holds the file to +//! this module, the browser page holds it to the same module compiled to wasm32, and the +//! device runs hold every adapter to it. + +use crate::device::{Gpu, GpuError, Scopes}; +use crate::kernels::{Rec, WG_PROBE, f, grid}; + +/// Words of one case's input: the operation, then `a`, `b`, `c`, `d`. +pub const IN_WORDS: usize = 5; + +/// One integer operation of WGSL, in the order of `sem` in `wgsl/semantics.wgsl`, whose +/// code is its index. +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Op { + AddU32, + SubU32, + MulU32, + AddI32, + SubI32, + MulI32, + NegI32, + DivU32, + RemU32, + DivI32, + RemI32, + ShlU32, + ShrU32, + ShlI32, + ShrI32, + And, + Or, + Xor, + Not, + LtI32, + LtU32, + LeI32, + LeU32, + Eq, + Ne, + SelectU32, + SelectI32, + MinI32, + MaxI32, + MinU32, + MaxU32, + ClampI32, + ClampU32, + AbsI32, + SignI32, + CountLeadingZerosU32, + CountTrailingZerosU32, + CountOneBitsU32, + ReverseBitsU32, + FirstLeadingBitU32, + FirstLeadingBitI32, + FirstTrailingBitU32, + CountLeadingZerosI32, + ExtractBitsU32, + ExtractBitsI32, + InsertBitsU32, + InsertBitsI32, + U32OfI32, + I32OfU32, + U32OfBool, + AddVec2U32, + MulVec2U32, + MulVec2I32, + ShrVec2U32, + ShrVec2I32, + SelectVec2U32, +} + +/// Every operation, in code order. +pub const ALL: [Op; 56] = [ + Op::AddU32, + Op::SubU32, + Op::MulU32, + Op::AddI32, + Op::SubI32, + Op::MulI32, + Op::NegI32, + Op::DivU32, + Op::RemU32, + Op::DivI32, + Op::RemI32, + Op::ShlU32, + Op::ShrU32, + Op::ShlI32, + Op::ShrI32, + Op::And, + Op::Or, + Op::Xor, + Op::Not, + Op::LtI32, + Op::LtU32, + Op::LeI32, + Op::LeU32, + Op::Eq, + Op::Ne, + Op::SelectU32, + Op::SelectI32, + Op::MinI32, + Op::MaxI32, + Op::MinU32, + Op::MaxU32, + Op::ClampI32, + Op::ClampU32, + Op::AbsI32, + Op::SignI32, + Op::CountLeadingZerosU32, + Op::CountTrailingZerosU32, + Op::CountOneBitsU32, + Op::ReverseBitsU32, + Op::FirstLeadingBitU32, + Op::FirstLeadingBitI32, + Op::FirstTrailingBitU32, + Op::CountLeadingZerosI32, + Op::ExtractBitsU32, + Op::ExtractBitsI32, + Op::InsertBitsU32, + Op::InsertBitsI32, + Op::U32OfI32, + Op::I32OfU32, + Op::U32OfBool, + Op::AddVec2U32, + Op::MulVec2U32, + Op::MulVec2I32, + Op::ShrVec2U32, + Op::ShrVec2I32, + Op::SelectVec2U32, +]; + +/// What WGSL defines that the translators this crate runs through pass to the backend +/// unchanged, and where the backend's language leaves the result undefined or to the +/// implementation: a shift by 32 or more (MSL, HLSL and SPIR-V), and an integer `clamp` +/// whose low bound is above its high one (MSL's `clamp`; naga writes SPIR-V's as `min` +/// and `max`). On these operands the result is the hardware's; [`Op::guarded_case`] +/// is false for them. +pub const UNGUARDED: &str = "a shift amount of 32 or more; an integer clamp whose low bound is above its high bound"; + +impl Op { + /// The operation's code: its index in [`ALL`] and its `case` in `sem`. + pub fn code(self) -> u32 { + ALL.iter().position(|&o| o == self).expect("in ALL") as u32 + } + + pub fn from_code(c: u32) -> Option { + ALL.get(c as usize).copied() + } + + /// The name the vector file gives the operation. + pub fn name(self) -> &'static str { + use Op::*; + match self { + AddU32 => "add_u32", + SubU32 => "sub_u32", + MulU32 => "mul_u32", + AddI32 => "add_i32", + SubI32 => "sub_i32", + MulI32 => "mul_i32", + NegI32 => "neg_i32", + DivU32 => "div_u32", + RemU32 => "rem_u32", + DivI32 => "div_i32", + RemI32 => "rem_i32", + ShlU32 => "shl_u32", + ShrU32 => "shr_u32", + ShlI32 => "shl_i32", + ShrI32 => "shr_i32", + And => "and", + Or => "or", + Xor => "xor", + Not => "not", + LtI32 => "lt_i32", + LtU32 => "lt_u32", + LeI32 => "le_i32", + LeU32 => "le_u32", + Eq => "eq", + Ne => "ne", + SelectU32 => "select_u32", + SelectI32 => "select_i32", + MinI32 => "min_i32", + MaxI32 => "max_i32", + MinU32 => "min_u32", + MaxU32 => "max_u32", + ClampI32 => "clamp_i32", + ClampU32 => "clamp_u32", + AbsI32 => "abs_i32", + SignI32 => "sign_i32", + CountLeadingZerosU32 => "count_leading_zeros_u32", + CountTrailingZerosU32 => "count_trailing_zeros_u32", + CountOneBitsU32 => "count_one_bits_u32", + ReverseBitsU32 => "reverse_bits_u32", + FirstLeadingBitU32 => "first_leading_bit_u32", + FirstLeadingBitI32 => "first_leading_bit_i32", + FirstTrailingBitU32 => "first_trailing_bit_u32", + CountLeadingZerosI32 => "count_leading_zeros_i32", + ExtractBitsU32 => "extract_bits_u32", + ExtractBitsI32 => "extract_bits_i32", + InsertBitsU32 => "insert_bits_u32", + InsertBitsI32 => "insert_bits_i32", + U32OfI32 => "u32_of_i32", + I32OfU32 => "i32_of_u32", + U32OfBool => "u32_of_bool", + AddVec2U32 => "add_vec2_u32", + MulVec2U32 => "mul_vec2_u32", + MulVec2I32 => "mul_vec2_i32", + ShrVec2U32 => "shr_vec2_u32", + ShrVec2I32 => "shr_vec2_i32", + SelectVec2U32 => "select_vec2_u32", + } + } + + pub fn from_name(n: &str) -> Option { + ALL.iter().copied().find(|o| o.name() == n) + } + + /// The WGSL the kernel evaluates, with `a`, `b`, `c`, `d` the operands as u32 and + /// `ia`, `ib`, `ic`, `id` their bits as i32. + pub fn wgsl(self) -> &'static str { + use Op::*; + match self { + AddU32 => "a + b", + SubU32 => "a - b", + MulU32 => "a * b", + AddI32 => "ia + ib", + SubI32 => "ia - ib", + MulI32 => "ia * ib", + NegI32 => "-ia", + DivU32 => "a / b", + RemU32 => "a % b", + DivI32 => "ia / ib", + RemI32 => "ia % ib", + ShlU32 => "a << b", + ShrU32 => "a >> b", + ShlI32 => "ia << b", + ShrI32 => "ia >> b", + And => "a & b", + Or => "a | b", + Xor => "a ^ b", + Not => "~a", + LtI32 => "u32(ia < ib)", + LtU32 => "u32(a < b)", + LeI32 => "u32(ia <= ib)", + LeU32 => "u32(a <= b)", + Eq => "u32(a == b)", + Ne => "u32(a != b)", + SelectU32 => "select(b, a, c != 0u)", + SelectI32 => "select(ib, ia, c != 0u)", + MinI32 => "min(ia, ib)", + MaxI32 => "max(ia, ib)", + MinU32 => "min(a, b)", + MaxU32 => "max(a, b)", + ClampI32 => "clamp(ia, ib, ic)", + ClampU32 => "clamp(a, b, c)", + AbsI32 => "abs(ia)", + SignI32 => "sign(ia)", + CountLeadingZerosU32 => "countLeadingZeros(a)", + CountTrailingZerosU32 => "countTrailingZeros(a)", + CountOneBitsU32 => "countOneBits(a)", + ReverseBitsU32 => "reverseBits(a)", + FirstLeadingBitU32 => "firstLeadingBit(a)", + FirstLeadingBitI32 => "firstLeadingBit(ia)", + FirstTrailingBitU32 => "firstTrailingBit(a)", + CountLeadingZerosI32 => "countLeadingZeros(ia)", + ExtractBitsU32 => "extractBits(a, b, c)", + ExtractBitsI32 => "extractBits(ia, b, c)", + InsertBitsU32 => "insertBits(a, b, c, d)", + InsertBitsI32 => "insertBits(ia, ib, c, d)", + U32OfI32 => "u32(ia)", + I32OfU32 => "i32(a)", + U32OfBool => "u32(a < b)", + AddVec2U32 => "vec2(a, b) + vec2(c, d), folded", + MulVec2U32 => "vec2(a, b) * vec2(c, d), folded", + MulVec2I32 => "vec2(ia, ib) * vec2(ic, id), folded", + ShrVec2U32 => "vec2(a, b) >> vec2(c, d), folded", + ShrVec2I32 => "vec2(ia, ib) >> vec2(c, d), folded", + SelectVec2U32 => "select(vec2(a, b), vec2(c, d), vec2(a < c, b < d)), folded", + } + } + + /// Whether the translators this crate runs through give WGSL's result for this + /// operation on these operands ([`UNGUARDED`] lists what they do not). + pub fn guarded_case(self, c: &Case) -> bool { + use Op::*; + match self { + ShlU32 | ShrU32 | ShlI32 | ShrI32 => c.b < 32, + ShrVec2U32 | ShrVec2I32 => c.c < 32 && c.d < 32, + ClampI32 => (c.b as i32) <= (c.c as i32), + ClampU32 => c.b <= c.c, + _ => true, + } + } +} + +/// One case: an operation and its four operands (an operation reads the ones it names). +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Case { + pub op: Op, + pub a: u32, + pub b: u32, + pub c: u32, + pub d: u32, +} + +impl Case { + pub fn new(op: Op, a: u32, b: u32, c: u32, d: u32) -> Case { + Case { op, a, b, c, d } + } + + /// Whether the translators give WGSL's result here ([`Op::guarded_case`]). + pub fn guarded(&self) -> bool { + self.op.guarded_case(self) + } +} + +/// The two components of a vector result folded into one word, as `sem` folds them. +fn fold(x: u32, y: u32) -> u32 { + x ^ y.wrapping_mul(0x9E37_79B9) +} + +/// `(o, c)` of a bit field: `o = min(offset, 32)`, `c = min(count, 32 − o)`. +fn field(offset: u32, count: u32) -> (u32, u32) { + let o = offset.min(32); + (o, count.min(32 - o)) +} + +/// The low `c` bits set, for `c` in 0..=32. +fn low_mask(c: u32) -> u32 { + if c >= 32 { u32::MAX } else { (1u32 << c) - 1 } +} + +/// The position of the most significant 1 bit, or `None` for 0. +fn msb(x: u32) -> Option { + (x != 0).then(|| 31 - x.leading_zeros()) +} + +/// The result WGSL defines for `c`, as the bits of a u32. Written from the WGSL text +/// (the sections cited in the module documentation), not from the shader: concrete +/// integer arithmetic is modulo 2^32; `e1 / e2` truncates, is `e1` when `e2` is zero and +/// when `e1` is the most negative i32 and `e2` is −1; `e1 % e2` is +/// `e1 − truncate(e1 ÷ e2) × e2`, and 0 in those two cases; a shift's amount is `e2` +/// modulo 32, and a right shift of an i32 copies the sign bit. +pub fn reference(c: &Case) -> u32 { + use Op::*; + let (a, b, cc, d) = (c.a, c.b, c.c, c.d); + let (ia, ib, ic, id) = (a as i32, b as i32, cc as i32, d as i32); + let bit = |x: bool| x as u32; + match c.op { + AddU32 => a.wrapping_add(b), + SubU32 => a.wrapping_sub(b), + MulU32 => a.wrapping_mul(b), + AddI32 => ia.wrapping_add(ib) as u32, + SubI32 => ia.wrapping_sub(ib) as u32, + MulI32 => ia.wrapping_mul(ib) as u32, + NegI32 => ia.wrapping_neg() as u32, + // e1 / 0 is e1; e1 % 0 is 0. + DivU32 => a.checked_div(b).unwrap_or(a), + RemU32 => a.checked_rem(b).unwrap_or(0), + DivI32 => { + if ib == 0 || (ia == i32::MIN && ib == -1) { + a + } else { + (ia / ib) as u32 + } + } + RemI32 => { + if ib == 0 || (ia == i32::MIN && ib == -1) { + 0 + } else { + (ia - (ia / ib) * ib) as u32 + } + } + ShlU32 => a << (b % 32), + ShrU32 => a >> (b % 32), + ShlI32 => (ia << (b % 32)) as u32, + ShrI32 => (ia >> (b % 32)) as u32, + And => a & b, + Or => a | b, + Xor => a ^ b, + Not => !a, + LtI32 => bit(ia < ib), + LtU32 => bit(a < b), + LeI32 => bit(ia <= ib), + LeU32 => bit(a <= b), + Eq => bit(a == b), + Ne => bit(a != b), + SelectU32 | SelectI32 => { + if cc != 0 { + a + } else { + b + } + } + MinI32 => ia.min(ib) as u32, + MaxI32 => ia.max(ib) as u32, + MinU32 => a.min(b), + MaxU32 => a.max(b), + // min(max(e, low), high), whatever the order of the bounds. + ClampI32 => ia.max(ib).min(ic) as u32, + ClampU32 => a.max(b).min(cc), + // The absolute value of the most negative i32 is itself. + AbsI32 => { + if ia == i32::MIN { + a + } else { + ia.unsigned_abs() + } + } + SignI32 => ia.signum() as u32, + CountLeadingZerosU32 | CountLeadingZerosI32 => a.leading_zeros(), + CountTrailingZerosU32 => a.trailing_zeros(), + CountOneBitsU32 => a.count_ones(), + ReverseBitsU32 => a.reverse_bits(), + // T(−1) when e is zero; otherwise the position of the most significant 1. + FirstLeadingBitU32 => msb(a).unwrap_or(u32::MAX), + // −1 when e is 0 or −1; otherwise the position of the most significant bit + // that differs from the sign bit. + FirstLeadingBitI32 => { + if ia == 0 || ia == -1 { + u32::MAX + } else if ia < 0 { + msb(!a).unwrap_or(u32::MAX) + } else { + msb(a).unwrap_or(u32::MAX) + } + } + FirstTrailingBitU32 => { + if a == 0 { + u32::MAX + } else { + a.trailing_zeros() + } + } + // Bits o..o+c−1 of e; 0 when c is 0. + ExtractBitsU32 => { + let (o, n) = field(b, cc); + if n == 0 { 0 } else { (a >> o) & low_mask(n) } + } + // The same, sign-extended from bit c−1. + ExtractBitsI32 => { + let (o, n) = field(b, cc); + if n == 0 { + 0 + } else { + let v = (a >> o) & low_mask(n); + if (v >> (n - 1)) & 1 == 1 { v | !low_mask(n) } else { v } + } + } + // Bits o..o+c−1 from bits 0..c−1 of newbits, the others from e; e when c is 0. + InsertBitsU32 | InsertBitsI32 => { + let (o, n) = field(cc, d); + if n == 0 { + a + } else { + let m = low_mask(n) << o; + (a & !m) | ((b << o) & m) + } + } + // A conversion between i32 and u32 keeps the bit pattern. + U32OfI32 | I32OfU32 => a, + U32OfBool => bit(a < b), + AddVec2U32 => fold(a.wrapping_add(cc), b.wrapping_add(d)), + MulVec2U32 => fold(a.wrapping_mul(cc), b.wrapping_mul(d)), + MulVec2I32 => fold(ia.wrapping_mul(ic) as u32, ib.wrapping_mul(id) as u32), + ShrVec2U32 => fold(a >> (cc % 32), b >> (d % 32)), + ShrVec2I32 => fold((ia >> (cc % 32)) as u32, (ib >> (d % 32)) as u32), + SelectVec2U32 => fold(if a < cc { cc } else { a }, if b < d { d } else { b }), + } +} + +/// The 32-bit values at the edges of i32 and u32, and near them, and at the boundaries +/// of shift amounts and bit fields. +pub fn edge_values() -> Vec { + let mut v: Vec = vec![ + 0, + 1, + 2, + 3, + 5, + 7, + 31, + 32, + 33, + 63, + 64, + 255, + 0x7FFF, + 0x8000, + 0xFFFF, + 0x1_0000, + 0x5555_5555, + 0x7FFF_FFFE, + 0x7FFF_FFFF, + 0x8000_0000, + 0x8000_0001, + 0xAAAA_AAAA, + 0xDEAD_BEEF, + ]; + for x in [1i32, 2, 3, 7, 31, 32, 0x8000, 0x1_0000] { + v.push((-x) as u32); + } + v.push(u32::MAX); + v.sort_unstable(); + v.dedup(); + v +} + +/// Shift amounts and bit-field offsets and counts: every value from 0 to 40, then +/// amounts past 32 that are 0 or 1 modulo 32, and the extremes of u32. +pub fn amounts() -> Vec { + let mut v: Vec = (0..=40).collect(); + v.extend([63, 64, 65, 96, 127, 128, 255, 256, 0x7FFF_FFFF, 0x8000_0000, u32::MAX - 31, u32::MAX]); + v +} + +/// Whether the operation is a shift whose amount is its operand `b`. +fn shift_by_b(op: Op) -> bool { + matches!(op, Op::ShlU32 | Op::ShrU32 | Op::ShlI32 | Op::ShrI32) +} + +/// The edge cases of every operation, in code order and then by operands: the cases the +/// committed vector file holds. The arithmetic operations, division and remainder take +/// every pair of [`edge_values`]; shifts every edge value by every one of [`amounts`]; +/// the bitwise operations, comparisons, `min` and `max` every pair of a short list; +/// `clamp` and `select` every triple of it; bit fields a few values at every (offset, +/// count) pair around 0, 16 and 32 and the extremes. +pub fn edge_cases() -> Vec { + use Op::*; + let e = edge_values(); + let s = amounts(); + let short: Vec = vec![0, 1, 7, 0x7FFF_FFFF, 0x8000_0000, 0xFFFF_FFF9, u32::MAX]; + let fields: Vec = vec![0, 1, 2, 15, 16, 17, 30, 31, 32, 33, 64, u32::MAX]; + let mut out = Vec::new(); + for op in ALL { + match op { + _ if shift_by_b(op) => { + for &a in &e { + for &b in &s { + out.push(Case::new(op, a, b, 0, 0)); + } + } + } + NegI32 | Not | AbsI32 | SignI32 | CountLeadingZerosU32 | CountTrailingZerosU32 | CountOneBitsU32 | ReverseBitsU32 + | FirstLeadingBitU32 | FirstLeadingBitI32 | FirstTrailingBitU32 | CountLeadingZerosI32 | U32OfI32 | I32OfU32 => { + for &a in &e { + out.push(Case::new(op, a, 0, 0, 0)); + } + // Every single bit, and every run of low ones. + for k in 0..32u32 { + out.push(Case::new(op, 1u32 << k, 0, 0, 0)); + out.push(Case::new(op, low_mask(k + 1), 0, 0, 0)); + out.push(Case::new(op, !low_mask(k), 0, 0, 0)); + } + } + ClampI32 | ClampU32 | SelectU32 | SelectI32 => { + for &a in &short { + for &b in &short { + for &c in &short { + out.push(Case::new(op, a, b, c, 0)); + } + } + } + } + ExtractBitsU32 | ExtractBitsI32 => { + for &a in &[0u32, 1, 0x8000_0000, 0xDEAD_BEEF, 0x7FFF_FFFF, u32::MAX, 0x5555_5555] { + for &o in &fields { + for &n in &fields { + out.push(Case::new(op, a, o, n, 0)); + } + } + } + } + InsertBitsU32 | InsertBitsI32 => { + for &(a, b) in &[(0u32, u32::MAX), (u32::MAX, 0), (0xDEAD_BEEF, 0x1234_5678), (0x8000_0000, 1)] { + for &o in &fields { + for &n in &fields { + out.push(Case::new(op, a, b, o, n)); + } + } + } + } + AddVec2U32 | MulVec2U32 | MulVec2I32 | SelectVec2U32 => { + for &a in &short { + for &b in &short { + for &c in &short { + out.push(Case::new(op, a, b, c, a ^ b ^ c)); + } + } + } + } + ShrVec2U32 | ShrVec2I32 => { + for &a in &[0u32, 1, 0x8000_0000, 0xDEAD_BEEF, u32::MAX] { + for &c in &s { + out.push(Case::new(op, a, !a, c, c.wrapping_add(1))); + } + } + } + AddU32 | SubU32 | MulU32 | AddI32 | SubI32 | MulI32 | DivU32 | RemU32 | DivI32 | RemI32 => { + for &a in &e { + for &b in &e { + out.push(Case::new(op, a, b, 0, 0)); + } + } + } + _ => { + for &a in &short { + for &b in &short { + out.push(Case::new(op, a, b, 0, 0)); + } + } + } + } + } + out +} + +struct SplitMix(u64); + +impl SplitMix { + fn next(&mut self) -> u64 { + self.0 = self.0.wrapping_add(0x9E37_79B9_7F4A_7C15); + let mut z = self.0; + z = (z ^ (z >> 30)).wrapping_mul(0xBF58_476D_1CE4_E5B9); + z = (z ^ (z >> 27)).wrapping_mul(0x94D0_49BB_1331_11EB); + z ^ (z >> 31) + } +} + +/// `per_op` SplitMix64 cases of every operation, from `seed`. Shift amounts and +/// bit-field bounds are drawn below 40 half the time, so the boundary is reached. +pub fn random_cases(per_op: usize, seed: u64) -> Vec { + let mut r = SplitMix(seed); + let mut out = Vec::with_capacity(per_op * ALL.len()); + for op in ALL { + for k in 0..per_op { + let w = r.next(); + let x = r.next(); + let (mut a, mut b, mut c, mut d) = (w as u32, (w >> 32) as u32, x as u32, (x >> 32) as u32); + if k % 2 == 0 { + b %= 40; + c %= 40; + d %= 40; + } + if k % 8 == 1 { + a = 0x8000_0000; + b = u32::MAX; + } + out.push(Case::new(op, a, b, c, d)); + } + } + out +} + +/// The device's word for each case. +pub async fn run(g: &Gpu, cases: &[Case]) -> Result, GpuError> { + let mut out = Vec::with_capacity(cases.len()); + // At most 2^20 cases per dispatch, to keep each buffer small. + for chunk in cases.chunks(1 << 20) { + out.extend(run_chunk(g, chunk).await?); + } + Ok(out) +} + +async fn run_chunk(g: &Gpu, cases: &[Case]) -> Result, GpuError> { + let n = cases.len() as u32; + if n == 0 { + return Ok(Vec::new()); + } + let mut inw: Vec = Vec::with_capacity(cases.len() * IN_WORDS * 4); + for c in cases { + for x in [c.op.code(), c.a, c.b, c.c, c.d] { + inw.extend_from_slice(&x.to_le_bytes()); + } + } + let out_bytes = (cases.len() * 4) as u64; + let (gx, gy, row) = grid(n, WG_PROBE).ok_or_else(|| GpuError::Device("too many semantics cases".into()))?; + let mut rec = Rec::new(); + rec.set(f::N, n).set(f::ROW, row); + let scopes = Scopes::push(&g.device); + let uni = g.buffer("wai-ops-gpu semantics record", g.stride, wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST); + g.queue.write_buffer(&uni, 0, &rec.bytes()); + let ins = g.buffer("wai-ops-gpu semantics in", inw.len() as u64, wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_DST); + g.queue.write_buffer(&ins, 0, &inw); + let out = g.buffer("wai-ops-gpu semantics out", out_bytes, wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_SRC); + let flags = g.buffer("wai-ops-gpu semantics flags", 16, wgpu::BufferUsages::STORAGE); + let staging = g.buffer("wai-ops-gpu semantics staging", out_bytes, wgpu::BufferUsages::MAP_READ | wgpu::BufferUsages::COPY_DST); + let bind = g.device.create_bind_group(&wgpu::BindGroupDescriptor { + label: Some("wai-ops-gpu semantics"), + layout: &g.pipes.layout, + entries: &[ + wgpu::BindGroupEntry { + binding: 0, + resource: wgpu::BindingResource::Buffer(wgpu::BufferBinding { buffer: &uni, offset: 0, size: core::num::NonZeroU64::new(crate::kernels::REC_WORDS as u64 * 4) }), + }, + wgpu::BindGroupEntry { binding: 1, resource: ins.as_entire_binding() }, + wgpu::BindGroupEntry { binding: 2, resource: g.dummy.as_entire_binding() }, + wgpu::BindGroupEntry { binding: 3, resource: g.dummy.as_entire_binding() }, + wgpu::BindGroupEntry { binding: 4, resource: out.as_entire_binding() }, + wgpu::BindGroupEntry { binding: 5, resource: flags.as_entire_binding() }, + ], + }); + let mut enc = g.device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: Some("wai-ops-gpu semantics") }); + { + let mut pass = enc.begin_compute_pass(&wgpu::ComputePassDescriptor { label: Some("wai-ops-gpu semantics"), timestamp_writes: None }); + pass.set_pipeline(&g.pipes.semantics); + pass.set_bind_group(0, &bind, &[]); + pass.dispatch_workgroups(gx, gy, 1); + } + enc.copy_buffer_to_buffer(&out, 0, &staging, 0, out_bytes); + let index = g.queue.submit([enc.finish()]); + scopes.close().await?; + let bytes = g.read(&staging, out_bytes, index).await?; + g.settled()?; + Ok(bytes.as_chunks::<4>().0.iter().map(|b| u32::from_le_bytes(*b)).collect()) +} + +/// One case on which a result differs from WGSL's. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Difference { + pub case: Case, + pub want: u32, + pub got: u32, +} + +impl core::fmt::Display for Difference { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let c = &self.case; + write!(f, "{} ({}) a={:#010x} b={:#010x} c={:#010x} d={:#010x}: WGSL gives {:#010x}, got {:#010x}", c.op.name(), c.op.wgsl(), c.a, c.b, c.c, c.d, self.want, self.got) + } +} + +/// What a run of the suite found: the cases compared, and every difference, the +/// guarded ones apart from the rest. +#[derive(Clone, Debug, Default, PartialEq, Eq)] +pub struct Outcome { + pub guarded: usize, + pub unguarded: usize, + pub guarded_differ: Vec, + pub unguarded_differ: Vec, +} + +impl Outcome { + /// The operations with an unguarded case that differs, by name, each once. + pub fn unguarded_ops(&self) -> Vec<&'static str> { + let mut v: Vec<&'static str> = self.unguarded_differ.iter().map(|d| d.case.op.name()).collect(); + v.dedup(); + v + } +} + +/// `got[i]` against `expect[i]` for every case. +pub fn compare(cases: &[Case], expect: &[u32], got: &[u32]) -> Outcome { + let mut o = Outcome::default(); + for (i, c) in cases.iter().enumerate() { + let (want, have) = (expect[i], got.get(i).copied().unwrap_or(!expect[i])); + let g = c.guarded(); + if g { + o.guarded += 1; + } else { + o.unguarded += 1; + } + if want != have { + let d = Difference { case: *c, want, got: have }; + if g { o.guarded_differ.push(d) } else { o.unguarded_differ.push(d) } + } + } + o +} + +/// The vector file: one JSON object per operation, in code order, with its WGSL and its +/// cases, each `[a, b, c, d, result]` as eight lowercase hexadecimal digits, and +/// `guarded` false where [`Op::guarded_case`] is. +pub fn vector_file(cases: &[Case]) -> String { + let mut s = String::new(); + for op in ALL { + let mine: Vec<&Case> = cases.iter().filter(|c| c.op == op).collect(); + if mine.is_empty() { + continue; + } + s.push_str(&format!("{{\"op\":\"{}\",\"code\":{},\"wgsl\":\"{}\",\"cases\":[", op.name(), op.code(), op.wgsl())); + for (k, c) in mine.iter().enumerate() { + if k > 0 { + s.push(','); + } + s.push_str(&format!("[\"{:08x}\",\"{:08x}\",\"{:08x}\",\"{:08x}\",\"{:08x}\"", c.a, c.b, c.c, c.d, reference(c))); + if !c.guarded() { + s.push_str(",\"unguarded\""); + } + s.push(']'); + } + s.push_str("]}\n"); + } + s +} + +/// The cases and committed results of a vector file, in file order. +pub fn parse_vector_file(text: &str) -> Result, String> { + use wai_ops::json::{self, Value}; + let mut out = Vec::new(); + for (ln, line) in text.split_terminator('\n').enumerate() { + let v = json::parse(line.as_bytes()).map_err(|e| format!("line {}: JSON at byte {}", ln + 1, e.at))?; + let name = v.get("op").and_then(Value::as_str).ok_or(format!("line {}: no op", ln + 1))?; + let op = Op::from_name(name).ok_or(format!("line {}: unknown op {name}", ln + 1))?; + for c in v.get("cases").and_then(Value::as_arr).ok_or(format!("line {}: no cases", ln + 1))? { + let w = c.as_arr().ok_or(format!("line {}: a case is not an array", ln + 1))?; + let word = |k: usize| -> Result { + let s = w.get(k).and_then(Value::as_str).ok_or(format!("line {}: a case has no word {k}", ln + 1))?; + if s.len() != 8 { + return Err(format!("line {}: {s:?} is not eight hexadecimal digits", ln + 1)); + } + u32::from_str_radix(s, 16).map_err(|_| format!("line {}: {s:?} is not hexadecimal", ln + 1)) + }; + let case = Case::new(op, word(0)?, word(1)?, word(2)?, word(3)?); + let unguarded = w.get(5).and_then(Value::as_str) == Some("unguarded"); + if unguarded == case.guarded() { + return Err(format!("line {}: {name} {:?}: the file's guard mark is not the module's", ln + 1, case)); + } + out.push((case, word(4)?)); + } + } + Ok(out) +} + +/// The discovery check: [`edge_cases`] and SplitMix64 cases of every operation, on the +/// device, against [`reference`]. `Err` names the first guarded case that differs; an +/// unguarded case that differs is reported by [`run`]'s callers, and does not refuse the +/// adapter, since no kernel depends on it. +pub(crate) async fn check(g: &Gpu) -> Result<(), String> { + let mut cases = edge_cases(); + cases.extend(random_cases(256, 0x5EED_0006)); + let expect: Vec = cases.iter().map(reference).collect(); + let got = run(g, &cases).await.map_err(|e| format!("the WGSL semantics suite did not run: {e}"))?; + let o = compare(&cases, &expect, &got); + match o.guarded_differ.first() { + None => Ok(()), + Some(d) => Err(format!("the WGSL semantics suite: {d}")), + } +} + +#[cfg(test)] +mod tests { + use super::*; + + /// The reference on the cases the WGSL text works through, and on the values of + /// each special rule. + #[test] + fn the_reference_is_the_wgsl_text() { + let r = |op, a: u32, b: u32| reference(&Case::new(op, a, b, 0, 0)); + let min = i32::MIN as u32; + assert_eq!(r(Op::DivI32, 7, 0), 7, "e1 / 0 is e1"); + assert_eq!(r(Op::DivU32, 7, 0), 7); + assert_eq!(r(Op::RemI32, 7, 0), 0, "e1 % 0 is 0"); + assert_eq!(r(Op::RemU32, 7, 0), 0); + assert_eq!(r(Op::DivI32, min, u32::MAX), min, "the most negative i32 over -1 is itself"); + assert_eq!(r(Op::RemI32, min, u32::MAX), 0); + assert_eq!(r(Op::DivI32, (-7i32) as u32, 2), (-3i32) as u32, "division truncates"); + assert_eq!(r(Op::RemI32, (-7i32) as u32, 2), (-1i32) as u32, "the remainder has the dividend's sign"); + assert_eq!(r(Op::ShlU32, 1, 32), 1, "the amount is taken modulo 32"); + assert_eq!(r(Op::ShlU32, 1, 33), 2); + assert_eq!(r(Op::ShrI32, min, 63), u32::MAX); + assert_eq!(r(Op::NegI32, min, 0), min, "negation wraps"); + assert_eq!(r(Op::AbsI32, min, 0), min, "abs of the most negative i32 is itself"); + assert_eq!(r(Op::MulI32, 0x7FFF_FFFF, 2), (-2i32) as u32, "multiplication wraps"); + assert_eq!(reference(&Case::new(Op::ClampI32, 5, 10, 0, 0)), 0, "clamp(5, 10, 0) = min(max(5, 10), 0)"); + assert_eq!(r(Op::FirstLeadingBitI32, u32::MAX, 0), u32::MAX, "firstLeadingBit(-1) is -1"); + assert_eq!(r(Op::FirstLeadingBitI32, (-2i32) as u32, 0), 0); + assert_eq!(r(Op::FirstLeadingBitU32, 0, 0), u32::MAX); + assert_eq!(reference(&Case::new(Op::ExtractBitsI32, 0x80, 4, 4, 0)), u32::MAX - 7, "bit c-1 extends"); + assert_eq!(reference(&Case::new(Op::ExtractBitsU32, u32::MAX, 30, 10, 0)), 3, "the count is clamped to 32 - offset"); + assert_eq!(reference(&Case::new(Op::ExtractBitsU32, u32::MAX, 40, 10, 0)), 0, "an offset past 32 extracts nothing"); + assert_eq!(reference(&Case::new(Op::InsertBitsU32, 0, u32::MAX, 28, 8)), 0xF000_0000); + assert_eq!(reference(&Case::new(Op::InsertBitsU32, 0x1234, u32::MAX, 32, 8)), 0x1234, "e when c is 0"); + } + + #[test] + fn every_operation_has_a_code_name_and_edge_cases() { + for (k, op) in ALL.iter().enumerate() { + assert_eq!(op.code() as usize, k); + assert_eq!(Op::from_code(k as u32), Some(*op)); + assert_eq!(Op::from_name(op.name()), Some(*op)); + assert!(edge_cases().iter().any(|c| c.op == *op), "{op:?} has no edge case"); + } + assert_eq!(Op::from_code(ALL.len() as u32), None); + } + + #[test] + fn the_vector_file_round_trips() { + let cases = edge_cases(); + let text = vector_file(&cases); + let back = parse_vector_file(&text).unwrap(); + assert_eq!(back.len(), cases.len()); + for ((c, r), want) in back.iter().zip(&cases) { + assert_eq!(c, want); + assert_eq!(*r, reference(want)); + } + } +} diff --git a/wai/wai-ops-gpu/src/wgsl/semantics.wgsl b/wai/wai-ops-gpu/src/wgsl/semantics.wgsl new file mode 100644 index 000000000..c175f3119 --- /dev/null +++ b/wai/wai-ops-gpu/src/wgsl/semantics.wgsl @@ -0,0 +1,125 @@ +// WGSL's integer semantics on the device: each record of A (five words: an +// operation, then the operands a, b, c and d) gives one word of O, the operation's +// result, its bits as a u32. The host computes the same operations from the text of +// the WGSL specification (`src/semantics.rs`, `reference`) and compares every word. +// +// Every operand is read from a storage buffer, so no result is known before the +// shader runs: WGSL makes a division by zero, a shift of 32 or more and an +// out-of-range bit field errors only where the operands are const- or +// override-expressions, and defines a result for each at run time. Those results +// are what this kernel checks, since a translation into a language that leaves them +// undefined (MSL, HLSL, SPIR-V) has to produce them itself. Integer only: no +// floating-point type appears in this module. + +const SEM_IN: u32 = 5u; + +fn sem(op: u32, a: u32, b: u32, c: u32, d: u32) -> u32 { + let ia = bitcast(a); + let ib = bitcast(b); + let ic = bitcast(c); + var r = 0xDEADBEEFu; + switch op { + // Wrapping arithmetic, modulo 2^32. + case 0u: { r = a + b; } + case 1u: { r = a - b; } + case 2u: { r = a * b; } + case 3u: { r = bitcast(ia + ib); } + case 4u: { r = bitcast(ia - ib); } + case 5u: { r = bitcast(ia * ib); } + case 6u: { r = bitcast(-ia); } + // Division and remainder, with WGSL's run-time results for a zero divisor + // and for the most negative i32 over -1. + case 7u: { r = a / b; } + case 8u: { r = a % b; } + case 9u: { r = bitcast(ia / ib); } + case 10u: { r = bitcast(ia % ib); } + // Shifts: the amount is taken modulo 32. + case 11u: { r = a << b; } + case 12u: { r = a >> b; } + case 13u: { r = bitcast(ia << b); } + case 14u: { r = bitcast(ia >> b); } + // Bitwise. + case 15u: { r = a & b; } + case 16u: { r = a | b; } + case 17u: { r = a ^ b; } + case 18u: { r = ~a; } + // Comparisons, signed and unsigned. + case 19u: { r = select(0u, 1u, ia < ib); } + case 20u: { r = select(0u, 1u, a < b); } + case 21u: { r = select(0u, 1u, ia <= ib); } + case 22u: { r = select(0u, 1u, a <= b); } + case 23u: { r = select(0u, 1u, a == b); } + case 24u: { r = select(0u, 1u, a != b); } + // select(f, t, cond). + case 25u: { r = select(b, a, c != 0u); } + case 26u: { r = bitcast(select(ib, ia, c != 0u)); } + // min, max and clamp: clamp(e, low, high) is min(max(e, low), high) for an + // integer type, low above high included. + case 27u: { r = bitcast(min(ia, ib)); } + case 28u: { r = bitcast(max(ia, ib)); } + case 29u: { r = min(a, b); } + case 30u: { r = max(a, b); } + case 31u: { r = bitcast(clamp(ia, ib, ic)); } + case 32u: { r = clamp(a, b, c); } + // abs and sign of an i32; the absolute value of the most negative i32 is + // itself. + case 33u: { r = bitcast(abs(ia)); } + case 34u: { r = bitcast(sign(ia)); } + // Bit counts and positions. + case 35u: { r = countLeadingZeros(a); } + case 36u: { r = countTrailingZeros(a); } + case 37u: { r = countOneBits(a); } + case 38u: { r = reverseBits(a); } + case 39u: { r = firstLeadingBit(a); } + case 40u: { r = bitcast(firstLeadingBit(ia)); } + case 41u: { r = firstTrailingBit(a); } + case 42u: { r = bitcast(countLeadingZeros(ia)); } + // Bit fields: o = min(offset, 32), c = min(count, 32 - o). + case 43u: { r = extractBits(a, b, c); } + case 44u: { r = bitcast(extractBits(ia, b, c)); } + case 45u: { r = insertBits(a, b, c, d); } + case 46u: { r = bitcast(insertBits(ia, ib, c, d)); } + // Value conversions between i32 and u32 keep the bits; bool converts to 0 or 1. + case 47u: { r = u32(ia); } + case 48u: { r = bitcast(i32(a)); } + case 49u: { r = u32(a < b); } + // The same arithmetic on two-component vectors, component by component: the + // kernels' 64-bit and 128-bit words are vectors. + case 50u: { + let v = vec2(a, b) + vec2(c, d); + r = v.x ^ (v.y * 0x9E3779B9u); + } + case 51u: { + let v = vec2(a, b) * vec2(c, d); + r = v.x ^ (v.y * 0x9E3779B9u); + } + case 52u: { + let v = bitcast>(vec2(ia, ib) * vec2(ic, bitcast(d))); + r = v.x ^ (v.y * 0x9E3779B9u); + } + case 53u: { + let v = vec2(a, b) >> vec2(c, d); + r = v.x ^ (v.y * 0x9E3779B9u); + } + case 54u: { + let v = bitcast>(vec2(ia, ib) >> vec2(c, d)); + r = v.x ^ (v.y * 0x9E3779B9u); + } + case 55u: { + let v = select(vec2(a, b), vec2(c, d), vec2(a < c, b < d)); + r = v.x ^ (v.y * 0x9E3779B9u); + } + default: {} + } + return r; +} + +@compute @workgroup_size(64) +fn semantics(@builtin(global_invocation_id) g: vec3) { + let t = tid(g); + if (t >= P.n) { + return; + } + let i = t * SEM_IN; + O[t] = sem(A[i], A[i + 1u], A[i + 2u], A[i + 3u], A[i + 4u]); +} diff --git a/wai/wai-ops-gpu/tests/semantics.rs b/wai/wai-ops-gpu/tests/semantics.rs new file mode 100644 index 000000000..e6728c8e5 --- /dev/null +++ b/wai/wai-ops-gpu/tests/semantics.rs @@ -0,0 +1,113 @@ +//! WGSL's integer semantics on every adapter (`src/semantics.rs`): the committed vectors +//! of `wai/wgsl-conformance/` are the WGSL text's results, and every adapter found gives +//! them, with SplitMix64 cases of every operation besides. A case the translators do not +//! guard (`semantics::UNGUARDED`) is run and reported, and does not fail the adapter: no +//! kernel depends on one (`tests/wgsl_rules.rs`). Then an edited kernel is shown to be +//! caught: discovery refuses every adapter. +//! +//! Each adapter's result is one line, `ops-gpu semantics: key=…`, appended to +//! `WAI_OPS_GPU_REPORT` when it is set. No adapter is not a pass: the test prints +//! SKIPPED, and fails under `WAI_OPS_GPU_REQUIRE`. + +use std::io::Write; +use std::path::PathBuf; + +use wai_ops_gpu::semantics::{self, Case}; +use wai_ops_gpu::{blocking, kernels::Sources}; + +fn report(line: &str) { + println!("{line}"); + if let Ok(p) = std::env::var("WAI_OPS_GPU_REPORT") { + let mut f = std::fs::OpenOptions::new().create(true).append(true).open(&p).unwrap_or_else(|e| panic!("{p}: {e}")); + writeln!(f, "{line}").unwrap(); + } +} + +fn committed() -> (PathBuf, String) { + let p = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../wgsl-conformance/integer.jsonl"); + let text = std::fs::read_to_string(&p).unwrap_or_else(|e| panic!("{}: {e}", p.display())); + (p, text) +} + +/// The committed file is what `wai-wgsl-vectors` writes, byte for byte, and each of its +/// results is the reference's. +#[test] +fn the_committed_vectors_are_the_wgsl_texts_results() { + let (p, text) = committed(); + let want = semantics::vector_file(&semantics::edge_cases()); + assert!(text == want, "{} is not what `cargo run --bin wai-wgsl-vectors -- {}` writes", p.display(), p.display()); + let cases = semantics::parse_vector_file(&text).unwrap(); + assert_eq!(cases.len(), semantics::edge_cases().len()); + for (c, r) in &cases { + assert_eq!(*r, semantics::reference(c), "{c:?}"); + } + let unguarded = cases.iter().filter(|(c, _)| !c.guarded()).count(); + assert!(unguarded > 0 && unguarded < cases.len() / 4, "{unguarded} unguarded cases"); +} + +#[test] +fn every_adapter_gives_wgsls_integer_semantics() { + let d = blocking::discover(); + for (a, why) in &d.refused { + report(&format!("ops-gpu semantics adapter refused: key={} {} reason={why:?}", a.key(), a.describe())); + } + if d.found.is_empty() { + report("ops-gpu semantics: SKIPPED: no adapter"); + assert!(std::env::var_os("WAI_OPS_GPU_REQUIRE").is_none(), "WAI_OPS_GPU_REQUIRE is set and no adapter was found"); + return; + } + let (_, text) = committed(); + let mut cases: Vec = semantics::parse_vector_file(&text).unwrap().into_iter().map(|(c, _)| c).collect(); + let n_committed = cases.len(); + cases.extend(semantics::random_cases(4096, 0xA417_5E00)); + let expect: Vec = cases.iter().map(semantics::reference).collect(); + for g in &d.found { + let got = blocking::semantics(g, &cases).unwrap_or_else(|e| panic!("{}: {e}", g.adapter().key())); + let o = semantics::compare(&cases, &expect, &got); + for d in o.guarded_differ.iter().take(20) { + println!("MISMATCH {}: {d}", g.adapter().key()); + } + let mut shown = std::collections::BTreeSet::new(); + for d in &o.unguarded_differ { + if shown.insert(d.case.op) { + println!("ops-gpu semantics unguarded: key={} {d}", g.adapter().key()); + } + } + report(&format!( + "ops-gpu semantics: key={} {} committed={n_committed} cases={} guarded={} differ={} unguarded={} unguarded_differ={} unguarded_ops={}", + g.adapter().key(), + g.adapter().describe(), + cases.len(), + o.guarded, + o.guarded_differ.len(), + o.unguarded, + o.unguarded_differ.len(), + if o.unguarded_ops().is_empty() { "none".to_string() } else { o.unguarded_ops().join(",") }, + )); + assert!(o.guarded_differ.is_empty(), "{}: {} guarded cases differ from WGSL, the first: {}", g.adapter().key(), o.guarded_differ.len(), o.guarded_differ[0]); + } +} + +/// A remainder written out by hand, `a - (a / b) * b`, gives `a` where WGSL gives 0 (a +/// zero divisor): an adapter running that kernel must be refused at discovery, for the +/// semantics suite, on every adapter. +#[test] +fn an_edited_semantics_kernel_is_caught() { + let d = blocking::discover(); + if d.found.is_empty() { + println!("ops-gpu semantics mutant: SKIPPED: no adapter"); + assert!(std::env::var_os("WAI_OPS_GPU_REQUIRE").is_none(), "WAI_OPS_GPU_REQUIRE is set and no adapter was found"); + return; + } + let mut src = Sources::shipped(); + let from = "case 10u: { r = bitcast(ia % ib); }"; + assert!(src.semantics.contains(from)); + src.semantics = src.semantics.replace(from, "case 10u: { r = bitcast(ia - (ia / ib) * ib); }"); + let m = blocking::discover_with(&src, "mutant: a remainder by hand"); + assert!(m.found.is_empty(), "an adapter passed the semantics suite with a remainder written by hand"); + for (a, why) in &m.refused { + assert!(why.contains("WGSL semantics suite") && why.contains("rem_i32"), "{}: refused for another reason: {why}", a.key()); + report(&format!("ops-gpu semantics mutant: key={} refused: {why}", a.key())); + } + assert_eq!(m.refused.len(), d.found.len() + d.refused.len()); +} diff --git a/wai/wgsl-conformance/.gitattributes b/wai/wgsl-conformance/.gitattributes new file mode 100644 index 000000000..683492fc1 --- /dev/null +++ b/wai/wgsl-conformance/.gitattributes @@ -0,0 +1,2 @@ +# Compared as bytes: a line-ending conversion on checkout would change the file. +* -text diff --git a/wai/wgsl-conformance/README.md b/wai/wgsl-conformance/README.md new file mode 100644 index 000000000..6731f8eaa --- /dev/null +++ b/wai/wgsl-conformance/README.md @@ -0,0 +1,37 @@ +# wgsl-conformance — WGSL's integer semantics on a GPU + +The vectors an adapter passes before it runs a graph of a decode at `decode-equivalence` +([`extensions/determinism-tiers.md`](../extensions/determinism-tiers.md) §5, *Claiming +the tier on a GPU*, item 5): every integer operation WGSL defines on `i32`, `u32` and +two-component vectors of them, at the cases WGSL defines at run time and the languages it +is translated into leave open — wrapping addition, subtraction, multiplication and +negation; division and remainder by zero and of the most negative `i32` by −1; shift +amounts from 0 to 40 and past them; `clamp` with its bounds in and out of order; +`abs`, `sign`, the bit counts and positions; bit fields at and past the word; the +conversions between `i32`, `u32` and `bool`. + +**Provenance.** Written by `wai/wai-ops-gpu`'s `wai-wgsl-vectors` binary from +`wai_ops_gpu::semantics::reference`, which states each result from the text of WGSL +(W3C Candidate Recommendation Draft, 21 October 2026, §8.8, §8.10, §17.5), not from a +shader. No case comes from a device. + +## Layout + +- `integer.jsonl` — one JSON object per operation, in the order of its `code`: `op`, its + name; `code`, the operation's number in `wai-ops-gpu/src/wgsl/semantics.wgsl`; `wgsl`, + the expression evaluated, with `a`, `b`, `c`, `d` the operands as `u32` and `ia` … `id` + their bits as `i32`; and `cases`, each `[a, b, c, d, result]` as eight lowercase + hexadecimal digits, followed by `"unguarded"` for a case the module of item 4 never + reaches (a shift amount of 32 or more, `clamp` bounds out of order). A vector + operation's result is its two components folded into one word, + `x ^ (y × 0x9E3779B9)` modulo 2^32. + +## Equivalence + +An adapter conforms when, for every case not marked `unguarded`, the word it computes +for the operation on the operands, read from memory at run time, is `result`. Results on +`unguarded` cases are reported, and do not decide conformance. + +The file is checked against the reference natively (`wai-ops-gpu/tests/semantics.rs`), +under Node (`wai-ops-gpu/browser/semantics_reference.mjs`) and in a browser page +(`wai-ops-gpu/browser/run.mjs`), the last two running the reference compiled to wasm32. diff --git a/wai/wgsl-conformance/integer.jsonl b/wai/wgsl-conformance/integer.jsonl new file mode 100644 index 000000000..1c438fe15 --- /dev/null +++ b/wai/wgsl-conformance/integer.jsonl @@ -0,0 +1,56 @@ +{"op":"add_u32","code":0,"wgsl":"a + b","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000002","00000000","00000000","00000002"],["00000000","00000003","00000000","00000000","00000003"],["00000000","00000005","00000000","00000000","00000005"],["00000000","00000007","00000000","00000000","00000007"],["00000000","0000001f","00000000","00000000","0000001f"],["00000000","00000020","00000000","00000000","00000020"],["00000000","00000021","00000000","00000000","00000021"],["00000000","0000003f","00000000","00000000","0000003f"],["00000000","00000040","00000000","00000000","00000040"],["00000000","000000ff","00000000","00000000","000000ff"],["00000000","00007fff","00000000","00000000","00007fff"],["00000000","00008000","00000000","00000000","00008000"],["00000000","0000ffff","00000000","00000000","0000ffff"],["00000000","00010000","00000000","00000000","00010000"],["00000000","55555555","00000000","00000000","55555555"],["00000000","7ffffffe","00000000","00000000","7ffffffe"],["00000000","7fffffff","00000000","00000000","7fffffff"],["00000000","80000000","00000000","00000000","80000000"],["00000000","80000001","00000000","00000000","80000001"],["00000000","aaaaaaaa","00000000","00000000","aaaaaaaa"],["00000000","deadbeef","00000000","00000000","deadbeef"],["00000000","ffff0000","00000000","00000000","ffff0000"],["00000000","ffff8000","00000000","00000000","ffff8000"],["00000000","ffffffe0","00000000","00000000","ffffffe0"],["00000000","ffffffe1","00000000","00000000","ffffffe1"],["00000000","fffffff9","00000000","00000000","fffffff9"],["00000000","fffffffd","00000000","00000000","fffffffd"],["00000000","fffffffe","00000000","00000000","fffffffe"],["00000000","ffffffff","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000002"],["00000001","00000002","00000000","00000000","00000003"],["00000001","00000003","00000000","00000000","00000004"],["00000001","00000005","00000000","00000000","00000006"],["00000001","00000007","00000000","00000000","00000008"],["00000001","0000001f","00000000","00000000","00000020"],["00000001","00000020","00000000","00000000","00000021"],["00000001","00000021","00000000","00000000","00000022"],["00000001","0000003f","00000000","00000000","00000040"],["00000001","00000040","00000000","00000000","00000041"],["00000001","000000ff","00000000","00000000","00000100"],["00000001","00007fff","00000000","00000000","00008000"],["00000001","00008000","00000000","00000000","00008001"],["00000001","0000ffff","00000000","00000000","00010000"],["00000001","00010000","00000000","00000000","00010001"],["00000001","55555555","00000000","00000000","55555556"],["00000001","7ffffffe","00000000","00000000","7fffffff"],["00000001","7fffffff","00000000","00000000","80000000"],["00000001","80000000","00000000","00000000","80000001"],["00000001","80000001","00000000","00000000","80000002"],["00000001","aaaaaaaa","00000000","00000000","aaaaaaab"],["00000001","deadbeef","00000000","00000000","deadbef0"],["00000001","ffff0000","00000000","00000000","ffff0001"],["00000001","ffff8000","00000000","00000000","ffff8001"],["00000001","ffffffe0","00000000","00000000","ffffffe1"],["00000001","ffffffe1","00000000","00000000","ffffffe2"],["00000001","fffffff9","00000000","00000000","fffffffa"],["00000001","fffffffd","00000000","00000000","fffffffe"],["00000001","fffffffe","00000000","00000000","ffffffff"],["00000001","ffffffff","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","00000002"],["00000002","00000001","00000000","00000000","00000003"],["00000002","00000002","00000000","00000000","00000004"],["00000002","00000003","00000000","00000000","00000005"],["00000002","00000005","00000000","00000000","00000007"],["00000002","00000007","00000000","00000000","00000009"],["00000002","0000001f","00000000","00000000","00000021"],["00000002","00000020","00000000","00000000","00000022"],["00000002","00000021","00000000","00000000","00000023"],["00000002","0000003f","00000000","00000000","00000041"],["00000002","00000040","00000000","00000000","00000042"],["00000002","000000ff","00000000","00000000","00000101"],["00000002","00007fff","00000000","00000000","00008001"],["00000002","00008000","00000000","00000000","00008002"],["00000002","0000ffff","00000000","00000000","00010001"],["00000002","00010000","00000000","00000000","00010002"],["00000002","55555555","00000000","00000000","55555557"],["00000002","7ffffffe","00000000","00000000","80000000"],["00000002","7fffffff","00000000","00000000","80000001"],["00000002","80000000","00000000","00000000","80000002"],["00000002","80000001","00000000","00000000","80000003"],["00000002","aaaaaaaa","00000000","00000000","aaaaaaac"],["00000002","deadbeef","00000000","00000000","deadbef1"],["00000002","ffff0000","00000000","00000000","ffff0002"],["00000002","ffff8000","00000000","00000000","ffff8002"],["00000002","ffffffe0","00000000","00000000","ffffffe2"],["00000002","ffffffe1","00000000","00000000","ffffffe3"],["00000002","fffffff9","00000000","00000000","fffffffb"],["00000002","fffffffd","00000000","00000000","ffffffff"],["00000002","fffffffe","00000000","00000000","00000000"],["00000002","ffffffff","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000003"],["00000003","00000001","00000000","00000000","00000004"],["00000003","00000002","00000000","00000000","00000005"],["00000003","00000003","00000000","00000000","00000006"],["00000003","00000005","00000000","00000000","00000008"],["00000003","00000007","00000000","00000000","0000000a"],["00000003","0000001f","00000000","00000000","00000022"],["00000003","00000020","00000000","00000000","00000023"],["00000003","00000021","00000000","00000000","00000024"],["00000003","0000003f","00000000","00000000","00000042"],["00000003","00000040","00000000","00000000","00000043"],["00000003","000000ff","00000000","00000000","00000102"],["00000003","00007fff","00000000","00000000","00008002"],["00000003","00008000","00000000","00000000","00008003"],["00000003","0000ffff","00000000","00000000","00010002"],["00000003","00010000","00000000","00000000","00010003"],["00000003","55555555","00000000","00000000","55555558"],["00000003","7ffffffe","00000000","00000000","80000001"],["00000003","7fffffff","00000000","00000000","80000002"],["00000003","80000000","00000000","00000000","80000003"],["00000003","80000001","00000000","00000000","80000004"],["00000003","aaaaaaaa","00000000","00000000","aaaaaaad"],["00000003","deadbeef","00000000","00000000","deadbef2"],["00000003","ffff0000","00000000","00000000","ffff0003"],["00000003","ffff8000","00000000","00000000","ffff8003"],["00000003","ffffffe0","00000000","00000000","ffffffe3"],["00000003","ffffffe1","00000000","00000000","ffffffe4"],["00000003","fffffff9","00000000","00000000","fffffffc"],["00000003","fffffffd","00000000","00000000","00000000"],["00000003","fffffffe","00000000","00000000","00000001"],["00000003","ffffffff","00000000","00000000","00000002"],["00000005","00000000","00000000","00000000","00000005"],["00000005","00000001","00000000","00000000","00000006"],["00000005","00000002","00000000","00000000","00000007"],["00000005","00000003","00000000","00000000","00000008"],["00000005","00000005","00000000","00000000","0000000a"],["00000005","00000007","00000000","00000000","0000000c"],["00000005","0000001f","00000000","00000000","00000024"],["00000005","00000020","00000000","00000000","00000025"],["00000005","00000021","00000000","00000000","00000026"],["00000005","0000003f","00000000","00000000","00000044"],["00000005","00000040","00000000","00000000","00000045"],["00000005","000000ff","00000000","00000000","00000104"],["00000005","00007fff","00000000","00000000","00008004"],["00000005","00008000","00000000","00000000","00008005"],["00000005","0000ffff","00000000","00000000","00010004"],["00000005","00010000","00000000","00000000","00010005"],["00000005","55555555","00000000","00000000","5555555a"],["00000005","7ffffffe","00000000","00000000","80000003"],["00000005","7fffffff","00000000","00000000","80000004"],["00000005","80000000","00000000","00000000","80000005"],["00000005","80000001","00000000","00000000","80000006"],["00000005","aaaaaaaa","00000000","00000000","aaaaaaaf"],["00000005","deadbeef","00000000","00000000","deadbef4"],["00000005","ffff0000","00000000","00000000","ffff0005"],["00000005","ffff8000","00000000","00000000","ffff8005"],["00000005","ffffffe0","00000000","00000000","ffffffe5"],["00000005","ffffffe1","00000000","00000000","ffffffe6"],["00000005","fffffff9","00000000","00000000","fffffffe"],["00000005","fffffffd","00000000","00000000","00000002"],["00000005","fffffffe","00000000","00000000","00000003"],["00000005","ffffffff","00000000","00000000","00000004"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","00000008"],["00000007","00000002","00000000","00000000","00000009"],["00000007","00000003","00000000","00000000","0000000a"],["00000007","00000005","00000000","00000000","0000000c"],["00000007","00000007","00000000","00000000","0000000e"],["00000007","0000001f","00000000","00000000","00000026"],["00000007","00000020","00000000","00000000","00000027"],["00000007","00000021","00000000","00000000","00000028"],["00000007","0000003f","00000000","00000000","00000046"],["00000007","00000040","00000000","00000000","00000047"],["00000007","000000ff","00000000","00000000","00000106"],["00000007","00007fff","00000000","00000000","00008006"],["00000007","00008000","00000000","00000000","00008007"],["00000007","0000ffff","00000000","00000000","00010006"],["00000007","00010000","00000000","00000000","00010007"],["00000007","55555555","00000000","00000000","5555555c"],["00000007","7ffffffe","00000000","00000000","80000005"],["00000007","7fffffff","00000000","00000000","80000006"],["00000007","80000000","00000000","00000000","80000007"],["00000007","80000001","00000000","00000000","80000008"],["00000007","aaaaaaaa","00000000","00000000","aaaaaab1"],["00000007","deadbeef","00000000","00000000","deadbef6"],["00000007","ffff0000","00000000","00000000","ffff0007"],["00000007","ffff8000","00000000","00000000","ffff8007"],["00000007","ffffffe0","00000000","00000000","ffffffe7"],["00000007","ffffffe1","00000000","00000000","ffffffe8"],["00000007","fffffff9","00000000","00000000","00000000"],["00000007","fffffffd","00000000","00000000","00000004"],["00000007","fffffffe","00000000","00000000","00000005"],["00000007","ffffffff","00000000","00000000","00000006"],["0000001f","00000000","00000000","00000000","0000001f"],["0000001f","00000001","00000000","00000000","00000020"],["0000001f","00000002","00000000","00000000","00000021"],["0000001f","00000003","00000000","00000000","00000022"],["0000001f","00000005","00000000","00000000","00000024"],["0000001f","00000007","00000000","00000000","00000026"],["0000001f","0000001f","00000000","00000000","0000003e"],["0000001f","00000020","00000000","00000000","0000003f"],["0000001f","00000021","00000000","00000000","00000040"],["0000001f","0000003f","00000000","00000000","0000005e"],["0000001f","00000040","00000000","00000000","0000005f"],["0000001f","000000ff","00000000","00000000","0000011e"],["0000001f","00007fff","00000000","00000000","0000801e"],["0000001f","00008000","00000000","00000000","0000801f"],["0000001f","0000ffff","00000000","00000000","0001001e"],["0000001f","00010000","00000000","00000000","0001001f"],["0000001f","55555555","00000000","00000000","55555574"],["0000001f","7ffffffe","00000000","00000000","8000001d"],["0000001f","7fffffff","00000000","00000000","8000001e"],["0000001f","80000000","00000000","00000000","8000001f"],["0000001f","80000001","00000000","00000000","80000020"],["0000001f","aaaaaaaa","00000000","00000000","aaaaaac9"],["0000001f","deadbeef","00000000","00000000","deadbf0e"],["0000001f","ffff0000","00000000","00000000","ffff001f"],["0000001f","ffff8000","00000000","00000000","ffff801f"],["0000001f","ffffffe0","00000000","00000000","ffffffff"],["0000001f","ffffffe1","00000000","00000000","00000000"],["0000001f","fffffff9","00000000","00000000","00000018"],["0000001f","fffffffd","00000000","00000000","0000001c"],["0000001f","fffffffe","00000000","00000000","0000001d"],["0000001f","ffffffff","00000000","00000000","0000001e"],["00000020","00000000","00000000","00000000","00000020"],["00000020","00000001","00000000","00000000","00000021"],["00000020","00000002","00000000","00000000","00000022"],["00000020","00000003","00000000","00000000","00000023"],["00000020","00000005","00000000","00000000","00000025"],["00000020","00000007","00000000","00000000","00000027"],["00000020","0000001f","00000000","00000000","0000003f"],["00000020","00000020","00000000","00000000","00000040"],["00000020","00000021","00000000","00000000","00000041"],["00000020","0000003f","00000000","00000000","0000005f"],["00000020","00000040","00000000","00000000","00000060"],["00000020","000000ff","00000000","00000000","0000011f"],["00000020","00007fff","00000000","00000000","0000801f"],["00000020","00008000","00000000","00000000","00008020"],["00000020","0000ffff","00000000","00000000","0001001f"],["00000020","00010000","00000000","00000000","00010020"],["00000020","55555555","00000000","00000000","55555575"],["00000020","7ffffffe","00000000","00000000","8000001e"],["00000020","7fffffff","00000000","00000000","8000001f"],["00000020","80000000","00000000","00000000","80000020"],["00000020","80000001","00000000","00000000","80000021"],["00000020","aaaaaaaa","00000000","00000000","aaaaaaca"],["00000020","deadbeef","00000000","00000000","deadbf0f"],["00000020","ffff0000","00000000","00000000","ffff0020"],["00000020","ffff8000","00000000","00000000","ffff8020"],["00000020","ffffffe0","00000000","00000000","00000000"],["00000020","ffffffe1","00000000","00000000","00000001"],["00000020","fffffff9","00000000","00000000","00000019"],["00000020","fffffffd","00000000","00000000","0000001d"],["00000020","fffffffe","00000000","00000000","0000001e"],["00000020","ffffffff","00000000","00000000","0000001f"],["00000021","00000000","00000000","00000000","00000021"],["00000021","00000001","00000000","00000000","00000022"],["00000021","00000002","00000000","00000000","00000023"],["00000021","00000003","00000000","00000000","00000024"],["00000021","00000005","00000000","00000000","00000026"],["00000021","00000007","00000000","00000000","00000028"],["00000021","0000001f","00000000","00000000","00000040"],["00000021","00000020","00000000","00000000","00000041"],["00000021","00000021","00000000","00000000","00000042"],["00000021","0000003f","00000000","00000000","00000060"],["00000021","00000040","00000000","00000000","00000061"],["00000021","000000ff","00000000","00000000","00000120"],["00000021","00007fff","00000000","00000000","00008020"],["00000021","00008000","00000000","00000000","00008021"],["00000021","0000ffff","00000000","00000000","00010020"],["00000021","00010000","00000000","00000000","00010021"],["00000021","55555555","00000000","00000000","55555576"],["00000021","7ffffffe","00000000","00000000","8000001f"],["00000021","7fffffff","00000000","00000000","80000020"],["00000021","80000000","00000000","00000000","80000021"],["00000021","80000001","00000000","00000000","80000022"],["00000021","aaaaaaaa","00000000","00000000","aaaaaacb"],["00000021","deadbeef","00000000","00000000","deadbf10"],["00000021","ffff0000","00000000","00000000","ffff0021"],["00000021","ffff8000","00000000","00000000","ffff8021"],["00000021","ffffffe0","00000000","00000000","00000001"],["00000021","ffffffe1","00000000","00000000","00000002"],["00000021","fffffff9","00000000","00000000","0000001a"],["00000021","fffffffd","00000000","00000000","0000001e"],["00000021","fffffffe","00000000","00000000","0000001f"],["00000021","ffffffff","00000000","00000000","00000020"],["0000003f","00000000","00000000","00000000","0000003f"],["0000003f","00000001","00000000","00000000","00000040"],["0000003f","00000002","00000000","00000000","00000041"],["0000003f","00000003","00000000","00000000","00000042"],["0000003f","00000005","00000000","00000000","00000044"],["0000003f","00000007","00000000","00000000","00000046"],["0000003f","0000001f","00000000","00000000","0000005e"],["0000003f","00000020","00000000","00000000","0000005f"],["0000003f","00000021","00000000","00000000","00000060"],["0000003f","0000003f","00000000","00000000","0000007e"],["0000003f","00000040","00000000","00000000","0000007f"],["0000003f","000000ff","00000000","00000000","0000013e"],["0000003f","00007fff","00000000","00000000","0000803e"],["0000003f","00008000","00000000","00000000","0000803f"],["0000003f","0000ffff","00000000","00000000","0001003e"],["0000003f","00010000","00000000","00000000","0001003f"],["0000003f","55555555","00000000","00000000","55555594"],["0000003f","7ffffffe","00000000","00000000","8000003d"],["0000003f","7fffffff","00000000","00000000","8000003e"],["0000003f","80000000","00000000","00000000","8000003f"],["0000003f","80000001","00000000","00000000","80000040"],["0000003f","aaaaaaaa","00000000","00000000","aaaaaae9"],["0000003f","deadbeef","00000000","00000000","deadbf2e"],["0000003f","ffff0000","00000000","00000000","ffff003f"],["0000003f","ffff8000","00000000","00000000","ffff803f"],["0000003f","ffffffe0","00000000","00000000","0000001f"],["0000003f","ffffffe1","00000000","00000000","00000020"],["0000003f","fffffff9","00000000","00000000","00000038"],["0000003f","fffffffd","00000000","00000000","0000003c"],["0000003f","fffffffe","00000000","00000000","0000003d"],["0000003f","ffffffff","00000000","00000000","0000003e"],["00000040","00000000","00000000","00000000","00000040"],["00000040","00000001","00000000","00000000","00000041"],["00000040","00000002","00000000","00000000","00000042"],["00000040","00000003","00000000","00000000","00000043"],["00000040","00000005","00000000","00000000","00000045"],["00000040","00000007","00000000","00000000","00000047"],["00000040","0000001f","00000000","00000000","0000005f"],["00000040","00000020","00000000","00000000","00000060"],["00000040","00000021","00000000","00000000","00000061"],["00000040","0000003f","00000000","00000000","0000007f"],["00000040","00000040","00000000","00000000","00000080"],["00000040","000000ff","00000000","00000000","0000013f"],["00000040","00007fff","00000000","00000000","0000803f"],["00000040","00008000","00000000","00000000","00008040"],["00000040","0000ffff","00000000","00000000","0001003f"],["00000040","00010000","00000000","00000000","00010040"],["00000040","55555555","00000000","00000000","55555595"],["00000040","7ffffffe","00000000","00000000","8000003e"],["00000040","7fffffff","00000000","00000000","8000003f"],["00000040","80000000","00000000","00000000","80000040"],["00000040","80000001","00000000","00000000","80000041"],["00000040","aaaaaaaa","00000000","00000000","aaaaaaea"],["00000040","deadbeef","00000000","00000000","deadbf2f"],["00000040","ffff0000","00000000","00000000","ffff0040"],["00000040","ffff8000","00000000","00000000","ffff8040"],["00000040","ffffffe0","00000000","00000000","00000020"],["00000040","ffffffe1","00000000","00000000","00000021"],["00000040","fffffff9","00000000","00000000","00000039"],["00000040","fffffffd","00000000","00000000","0000003d"],["00000040","fffffffe","00000000","00000000","0000003e"],["00000040","ffffffff","00000000","00000000","0000003f"],["000000ff","00000000","00000000","00000000","000000ff"],["000000ff","00000001","00000000","00000000","00000100"],["000000ff","00000002","00000000","00000000","00000101"],["000000ff","00000003","00000000","00000000","00000102"],["000000ff","00000005","00000000","00000000","00000104"],["000000ff","00000007","00000000","00000000","00000106"],["000000ff","0000001f","00000000","00000000","0000011e"],["000000ff","00000020","00000000","00000000","0000011f"],["000000ff","00000021","00000000","00000000","00000120"],["000000ff","0000003f","00000000","00000000","0000013e"],["000000ff","00000040","00000000","00000000","0000013f"],["000000ff","000000ff","00000000","00000000","000001fe"],["000000ff","00007fff","00000000","00000000","000080fe"],["000000ff","00008000","00000000","00000000","000080ff"],["000000ff","0000ffff","00000000","00000000","000100fe"],["000000ff","00010000","00000000","00000000","000100ff"],["000000ff","55555555","00000000","00000000","55555654"],["000000ff","7ffffffe","00000000","00000000","800000fd"],["000000ff","7fffffff","00000000","00000000","800000fe"],["000000ff","80000000","00000000","00000000","800000ff"],["000000ff","80000001","00000000","00000000","80000100"],["000000ff","aaaaaaaa","00000000","00000000","aaaaaba9"],["000000ff","deadbeef","00000000","00000000","deadbfee"],["000000ff","ffff0000","00000000","00000000","ffff00ff"],["000000ff","ffff8000","00000000","00000000","ffff80ff"],["000000ff","ffffffe0","00000000","00000000","000000df"],["000000ff","ffffffe1","00000000","00000000","000000e0"],["000000ff","fffffff9","00000000","00000000","000000f8"],["000000ff","fffffffd","00000000","00000000","000000fc"],["000000ff","fffffffe","00000000","00000000","000000fd"],["000000ff","ffffffff","00000000","00000000","000000fe"],["00007fff","00000000","00000000","00000000","00007fff"],["00007fff","00000001","00000000","00000000","00008000"],["00007fff","00000002","00000000","00000000","00008001"],["00007fff","00000003","00000000","00000000","00008002"],["00007fff","00000005","00000000","00000000","00008004"],["00007fff","00000007","00000000","00000000","00008006"],["00007fff","0000001f","00000000","00000000","0000801e"],["00007fff","00000020","00000000","00000000","0000801f"],["00007fff","00000021","00000000","00000000","00008020"],["00007fff","0000003f","00000000","00000000","0000803e"],["00007fff","00000040","00000000","00000000","0000803f"],["00007fff","000000ff","00000000","00000000","000080fe"],["00007fff","00007fff","00000000","00000000","0000fffe"],["00007fff","00008000","00000000","00000000","0000ffff"],["00007fff","0000ffff","00000000","00000000","00017ffe"],["00007fff","00010000","00000000","00000000","00017fff"],["00007fff","55555555","00000000","00000000","5555d554"],["00007fff","7ffffffe","00000000","00000000","80007ffd"],["00007fff","7fffffff","00000000","00000000","80007ffe"],["00007fff","80000000","00000000","00000000","80007fff"],["00007fff","80000001","00000000","00000000","80008000"],["00007fff","aaaaaaaa","00000000","00000000","aaab2aa9"],["00007fff","deadbeef","00000000","00000000","deae3eee"],["00007fff","ffff0000","00000000","00000000","ffff7fff"],["00007fff","ffff8000","00000000","00000000","ffffffff"],["00007fff","ffffffe0","00000000","00000000","00007fdf"],["00007fff","ffffffe1","00000000","00000000","00007fe0"],["00007fff","fffffff9","00000000","00000000","00007ff8"],["00007fff","fffffffd","00000000","00000000","00007ffc"],["00007fff","fffffffe","00000000","00000000","00007ffd"],["00007fff","ffffffff","00000000","00000000","00007ffe"],["00008000","00000000","00000000","00000000","00008000"],["00008000","00000001","00000000","00000000","00008001"],["00008000","00000002","00000000","00000000","00008002"],["00008000","00000003","00000000","00000000","00008003"],["00008000","00000005","00000000","00000000","00008005"],["00008000","00000007","00000000","00000000","00008007"],["00008000","0000001f","00000000","00000000","0000801f"],["00008000","00000020","00000000","00000000","00008020"],["00008000","00000021","00000000","00000000","00008021"],["00008000","0000003f","00000000","00000000","0000803f"],["00008000","00000040","00000000","00000000","00008040"],["00008000","000000ff","00000000","00000000","000080ff"],["00008000","00007fff","00000000","00000000","0000ffff"],["00008000","00008000","00000000","00000000","00010000"],["00008000","0000ffff","00000000","00000000","00017fff"],["00008000","00010000","00000000","00000000","00018000"],["00008000","55555555","00000000","00000000","5555d555"],["00008000","7ffffffe","00000000","00000000","80007ffe"],["00008000","7fffffff","00000000","00000000","80007fff"],["00008000","80000000","00000000","00000000","80008000"],["00008000","80000001","00000000","00000000","80008001"],["00008000","aaaaaaaa","00000000","00000000","aaab2aaa"],["00008000","deadbeef","00000000","00000000","deae3eef"],["00008000","ffff0000","00000000","00000000","ffff8000"],["00008000","ffff8000","00000000","00000000","00000000"],["00008000","ffffffe0","00000000","00000000","00007fe0"],["00008000","ffffffe1","00000000","00000000","00007fe1"],["00008000","fffffff9","00000000","00000000","00007ff9"],["00008000","fffffffd","00000000","00000000","00007ffd"],["00008000","fffffffe","00000000","00000000","00007ffe"],["00008000","ffffffff","00000000","00000000","00007fff"],["0000ffff","00000000","00000000","00000000","0000ffff"],["0000ffff","00000001","00000000","00000000","00010000"],["0000ffff","00000002","00000000","00000000","00010001"],["0000ffff","00000003","00000000","00000000","00010002"],["0000ffff","00000005","00000000","00000000","00010004"],["0000ffff","00000007","00000000","00000000","00010006"],["0000ffff","0000001f","00000000","00000000","0001001e"],["0000ffff","00000020","00000000","00000000","0001001f"],["0000ffff","00000021","00000000","00000000","00010020"],["0000ffff","0000003f","00000000","00000000","0001003e"],["0000ffff","00000040","00000000","00000000","0001003f"],["0000ffff","000000ff","00000000","00000000","000100fe"],["0000ffff","00007fff","00000000","00000000","00017ffe"],["0000ffff","00008000","00000000","00000000","00017fff"],["0000ffff","0000ffff","00000000","00000000","0001fffe"],["0000ffff","00010000","00000000","00000000","0001ffff"],["0000ffff","55555555","00000000","00000000","55565554"],["0000ffff","7ffffffe","00000000","00000000","8000fffd"],["0000ffff","7fffffff","00000000","00000000","8000fffe"],["0000ffff","80000000","00000000","00000000","8000ffff"],["0000ffff","80000001","00000000","00000000","80010000"],["0000ffff","aaaaaaaa","00000000","00000000","aaabaaa9"],["0000ffff","deadbeef","00000000","00000000","deaebeee"],["0000ffff","ffff0000","00000000","00000000","ffffffff"],["0000ffff","ffff8000","00000000","00000000","00007fff"],["0000ffff","ffffffe0","00000000","00000000","0000ffdf"],["0000ffff","ffffffe1","00000000","00000000","0000ffe0"],["0000ffff","fffffff9","00000000","00000000","0000fff8"],["0000ffff","fffffffd","00000000","00000000","0000fffc"],["0000ffff","fffffffe","00000000","00000000","0000fffd"],["0000ffff","ffffffff","00000000","00000000","0000fffe"],["00010000","00000000","00000000","00000000","00010000"],["00010000","00000001","00000000","00000000","00010001"],["00010000","00000002","00000000","00000000","00010002"],["00010000","00000003","00000000","00000000","00010003"],["00010000","00000005","00000000","00000000","00010005"],["00010000","00000007","00000000","00000000","00010007"],["00010000","0000001f","00000000","00000000","0001001f"],["00010000","00000020","00000000","00000000","00010020"],["00010000","00000021","00000000","00000000","00010021"],["00010000","0000003f","00000000","00000000","0001003f"],["00010000","00000040","00000000","00000000","00010040"],["00010000","000000ff","00000000","00000000","000100ff"],["00010000","00007fff","00000000","00000000","00017fff"],["00010000","00008000","00000000","00000000","00018000"],["00010000","0000ffff","00000000","00000000","0001ffff"],["00010000","00010000","00000000","00000000","00020000"],["00010000","55555555","00000000","00000000","55565555"],["00010000","7ffffffe","00000000","00000000","8000fffe"],["00010000","7fffffff","00000000","00000000","8000ffff"],["00010000","80000000","00000000","00000000","80010000"],["00010000","80000001","00000000","00000000","80010001"],["00010000","aaaaaaaa","00000000","00000000","aaabaaaa"],["00010000","deadbeef","00000000","00000000","deaebeef"],["00010000","ffff0000","00000000","00000000","00000000"],["00010000","ffff8000","00000000","00000000","00008000"],["00010000","ffffffe0","00000000","00000000","0000ffe0"],["00010000","ffffffe1","00000000","00000000","0000ffe1"],["00010000","fffffff9","00000000","00000000","0000fff9"],["00010000","fffffffd","00000000","00000000","0000fffd"],["00010000","fffffffe","00000000","00000000","0000fffe"],["00010000","ffffffff","00000000","00000000","0000ffff"],["55555555","00000000","00000000","00000000","55555555"],["55555555","00000001","00000000","00000000","55555556"],["55555555","00000002","00000000","00000000","55555557"],["55555555","00000003","00000000","00000000","55555558"],["55555555","00000005","00000000","00000000","5555555a"],["55555555","00000007","00000000","00000000","5555555c"],["55555555","0000001f","00000000","00000000","55555574"],["55555555","00000020","00000000","00000000","55555575"],["55555555","00000021","00000000","00000000","55555576"],["55555555","0000003f","00000000","00000000","55555594"],["55555555","00000040","00000000","00000000","55555595"],["55555555","000000ff","00000000","00000000","55555654"],["55555555","00007fff","00000000","00000000","5555d554"],["55555555","00008000","00000000","00000000","5555d555"],["55555555","0000ffff","00000000","00000000","55565554"],["55555555","00010000","00000000","00000000","55565555"],["55555555","55555555","00000000","00000000","aaaaaaaa"],["55555555","7ffffffe","00000000","00000000","d5555553"],["55555555","7fffffff","00000000","00000000","d5555554"],["55555555","80000000","00000000","00000000","d5555555"],["55555555","80000001","00000000","00000000","d5555556"],["55555555","aaaaaaaa","00000000","00000000","ffffffff"],["55555555","deadbeef","00000000","00000000","34031444"],["55555555","ffff0000","00000000","00000000","55545555"],["55555555","ffff8000","00000000","00000000","5554d555"],["55555555","ffffffe0","00000000","00000000","55555535"],["55555555","ffffffe1","00000000","00000000","55555536"],["55555555","fffffff9","00000000","00000000","5555554e"],["55555555","fffffffd","00000000","00000000","55555552"],["55555555","fffffffe","00000000","00000000","55555553"],["55555555","ffffffff","00000000","00000000","55555554"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7ffffffe","00000001","00000000","00000000","7fffffff"],["7ffffffe","00000002","00000000","00000000","80000000"],["7ffffffe","00000003","00000000","00000000","80000001"],["7ffffffe","00000005","00000000","00000000","80000003"],["7ffffffe","00000007","00000000","00000000","80000005"],["7ffffffe","0000001f","00000000","00000000","8000001d"],["7ffffffe","00000020","00000000","00000000","8000001e"],["7ffffffe","00000021","00000000","00000000","8000001f"],["7ffffffe","0000003f","00000000","00000000","8000003d"],["7ffffffe","00000040","00000000","00000000","8000003e"],["7ffffffe","000000ff","00000000","00000000","800000fd"],["7ffffffe","00007fff","00000000","00000000","80007ffd"],["7ffffffe","00008000","00000000","00000000","80007ffe"],["7ffffffe","0000ffff","00000000","00000000","8000fffd"],["7ffffffe","00010000","00000000","00000000","8000fffe"],["7ffffffe","55555555","00000000","00000000","d5555553"],["7ffffffe","7ffffffe","00000000","00000000","fffffffc"],["7ffffffe","7fffffff","00000000","00000000","fffffffd"],["7ffffffe","80000000","00000000","00000000","fffffffe"],["7ffffffe","80000001","00000000","00000000","ffffffff"],["7ffffffe","aaaaaaaa","00000000","00000000","2aaaaaa8"],["7ffffffe","deadbeef","00000000","00000000","5eadbeed"],["7ffffffe","ffff0000","00000000","00000000","7ffefffe"],["7ffffffe","ffff8000","00000000","00000000","7fff7ffe"],["7ffffffe","ffffffe0","00000000","00000000","7fffffde"],["7ffffffe","ffffffe1","00000000","00000000","7fffffdf"],["7ffffffe","fffffff9","00000000","00000000","7ffffff7"],["7ffffffe","fffffffd","00000000","00000000","7ffffffb"],["7ffffffe","fffffffe","00000000","00000000","7ffffffc"],["7ffffffe","ffffffff","00000000","00000000","7ffffffd"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","80000000"],["7fffffff","00000002","00000000","00000000","80000001"],["7fffffff","00000003","00000000","00000000","80000002"],["7fffffff","00000005","00000000","00000000","80000004"],["7fffffff","00000007","00000000","00000000","80000006"],["7fffffff","0000001f","00000000","00000000","8000001e"],["7fffffff","00000020","00000000","00000000","8000001f"],["7fffffff","00000021","00000000","00000000","80000020"],["7fffffff","0000003f","00000000","00000000","8000003e"],["7fffffff","00000040","00000000","00000000","8000003f"],["7fffffff","000000ff","00000000","00000000","800000fe"],["7fffffff","00007fff","00000000","00000000","80007ffe"],["7fffffff","00008000","00000000","00000000","80007fff"],["7fffffff","0000ffff","00000000","00000000","8000fffe"],["7fffffff","00010000","00000000","00000000","8000ffff"],["7fffffff","55555555","00000000","00000000","d5555554"],["7fffffff","7ffffffe","00000000","00000000","fffffffd"],["7fffffff","7fffffff","00000000","00000000","fffffffe"],["7fffffff","80000000","00000000","00000000","ffffffff"],["7fffffff","80000001","00000000","00000000","00000000"],["7fffffff","aaaaaaaa","00000000","00000000","2aaaaaa9"],["7fffffff","deadbeef","00000000","00000000","5eadbeee"],["7fffffff","ffff0000","00000000","00000000","7ffeffff"],["7fffffff","ffff8000","00000000","00000000","7fff7fff"],["7fffffff","ffffffe0","00000000","00000000","7fffffdf"],["7fffffff","ffffffe1","00000000","00000000","7fffffe0"],["7fffffff","fffffff9","00000000","00000000","7ffffff8"],["7fffffff","fffffffd","00000000","00000000","7ffffffc"],["7fffffff","fffffffe","00000000","00000000","7ffffffd"],["7fffffff","ffffffff","00000000","00000000","7ffffffe"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","80000001"],["80000000","00000002","00000000","00000000","80000002"],["80000000","00000003","00000000","00000000","80000003"],["80000000","00000005","00000000","00000000","80000005"],["80000000","00000007","00000000","00000000","80000007"],["80000000","0000001f","00000000","00000000","8000001f"],["80000000","00000020","00000000","00000000","80000020"],["80000000","00000021","00000000","00000000","80000021"],["80000000","0000003f","00000000","00000000","8000003f"],["80000000","00000040","00000000","00000000","80000040"],["80000000","000000ff","00000000","00000000","800000ff"],["80000000","00007fff","00000000","00000000","80007fff"],["80000000","00008000","00000000","00000000","80008000"],["80000000","0000ffff","00000000","00000000","8000ffff"],["80000000","00010000","00000000","00000000","80010000"],["80000000","55555555","00000000","00000000","d5555555"],["80000000","7ffffffe","00000000","00000000","fffffffe"],["80000000","7fffffff","00000000","00000000","ffffffff"],["80000000","80000000","00000000","00000000","00000000"],["80000000","80000001","00000000","00000000","00000001"],["80000000","aaaaaaaa","00000000","00000000","2aaaaaaa"],["80000000","deadbeef","00000000","00000000","5eadbeef"],["80000000","ffff0000","00000000","00000000","7fff0000"],["80000000","ffff8000","00000000","00000000","7fff8000"],["80000000","ffffffe0","00000000","00000000","7fffffe0"],["80000000","ffffffe1","00000000","00000000","7fffffe1"],["80000000","fffffff9","00000000","00000000","7ffffff9"],["80000000","fffffffd","00000000","00000000","7ffffffd"],["80000000","fffffffe","00000000","00000000","7ffffffe"],["80000000","ffffffff","00000000","00000000","7fffffff"],["80000001","00000000","00000000","00000000","80000001"],["80000001","00000001","00000000","00000000","80000002"],["80000001","00000002","00000000","00000000","80000003"],["80000001","00000003","00000000","00000000","80000004"],["80000001","00000005","00000000","00000000","80000006"],["80000001","00000007","00000000","00000000","80000008"],["80000001","0000001f","00000000","00000000","80000020"],["80000001","00000020","00000000","00000000","80000021"],["80000001","00000021","00000000","00000000","80000022"],["80000001","0000003f","00000000","00000000","80000040"],["80000001","00000040","00000000","00000000","80000041"],["80000001","000000ff","00000000","00000000","80000100"],["80000001","00007fff","00000000","00000000","80008000"],["80000001","00008000","00000000","00000000","80008001"],["80000001","0000ffff","00000000","00000000","80010000"],["80000001","00010000","00000000","00000000","80010001"],["80000001","55555555","00000000","00000000","d5555556"],["80000001","7ffffffe","00000000","00000000","ffffffff"],["80000001","7fffffff","00000000","00000000","00000000"],["80000001","80000000","00000000","00000000","00000001"],["80000001","80000001","00000000","00000000","00000002"],["80000001","aaaaaaaa","00000000","00000000","2aaaaaab"],["80000001","deadbeef","00000000","00000000","5eadbef0"],["80000001","ffff0000","00000000","00000000","7fff0001"],["80000001","ffff8000","00000000","00000000","7fff8001"],["80000001","ffffffe0","00000000","00000000","7fffffe1"],["80000001","ffffffe1","00000000","00000000","7fffffe2"],["80000001","fffffff9","00000000","00000000","7ffffffa"],["80000001","fffffffd","00000000","00000000","7ffffffe"],["80000001","fffffffe","00000000","00000000","7fffffff"],["80000001","ffffffff","00000000","00000000","80000000"],["aaaaaaaa","00000000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000001","00000000","00000000","aaaaaaab"],["aaaaaaaa","00000002","00000000","00000000","aaaaaaac"],["aaaaaaaa","00000003","00000000","00000000","aaaaaaad"],["aaaaaaaa","00000005","00000000","00000000","aaaaaaaf"],["aaaaaaaa","00000007","00000000","00000000","aaaaaab1"],["aaaaaaaa","0000001f","00000000","00000000","aaaaaac9"],["aaaaaaaa","00000020","00000000","00000000","aaaaaaca"],["aaaaaaaa","00000021","00000000","00000000","aaaaaacb"],["aaaaaaaa","0000003f","00000000","00000000","aaaaaae9"],["aaaaaaaa","00000040","00000000","00000000","aaaaaaea"],["aaaaaaaa","000000ff","00000000","00000000","aaaaaba9"],["aaaaaaaa","00007fff","00000000","00000000","aaab2aa9"],["aaaaaaaa","00008000","00000000","00000000","aaab2aaa"],["aaaaaaaa","0000ffff","00000000","00000000","aaabaaa9"],["aaaaaaaa","00010000","00000000","00000000","aaabaaaa"],["aaaaaaaa","55555555","00000000","00000000","ffffffff"],["aaaaaaaa","7ffffffe","00000000","00000000","2aaaaaa8"],["aaaaaaaa","7fffffff","00000000","00000000","2aaaaaa9"],["aaaaaaaa","80000000","00000000","00000000","2aaaaaaa"],["aaaaaaaa","80000001","00000000","00000000","2aaaaaab"],["aaaaaaaa","aaaaaaaa","00000000","00000000","55555554"],["aaaaaaaa","deadbeef","00000000","00000000","89586999"],["aaaaaaaa","ffff0000","00000000","00000000","aaa9aaaa"],["aaaaaaaa","ffff8000","00000000","00000000","aaaa2aaa"],["aaaaaaaa","ffffffe0","00000000","00000000","aaaaaa8a"],["aaaaaaaa","ffffffe1","00000000","00000000","aaaaaa8b"],["aaaaaaaa","fffffff9","00000000","00000000","aaaaaaa3"],["aaaaaaaa","fffffffd","00000000","00000000","aaaaaaa7"],["aaaaaaaa","fffffffe","00000000","00000000","aaaaaaa8"],["aaaaaaaa","ffffffff","00000000","00000000","aaaaaaa9"],["deadbeef","00000000","00000000","00000000","deadbeef"],["deadbeef","00000001","00000000","00000000","deadbef0"],["deadbeef","00000002","00000000","00000000","deadbef1"],["deadbeef","00000003","00000000","00000000","deadbef2"],["deadbeef","00000005","00000000","00000000","deadbef4"],["deadbeef","00000007","00000000","00000000","deadbef6"],["deadbeef","0000001f","00000000","00000000","deadbf0e"],["deadbeef","00000020","00000000","00000000","deadbf0f"],["deadbeef","00000021","00000000","00000000","deadbf10"],["deadbeef","0000003f","00000000","00000000","deadbf2e"],["deadbeef","00000040","00000000","00000000","deadbf2f"],["deadbeef","000000ff","00000000","00000000","deadbfee"],["deadbeef","00007fff","00000000","00000000","deae3eee"],["deadbeef","00008000","00000000","00000000","deae3eef"],["deadbeef","0000ffff","00000000","00000000","deaebeee"],["deadbeef","00010000","00000000","00000000","deaebeef"],["deadbeef","55555555","00000000","00000000","34031444"],["deadbeef","7ffffffe","00000000","00000000","5eadbeed"],["deadbeef","7fffffff","00000000","00000000","5eadbeee"],["deadbeef","80000000","00000000","00000000","5eadbeef"],["deadbeef","80000001","00000000","00000000","5eadbef0"],["deadbeef","aaaaaaaa","00000000","00000000","89586999"],["deadbeef","deadbeef","00000000","00000000","bd5b7dde"],["deadbeef","ffff0000","00000000","00000000","deacbeef"],["deadbeef","ffff8000","00000000","00000000","dead3eef"],["deadbeef","ffffffe0","00000000","00000000","deadbecf"],["deadbeef","ffffffe1","00000000","00000000","deadbed0"],["deadbeef","fffffff9","00000000","00000000","deadbee8"],["deadbeef","fffffffd","00000000","00000000","deadbeec"],["deadbeef","fffffffe","00000000","00000000","deadbeed"],["deadbeef","ffffffff","00000000","00000000","deadbeee"],["ffff0000","00000000","00000000","00000000","ffff0000"],["ffff0000","00000001","00000000","00000000","ffff0001"],["ffff0000","00000002","00000000","00000000","ffff0002"],["ffff0000","00000003","00000000","00000000","ffff0003"],["ffff0000","00000005","00000000","00000000","ffff0005"],["ffff0000","00000007","00000000","00000000","ffff0007"],["ffff0000","0000001f","00000000","00000000","ffff001f"],["ffff0000","00000020","00000000","00000000","ffff0020"],["ffff0000","00000021","00000000","00000000","ffff0021"],["ffff0000","0000003f","00000000","00000000","ffff003f"],["ffff0000","00000040","00000000","00000000","ffff0040"],["ffff0000","000000ff","00000000","00000000","ffff00ff"],["ffff0000","00007fff","00000000","00000000","ffff7fff"],["ffff0000","00008000","00000000","00000000","ffff8000"],["ffff0000","0000ffff","00000000","00000000","ffffffff"],["ffff0000","00010000","00000000","00000000","00000000"],["ffff0000","55555555","00000000","00000000","55545555"],["ffff0000","7ffffffe","00000000","00000000","7ffefffe"],["ffff0000","7fffffff","00000000","00000000","7ffeffff"],["ffff0000","80000000","00000000","00000000","7fff0000"],["ffff0000","80000001","00000000","00000000","7fff0001"],["ffff0000","aaaaaaaa","00000000","00000000","aaa9aaaa"],["ffff0000","deadbeef","00000000","00000000","deacbeef"],["ffff0000","ffff0000","00000000","00000000","fffe0000"],["ffff0000","ffff8000","00000000","00000000","fffe8000"],["ffff0000","ffffffe0","00000000","00000000","fffeffe0"],["ffff0000","ffffffe1","00000000","00000000","fffeffe1"],["ffff0000","fffffff9","00000000","00000000","fffefff9"],["ffff0000","fffffffd","00000000","00000000","fffefffd"],["ffff0000","fffffffe","00000000","00000000","fffefffe"],["ffff0000","ffffffff","00000000","00000000","fffeffff"],["ffff8000","00000000","00000000","00000000","ffff8000"],["ffff8000","00000001","00000000","00000000","ffff8001"],["ffff8000","00000002","00000000","00000000","ffff8002"],["ffff8000","00000003","00000000","00000000","ffff8003"],["ffff8000","00000005","00000000","00000000","ffff8005"],["ffff8000","00000007","00000000","00000000","ffff8007"],["ffff8000","0000001f","00000000","00000000","ffff801f"],["ffff8000","00000020","00000000","00000000","ffff8020"],["ffff8000","00000021","00000000","00000000","ffff8021"],["ffff8000","0000003f","00000000","00000000","ffff803f"],["ffff8000","00000040","00000000","00000000","ffff8040"],["ffff8000","000000ff","00000000","00000000","ffff80ff"],["ffff8000","00007fff","00000000","00000000","ffffffff"],["ffff8000","00008000","00000000","00000000","00000000"],["ffff8000","0000ffff","00000000","00000000","00007fff"],["ffff8000","00010000","00000000","00000000","00008000"],["ffff8000","55555555","00000000","00000000","5554d555"],["ffff8000","7ffffffe","00000000","00000000","7fff7ffe"],["ffff8000","7fffffff","00000000","00000000","7fff7fff"],["ffff8000","80000000","00000000","00000000","7fff8000"],["ffff8000","80000001","00000000","00000000","7fff8001"],["ffff8000","aaaaaaaa","00000000","00000000","aaaa2aaa"],["ffff8000","deadbeef","00000000","00000000","dead3eef"],["ffff8000","ffff0000","00000000","00000000","fffe8000"],["ffff8000","ffff8000","00000000","00000000","ffff0000"],["ffff8000","ffffffe0","00000000","00000000","ffff7fe0"],["ffff8000","ffffffe1","00000000","00000000","ffff7fe1"],["ffff8000","fffffff9","00000000","00000000","ffff7ff9"],["ffff8000","fffffffd","00000000","00000000","ffff7ffd"],["ffff8000","fffffffe","00000000","00000000","ffff7ffe"],["ffff8000","ffffffff","00000000","00000000","ffff7fff"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["ffffffe0","00000001","00000000","00000000","ffffffe1"],["ffffffe0","00000002","00000000","00000000","ffffffe2"],["ffffffe0","00000003","00000000","00000000","ffffffe3"],["ffffffe0","00000005","00000000","00000000","ffffffe5"],["ffffffe0","00000007","00000000","00000000","ffffffe7"],["ffffffe0","0000001f","00000000","00000000","ffffffff"],["ffffffe0","00000020","00000000","00000000","00000000"],["ffffffe0","00000021","00000000","00000000","00000001"],["ffffffe0","0000003f","00000000","00000000","0000001f"],["ffffffe0","00000040","00000000","00000000","00000020"],["ffffffe0","000000ff","00000000","00000000","000000df"],["ffffffe0","00007fff","00000000","00000000","00007fdf"],["ffffffe0","00008000","00000000","00000000","00007fe0"],["ffffffe0","0000ffff","00000000","00000000","0000ffdf"],["ffffffe0","00010000","00000000","00000000","0000ffe0"],["ffffffe0","55555555","00000000","00000000","55555535"],["ffffffe0","7ffffffe","00000000","00000000","7fffffde"],["ffffffe0","7fffffff","00000000","00000000","7fffffdf"],["ffffffe0","80000000","00000000","00000000","7fffffe0"],["ffffffe0","80000001","00000000","00000000","7fffffe1"],["ffffffe0","aaaaaaaa","00000000","00000000","aaaaaa8a"],["ffffffe0","deadbeef","00000000","00000000","deadbecf"],["ffffffe0","ffff0000","00000000","00000000","fffeffe0"],["ffffffe0","ffff8000","00000000","00000000","ffff7fe0"],["ffffffe0","ffffffe0","00000000","00000000","ffffffc0"],["ffffffe0","ffffffe1","00000000","00000000","ffffffc1"],["ffffffe0","fffffff9","00000000","00000000","ffffffd9"],["ffffffe0","fffffffd","00000000","00000000","ffffffdd"],["ffffffe0","fffffffe","00000000","00000000","ffffffde"],["ffffffe0","ffffffff","00000000","00000000","ffffffdf"],["ffffffe1","00000000","00000000","00000000","ffffffe1"],["ffffffe1","00000001","00000000","00000000","ffffffe2"],["ffffffe1","00000002","00000000","00000000","ffffffe3"],["ffffffe1","00000003","00000000","00000000","ffffffe4"],["ffffffe1","00000005","00000000","00000000","ffffffe6"],["ffffffe1","00000007","00000000","00000000","ffffffe8"],["ffffffe1","0000001f","00000000","00000000","00000000"],["ffffffe1","00000020","00000000","00000000","00000001"],["ffffffe1","00000021","00000000","00000000","00000002"],["ffffffe1","0000003f","00000000","00000000","00000020"],["ffffffe1","00000040","00000000","00000000","00000021"],["ffffffe1","000000ff","00000000","00000000","000000e0"],["ffffffe1","00007fff","00000000","00000000","00007fe0"],["ffffffe1","00008000","00000000","00000000","00007fe1"],["ffffffe1","0000ffff","00000000","00000000","0000ffe0"],["ffffffe1","00010000","00000000","00000000","0000ffe1"],["ffffffe1","55555555","00000000","00000000","55555536"],["ffffffe1","7ffffffe","00000000","00000000","7fffffdf"],["ffffffe1","7fffffff","00000000","00000000","7fffffe0"],["ffffffe1","80000000","00000000","00000000","7fffffe1"],["ffffffe1","80000001","00000000","00000000","7fffffe2"],["ffffffe1","aaaaaaaa","00000000","00000000","aaaaaa8b"],["ffffffe1","deadbeef","00000000","00000000","deadbed0"],["ffffffe1","ffff0000","00000000","00000000","fffeffe1"],["ffffffe1","ffff8000","00000000","00000000","ffff7fe1"],["ffffffe1","ffffffe0","00000000","00000000","ffffffc1"],["ffffffe1","ffffffe1","00000000","00000000","ffffffc2"],["ffffffe1","fffffff9","00000000","00000000","ffffffda"],["ffffffe1","fffffffd","00000000","00000000","ffffffde"],["ffffffe1","fffffffe","00000000","00000000","ffffffdf"],["ffffffe1","ffffffff","00000000","00000000","ffffffe0"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffffa"],["fffffff9","00000002","00000000","00000000","fffffffb"],["fffffff9","00000003","00000000","00000000","fffffffc"],["fffffff9","00000005","00000000","00000000","fffffffe"],["fffffff9","00000007","00000000","00000000","00000000"],["fffffff9","0000001f","00000000","00000000","00000018"],["fffffff9","00000020","00000000","00000000","00000019"],["fffffff9","00000021","00000000","00000000","0000001a"],["fffffff9","0000003f","00000000","00000000","00000038"],["fffffff9","00000040","00000000","00000000","00000039"],["fffffff9","000000ff","00000000","00000000","000000f8"],["fffffff9","00007fff","00000000","00000000","00007ff8"],["fffffff9","00008000","00000000","00000000","00007ff9"],["fffffff9","0000ffff","00000000","00000000","0000fff8"],["fffffff9","00010000","00000000","00000000","0000fff9"],["fffffff9","55555555","00000000","00000000","5555554e"],["fffffff9","7ffffffe","00000000","00000000","7ffffff7"],["fffffff9","7fffffff","00000000","00000000","7ffffff8"],["fffffff9","80000000","00000000","00000000","7ffffff9"],["fffffff9","80000001","00000000","00000000","7ffffffa"],["fffffff9","aaaaaaaa","00000000","00000000","aaaaaaa3"],["fffffff9","deadbeef","00000000","00000000","deadbee8"],["fffffff9","ffff0000","00000000","00000000","fffefff9"],["fffffff9","ffff8000","00000000","00000000","ffff7ff9"],["fffffff9","ffffffe0","00000000","00000000","ffffffd9"],["fffffff9","ffffffe1","00000000","00000000","ffffffda"],["fffffff9","fffffff9","00000000","00000000","fffffff2"],["fffffff9","fffffffd","00000000","00000000","fffffff6"],["fffffff9","fffffffe","00000000","00000000","fffffff7"],["fffffff9","ffffffff","00000000","00000000","fffffff8"],["fffffffd","00000000","00000000","00000000","fffffffd"],["fffffffd","00000001","00000000","00000000","fffffffe"],["fffffffd","00000002","00000000","00000000","ffffffff"],["fffffffd","00000003","00000000","00000000","00000000"],["fffffffd","00000005","00000000","00000000","00000002"],["fffffffd","00000007","00000000","00000000","00000004"],["fffffffd","0000001f","00000000","00000000","0000001c"],["fffffffd","00000020","00000000","00000000","0000001d"],["fffffffd","00000021","00000000","00000000","0000001e"],["fffffffd","0000003f","00000000","00000000","0000003c"],["fffffffd","00000040","00000000","00000000","0000003d"],["fffffffd","000000ff","00000000","00000000","000000fc"],["fffffffd","00007fff","00000000","00000000","00007ffc"],["fffffffd","00008000","00000000","00000000","00007ffd"],["fffffffd","0000ffff","00000000","00000000","0000fffc"],["fffffffd","00010000","00000000","00000000","0000fffd"],["fffffffd","55555555","00000000","00000000","55555552"],["fffffffd","7ffffffe","00000000","00000000","7ffffffb"],["fffffffd","7fffffff","00000000","00000000","7ffffffc"],["fffffffd","80000000","00000000","00000000","7ffffffd"],["fffffffd","80000001","00000000","00000000","7ffffffe"],["fffffffd","aaaaaaaa","00000000","00000000","aaaaaaa7"],["fffffffd","deadbeef","00000000","00000000","deadbeec"],["fffffffd","ffff0000","00000000","00000000","fffefffd"],["fffffffd","ffff8000","00000000","00000000","ffff7ffd"],["fffffffd","ffffffe0","00000000","00000000","ffffffdd"],["fffffffd","ffffffe1","00000000","00000000","ffffffde"],["fffffffd","fffffff9","00000000","00000000","fffffff6"],["fffffffd","fffffffd","00000000","00000000","fffffffa"],["fffffffd","fffffffe","00000000","00000000","fffffffb"],["fffffffd","ffffffff","00000000","00000000","fffffffc"],["fffffffe","00000000","00000000","00000000","fffffffe"],["fffffffe","00000001","00000000","00000000","ffffffff"],["fffffffe","00000002","00000000","00000000","00000000"],["fffffffe","00000003","00000000","00000000","00000001"],["fffffffe","00000005","00000000","00000000","00000003"],["fffffffe","00000007","00000000","00000000","00000005"],["fffffffe","0000001f","00000000","00000000","0000001d"],["fffffffe","00000020","00000000","00000000","0000001e"],["fffffffe","00000021","00000000","00000000","0000001f"],["fffffffe","0000003f","00000000","00000000","0000003d"],["fffffffe","00000040","00000000","00000000","0000003e"],["fffffffe","000000ff","00000000","00000000","000000fd"],["fffffffe","00007fff","00000000","00000000","00007ffd"],["fffffffe","00008000","00000000","00000000","00007ffe"],["fffffffe","0000ffff","00000000","00000000","0000fffd"],["fffffffe","00010000","00000000","00000000","0000fffe"],["fffffffe","55555555","00000000","00000000","55555553"],["fffffffe","7ffffffe","00000000","00000000","7ffffffc"],["fffffffe","7fffffff","00000000","00000000","7ffffffd"],["fffffffe","80000000","00000000","00000000","7ffffffe"],["fffffffe","80000001","00000000","00000000","7fffffff"],["fffffffe","aaaaaaaa","00000000","00000000","aaaaaaa8"],["fffffffe","deadbeef","00000000","00000000","deadbeed"],["fffffffe","ffff0000","00000000","00000000","fffefffe"],["fffffffe","ffff8000","00000000","00000000","ffff7ffe"],["fffffffe","ffffffe0","00000000","00000000","ffffffde"],["fffffffe","ffffffe1","00000000","00000000","ffffffdf"],["fffffffe","fffffff9","00000000","00000000","fffffff7"],["fffffffe","fffffffd","00000000","00000000","fffffffb"],["fffffffe","fffffffe","00000000","00000000","fffffffc"],["fffffffe","ffffffff","00000000","00000000","fffffffd"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","00000000"],["ffffffff","00000002","00000000","00000000","00000001"],["ffffffff","00000003","00000000","00000000","00000002"],["ffffffff","00000005","00000000","00000000","00000004"],["ffffffff","00000007","00000000","00000000","00000006"],["ffffffff","0000001f","00000000","00000000","0000001e"],["ffffffff","00000020","00000000","00000000","0000001f"],["ffffffff","00000021","00000000","00000000","00000020"],["ffffffff","0000003f","00000000","00000000","0000003e"],["ffffffff","00000040","00000000","00000000","0000003f"],["ffffffff","000000ff","00000000","00000000","000000fe"],["ffffffff","00007fff","00000000","00000000","00007ffe"],["ffffffff","00008000","00000000","00000000","00007fff"],["ffffffff","0000ffff","00000000","00000000","0000fffe"],["ffffffff","00010000","00000000","00000000","0000ffff"],["ffffffff","55555555","00000000","00000000","55555554"],["ffffffff","7ffffffe","00000000","00000000","7ffffffd"],["ffffffff","7fffffff","00000000","00000000","7ffffffe"],["ffffffff","80000000","00000000","00000000","7fffffff"],["ffffffff","80000001","00000000","00000000","80000000"],["ffffffff","aaaaaaaa","00000000","00000000","aaaaaaa9"],["ffffffff","deadbeef","00000000","00000000","deadbeee"],["ffffffff","ffff0000","00000000","00000000","fffeffff"],["ffffffff","ffff8000","00000000","00000000","ffff7fff"],["ffffffff","ffffffe0","00000000","00000000","ffffffdf"],["ffffffff","ffffffe1","00000000","00000000","ffffffe0"],["ffffffff","fffffff9","00000000","00000000","fffffff8"],["ffffffff","fffffffd","00000000","00000000","fffffffc"],["ffffffff","fffffffe","00000000","00000000","fffffffd"],["ffffffff","ffffffff","00000000","00000000","fffffffe"]]} +{"op":"sub_u32","code":1,"wgsl":"a - b","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","ffffffff"],["00000000","00000002","00000000","00000000","fffffffe"],["00000000","00000003","00000000","00000000","fffffffd"],["00000000","00000005","00000000","00000000","fffffffb"],["00000000","00000007","00000000","00000000","fffffff9"],["00000000","0000001f","00000000","00000000","ffffffe1"],["00000000","00000020","00000000","00000000","ffffffe0"],["00000000","00000021","00000000","00000000","ffffffdf"],["00000000","0000003f","00000000","00000000","ffffffc1"],["00000000","00000040","00000000","00000000","ffffffc0"],["00000000","000000ff","00000000","00000000","ffffff01"],["00000000","00007fff","00000000","00000000","ffff8001"],["00000000","00008000","00000000","00000000","ffff8000"],["00000000","0000ffff","00000000","00000000","ffff0001"],["00000000","00010000","00000000","00000000","ffff0000"],["00000000","55555555","00000000","00000000","aaaaaaab"],["00000000","7ffffffe","00000000","00000000","80000002"],["00000000","7fffffff","00000000","00000000","80000001"],["00000000","80000000","00000000","00000000","80000000"],["00000000","80000001","00000000","00000000","7fffffff"],["00000000","aaaaaaaa","00000000","00000000","55555556"],["00000000","deadbeef","00000000","00000000","21524111"],["00000000","ffff0000","00000000","00000000","00010000"],["00000000","ffff8000","00000000","00000000","00008000"],["00000000","ffffffe0","00000000","00000000","00000020"],["00000000","ffffffe1","00000000","00000000","0000001f"],["00000000","fffffff9","00000000","00000000","00000007"],["00000000","fffffffd","00000000","00000000","00000003"],["00000000","fffffffe","00000000","00000000","00000002"],["00000000","ffffffff","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000002","00000000","00000000","ffffffff"],["00000001","00000003","00000000","00000000","fffffffe"],["00000001","00000005","00000000","00000000","fffffffc"],["00000001","00000007","00000000","00000000","fffffffa"],["00000001","0000001f","00000000","00000000","ffffffe2"],["00000001","00000020","00000000","00000000","ffffffe1"],["00000001","00000021","00000000","00000000","ffffffe0"],["00000001","0000003f","00000000","00000000","ffffffc2"],["00000001","00000040","00000000","00000000","ffffffc1"],["00000001","000000ff","00000000","00000000","ffffff02"],["00000001","00007fff","00000000","00000000","ffff8002"],["00000001","00008000","00000000","00000000","ffff8001"],["00000001","0000ffff","00000000","00000000","ffff0002"],["00000001","00010000","00000000","00000000","ffff0001"],["00000001","55555555","00000000","00000000","aaaaaaac"],["00000001","7ffffffe","00000000","00000000","80000003"],["00000001","7fffffff","00000000","00000000","80000002"],["00000001","80000000","00000000","00000000","80000001"],["00000001","80000001","00000000","00000000","80000000"],["00000001","aaaaaaaa","00000000","00000000","55555557"],["00000001","deadbeef","00000000","00000000","21524112"],["00000001","ffff0000","00000000","00000000","00010001"],["00000001","ffff8000","00000000","00000000","00008001"],["00000001","ffffffe0","00000000","00000000","00000021"],["00000001","ffffffe1","00000000","00000000","00000020"],["00000001","fffffff9","00000000","00000000","00000008"],["00000001","fffffffd","00000000","00000000","00000004"],["00000001","fffffffe","00000000","00000000","00000003"],["00000001","ffffffff","00000000","00000000","00000002"],["00000002","00000000","00000000","00000000","00000002"],["00000002","00000001","00000000","00000000","00000001"],["00000002","00000002","00000000","00000000","00000000"],["00000002","00000003","00000000","00000000","ffffffff"],["00000002","00000005","00000000","00000000","fffffffd"],["00000002","00000007","00000000","00000000","fffffffb"],["00000002","0000001f","00000000","00000000","ffffffe3"],["00000002","00000020","00000000","00000000","ffffffe2"],["00000002","00000021","00000000","00000000","ffffffe1"],["00000002","0000003f","00000000","00000000","ffffffc3"],["00000002","00000040","00000000","00000000","ffffffc2"],["00000002","000000ff","00000000","00000000","ffffff03"],["00000002","00007fff","00000000","00000000","ffff8003"],["00000002","00008000","00000000","00000000","ffff8002"],["00000002","0000ffff","00000000","00000000","ffff0003"],["00000002","00010000","00000000","00000000","ffff0002"],["00000002","55555555","00000000","00000000","aaaaaaad"],["00000002","7ffffffe","00000000","00000000","80000004"],["00000002","7fffffff","00000000","00000000","80000003"],["00000002","80000000","00000000","00000000","80000002"],["00000002","80000001","00000000","00000000","80000001"],["00000002","aaaaaaaa","00000000","00000000","55555558"],["00000002","deadbeef","00000000","00000000","21524113"],["00000002","ffff0000","00000000","00000000","00010002"],["00000002","ffff8000","00000000","00000000","00008002"],["00000002","ffffffe0","00000000","00000000","00000022"],["00000002","ffffffe1","00000000","00000000","00000021"],["00000002","fffffff9","00000000","00000000","00000009"],["00000002","fffffffd","00000000","00000000","00000005"],["00000002","fffffffe","00000000","00000000","00000004"],["00000002","ffffffff","00000000","00000000","00000003"],["00000003","00000000","00000000","00000000","00000003"],["00000003","00000001","00000000","00000000","00000002"],["00000003","00000002","00000000","00000000","00000001"],["00000003","00000003","00000000","00000000","00000000"],["00000003","00000005","00000000","00000000","fffffffe"],["00000003","00000007","00000000","00000000","fffffffc"],["00000003","0000001f","00000000","00000000","ffffffe4"],["00000003","00000020","00000000","00000000","ffffffe3"],["00000003","00000021","00000000","00000000","ffffffe2"],["00000003","0000003f","00000000","00000000","ffffffc4"],["00000003","00000040","00000000","00000000","ffffffc3"],["00000003","000000ff","00000000","00000000","ffffff04"],["00000003","00007fff","00000000","00000000","ffff8004"],["00000003","00008000","00000000","00000000","ffff8003"],["00000003","0000ffff","00000000","00000000","ffff0004"],["00000003","00010000","00000000","00000000","ffff0003"],["00000003","55555555","00000000","00000000","aaaaaaae"],["00000003","7ffffffe","00000000","00000000","80000005"],["00000003","7fffffff","00000000","00000000","80000004"],["00000003","80000000","00000000","00000000","80000003"],["00000003","80000001","00000000","00000000","80000002"],["00000003","aaaaaaaa","00000000","00000000","55555559"],["00000003","deadbeef","00000000","00000000","21524114"],["00000003","ffff0000","00000000","00000000","00010003"],["00000003","ffff8000","00000000","00000000","00008003"],["00000003","ffffffe0","00000000","00000000","00000023"],["00000003","ffffffe1","00000000","00000000","00000022"],["00000003","fffffff9","00000000","00000000","0000000a"],["00000003","fffffffd","00000000","00000000","00000006"],["00000003","fffffffe","00000000","00000000","00000005"],["00000003","ffffffff","00000000","00000000","00000004"],["00000005","00000000","00000000","00000000","00000005"],["00000005","00000001","00000000","00000000","00000004"],["00000005","00000002","00000000","00000000","00000003"],["00000005","00000003","00000000","00000000","00000002"],["00000005","00000005","00000000","00000000","00000000"],["00000005","00000007","00000000","00000000","fffffffe"],["00000005","0000001f","00000000","00000000","ffffffe6"],["00000005","00000020","00000000","00000000","ffffffe5"],["00000005","00000021","00000000","00000000","ffffffe4"],["00000005","0000003f","00000000","00000000","ffffffc6"],["00000005","00000040","00000000","00000000","ffffffc5"],["00000005","000000ff","00000000","00000000","ffffff06"],["00000005","00007fff","00000000","00000000","ffff8006"],["00000005","00008000","00000000","00000000","ffff8005"],["00000005","0000ffff","00000000","00000000","ffff0006"],["00000005","00010000","00000000","00000000","ffff0005"],["00000005","55555555","00000000","00000000","aaaaaab0"],["00000005","7ffffffe","00000000","00000000","80000007"],["00000005","7fffffff","00000000","00000000","80000006"],["00000005","80000000","00000000","00000000","80000005"],["00000005","80000001","00000000","00000000","80000004"],["00000005","aaaaaaaa","00000000","00000000","5555555b"],["00000005","deadbeef","00000000","00000000","21524116"],["00000005","ffff0000","00000000","00000000","00010005"],["00000005","ffff8000","00000000","00000000","00008005"],["00000005","ffffffe0","00000000","00000000","00000025"],["00000005","ffffffe1","00000000","00000000","00000024"],["00000005","fffffff9","00000000","00000000","0000000c"],["00000005","fffffffd","00000000","00000000","00000008"],["00000005","fffffffe","00000000","00000000","00000007"],["00000005","ffffffff","00000000","00000000","00000006"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","00000006"],["00000007","00000002","00000000","00000000","00000005"],["00000007","00000003","00000000","00000000","00000004"],["00000007","00000005","00000000","00000000","00000002"],["00000007","00000007","00000000","00000000","00000000"],["00000007","0000001f","00000000","00000000","ffffffe8"],["00000007","00000020","00000000","00000000","ffffffe7"],["00000007","00000021","00000000","00000000","ffffffe6"],["00000007","0000003f","00000000","00000000","ffffffc8"],["00000007","00000040","00000000","00000000","ffffffc7"],["00000007","000000ff","00000000","00000000","ffffff08"],["00000007","00007fff","00000000","00000000","ffff8008"],["00000007","00008000","00000000","00000000","ffff8007"],["00000007","0000ffff","00000000","00000000","ffff0008"],["00000007","00010000","00000000","00000000","ffff0007"],["00000007","55555555","00000000","00000000","aaaaaab2"],["00000007","7ffffffe","00000000","00000000","80000009"],["00000007","7fffffff","00000000","00000000","80000008"],["00000007","80000000","00000000","00000000","80000007"],["00000007","80000001","00000000","00000000","80000006"],["00000007","aaaaaaaa","00000000","00000000","5555555d"],["00000007","deadbeef","00000000","00000000","21524118"],["00000007","ffff0000","00000000","00000000","00010007"],["00000007","ffff8000","00000000","00000000","00008007"],["00000007","ffffffe0","00000000","00000000","00000027"],["00000007","ffffffe1","00000000","00000000","00000026"],["00000007","fffffff9","00000000","00000000","0000000e"],["00000007","fffffffd","00000000","00000000","0000000a"],["00000007","fffffffe","00000000","00000000","00000009"],["00000007","ffffffff","00000000","00000000","00000008"],["0000001f","00000000","00000000","00000000","0000001f"],["0000001f","00000001","00000000","00000000","0000001e"],["0000001f","00000002","00000000","00000000","0000001d"],["0000001f","00000003","00000000","00000000","0000001c"],["0000001f","00000005","00000000","00000000","0000001a"],["0000001f","00000007","00000000","00000000","00000018"],["0000001f","0000001f","00000000","00000000","00000000"],["0000001f","00000020","00000000","00000000","ffffffff"],["0000001f","00000021","00000000","00000000","fffffffe"],["0000001f","0000003f","00000000","00000000","ffffffe0"],["0000001f","00000040","00000000","00000000","ffffffdf"],["0000001f","000000ff","00000000","00000000","ffffff20"],["0000001f","00007fff","00000000","00000000","ffff8020"],["0000001f","00008000","00000000","00000000","ffff801f"],["0000001f","0000ffff","00000000","00000000","ffff0020"],["0000001f","00010000","00000000","00000000","ffff001f"],["0000001f","55555555","00000000","00000000","aaaaaaca"],["0000001f","7ffffffe","00000000","00000000","80000021"],["0000001f","7fffffff","00000000","00000000","80000020"],["0000001f","80000000","00000000","00000000","8000001f"],["0000001f","80000001","00000000","00000000","8000001e"],["0000001f","aaaaaaaa","00000000","00000000","55555575"],["0000001f","deadbeef","00000000","00000000","21524130"],["0000001f","ffff0000","00000000","00000000","0001001f"],["0000001f","ffff8000","00000000","00000000","0000801f"],["0000001f","ffffffe0","00000000","00000000","0000003f"],["0000001f","ffffffe1","00000000","00000000","0000003e"],["0000001f","fffffff9","00000000","00000000","00000026"],["0000001f","fffffffd","00000000","00000000","00000022"],["0000001f","fffffffe","00000000","00000000","00000021"],["0000001f","ffffffff","00000000","00000000","00000020"],["00000020","00000000","00000000","00000000","00000020"],["00000020","00000001","00000000","00000000","0000001f"],["00000020","00000002","00000000","00000000","0000001e"],["00000020","00000003","00000000","00000000","0000001d"],["00000020","00000005","00000000","00000000","0000001b"],["00000020","00000007","00000000","00000000","00000019"],["00000020","0000001f","00000000","00000000","00000001"],["00000020","00000020","00000000","00000000","00000000"],["00000020","00000021","00000000","00000000","ffffffff"],["00000020","0000003f","00000000","00000000","ffffffe1"],["00000020","00000040","00000000","00000000","ffffffe0"],["00000020","000000ff","00000000","00000000","ffffff21"],["00000020","00007fff","00000000","00000000","ffff8021"],["00000020","00008000","00000000","00000000","ffff8020"],["00000020","0000ffff","00000000","00000000","ffff0021"],["00000020","00010000","00000000","00000000","ffff0020"],["00000020","55555555","00000000","00000000","aaaaaacb"],["00000020","7ffffffe","00000000","00000000","80000022"],["00000020","7fffffff","00000000","00000000","80000021"],["00000020","80000000","00000000","00000000","80000020"],["00000020","80000001","00000000","00000000","8000001f"],["00000020","aaaaaaaa","00000000","00000000","55555576"],["00000020","deadbeef","00000000","00000000","21524131"],["00000020","ffff0000","00000000","00000000","00010020"],["00000020","ffff8000","00000000","00000000","00008020"],["00000020","ffffffe0","00000000","00000000","00000040"],["00000020","ffffffe1","00000000","00000000","0000003f"],["00000020","fffffff9","00000000","00000000","00000027"],["00000020","fffffffd","00000000","00000000","00000023"],["00000020","fffffffe","00000000","00000000","00000022"],["00000020","ffffffff","00000000","00000000","00000021"],["00000021","00000000","00000000","00000000","00000021"],["00000021","00000001","00000000","00000000","00000020"],["00000021","00000002","00000000","00000000","0000001f"],["00000021","00000003","00000000","00000000","0000001e"],["00000021","00000005","00000000","00000000","0000001c"],["00000021","00000007","00000000","00000000","0000001a"],["00000021","0000001f","00000000","00000000","00000002"],["00000021","00000020","00000000","00000000","00000001"],["00000021","00000021","00000000","00000000","00000000"],["00000021","0000003f","00000000","00000000","ffffffe2"],["00000021","00000040","00000000","00000000","ffffffe1"],["00000021","000000ff","00000000","00000000","ffffff22"],["00000021","00007fff","00000000","00000000","ffff8022"],["00000021","00008000","00000000","00000000","ffff8021"],["00000021","0000ffff","00000000","00000000","ffff0022"],["00000021","00010000","00000000","00000000","ffff0021"],["00000021","55555555","00000000","00000000","aaaaaacc"],["00000021","7ffffffe","00000000","00000000","80000023"],["00000021","7fffffff","00000000","00000000","80000022"],["00000021","80000000","00000000","00000000","80000021"],["00000021","80000001","00000000","00000000","80000020"],["00000021","aaaaaaaa","00000000","00000000","55555577"],["00000021","deadbeef","00000000","00000000","21524132"],["00000021","ffff0000","00000000","00000000","00010021"],["00000021","ffff8000","00000000","00000000","00008021"],["00000021","ffffffe0","00000000","00000000","00000041"],["00000021","ffffffe1","00000000","00000000","00000040"],["00000021","fffffff9","00000000","00000000","00000028"],["00000021","fffffffd","00000000","00000000","00000024"],["00000021","fffffffe","00000000","00000000","00000023"],["00000021","ffffffff","00000000","00000000","00000022"],["0000003f","00000000","00000000","00000000","0000003f"],["0000003f","00000001","00000000","00000000","0000003e"],["0000003f","00000002","00000000","00000000","0000003d"],["0000003f","00000003","00000000","00000000","0000003c"],["0000003f","00000005","00000000","00000000","0000003a"],["0000003f","00000007","00000000","00000000","00000038"],["0000003f","0000001f","00000000","00000000","00000020"],["0000003f","00000020","00000000","00000000","0000001f"],["0000003f","00000021","00000000","00000000","0000001e"],["0000003f","0000003f","00000000","00000000","00000000"],["0000003f","00000040","00000000","00000000","ffffffff"],["0000003f","000000ff","00000000","00000000","ffffff40"],["0000003f","00007fff","00000000","00000000","ffff8040"],["0000003f","00008000","00000000","00000000","ffff803f"],["0000003f","0000ffff","00000000","00000000","ffff0040"],["0000003f","00010000","00000000","00000000","ffff003f"],["0000003f","55555555","00000000","00000000","aaaaaaea"],["0000003f","7ffffffe","00000000","00000000","80000041"],["0000003f","7fffffff","00000000","00000000","80000040"],["0000003f","80000000","00000000","00000000","8000003f"],["0000003f","80000001","00000000","00000000","8000003e"],["0000003f","aaaaaaaa","00000000","00000000","55555595"],["0000003f","deadbeef","00000000","00000000","21524150"],["0000003f","ffff0000","00000000","00000000","0001003f"],["0000003f","ffff8000","00000000","00000000","0000803f"],["0000003f","ffffffe0","00000000","00000000","0000005f"],["0000003f","ffffffe1","00000000","00000000","0000005e"],["0000003f","fffffff9","00000000","00000000","00000046"],["0000003f","fffffffd","00000000","00000000","00000042"],["0000003f","fffffffe","00000000","00000000","00000041"],["0000003f","ffffffff","00000000","00000000","00000040"],["00000040","00000000","00000000","00000000","00000040"],["00000040","00000001","00000000","00000000","0000003f"],["00000040","00000002","00000000","00000000","0000003e"],["00000040","00000003","00000000","00000000","0000003d"],["00000040","00000005","00000000","00000000","0000003b"],["00000040","00000007","00000000","00000000","00000039"],["00000040","0000001f","00000000","00000000","00000021"],["00000040","00000020","00000000","00000000","00000020"],["00000040","00000021","00000000","00000000","0000001f"],["00000040","0000003f","00000000","00000000","00000001"],["00000040","00000040","00000000","00000000","00000000"],["00000040","000000ff","00000000","00000000","ffffff41"],["00000040","00007fff","00000000","00000000","ffff8041"],["00000040","00008000","00000000","00000000","ffff8040"],["00000040","0000ffff","00000000","00000000","ffff0041"],["00000040","00010000","00000000","00000000","ffff0040"],["00000040","55555555","00000000","00000000","aaaaaaeb"],["00000040","7ffffffe","00000000","00000000","80000042"],["00000040","7fffffff","00000000","00000000","80000041"],["00000040","80000000","00000000","00000000","80000040"],["00000040","80000001","00000000","00000000","8000003f"],["00000040","aaaaaaaa","00000000","00000000","55555596"],["00000040","deadbeef","00000000","00000000","21524151"],["00000040","ffff0000","00000000","00000000","00010040"],["00000040","ffff8000","00000000","00000000","00008040"],["00000040","ffffffe0","00000000","00000000","00000060"],["00000040","ffffffe1","00000000","00000000","0000005f"],["00000040","fffffff9","00000000","00000000","00000047"],["00000040","fffffffd","00000000","00000000","00000043"],["00000040","fffffffe","00000000","00000000","00000042"],["00000040","ffffffff","00000000","00000000","00000041"],["000000ff","00000000","00000000","00000000","000000ff"],["000000ff","00000001","00000000","00000000","000000fe"],["000000ff","00000002","00000000","00000000","000000fd"],["000000ff","00000003","00000000","00000000","000000fc"],["000000ff","00000005","00000000","00000000","000000fa"],["000000ff","00000007","00000000","00000000","000000f8"],["000000ff","0000001f","00000000","00000000","000000e0"],["000000ff","00000020","00000000","00000000","000000df"],["000000ff","00000021","00000000","00000000","000000de"],["000000ff","0000003f","00000000","00000000","000000c0"],["000000ff","00000040","00000000","00000000","000000bf"],["000000ff","000000ff","00000000","00000000","00000000"],["000000ff","00007fff","00000000","00000000","ffff8100"],["000000ff","00008000","00000000","00000000","ffff80ff"],["000000ff","0000ffff","00000000","00000000","ffff0100"],["000000ff","00010000","00000000","00000000","ffff00ff"],["000000ff","55555555","00000000","00000000","aaaaabaa"],["000000ff","7ffffffe","00000000","00000000","80000101"],["000000ff","7fffffff","00000000","00000000","80000100"],["000000ff","80000000","00000000","00000000","800000ff"],["000000ff","80000001","00000000","00000000","800000fe"],["000000ff","aaaaaaaa","00000000","00000000","55555655"],["000000ff","deadbeef","00000000","00000000","21524210"],["000000ff","ffff0000","00000000","00000000","000100ff"],["000000ff","ffff8000","00000000","00000000","000080ff"],["000000ff","ffffffe0","00000000","00000000","0000011f"],["000000ff","ffffffe1","00000000","00000000","0000011e"],["000000ff","fffffff9","00000000","00000000","00000106"],["000000ff","fffffffd","00000000","00000000","00000102"],["000000ff","fffffffe","00000000","00000000","00000101"],["000000ff","ffffffff","00000000","00000000","00000100"],["00007fff","00000000","00000000","00000000","00007fff"],["00007fff","00000001","00000000","00000000","00007ffe"],["00007fff","00000002","00000000","00000000","00007ffd"],["00007fff","00000003","00000000","00000000","00007ffc"],["00007fff","00000005","00000000","00000000","00007ffa"],["00007fff","00000007","00000000","00000000","00007ff8"],["00007fff","0000001f","00000000","00000000","00007fe0"],["00007fff","00000020","00000000","00000000","00007fdf"],["00007fff","00000021","00000000","00000000","00007fde"],["00007fff","0000003f","00000000","00000000","00007fc0"],["00007fff","00000040","00000000","00000000","00007fbf"],["00007fff","000000ff","00000000","00000000","00007f00"],["00007fff","00007fff","00000000","00000000","00000000"],["00007fff","00008000","00000000","00000000","ffffffff"],["00007fff","0000ffff","00000000","00000000","ffff8000"],["00007fff","00010000","00000000","00000000","ffff7fff"],["00007fff","55555555","00000000","00000000","aaab2aaa"],["00007fff","7ffffffe","00000000","00000000","80008001"],["00007fff","7fffffff","00000000","00000000","80008000"],["00007fff","80000000","00000000","00000000","80007fff"],["00007fff","80000001","00000000","00000000","80007ffe"],["00007fff","aaaaaaaa","00000000","00000000","5555d555"],["00007fff","deadbeef","00000000","00000000","2152c110"],["00007fff","ffff0000","00000000","00000000","00017fff"],["00007fff","ffff8000","00000000","00000000","0000ffff"],["00007fff","ffffffe0","00000000","00000000","0000801f"],["00007fff","ffffffe1","00000000","00000000","0000801e"],["00007fff","fffffff9","00000000","00000000","00008006"],["00007fff","fffffffd","00000000","00000000","00008002"],["00007fff","fffffffe","00000000","00000000","00008001"],["00007fff","ffffffff","00000000","00000000","00008000"],["00008000","00000000","00000000","00000000","00008000"],["00008000","00000001","00000000","00000000","00007fff"],["00008000","00000002","00000000","00000000","00007ffe"],["00008000","00000003","00000000","00000000","00007ffd"],["00008000","00000005","00000000","00000000","00007ffb"],["00008000","00000007","00000000","00000000","00007ff9"],["00008000","0000001f","00000000","00000000","00007fe1"],["00008000","00000020","00000000","00000000","00007fe0"],["00008000","00000021","00000000","00000000","00007fdf"],["00008000","0000003f","00000000","00000000","00007fc1"],["00008000","00000040","00000000","00000000","00007fc0"],["00008000","000000ff","00000000","00000000","00007f01"],["00008000","00007fff","00000000","00000000","00000001"],["00008000","00008000","00000000","00000000","00000000"],["00008000","0000ffff","00000000","00000000","ffff8001"],["00008000","00010000","00000000","00000000","ffff8000"],["00008000","55555555","00000000","00000000","aaab2aab"],["00008000","7ffffffe","00000000","00000000","80008002"],["00008000","7fffffff","00000000","00000000","80008001"],["00008000","80000000","00000000","00000000","80008000"],["00008000","80000001","00000000","00000000","80007fff"],["00008000","aaaaaaaa","00000000","00000000","5555d556"],["00008000","deadbeef","00000000","00000000","2152c111"],["00008000","ffff0000","00000000","00000000","00018000"],["00008000","ffff8000","00000000","00000000","00010000"],["00008000","ffffffe0","00000000","00000000","00008020"],["00008000","ffffffe1","00000000","00000000","0000801f"],["00008000","fffffff9","00000000","00000000","00008007"],["00008000","fffffffd","00000000","00000000","00008003"],["00008000","fffffffe","00000000","00000000","00008002"],["00008000","ffffffff","00000000","00000000","00008001"],["0000ffff","00000000","00000000","00000000","0000ffff"],["0000ffff","00000001","00000000","00000000","0000fffe"],["0000ffff","00000002","00000000","00000000","0000fffd"],["0000ffff","00000003","00000000","00000000","0000fffc"],["0000ffff","00000005","00000000","00000000","0000fffa"],["0000ffff","00000007","00000000","00000000","0000fff8"],["0000ffff","0000001f","00000000","00000000","0000ffe0"],["0000ffff","00000020","00000000","00000000","0000ffdf"],["0000ffff","00000021","00000000","00000000","0000ffde"],["0000ffff","0000003f","00000000","00000000","0000ffc0"],["0000ffff","00000040","00000000","00000000","0000ffbf"],["0000ffff","000000ff","00000000","00000000","0000ff00"],["0000ffff","00007fff","00000000","00000000","00008000"],["0000ffff","00008000","00000000","00000000","00007fff"],["0000ffff","0000ffff","00000000","00000000","00000000"],["0000ffff","00010000","00000000","00000000","ffffffff"],["0000ffff","55555555","00000000","00000000","aaabaaaa"],["0000ffff","7ffffffe","00000000","00000000","80010001"],["0000ffff","7fffffff","00000000","00000000","80010000"],["0000ffff","80000000","00000000","00000000","8000ffff"],["0000ffff","80000001","00000000","00000000","8000fffe"],["0000ffff","aaaaaaaa","00000000","00000000","55565555"],["0000ffff","deadbeef","00000000","00000000","21534110"],["0000ffff","ffff0000","00000000","00000000","0001ffff"],["0000ffff","ffff8000","00000000","00000000","00017fff"],["0000ffff","ffffffe0","00000000","00000000","0001001f"],["0000ffff","ffffffe1","00000000","00000000","0001001e"],["0000ffff","fffffff9","00000000","00000000","00010006"],["0000ffff","fffffffd","00000000","00000000","00010002"],["0000ffff","fffffffe","00000000","00000000","00010001"],["0000ffff","ffffffff","00000000","00000000","00010000"],["00010000","00000000","00000000","00000000","00010000"],["00010000","00000001","00000000","00000000","0000ffff"],["00010000","00000002","00000000","00000000","0000fffe"],["00010000","00000003","00000000","00000000","0000fffd"],["00010000","00000005","00000000","00000000","0000fffb"],["00010000","00000007","00000000","00000000","0000fff9"],["00010000","0000001f","00000000","00000000","0000ffe1"],["00010000","00000020","00000000","00000000","0000ffe0"],["00010000","00000021","00000000","00000000","0000ffdf"],["00010000","0000003f","00000000","00000000","0000ffc1"],["00010000","00000040","00000000","00000000","0000ffc0"],["00010000","000000ff","00000000","00000000","0000ff01"],["00010000","00007fff","00000000","00000000","00008001"],["00010000","00008000","00000000","00000000","00008000"],["00010000","0000ffff","00000000","00000000","00000001"],["00010000","00010000","00000000","00000000","00000000"],["00010000","55555555","00000000","00000000","aaabaaab"],["00010000","7ffffffe","00000000","00000000","80010002"],["00010000","7fffffff","00000000","00000000","80010001"],["00010000","80000000","00000000","00000000","80010000"],["00010000","80000001","00000000","00000000","8000ffff"],["00010000","aaaaaaaa","00000000","00000000","55565556"],["00010000","deadbeef","00000000","00000000","21534111"],["00010000","ffff0000","00000000","00000000","00020000"],["00010000","ffff8000","00000000","00000000","00018000"],["00010000","ffffffe0","00000000","00000000","00010020"],["00010000","ffffffe1","00000000","00000000","0001001f"],["00010000","fffffff9","00000000","00000000","00010007"],["00010000","fffffffd","00000000","00000000","00010003"],["00010000","fffffffe","00000000","00000000","00010002"],["00010000","ffffffff","00000000","00000000","00010001"],["55555555","00000000","00000000","00000000","55555555"],["55555555","00000001","00000000","00000000","55555554"],["55555555","00000002","00000000","00000000","55555553"],["55555555","00000003","00000000","00000000","55555552"],["55555555","00000005","00000000","00000000","55555550"],["55555555","00000007","00000000","00000000","5555554e"],["55555555","0000001f","00000000","00000000","55555536"],["55555555","00000020","00000000","00000000","55555535"],["55555555","00000021","00000000","00000000","55555534"],["55555555","0000003f","00000000","00000000","55555516"],["55555555","00000040","00000000","00000000","55555515"],["55555555","000000ff","00000000","00000000","55555456"],["55555555","00007fff","00000000","00000000","5554d556"],["55555555","00008000","00000000","00000000","5554d555"],["55555555","0000ffff","00000000","00000000","55545556"],["55555555","00010000","00000000","00000000","55545555"],["55555555","55555555","00000000","00000000","00000000"],["55555555","7ffffffe","00000000","00000000","d5555557"],["55555555","7fffffff","00000000","00000000","d5555556"],["55555555","80000000","00000000","00000000","d5555555"],["55555555","80000001","00000000","00000000","d5555554"],["55555555","aaaaaaaa","00000000","00000000","aaaaaaab"],["55555555","deadbeef","00000000","00000000","76a79666"],["55555555","ffff0000","00000000","00000000","55565555"],["55555555","ffff8000","00000000","00000000","5555d555"],["55555555","ffffffe0","00000000","00000000","55555575"],["55555555","ffffffe1","00000000","00000000","55555574"],["55555555","fffffff9","00000000","00000000","5555555c"],["55555555","fffffffd","00000000","00000000","55555558"],["55555555","fffffffe","00000000","00000000","55555557"],["55555555","ffffffff","00000000","00000000","55555556"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7ffffffe","00000001","00000000","00000000","7ffffffd"],["7ffffffe","00000002","00000000","00000000","7ffffffc"],["7ffffffe","00000003","00000000","00000000","7ffffffb"],["7ffffffe","00000005","00000000","00000000","7ffffff9"],["7ffffffe","00000007","00000000","00000000","7ffffff7"],["7ffffffe","0000001f","00000000","00000000","7fffffdf"],["7ffffffe","00000020","00000000","00000000","7fffffde"],["7ffffffe","00000021","00000000","00000000","7fffffdd"],["7ffffffe","0000003f","00000000","00000000","7fffffbf"],["7ffffffe","00000040","00000000","00000000","7fffffbe"],["7ffffffe","000000ff","00000000","00000000","7ffffeff"],["7ffffffe","00007fff","00000000","00000000","7fff7fff"],["7ffffffe","00008000","00000000","00000000","7fff7ffe"],["7ffffffe","0000ffff","00000000","00000000","7ffeffff"],["7ffffffe","00010000","00000000","00000000","7ffefffe"],["7ffffffe","55555555","00000000","00000000","2aaaaaa9"],["7ffffffe","7ffffffe","00000000","00000000","00000000"],["7ffffffe","7fffffff","00000000","00000000","ffffffff"],["7ffffffe","80000000","00000000","00000000","fffffffe"],["7ffffffe","80000001","00000000","00000000","fffffffd"],["7ffffffe","aaaaaaaa","00000000","00000000","d5555554"],["7ffffffe","deadbeef","00000000","00000000","a152410f"],["7ffffffe","ffff0000","00000000","00000000","8000fffe"],["7ffffffe","ffff8000","00000000","00000000","80007ffe"],["7ffffffe","ffffffe0","00000000","00000000","8000001e"],["7ffffffe","ffffffe1","00000000","00000000","8000001d"],["7ffffffe","fffffff9","00000000","00000000","80000005"],["7ffffffe","fffffffd","00000000","00000000","80000001"],["7ffffffe","fffffffe","00000000","00000000","80000000"],["7ffffffe","ffffffff","00000000","00000000","7fffffff"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","7ffffffe"],["7fffffff","00000002","00000000","00000000","7ffffffd"],["7fffffff","00000003","00000000","00000000","7ffffffc"],["7fffffff","00000005","00000000","00000000","7ffffffa"],["7fffffff","00000007","00000000","00000000","7ffffff8"],["7fffffff","0000001f","00000000","00000000","7fffffe0"],["7fffffff","00000020","00000000","00000000","7fffffdf"],["7fffffff","00000021","00000000","00000000","7fffffde"],["7fffffff","0000003f","00000000","00000000","7fffffc0"],["7fffffff","00000040","00000000","00000000","7fffffbf"],["7fffffff","000000ff","00000000","00000000","7fffff00"],["7fffffff","00007fff","00000000","00000000","7fff8000"],["7fffffff","00008000","00000000","00000000","7fff7fff"],["7fffffff","0000ffff","00000000","00000000","7fff0000"],["7fffffff","00010000","00000000","00000000","7ffeffff"],["7fffffff","55555555","00000000","00000000","2aaaaaaa"],["7fffffff","7ffffffe","00000000","00000000","00000001"],["7fffffff","7fffffff","00000000","00000000","00000000"],["7fffffff","80000000","00000000","00000000","ffffffff"],["7fffffff","80000001","00000000","00000000","fffffffe"],["7fffffff","aaaaaaaa","00000000","00000000","d5555555"],["7fffffff","deadbeef","00000000","00000000","a1524110"],["7fffffff","ffff0000","00000000","00000000","8000ffff"],["7fffffff","ffff8000","00000000","00000000","80007fff"],["7fffffff","ffffffe0","00000000","00000000","8000001f"],["7fffffff","ffffffe1","00000000","00000000","8000001e"],["7fffffff","fffffff9","00000000","00000000","80000006"],["7fffffff","fffffffd","00000000","00000000","80000002"],["7fffffff","fffffffe","00000000","00000000","80000001"],["7fffffff","ffffffff","00000000","00000000","80000000"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","7fffffff"],["80000000","00000002","00000000","00000000","7ffffffe"],["80000000","00000003","00000000","00000000","7ffffffd"],["80000000","00000005","00000000","00000000","7ffffffb"],["80000000","00000007","00000000","00000000","7ffffff9"],["80000000","0000001f","00000000","00000000","7fffffe1"],["80000000","00000020","00000000","00000000","7fffffe0"],["80000000","00000021","00000000","00000000","7fffffdf"],["80000000","0000003f","00000000","00000000","7fffffc1"],["80000000","00000040","00000000","00000000","7fffffc0"],["80000000","000000ff","00000000","00000000","7fffff01"],["80000000","00007fff","00000000","00000000","7fff8001"],["80000000","00008000","00000000","00000000","7fff8000"],["80000000","0000ffff","00000000","00000000","7fff0001"],["80000000","00010000","00000000","00000000","7fff0000"],["80000000","55555555","00000000","00000000","2aaaaaab"],["80000000","7ffffffe","00000000","00000000","00000002"],["80000000","7fffffff","00000000","00000000","00000001"],["80000000","80000000","00000000","00000000","00000000"],["80000000","80000001","00000000","00000000","ffffffff"],["80000000","aaaaaaaa","00000000","00000000","d5555556"],["80000000","deadbeef","00000000","00000000","a1524111"],["80000000","ffff0000","00000000","00000000","80010000"],["80000000","ffff8000","00000000","00000000","80008000"],["80000000","ffffffe0","00000000","00000000","80000020"],["80000000","ffffffe1","00000000","00000000","8000001f"],["80000000","fffffff9","00000000","00000000","80000007"],["80000000","fffffffd","00000000","00000000","80000003"],["80000000","fffffffe","00000000","00000000","80000002"],["80000000","ffffffff","00000000","00000000","80000001"],["80000001","00000000","00000000","00000000","80000001"],["80000001","00000001","00000000","00000000","80000000"],["80000001","00000002","00000000","00000000","7fffffff"],["80000001","00000003","00000000","00000000","7ffffffe"],["80000001","00000005","00000000","00000000","7ffffffc"],["80000001","00000007","00000000","00000000","7ffffffa"],["80000001","0000001f","00000000","00000000","7fffffe2"],["80000001","00000020","00000000","00000000","7fffffe1"],["80000001","00000021","00000000","00000000","7fffffe0"],["80000001","0000003f","00000000","00000000","7fffffc2"],["80000001","00000040","00000000","00000000","7fffffc1"],["80000001","000000ff","00000000","00000000","7fffff02"],["80000001","00007fff","00000000","00000000","7fff8002"],["80000001","00008000","00000000","00000000","7fff8001"],["80000001","0000ffff","00000000","00000000","7fff0002"],["80000001","00010000","00000000","00000000","7fff0001"],["80000001","55555555","00000000","00000000","2aaaaaac"],["80000001","7ffffffe","00000000","00000000","00000003"],["80000001","7fffffff","00000000","00000000","00000002"],["80000001","80000000","00000000","00000000","00000001"],["80000001","80000001","00000000","00000000","00000000"],["80000001","aaaaaaaa","00000000","00000000","d5555557"],["80000001","deadbeef","00000000","00000000","a1524112"],["80000001","ffff0000","00000000","00000000","80010001"],["80000001","ffff8000","00000000","00000000","80008001"],["80000001","ffffffe0","00000000","00000000","80000021"],["80000001","ffffffe1","00000000","00000000","80000020"],["80000001","fffffff9","00000000","00000000","80000008"],["80000001","fffffffd","00000000","00000000","80000004"],["80000001","fffffffe","00000000","00000000","80000003"],["80000001","ffffffff","00000000","00000000","80000002"],["aaaaaaaa","00000000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000001","00000000","00000000","aaaaaaa9"],["aaaaaaaa","00000002","00000000","00000000","aaaaaaa8"],["aaaaaaaa","00000003","00000000","00000000","aaaaaaa7"],["aaaaaaaa","00000005","00000000","00000000","aaaaaaa5"],["aaaaaaaa","00000007","00000000","00000000","aaaaaaa3"],["aaaaaaaa","0000001f","00000000","00000000","aaaaaa8b"],["aaaaaaaa","00000020","00000000","00000000","aaaaaa8a"],["aaaaaaaa","00000021","00000000","00000000","aaaaaa89"],["aaaaaaaa","0000003f","00000000","00000000","aaaaaa6b"],["aaaaaaaa","00000040","00000000","00000000","aaaaaa6a"],["aaaaaaaa","000000ff","00000000","00000000","aaaaa9ab"],["aaaaaaaa","00007fff","00000000","00000000","aaaa2aab"],["aaaaaaaa","00008000","00000000","00000000","aaaa2aaa"],["aaaaaaaa","0000ffff","00000000","00000000","aaa9aaab"],["aaaaaaaa","00010000","00000000","00000000","aaa9aaaa"],["aaaaaaaa","55555555","00000000","00000000","55555555"],["aaaaaaaa","7ffffffe","00000000","00000000","2aaaaaac"],["aaaaaaaa","7fffffff","00000000","00000000","2aaaaaab"],["aaaaaaaa","80000000","00000000","00000000","2aaaaaaa"],["aaaaaaaa","80000001","00000000","00000000","2aaaaaa9"],["aaaaaaaa","aaaaaaaa","00000000","00000000","00000000"],["aaaaaaaa","deadbeef","00000000","00000000","cbfcebbb"],["aaaaaaaa","ffff0000","00000000","00000000","aaabaaaa"],["aaaaaaaa","ffff8000","00000000","00000000","aaab2aaa"],["aaaaaaaa","ffffffe0","00000000","00000000","aaaaaaca"],["aaaaaaaa","ffffffe1","00000000","00000000","aaaaaac9"],["aaaaaaaa","fffffff9","00000000","00000000","aaaaaab1"],["aaaaaaaa","fffffffd","00000000","00000000","aaaaaaad"],["aaaaaaaa","fffffffe","00000000","00000000","aaaaaaac"],["aaaaaaaa","ffffffff","00000000","00000000","aaaaaaab"],["deadbeef","00000000","00000000","00000000","deadbeef"],["deadbeef","00000001","00000000","00000000","deadbeee"],["deadbeef","00000002","00000000","00000000","deadbeed"],["deadbeef","00000003","00000000","00000000","deadbeec"],["deadbeef","00000005","00000000","00000000","deadbeea"],["deadbeef","00000007","00000000","00000000","deadbee8"],["deadbeef","0000001f","00000000","00000000","deadbed0"],["deadbeef","00000020","00000000","00000000","deadbecf"],["deadbeef","00000021","00000000","00000000","deadbece"],["deadbeef","0000003f","00000000","00000000","deadbeb0"],["deadbeef","00000040","00000000","00000000","deadbeaf"],["deadbeef","000000ff","00000000","00000000","deadbdf0"],["deadbeef","00007fff","00000000","00000000","dead3ef0"],["deadbeef","00008000","00000000","00000000","dead3eef"],["deadbeef","0000ffff","00000000","00000000","deacbef0"],["deadbeef","00010000","00000000","00000000","deacbeef"],["deadbeef","55555555","00000000","00000000","8958699a"],["deadbeef","7ffffffe","00000000","00000000","5eadbef1"],["deadbeef","7fffffff","00000000","00000000","5eadbef0"],["deadbeef","80000000","00000000","00000000","5eadbeef"],["deadbeef","80000001","00000000","00000000","5eadbeee"],["deadbeef","aaaaaaaa","00000000","00000000","34031445"],["deadbeef","deadbeef","00000000","00000000","00000000"],["deadbeef","ffff0000","00000000","00000000","deaebeef"],["deadbeef","ffff8000","00000000","00000000","deae3eef"],["deadbeef","ffffffe0","00000000","00000000","deadbf0f"],["deadbeef","ffffffe1","00000000","00000000","deadbf0e"],["deadbeef","fffffff9","00000000","00000000","deadbef6"],["deadbeef","fffffffd","00000000","00000000","deadbef2"],["deadbeef","fffffffe","00000000","00000000","deadbef1"],["deadbeef","ffffffff","00000000","00000000","deadbef0"],["ffff0000","00000000","00000000","00000000","ffff0000"],["ffff0000","00000001","00000000","00000000","fffeffff"],["ffff0000","00000002","00000000","00000000","fffefffe"],["ffff0000","00000003","00000000","00000000","fffefffd"],["ffff0000","00000005","00000000","00000000","fffefffb"],["ffff0000","00000007","00000000","00000000","fffefff9"],["ffff0000","0000001f","00000000","00000000","fffeffe1"],["ffff0000","00000020","00000000","00000000","fffeffe0"],["ffff0000","00000021","00000000","00000000","fffeffdf"],["ffff0000","0000003f","00000000","00000000","fffeffc1"],["ffff0000","00000040","00000000","00000000","fffeffc0"],["ffff0000","000000ff","00000000","00000000","fffeff01"],["ffff0000","00007fff","00000000","00000000","fffe8001"],["ffff0000","00008000","00000000","00000000","fffe8000"],["ffff0000","0000ffff","00000000","00000000","fffe0001"],["ffff0000","00010000","00000000","00000000","fffe0000"],["ffff0000","55555555","00000000","00000000","aaa9aaab"],["ffff0000","7ffffffe","00000000","00000000","7fff0002"],["ffff0000","7fffffff","00000000","00000000","7fff0001"],["ffff0000","80000000","00000000","00000000","7fff0000"],["ffff0000","80000001","00000000","00000000","7ffeffff"],["ffff0000","aaaaaaaa","00000000","00000000","55545556"],["ffff0000","deadbeef","00000000","00000000","21514111"],["ffff0000","ffff0000","00000000","00000000","00000000"],["ffff0000","ffff8000","00000000","00000000","ffff8000"],["ffff0000","ffffffe0","00000000","00000000","ffff0020"],["ffff0000","ffffffe1","00000000","00000000","ffff001f"],["ffff0000","fffffff9","00000000","00000000","ffff0007"],["ffff0000","fffffffd","00000000","00000000","ffff0003"],["ffff0000","fffffffe","00000000","00000000","ffff0002"],["ffff0000","ffffffff","00000000","00000000","ffff0001"],["ffff8000","00000000","00000000","00000000","ffff8000"],["ffff8000","00000001","00000000","00000000","ffff7fff"],["ffff8000","00000002","00000000","00000000","ffff7ffe"],["ffff8000","00000003","00000000","00000000","ffff7ffd"],["ffff8000","00000005","00000000","00000000","ffff7ffb"],["ffff8000","00000007","00000000","00000000","ffff7ff9"],["ffff8000","0000001f","00000000","00000000","ffff7fe1"],["ffff8000","00000020","00000000","00000000","ffff7fe0"],["ffff8000","00000021","00000000","00000000","ffff7fdf"],["ffff8000","0000003f","00000000","00000000","ffff7fc1"],["ffff8000","00000040","00000000","00000000","ffff7fc0"],["ffff8000","000000ff","00000000","00000000","ffff7f01"],["ffff8000","00007fff","00000000","00000000","ffff0001"],["ffff8000","00008000","00000000","00000000","ffff0000"],["ffff8000","0000ffff","00000000","00000000","fffe8001"],["ffff8000","00010000","00000000","00000000","fffe8000"],["ffff8000","55555555","00000000","00000000","aaaa2aab"],["ffff8000","7ffffffe","00000000","00000000","7fff8002"],["ffff8000","7fffffff","00000000","00000000","7fff8001"],["ffff8000","80000000","00000000","00000000","7fff8000"],["ffff8000","80000001","00000000","00000000","7fff7fff"],["ffff8000","aaaaaaaa","00000000","00000000","5554d556"],["ffff8000","deadbeef","00000000","00000000","2151c111"],["ffff8000","ffff0000","00000000","00000000","00008000"],["ffff8000","ffff8000","00000000","00000000","00000000"],["ffff8000","ffffffe0","00000000","00000000","ffff8020"],["ffff8000","ffffffe1","00000000","00000000","ffff801f"],["ffff8000","fffffff9","00000000","00000000","ffff8007"],["ffff8000","fffffffd","00000000","00000000","ffff8003"],["ffff8000","fffffffe","00000000","00000000","ffff8002"],["ffff8000","ffffffff","00000000","00000000","ffff8001"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["ffffffe0","00000001","00000000","00000000","ffffffdf"],["ffffffe0","00000002","00000000","00000000","ffffffde"],["ffffffe0","00000003","00000000","00000000","ffffffdd"],["ffffffe0","00000005","00000000","00000000","ffffffdb"],["ffffffe0","00000007","00000000","00000000","ffffffd9"],["ffffffe0","0000001f","00000000","00000000","ffffffc1"],["ffffffe0","00000020","00000000","00000000","ffffffc0"],["ffffffe0","00000021","00000000","00000000","ffffffbf"],["ffffffe0","0000003f","00000000","00000000","ffffffa1"],["ffffffe0","00000040","00000000","00000000","ffffffa0"],["ffffffe0","000000ff","00000000","00000000","fffffee1"],["ffffffe0","00007fff","00000000","00000000","ffff7fe1"],["ffffffe0","00008000","00000000","00000000","ffff7fe0"],["ffffffe0","0000ffff","00000000","00000000","fffeffe1"],["ffffffe0","00010000","00000000","00000000","fffeffe0"],["ffffffe0","55555555","00000000","00000000","aaaaaa8b"],["ffffffe0","7ffffffe","00000000","00000000","7fffffe2"],["ffffffe0","7fffffff","00000000","00000000","7fffffe1"],["ffffffe0","80000000","00000000","00000000","7fffffe0"],["ffffffe0","80000001","00000000","00000000","7fffffdf"],["ffffffe0","aaaaaaaa","00000000","00000000","55555536"],["ffffffe0","deadbeef","00000000","00000000","215240f1"],["ffffffe0","ffff0000","00000000","00000000","0000ffe0"],["ffffffe0","ffff8000","00000000","00000000","00007fe0"],["ffffffe0","ffffffe0","00000000","00000000","00000000"],["ffffffe0","ffffffe1","00000000","00000000","ffffffff"],["ffffffe0","fffffff9","00000000","00000000","ffffffe7"],["ffffffe0","fffffffd","00000000","00000000","ffffffe3"],["ffffffe0","fffffffe","00000000","00000000","ffffffe2"],["ffffffe0","ffffffff","00000000","00000000","ffffffe1"],["ffffffe1","00000000","00000000","00000000","ffffffe1"],["ffffffe1","00000001","00000000","00000000","ffffffe0"],["ffffffe1","00000002","00000000","00000000","ffffffdf"],["ffffffe1","00000003","00000000","00000000","ffffffde"],["ffffffe1","00000005","00000000","00000000","ffffffdc"],["ffffffe1","00000007","00000000","00000000","ffffffda"],["ffffffe1","0000001f","00000000","00000000","ffffffc2"],["ffffffe1","00000020","00000000","00000000","ffffffc1"],["ffffffe1","00000021","00000000","00000000","ffffffc0"],["ffffffe1","0000003f","00000000","00000000","ffffffa2"],["ffffffe1","00000040","00000000","00000000","ffffffa1"],["ffffffe1","000000ff","00000000","00000000","fffffee2"],["ffffffe1","00007fff","00000000","00000000","ffff7fe2"],["ffffffe1","00008000","00000000","00000000","ffff7fe1"],["ffffffe1","0000ffff","00000000","00000000","fffeffe2"],["ffffffe1","00010000","00000000","00000000","fffeffe1"],["ffffffe1","55555555","00000000","00000000","aaaaaa8c"],["ffffffe1","7ffffffe","00000000","00000000","7fffffe3"],["ffffffe1","7fffffff","00000000","00000000","7fffffe2"],["ffffffe1","80000000","00000000","00000000","7fffffe1"],["ffffffe1","80000001","00000000","00000000","7fffffe0"],["ffffffe1","aaaaaaaa","00000000","00000000","55555537"],["ffffffe1","deadbeef","00000000","00000000","215240f2"],["ffffffe1","ffff0000","00000000","00000000","0000ffe1"],["ffffffe1","ffff8000","00000000","00000000","00007fe1"],["ffffffe1","ffffffe0","00000000","00000000","00000001"],["ffffffe1","ffffffe1","00000000","00000000","00000000"],["ffffffe1","fffffff9","00000000","00000000","ffffffe8"],["ffffffe1","fffffffd","00000000","00000000","ffffffe4"],["ffffffe1","fffffffe","00000000","00000000","ffffffe3"],["ffffffe1","ffffffff","00000000","00000000","ffffffe2"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffff8"],["fffffff9","00000002","00000000","00000000","fffffff7"],["fffffff9","00000003","00000000","00000000","fffffff6"],["fffffff9","00000005","00000000","00000000","fffffff4"],["fffffff9","00000007","00000000","00000000","fffffff2"],["fffffff9","0000001f","00000000","00000000","ffffffda"],["fffffff9","00000020","00000000","00000000","ffffffd9"],["fffffff9","00000021","00000000","00000000","ffffffd8"],["fffffff9","0000003f","00000000","00000000","ffffffba"],["fffffff9","00000040","00000000","00000000","ffffffb9"],["fffffff9","000000ff","00000000","00000000","fffffefa"],["fffffff9","00007fff","00000000","00000000","ffff7ffa"],["fffffff9","00008000","00000000","00000000","ffff7ff9"],["fffffff9","0000ffff","00000000","00000000","fffefffa"],["fffffff9","00010000","00000000","00000000","fffefff9"],["fffffff9","55555555","00000000","00000000","aaaaaaa4"],["fffffff9","7ffffffe","00000000","00000000","7ffffffb"],["fffffff9","7fffffff","00000000","00000000","7ffffffa"],["fffffff9","80000000","00000000","00000000","7ffffff9"],["fffffff9","80000001","00000000","00000000","7ffffff8"],["fffffff9","aaaaaaaa","00000000","00000000","5555554f"],["fffffff9","deadbeef","00000000","00000000","2152410a"],["fffffff9","ffff0000","00000000","00000000","0000fff9"],["fffffff9","ffff8000","00000000","00000000","00007ff9"],["fffffff9","ffffffe0","00000000","00000000","00000019"],["fffffff9","ffffffe1","00000000","00000000","00000018"],["fffffff9","fffffff9","00000000","00000000","00000000"],["fffffff9","fffffffd","00000000","00000000","fffffffc"],["fffffff9","fffffffe","00000000","00000000","fffffffb"],["fffffff9","ffffffff","00000000","00000000","fffffffa"],["fffffffd","00000000","00000000","00000000","fffffffd"],["fffffffd","00000001","00000000","00000000","fffffffc"],["fffffffd","00000002","00000000","00000000","fffffffb"],["fffffffd","00000003","00000000","00000000","fffffffa"],["fffffffd","00000005","00000000","00000000","fffffff8"],["fffffffd","00000007","00000000","00000000","fffffff6"],["fffffffd","0000001f","00000000","00000000","ffffffde"],["fffffffd","00000020","00000000","00000000","ffffffdd"],["fffffffd","00000021","00000000","00000000","ffffffdc"],["fffffffd","0000003f","00000000","00000000","ffffffbe"],["fffffffd","00000040","00000000","00000000","ffffffbd"],["fffffffd","000000ff","00000000","00000000","fffffefe"],["fffffffd","00007fff","00000000","00000000","ffff7ffe"],["fffffffd","00008000","00000000","00000000","ffff7ffd"],["fffffffd","0000ffff","00000000","00000000","fffefffe"],["fffffffd","00010000","00000000","00000000","fffefffd"],["fffffffd","55555555","00000000","00000000","aaaaaaa8"],["fffffffd","7ffffffe","00000000","00000000","7fffffff"],["fffffffd","7fffffff","00000000","00000000","7ffffffe"],["fffffffd","80000000","00000000","00000000","7ffffffd"],["fffffffd","80000001","00000000","00000000","7ffffffc"],["fffffffd","aaaaaaaa","00000000","00000000","55555553"],["fffffffd","deadbeef","00000000","00000000","2152410e"],["fffffffd","ffff0000","00000000","00000000","0000fffd"],["fffffffd","ffff8000","00000000","00000000","00007ffd"],["fffffffd","ffffffe0","00000000","00000000","0000001d"],["fffffffd","ffffffe1","00000000","00000000","0000001c"],["fffffffd","fffffff9","00000000","00000000","00000004"],["fffffffd","fffffffd","00000000","00000000","00000000"],["fffffffd","fffffffe","00000000","00000000","ffffffff"],["fffffffd","ffffffff","00000000","00000000","fffffffe"],["fffffffe","00000000","00000000","00000000","fffffffe"],["fffffffe","00000001","00000000","00000000","fffffffd"],["fffffffe","00000002","00000000","00000000","fffffffc"],["fffffffe","00000003","00000000","00000000","fffffffb"],["fffffffe","00000005","00000000","00000000","fffffff9"],["fffffffe","00000007","00000000","00000000","fffffff7"],["fffffffe","0000001f","00000000","00000000","ffffffdf"],["fffffffe","00000020","00000000","00000000","ffffffde"],["fffffffe","00000021","00000000","00000000","ffffffdd"],["fffffffe","0000003f","00000000","00000000","ffffffbf"],["fffffffe","00000040","00000000","00000000","ffffffbe"],["fffffffe","000000ff","00000000","00000000","fffffeff"],["fffffffe","00007fff","00000000","00000000","ffff7fff"],["fffffffe","00008000","00000000","00000000","ffff7ffe"],["fffffffe","0000ffff","00000000","00000000","fffeffff"],["fffffffe","00010000","00000000","00000000","fffefffe"],["fffffffe","55555555","00000000","00000000","aaaaaaa9"],["fffffffe","7ffffffe","00000000","00000000","80000000"],["fffffffe","7fffffff","00000000","00000000","7fffffff"],["fffffffe","80000000","00000000","00000000","7ffffffe"],["fffffffe","80000001","00000000","00000000","7ffffffd"],["fffffffe","aaaaaaaa","00000000","00000000","55555554"],["fffffffe","deadbeef","00000000","00000000","2152410f"],["fffffffe","ffff0000","00000000","00000000","0000fffe"],["fffffffe","ffff8000","00000000","00000000","00007ffe"],["fffffffe","ffffffe0","00000000","00000000","0000001e"],["fffffffe","ffffffe1","00000000","00000000","0000001d"],["fffffffe","fffffff9","00000000","00000000","00000005"],["fffffffe","fffffffd","00000000","00000000","00000001"],["fffffffe","fffffffe","00000000","00000000","00000000"],["fffffffe","ffffffff","00000000","00000000","ffffffff"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","fffffffe"],["ffffffff","00000002","00000000","00000000","fffffffd"],["ffffffff","00000003","00000000","00000000","fffffffc"],["ffffffff","00000005","00000000","00000000","fffffffa"],["ffffffff","00000007","00000000","00000000","fffffff8"],["ffffffff","0000001f","00000000","00000000","ffffffe0"],["ffffffff","00000020","00000000","00000000","ffffffdf"],["ffffffff","00000021","00000000","00000000","ffffffde"],["ffffffff","0000003f","00000000","00000000","ffffffc0"],["ffffffff","00000040","00000000","00000000","ffffffbf"],["ffffffff","000000ff","00000000","00000000","ffffff00"],["ffffffff","00007fff","00000000","00000000","ffff8000"],["ffffffff","00008000","00000000","00000000","ffff7fff"],["ffffffff","0000ffff","00000000","00000000","ffff0000"],["ffffffff","00010000","00000000","00000000","fffeffff"],["ffffffff","55555555","00000000","00000000","aaaaaaaa"],["ffffffff","7ffffffe","00000000","00000000","80000001"],["ffffffff","7fffffff","00000000","00000000","80000000"],["ffffffff","80000000","00000000","00000000","7fffffff"],["ffffffff","80000001","00000000","00000000","7ffffffe"],["ffffffff","aaaaaaaa","00000000","00000000","55555555"],["ffffffff","deadbeef","00000000","00000000","21524110"],["ffffffff","ffff0000","00000000","00000000","0000ffff"],["ffffffff","ffff8000","00000000","00000000","00007fff"],["ffffffff","ffffffe0","00000000","00000000","0000001f"],["ffffffff","ffffffe1","00000000","00000000","0000001e"],["ffffffff","fffffff9","00000000","00000000","00000006"],["ffffffff","fffffffd","00000000","00000000","00000002"],["ffffffff","fffffffe","00000000","00000000","00000001"],["ffffffff","ffffffff","00000000","00000000","00000000"]]} +{"op":"mul_u32","code":2,"wgsl":"a * b","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000002","00000000","00000000","00000000"],["00000000","00000003","00000000","00000000","00000000"],["00000000","00000005","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","0000001f","00000000","00000000","00000000"],["00000000","00000020","00000000","00000000","00000000"],["00000000","00000021","00000000","00000000","00000000"],["00000000","0000003f","00000000","00000000","00000000"],["00000000","00000040","00000000","00000000","00000000"],["00000000","000000ff","00000000","00000000","00000000"],["00000000","00007fff","00000000","00000000","00000000"],["00000000","00008000","00000000","00000000","00000000"],["00000000","0000ffff","00000000","00000000","00000000"],["00000000","00010000","00000000","00000000","00000000"],["00000000","55555555","00000000","00000000","00000000"],["00000000","7ffffffe","00000000","00000000","00000000"],["00000000","7fffffff","00000000","00000000","00000000"],["00000000","80000000","00000000","00000000","00000000"],["00000000","80000001","00000000","00000000","00000000"],["00000000","aaaaaaaa","00000000","00000000","00000000"],["00000000","deadbeef","00000000","00000000","00000000"],["00000000","ffff0000","00000000","00000000","00000000"],["00000000","ffff8000","00000000","00000000","00000000"],["00000000","ffffffe0","00000000","00000000","00000000"],["00000000","ffffffe1","00000000","00000000","00000000"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","fffffffd","00000000","00000000","00000000"],["00000000","fffffffe","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000002","00000000","00000000","00000002"],["00000001","00000003","00000000","00000000","00000003"],["00000001","00000005","00000000","00000000","00000005"],["00000001","00000007","00000000","00000000","00000007"],["00000001","0000001f","00000000","00000000","0000001f"],["00000001","00000020","00000000","00000000","00000020"],["00000001","00000021","00000000","00000000","00000021"],["00000001","0000003f","00000000","00000000","0000003f"],["00000001","00000040","00000000","00000000","00000040"],["00000001","000000ff","00000000","00000000","000000ff"],["00000001","00007fff","00000000","00000000","00007fff"],["00000001","00008000","00000000","00000000","00008000"],["00000001","0000ffff","00000000","00000000","0000ffff"],["00000001","00010000","00000000","00000000","00010000"],["00000001","55555555","00000000","00000000","55555555"],["00000001","7ffffffe","00000000","00000000","7ffffffe"],["00000001","7fffffff","00000000","00000000","7fffffff"],["00000001","80000000","00000000","00000000","80000000"],["00000001","80000001","00000000","00000000","80000001"],["00000001","aaaaaaaa","00000000","00000000","aaaaaaaa"],["00000001","deadbeef","00000000","00000000","deadbeef"],["00000001","ffff0000","00000000","00000000","ffff0000"],["00000001","ffff8000","00000000","00000000","ffff8000"],["00000001","ffffffe0","00000000","00000000","ffffffe0"],["00000001","ffffffe1","00000000","00000000","ffffffe1"],["00000001","fffffff9","00000000","00000000","fffffff9"],["00000001","fffffffd","00000000","00000000","fffffffd"],["00000001","fffffffe","00000000","00000000","fffffffe"],["00000001","ffffffff","00000000","00000000","ffffffff"],["00000002","00000000","00000000","00000000","00000000"],["00000002","00000001","00000000","00000000","00000002"],["00000002","00000002","00000000","00000000","00000004"],["00000002","00000003","00000000","00000000","00000006"],["00000002","00000005","00000000","00000000","0000000a"],["00000002","00000007","00000000","00000000","0000000e"],["00000002","0000001f","00000000","00000000","0000003e"],["00000002","00000020","00000000","00000000","00000040"],["00000002","00000021","00000000","00000000","00000042"],["00000002","0000003f","00000000","00000000","0000007e"],["00000002","00000040","00000000","00000000","00000080"],["00000002","000000ff","00000000","00000000","000001fe"],["00000002","00007fff","00000000","00000000","0000fffe"],["00000002","00008000","00000000","00000000","00010000"],["00000002","0000ffff","00000000","00000000","0001fffe"],["00000002","00010000","00000000","00000000","00020000"],["00000002","55555555","00000000","00000000","aaaaaaaa"],["00000002","7ffffffe","00000000","00000000","fffffffc"],["00000002","7fffffff","00000000","00000000","fffffffe"],["00000002","80000000","00000000","00000000","00000000"],["00000002","80000001","00000000","00000000","00000002"],["00000002","aaaaaaaa","00000000","00000000","55555554"],["00000002","deadbeef","00000000","00000000","bd5b7dde"],["00000002","ffff0000","00000000","00000000","fffe0000"],["00000002","ffff8000","00000000","00000000","ffff0000"],["00000002","ffffffe0","00000000","00000000","ffffffc0"],["00000002","ffffffe1","00000000","00000000","ffffffc2"],["00000002","fffffff9","00000000","00000000","fffffff2"],["00000002","fffffffd","00000000","00000000","fffffffa"],["00000002","fffffffe","00000000","00000000","fffffffc"],["00000002","ffffffff","00000000","00000000","fffffffe"],["00000003","00000000","00000000","00000000","00000000"],["00000003","00000001","00000000","00000000","00000003"],["00000003","00000002","00000000","00000000","00000006"],["00000003","00000003","00000000","00000000","00000009"],["00000003","00000005","00000000","00000000","0000000f"],["00000003","00000007","00000000","00000000","00000015"],["00000003","0000001f","00000000","00000000","0000005d"],["00000003","00000020","00000000","00000000","00000060"],["00000003","00000021","00000000","00000000","00000063"],["00000003","0000003f","00000000","00000000","000000bd"],["00000003","00000040","00000000","00000000","000000c0"],["00000003","000000ff","00000000","00000000","000002fd"],["00000003","00007fff","00000000","00000000","00017ffd"],["00000003","00008000","00000000","00000000","00018000"],["00000003","0000ffff","00000000","00000000","0002fffd"],["00000003","00010000","00000000","00000000","00030000"],["00000003","55555555","00000000","00000000","ffffffff"],["00000003","7ffffffe","00000000","00000000","7ffffffa"],["00000003","7fffffff","00000000","00000000","7ffffffd"],["00000003","80000000","00000000","00000000","80000000"],["00000003","80000001","00000000","00000000","80000003"],["00000003","aaaaaaaa","00000000","00000000","fffffffe"],["00000003","deadbeef","00000000","00000000","9c093ccd"],["00000003","ffff0000","00000000","00000000","fffd0000"],["00000003","ffff8000","00000000","00000000","fffe8000"],["00000003","ffffffe0","00000000","00000000","ffffffa0"],["00000003","ffffffe1","00000000","00000000","ffffffa3"],["00000003","fffffff9","00000000","00000000","ffffffeb"],["00000003","fffffffd","00000000","00000000","fffffff7"],["00000003","fffffffe","00000000","00000000","fffffffa"],["00000003","ffffffff","00000000","00000000","fffffffd"],["00000005","00000000","00000000","00000000","00000000"],["00000005","00000001","00000000","00000000","00000005"],["00000005","00000002","00000000","00000000","0000000a"],["00000005","00000003","00000000","00000000","0000000f"],["00000005","00000005","00000000","00000000","00000019"],["00000005","00000007","00000000","00000000","00000023"],["00000005","0000001f","00000000","00000000","0000009b"],["00000005","00000020","00000000","00000000","000000a0"],["00000005","00000021","00000000","00000000","000000a5"],["00000005","0000003f","00000000","00000000","0000013b"],["00000005","00000040","00000000","00000000","00000140"],["00000005","000000ff","00000000","00000000","000004fb"],["00000005","00007fff","00000000","00000000","00027ffb"],["00000005","00008000","00000000","00000000","00028000"],["00000005","0000ffff","00000000","00000000","0004fffb"],["00000005","00010000","00000000","00000000","00050000"],["00000005","55555555","00000000","00000000","aaaaaaa9"],["00000005","7ffffffe","00000000","00000000","7ffffff6"],["00000005","7fffffff","00000000","00000000","7ffffffb"],["00000005","80000000","00000000","00000000","80000000"],["00000005","80000001","00000000","00000000","80000005"],["00000005","aaaaaaaa","00000000","00000000","55555552"],["00000005","deadbeef","00000000","00000000","5964baab"],["00000005","ffff0000","00000000","00000000","fffb0000"],["00000005","ffff8000","00000000","00000000","fffd8000"],["00000005","ffffffe0","00000000","00000000","ffffff60"],["00000005","ffffffe1","00000000","00000000","ffffff65"],["00000005","fffffff9","00000000","00000000","ffffffdd"],["00000005","fffffffd","00000000","00000000","fffffff1"],["00000005","fffffffe","00000000","00000000","fffffff6"],["00000005","ffffffff","00000000","00000000","fffffffb"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000007"],["00000007","00000002","00000000","00000000","0000000e"],["00000007","00000003","00000000","00000000","00000015"],["00000007","00000005","00000000","00000000","00000023"],["00000007","00000007","00000000","00000000","00000031"],["00000007","0000001f","00000000","00000000","000000d9"],["00000007","00000020","00000000","00000000","000000e0"],["00000007","00000021","00000000","00000000","000000e7"],["00000007","0000003f","00000000","00000000","000001b9"],["00000007","00000040","00000000","00000000","000001c0"],["00000007","000000ff","00000000","00000000","000006f9"],["00000007","00007fff","00000000","00000000","00037ff9"],["00000007","00008000","00000000","00000000","00038000"],["00000007","0000ffff","00000000","00000000","0006fff9"],["00000007","00010000","00000000","00000000","00070000"],["00000007","55555555","00000000","00000000","55555553"],["00000007","7ffffffe","00000000","00000000","7ffffff2"],["00000007","7fffffff","00000000","00000000","7ffffff9"],["00000007","80000000","00000000","00000000","80000000"],["00000007","80000001","00000000","00000000","80000007"],["00000007","aaaaaaaa","00000000","00000000","aaaaaaa6"],["00000007","deadbeef","00000000","00000000","16c03889"],["00000007","ffff0000","00000000","00000000","fff90000"],["00000007","ffff8000","00000000","00000000","fffc8000"],["00000007","ffffffe0","00000000","00000000","ffffff20"],["00000007","ffffffe1","00000000","00000000","ffffff27"],["00000007","fffffff9","00000000","00000000","ffffffcf"],["00000007","fffffffd","00000000","00000000","ffffffeb"],["00000007","fffffffe","00000000","00000000","fffffff2"],["00000007","ffffffff","00000000","00000000","fffffff9"],["0000001f","00000000","00000000","00000000","00000000"],["0000001f","00000001","00000000","00000000","0000001f"],["0000001f","00000002","00000000","00000000","0000003e"],["0000001f","00000003","00000000","00000000","0000005d"],["0000001f","00000005","00000000","00000000","0000009b"],["0000001f","00000007","00000000","00000000","000000d9"],["0000001f","0000001f","00000000","00000000","000003c1"],["0000001f","00000020","00000000","00000000","000003e0"],["0000001f","00000021","00000000","00000000","000003ff"],["0000001f","0000003f","00000000","00000000","000007a1"],["0000001f","00000040","00000000","00000000","000007c0"],["0000001f","000000ff","00000000","00000000","00001ee1"],["0000001f","00007fff","00000000","00000000","000f7fe1"],["0000001f","00008000","00000000","00000000","000f8000"],["0000001f","0000ffff","00000000","00000000","001effe1"],["0000001f","00010000","00000000","00000000","001f0000"],["0000001f","55555555","00000000","00000000","5555554b"],["0000001f","7ffffffe","00000000","00000000","7fffffc2"],["0000001f","7fffffff","00000000","00000000","7fffffe1"],["0000001f","80000000","00000000","00000000","80000000"],["0000001f","80000001","00000000","00000000","8000001f"],["0000001f","aaaaaaaa","00000000","00000000","aaaaaa96"],["0000001f","deadbeef","00000000","00000000","f70a1ef1"],["0000001f","ffff0000","00000000","00000000","ffe10000"],["0000001f","ffff8000","00000000","00000000","fff08000"],["0000001f","ffffffe0","00000000","00000000","fffffc20"],["0000001f","ffffffe1","00000000","00000000","fffffc3f"],["0000001f","fffffff9","00000000","00000000","ffffff27"],["0000001f","fffffffd","00000000","00000000","ffffffa3"],["0000001f","fffffffe","00000000","00000000","ffffffc2"],["0000001f","ffffffff","00000000","00000000","ffffffe1"],["00000020","00000000","00000000","00000000","00000000"],["00000020","00000001","00000000","00000000","00000020"],["00000020","00000002","00000000","00000000","00000040"],["00000020","00000003","00000000","00000000","00000060"],["00000020","00000005","00000000","00000000","000000a0"],["00000020","00000007","00000000","00000000","000000e0"],["00000020","0000001f","00000000","00000000","000003e0"],["00000020","00000020","00000000","00000000","00000400"],["00000020","00000021","00000000","00000000","00000420"],["00000020","0000003f","00000000","00000000","000007e0"],["00000020","00000040","00000000","00000000","00000800"],["00000020","000000ff","00000000","00000000","00001fe0"],["00000020","00007fff","00000000","00000000","000fffe0"],["00000020","00008000","00000000","00000000","00100000"],["00000020","0000ffff","00000000","00000000","001fffe0"],["00000020","00010000","00000000","00000000","00200000"],["00000020","55555555","00000000","00000000","aaaaaaa0"],["00000020","7ffffffe","00000000","00000000","ffffffc0"],["00000020","7fffffff","00000000","00000000","ffffffe0"],["00000020","80000000","00000000","00000000","00000000"],["00000020","80000001","00000000","00000000","00000020"],["00000020","aaaaaaaa","00000000","00000000","55555540"],["00000020","deadbeef","00000000","00000000","d5b7dde0"],["00000020","ffff0000","00000000","00000000","ffe00000"],["00000020","ffff8000","00000000","00000000","fff00000"],["00000020","ffffffe0","00000000","00000000","fffffc00"],["00000020","ffffffe1","00000000","00000000","fffffc20"],["00000020","fffffff9","00000000","00000000","ffffff20"],["00000020","fffffffd","00000000","00000000","ffffffa0"],["00000020","fffffffe","00000000","00000000","ffffffc0"],["00000020","ffffffff","00000000","00000000","ffffffe0"],["00000021","00000000","00000000","00000000","00000000"],["00000021","00000001","00000000","00000000","00000021"],["00000021","00000002","00000000","00000000","00000042"],["00000021","00000003","00000000","00000000","00000063"],["00000021","00000005","00000000","00000000","000000a5"],["00000021","00000007","00000000","00000000","000000e7"],["00000021","0000001f","00000000","00000000","000003ff"],["00000021","00000020","00000000","00000000","00000420"],["00000021","00000021","00000000","00000000","00000441"],["00000021","0000003f","00000000","00000000","0000081f"],["00000021","00000040","00000000","00000000","00000840"],["00000021","000000ff","00000000","00000000","000020df"],["00000021","00007fff","00000000","00000000","00107fdf"],["00000021","00008000","00000000","00000000","00108000"],["00000021","0000ffff","00000000","00000000","0020ffdf"],["00000021","00010000","00000000","00000000","00210000"],["00000021","55555555","00000000","00000000","fffffff5"],["00000021","7ffffffe","00000000","00000000","7fffffbe"],["00000021","7fffffff","00000000","00000000","7fffffdf"],["00000021","80000000","00000000","00000000","80000000"],["00000021","80000001","00000000","00000000","80000021"],["00000021","aaaaaaaa","00000000","00000000","ffffffea"],["00000021","deadbeef","00000000","00000000","b4659ccf"],["00000021","ffff0000","00000000","00000000","ffdf0000"],["00000021","ffff8000","00000000","00000000","ffef8000"],["00000021","ffffffe0","00000000","00000000","fffffbe0"],["00000021","ffffffe1","00000000","00000000","fffffc01"],["00000021","fffffff9","00000000","00000000","ffffff19"],["00000021","fffffffd","00000000","00000000","ffffff9d"],["00000021","fffffffe","00000000","00000000","ffffffbe"],["00000021","ffffffff","00000000","00000000","ffffffdf"],["0000003f","00000000","00000000","00000000","00000000"],["0000003f","00000001","00000000","00000000","0000003f"],["0000003f","00000002","00000000","00000000","0000007e"],["0000003f","00000003","00000000","00000000","000000bd"],["0000003f","00000005","00000000","00000000","0000013b"],["0000003f","00000007","00000000","00000000","000001b9"],["0000003f","0000001f","00000000","00000000","000007a1"],["0000003f","00000020","00000000","00000000","000007e0"],["0000003f","00000021","00000000","00000000","0000081f"],["0000003f","0000003f","00000000","00000000","00000f81"],["0000003f","00000040","00000000","00000000","00000fc0"],["0000003f","000000ff","00000000","00000000","00003ec1"],["0000003f","00007fff","00000000","00000000","001f7fc1"],["0000003f","00008000","00000000","00000000","001f8000"],["0000003f","0000ffff","00000000","00000000","003effc1"],["0000003f","00010000","00000000","00000000","003f0000"],["0000003f","55555555","00000000","00000000","ffffffeb"],["0000003f","7ffffffe","00000000","00000000","7fffff82"],["0000003f","7fffffff","00000000","00000000","7fffffc1"],["0000003f","80000000","00000000","00000000","80000000"],["0000003f","80000001","00000000","00000000","8000003f"],["0000003f","aaaaaaaa","00000000","00000000","ffffffd6"],["0000003f","deadbeef","00000000","00000000","ccc1fcd1"],["0000003f","ffff0000","00000000","00000000","ffc10000"],["0000003f","ffff8000","00000000","00000000","ffe08000"],["0000003f","ffffffe0","00000000","00000000","fffff820"],["0000003f","ffffffe1","00000000","00000000","fffff85f"],["0000003f","fffffff9","00000000","00000000","fffffe47"],["0000003f","fffffffd","00000000","00000000","ffffff43"],["0000003f","fffffffe","00000000","00000000","ffffff82"],["0000003f","ffffffff","00000000","00000000","ffffffc1"],["00000040","00000000","00000000","00000000","00000000"],["00000040","00000001","00000000","00000000","00000040"],["00000040","00000002","00000000","00000000","00000080"],["00000040","00000003","00000000","00000000","000000c0"],["00000040","00000005","00000000","00000000","00000140"],["00000040","00000007","00000000","00000000","000001c0"],["00000040","0000001f","00000000","00000000","000007c0"],["00000040","00000020","00000000","00000000","00000800"],["00000040","00000021","00000000","00000000","00000840"],["00000040","0000003f","00000000","00000000","00000fc0"],["00000040","00000040","00000000","00000000","00001000"],["00000040","000000ff","00000000","00000000","00003fc0"],["00000040","00007fff","00000000","00000000","001fffc0"],["00000040","00008000","00000000","00000000","00200000"],["00000040","0000ffff","00000000","00000000","003fffc0"],["00000040","00010000","00000000","00000000","00400000"],["00000040","55555555","00000000","00000000","55555540"],["00000040","7ffffffe","00000000","00000000","ffffff80"],["00000040","7fffffff","00000000","00000000","ffffffc0"],["00000040","80000000","00000000","00000000","00000000"],["00000040","80000001","00000000","00000000","00000040"],["00000040","aaaaaaaa","00000000","00000000","aaaaaa80"],["00000040","deadbeef","00000000","00000000","ab6fbbc0"],["00000040","ffff0000","00000000","00000000","ffc00000"],["00000040","ffff8000","00000000","00000000","ffe00000"],["00000040","ffffffe0","00000000","00000000","fffff800"],["00000040","ffffffe1","00000000","00000000","fffff840"],["00000040","fffffff9","00000000","00000000","fffffe40"],["00000040","fffffffd","00000000","00000000","ffffff40"],["00000040","fffffffe","00000000","00000000","ffffff80"],["00000040","ffffffff","00000000","00000000","ffffffc0"],["000000ff","00000000","00000000","00000000","00000000"],["000000ff","00000001","00000000","00000000","000000ff"],["000000ff","00000002","00000000","00000000","000001fe"],["000000ff","00000003","00000000","00000000","000002fd"],["000000ff","00000005","00000000","00000000","000004fb"],["000000ff","00000007","00000000","00000000","000006f9"],["000000ff","0000001f","00000000","00000000","00001ee1"],["000000ff","00000020","00000000","00000000","00001fe0"],["000000ff","00000021","00000000","00000000","000020df"],["000000ff","0000003f","00000000","00000000","00003ec1"],["000000ff","00000040","00000000","00000000","00003fc0"],["000000ff","000000ff","00000000","00000000","0000fe01"],["000000ff","00007fff","00000000","00000000","007f7f01"],["000000ff","00008000","00000000","00000000","007f8000"],["000000ff","0000ffff","00000000","00000000","00feff01"],["000000ff","00010000","00000000","00000000","00ff0000"],["000000ff","55555555","00000000","00000000","ffffffab"],["000000ff","7ffffffe","00000000","00000000","7ffffe02"],["000000ff","7fffffff","00000000","00000000","7fffff01"],["000000ff","80000000","00000000","00000000","80000000"],["000000ff","80000001","00000000","00000000","800000ff"],["000000ff","aaaaaaaa","00000000","00000000","ffffff56"],["000000ff","deadbeef","00000000","00000000","cf113011"],["000000ff","ffff0000","00000000","00000000","ff010000"],["000000ff","ffff8000","00000000","00000000","ff808000"],["000000ff","ffffffe0","00000000","00000000","ffffe020"],["000000ff","ffffffe1","00000000","00000000","ffffe11f"],["000000ff","fffffff9","00000000","00000000","fffff907"],["000000ff","fffffffd","00000000","00000000","fffffd03"],["000000ff","fffffffe","00000000","00000000","fffffe02"],["000000ff","ffffffff","00000000","00000000","ffffff01"],["00007fff","00000000","00000000","00000000","00000000"],["00007fff","00000001","00000000","00000000","00007fff"],["00007fff","00000002","00000000","00000000","0000fffe"],["00007fff","00000003","00000000","00000000","00017ffd"],["00007fff","00000005","00000000","00000000","00027ffb"],["00007fff","00000007","00000000","00000000","00037ff9"],["00007fff","0000001f","00000000","00000000","000f7fe1"],["00007fff","00000020","00000000","00000000","000fffe0"],["00007fff","00000021","00000000","00000000","00107fdf"],["00007fff","0000003f","00000000","00000000","001f7fc1"],["00007fff","00000040","00000000","00000000","001fffc0"],["00007fff","000000ff","00000000","00000000","007f7f01"],["00007fff","00007fff","00000000","00000000","3fff0001"],["00007fff","00008000","00000000","00000000","3fff8000"],["00007fff","0000ffff","00000000","00000000","7ffe8001"],["00007fff","00010000","00000000","00000000","7fff0000"],["00007fff","55555555","00000000","00000000","55552aab"],["00007fff","7ffffffe","00000000","00000000","7fff0002"],["00007fff","7fffffff","00000000","00000000","7fff8001"],["00007fff","80000000","00000000","00000000","80000000"],["00007fff","80000001","00000000","00000000","80007fff"],["00007fff","aaaaaaaa","00000000","00000000","aaaa5556"],["00007fff","deadbeef","00000000","00000000","00c9c111"],["00007fff","ffff0000","00000000","00000000","80010000"],["00007fff","ffff8000","00000000","00000000","c0008000"],["00007fff","ffffffe0","00000000","00000000","fff00020"],["00007fff","ffffffe1","00000000","00000000","fff0801f"],["00007fff","fffffff9","00000000","00000000","fffc8007"],["00007fff","fffffffd","00000000","00000000","fffe8003"],["00007fff","fffffffe","00000000","00000000","ffff0002"],["00007fff","ffffffff","00000000","00000000","ffff8001"],["00008000","00000000","00000000","00000000","00000000"],["00008000","00000001","00000000","00000000","00008000"],["00008000","00000002","00000000","00000000","00010000"],["00008000","00000003","00000000","00000000","00018000"],["00008000","00000005","00000000","00000000","00028000"],["00008000","00000007","00000000","00000000","00038000"],["00008000","0000001f","00000000","00000000","000f8000"],["00008000","00000020","00000000","00000000","00100000"],["00008000","00000021","00000000","00000000","00108000"],["00008000","0000003f","00000000","00000000","001f8000"],["00008000","00000040","00000000","00000000","00200000"],["00008000","000000ff","00000000","00000000","007f8000"],["00008000","00007fff","00000000","00000000","3fff8000"],["00008000","00008000","00000000","00000000","40000000"],["00008000","0000ffff","00000000","00000000","7fff8000"],["00008000","00010000","00000000","00000000","80000000"],["00008000","55555555","00000000","00000000","aaaa8000"],["00008000","7ffffffe","00000000","00000000","ffff0000"],["00008000","7fffffff","00000000","00000000","ffff8000"],["00008000","80000000","00000000","00000000","00000000"],["00008000","80000001","00000000","00000000","00008000"],["00008000","aaaaaaaa","00000000","00000000","55550000"],["00008000","deadbeef","00000000","00000000","df778000"],["00008000","ffff0000","00000000","00000000","80000000"],["00008000","ffff8000","00000000","00000000","c0000000"],["00008000","ffffffe0","00000000","00000000","fff00000"],["00008000","ffffffe1","00000000","00000000","fff08000"],["00008000","fffffff9","00000000","00000000","fffc8000"],["00008000","fffffffd","00000000","00000000","fffe8000"],["00008000","fffffffe","00000000","00000000","ffff0000"],["00008000","ffffffff","00000000","00000000","ffff8000"],["0000ffff","00000000","00000000","00000000","00000000"],["0000ffff","00000001","00000000","00000000","0000ffff"],["0000ffff","00000002","00000000","00000000","0001fffe"],["0000ffff","00000003","00000000","00000000","0002fffd"],["0000ffff","00000005","00000000","00000000","0004fffb"],["0000ffff","00000007","00000000","00000000","0006fff9"],["0000ffff","0000001f","00000000","00000000","001effe1"],["0000ffff","00000020","00000000","00000000","001fffe0"],["0000ffff","00000021","00000000","00000000","0020ffdf"],["0000ffff","0000003f","00000000","00000000","003effc1"],["0000ffff","00000040","00000000","00000000","003fffc0"],["0000ffff","000000ff","00000000","00000000","00feff01"],["0000ffff","00007fff","00000000","00000000","7ffe8001"],["0000ffff","00008000","00000000","00000000","7fff8000"],["0000ffff","0000ffff","00000000","00000000","fffe0001"],["0000ffff","00010000","00000000","00000000","ffff0000"],["0000ffff","55555555","00000000","00000000","ffffaaab"],["0000ffff","7ffffffe","00000000","00000000","7ffe0002"],["0000ffff","7fffffff","00000000","00000000","7fff0001"],["0000ffff","80000000","00000000","00000000","80000000"],["0000ffff","80000001","00000000","00000000","8000ffff"],["0000ffff","aaaaaaaa","00000000","00000000","ffff5556"],["0000ffff","deadbeef","00000000","00000000","e0414111"],["0000ffff","ffff0000","00000000","00000000","00010000"],["0000ffff","ffff8000","00000000","00000000","80008000"],["0000ffff","ffffffe0","00000000","00000000","ffe00020"],["0000ffff","ffffffe1","00000000","00000000","ffe1001f"],["0000ffff","fffffff9","00000000","00000000","fff90007"],["0000ffff","fffffffd","00000000","00000000","fffd0003"],["0000ffff","fffffffe","00000000","00000000","fffe0002"],["0000ffff","ffffffff","00000000","00000000","ffff0001"],["00010000","00000000","00000000","00000000","00000000"],["00010000","00000001","00000000","00000000","00010000"],["00010000","00000002","00000000","00000000","00020000"],["00010000","00000003","00000000","00000000","00030000"],["00010000","00000005","00000000","00000000","00050000"],["00010000","00000007","00000000","00000000","00070000"],["00010000","0000001f","00000000","00000000","001f0000"],["00010000","00000020","00000000","00000000","00200000"],["00010000","00000021","00000000","00000000","00210000"],["00010000","0000003f","00000000","00000000","003f0000"],["00010000","00000040","00000000","00000000","00400000"],["00010000","000000ff","00000000","00000000","00ff0000"],["00010000","00007fff","00000000","00000000","7fff0000"],["00010000","00008000","00000000","00000000","80000000"],["00010000","0000ffff","00000000","00000000","ffff0000"],["00010000","00010000","00000000","00000000","00000000"],["00010000","55555555","00000000","00000000","55550000"],["00010000","7ffffffe","00000000","00000000","fffe0000"],["00010000","7fffffff","00000000","00000000","ffff0000"],["00010000","80000000","00000000","00000000","00000000"],["00010000","80000001","00000000","00000000","00010000"],["00010000","aaaaaaaa","00000000","00000000","aaaa0000"],["00010000","deadbeef","00000000","00000000","beef0000"],["00010000","ffff0000","00000000","00000000","00000000"],["00010000","ffff8000","00000000","00000000","80000000"],["00010000","ffffffe0","00000000","00000000","ffe00000"],["00010000","ffffffe1","00000000","00000000","ffe10000"],["00010000","fffffff9","00000000","00000000","fff90000"],["00010000","fffffffd","00000000","00000000","fffd0000"],["00010000","fffffffe","00000000","00000000","fffe0000"],["00010000","ffffffff","00000000","00000000","ffff0000"],["55555555","00000000","00000000","00000000","00000000"],["55555555","00000001","00000000","00000000","55555555"],["55555555","00000002","00000000","00000000","aaaaaaaa"],["55555555","00000003","00000000","00000000","ffffffff"],["55555555","00000005","00000000","00000000","aaaaaaa9"],["55555555","00000007","00000000","00000000","55555553"],["55555555","0000001f","00000000","00000000","5555554b"],["55555555","00000020","00000000","00000000","aaaaaaa0"],["55555555","00000021","00000000","00000000","fffffff5"],["55555555","0000003f","00000000","00000000","ffffffeb"],["55555555","00000040","00000000","00000000","55555540"],["55555555","000000ff","00000000","00000000","ffffffab"],["55555555","00007fff","00000000","00000000","55552aab"],["55555555","00008000","00000000","00000000","aaaa8000"],["55555555","0000ffff","00000000","00000000","ffffaaab"],["55555555","00010000","00000000","00000000","55550000"],["55555555","55555555","00000000","00000000","38e38e39"],["55555555","7ffffffe","00000000","00000000","d5555556"],["55555555","7fffffff","00000000","00000000","2aaaaaab"],["55555555","80000000","00000000","00000000","80000000"],["55555555","80000001","00000000","00000000","d5555555"],["55555555","aaaaaaaa","00000000","00000000","71c71c72"],["55555555","deadbeef","00000000","00000000","6070c05b"],["55555555","ffff0000","00000000","00000000","aaab0000"],["55555555","ffff8000","00000000","00000000","55558000"],["55555555","ffffffe0","00000000","00000000","55555560"],["55555555","ffffffe1","00000000","00000000","aaaaaab5"],["55555555","fffffff9","00000000","00000000","aaaaaaad"],["55555555","fffffffd","00000000","00000000","00000001"],["55555555","fffffffe","00000000","00000000","55555556"],["55555555","ffffffff","00000000","00000000","aaaaaaab"],["7ffffffe","00000000","00000000","00000000","00000000"],["7ffffffe","00000001","00000000","00000000","7ffffffe"],["7ffffffe","00000002","00000000","00000000","fffffffc"],["7ffffffe","00000003","00000000","00000000","7ffffffa"],["7ffffffe","00000005","00000000","00000000","7ffffff6"],["7ffffffe","00000007","00000000","00000000","7ffffff2"],["7ffffffe","0000001f","00000000","00000000","7fffffc2"],["7ffffffe","00000020","00000000","00000000","ffffffc0"],["7ffffffe","00000021","00000000","00000000","7fffffbe"],["7ffffffe","0000003f","00000000","00000000","7fffff82"],["7ffffffe","00000040","00000000","00000000","ffffff80"],["7ffffffe","000000ff","00000000","00000000","7ffffe02"],["7ffffffe","00007fff","00000000","00000000","7fff0002"],["7ffffffe","00008000","00000000","00000000","ffff0000"],["7ffffffe","0000ffff","00000000","00000000","7ffe0002"],["7ffffffe","00010000","00000000","00000000","fffe0000"],["7ffffffe","55555555","00000000","00000000","d5555556"],["7ffffffe","7ffffffe","00000000","00000000","00000004"],["7ffffffe","7fffffff","00000000","00000000","80000002"],["7ffffffe","80000000","00000000","00000000","00000000"],["7ffffffe","80000001","00000000","00000000","7ffffffe"],["7ffffffe","aaaaaaaa","00000000","00000000","aaaaaaac"],["7ffffffe","deadbeef","00000000","00000000","c2a48222"],["7ffffffe","ffff0000","00000000","00000000","00020000"],["7ffffffe","ffff8000","00000000","00000000","00010000"],["7ffffffe","ffffffe0","00000000","00000000","00000040"],["7ffffffe","ffffffe1","00000000","00000000","8000003e"],["7ffffffe","fffffff9","00000000","00000000","8000000e"],["7ffffffe","fffffffd","00000000","00000000","80000006"],["7ffffffe","fffffffe","00000000","00000000","00000004"],["7ffffffe","ffffffff","00000000","00000000","80000002"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","7fffffff"],["7fffffff","00000002","00000000","00000000","fffffffe"],["7fffffff","00000003","00000000","00000000","7ffffffd"],["7fffffff","00000005","00000000","00000000","7ffffffb"],["7fffffff","00000007","00000000","00000000","7ffffff9"],["7fffffff","0000001f","00000000","00000000","7fffffe1"],["7fffffff","00000020","00000000","00000000","ffffffe0"],["7fffffff","00000021","00000000","00000000","7fffffdf"],["7fffffff","0000003f","00000000","00000000","7fffffc1"],["7fffffff","00000040","00000000","00000000","ffffffc0"],["7fffffff","000000ff","00000000","00000000","7fffff01"],["7fffffff","00007fff","00000000","00000000","7fff8001"],["7fffffff","00008000","00000000","00000000","ffff8000"],["7fffffff","0000ffff","00000000","00000000","7fff0001"],["7fffffff","00010000","00000000","00000000","ffff0000"],["7fffffff","55555555","00000000","00000000","2aaaaaab"],["7fffffff","7ffffffe","00000000","00000000","80000002"],["7fffffff","7fffffff","00000000","00000000","00000001"],["7fffffff","80000000","00000000","00000000","80000000"],["7fffffff","80000001","00000000","00000000","ffffffff"],["7fffffff","aaaaaaaa","00000000","00000000","55555556"],["7fffffff","deadbeef","00000000","00000000","a1524111"],["7fffffff","ffff0000","00000000","00000000","00010000"],["7fffffff","ffff8000","00000000","00000000","00008000"],["7fffffff","ffffffe0","00000000","00000000","00000020"],["7fffffff","ffffffe1","00000000","00000000","8000001f"],["7fffffff","fffffff9","00000000","00000000","80000007"],["7fffffff","fffffffd","00000000","00000000","80000003"],["7fffffff","fffffffe","00000000","00000000","00000002"],["7fffffff","ffffffff","00000000","00000000","80000001"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000001","00000000","00000000","80000000"],["80000000","00000002","00000000","00000000","00000000"],["80000000","00000003","00000000","00000000","80000000"],["80000000","00000005","00000000","00000000","80000000"],["80000000","00000007","00000000","00000000","80000000"],["80000000","0000001f","00000000","00000000","80000000"],["80000000","00000020","00000000","00000000","00000000"],["80000000","00000021","00000000","00000000","80000000"],["80000000","0000003f","00000000","00000000","80000000"],["80000000","00000040","00000000","00000000","00000000"],["80000000","000000ff","00000000","00000000","80000000"],["80000000","00007fff","00000000","00000000","80000000"],["80000000","00008000","00000000","00000000","00000000"],["80000000","0000ffff","00000000","00000000","80000000"],["80000000","00010000","00000000","00000000","00000000"],["80000000","55555555","00000000","00000000","80000000"],["80000000","7ffffffe","00000000","00000000","00000000"],["80000000","7fffffff","00000000","00000000","80000000"],["80000000","80000000","00000000","00000000","00000000"],["80000000","80000001","00000000","00000000","80000000"],["80000000","aaaaaaaa","00000000","00000000","00000000"],["80000000","deadbeef","00000000","00000000","80000000"],["80000000","ffff0000","00000000","00000000","00000000"],["80000000","ffff8000","00000000","00000000","00000000"],["80000000","ffffffe0","00000000","00000000","00000000"],["80000000","ffffffe1","00000000","00000000","80000000"],["80000000","fffffff9","00000000","00000000","80000000"],["80000000","fffffffd","00000000","00000000","80000000"],["80000000","fffffffe","00000000","00000000","00000000"],["80000000","ffffffff","00000000","00000000","80000000"],["80000001","00000000","00000000","00000000","00000000"],["80000001","00000001","00000000","00000000","80000001"],["80000001","00000002","00000000","00000000","00000002"],["80000001","00000003","00000000","00000000","80000003"],["80000001","00000005","00000000","00000000","80000005"],["80000001","00000007","00000000","00000000","80000007"],["80000001","0000001f","00000000","00000000","8000001f"],["80000001","00000020","00000000","00000000","00000020"],["80000001","00000021","00000000","00000000","80000021"],["80000001","0000003f","00000000","00000000","8000003f"],["80000001","00000040","00000000","00000000","00000040"],["80000001","000000ff","00000000","00000000","800000ff"],["80000001","00007fff","00000000","00000000","80007fff"],["80000001","00008000","00000000","00000000","00008000"],["80000001","0000ffff","00000000","00000000","8000ffff"],["80000001","00010000","00000000","00000000","00010000"],["80000001","55555555","00000000","00000000","d5555555"],["80000001","7ffffffe","00000000","00000000","7ffffffe"],["80000001","7fffffff","00000000","00000000","ffffffff"],["80000001","80000000","00000000","00000000","80000000"],["80000001","80000001","00000000","00000000","00000001"],["80000001","aaaaaaaa","00000000","00000000","aaaaaaaa"],["80000001","deadbeef","00000000","00000000","5eadbeef"],["80000001","ffff0000","00000000","00000000","ffff0000"],["80000001","ffff8000","00000000","00000000","ffff8000"],["80000001","ffffffe0","00000000","00000000","ffffffe0"],["80000001","ffffffe1","00000000","00000000","7fffffe1"],["80000001","fffffff9","00000000","00000000","7ffffff9"],["80000001","fffffffd","00000000","00000000","7ffffffd"],["80000001","fffffffe","00000000","00000000","fffffffe"],["80000001","ffffffff","00000000","00000000","7fffffff"],["aaaaaaaa","00000000","00000000","00000000","00000000"],["aaaaaaaa","00000001","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000002","00000000","00000000","55555554"],["aaaaaaaa","00000003","00000000","00000000","fffffffe"],["aaaaaaaa","00000005","00000000","00000000","55555552"],["aaaaaaaa","00000007","00000000","00000000","aaaaaaa6"],["aaaaaaaa","0000001f","00000000","00000000","aaaaaa96"],["aaaaaaaa","00000020","00000000","00000000","55555540"],["aaaaaaaa","00000021","00000000","00000000","ffffffea"],["aaaaaaaa","0000003f","00000000","00000000","ffffffd6"],["aaaaaaaa","00000040","00000000","00000000","aaaaaa80"],["aaaaaaaa","000000ff","00000000","00000000","ffffff56"],["aaaaaaaa","00007fff","00000000","00000000","aaaa5556"],["aaaaaaaa","00008000","00000000","00000000","55550000"],["aaaaaaaa","0000ffff","00000000","00000000","ffff5556"],["aaaaaaaa","00010000","00000000","00000000","aaaa0000"],["aaaaaaaa","55555555","00000000","00000000","71c71c72"],["aaaaaaaa","7ffffffe","00000000","00000000","aaaaaaac"],["aaaaaaaa","7fffffff","00000000","00000000","55555556"],["aaaaaaaa","80000000","00000000","00000000","00000000"],["aaaaaaaa","80000001","00000000","00000000","aaaaaaaa"],["aaaaaaaa","aaaaaaaa","00000000","00000000","e38e38e4"],["aaaaaaaa","deadbeef","00000000","00000000","c0e180b6"],["aaaaaaaa","ffff0000","00000000","00000000","55560000"],["aaaaaaaa","ffff8000","00000000","00000000","aaab0000"],["aaaaaaaa","ffffffe0","00000000","00000000","aaaaaac0"],["aaaaaaaa","ffffffe1","00000000","00000000","5555556a"],["aaaaaaaa","fffffff9","00000000","00000000","5555555a"],["aaaaaaaa","fffffffd","00000000","00000000","00000002"],["aaaaaaaa","fffffffe","00000000","00000000","aaaaaaac"],["aaaaaaaa","ffffffff","00000000","00000000","55555556"],["deadbeef","00000000","00000000","00000000","00000000"],["deadbeef","00000001","00000000","00000000","deadbeef"],["deadbeef","00000002","00000000","00000000","bd5b7dde"],["deadbeef","00000003","00000000","00000000","9c093ccd"],["deadbeef","00000005","00000000","00000000","5964baab"],["deadbeef","00000007","00000000","00000000","16c03889"],["deadbeef","0000001f","00000000","00000000","f70a1ef1"],["deadbeef","00000020","00000000","00000000","d5b7dde0"],["deadbeef","00000021","00000000","00000000","b4659ccf"],["deadbeef","0000003f","00000000","00000000","ccc1fcd1"],["deadbeef","00000040","00000000","00000000","ab6fbbc0"],["deadbeef","000000ff","00000000","00000000","cf113011"],["deadbeef","00007fff","00000000","00000000","00c9c111"],["deadbeef","00008000","00000000","00000000","df778000"],["deadbeef","0000ffff","00000000","00000000","e0414111"],["deadbeef","00010000","00000000","00000000","beef0000"],["deadbeef","55555555","00000000","00000000","6070c05b"],["deadbeef","7ffffffe","00000000","00000000","c2a48222"],["deadbeef","7fffffff","00000000","00000000","a1524111"],["deadbeef","80000000","00000000","00000000","80000000"],["deadbeef","80000001","00000000","00000000","5eadbeef"],["deadbeef","aaaaaaaa","00000000","00000000","c0e180b6"],["deadbeef","deadbeef","00000000","00000000","216da321"],["deadbeef","ffff0000","00000000","00000000","41110000"],["deadbeef","ffff8000","00000000","00000000","20888000"],["deadbeef","ffffffe0","00000000","00000000","2a482220"],["deadbeef","ffffffe1","00000000","00000000","08f5e10f"],["deadbeef","fffffff9","00000000","00000000","e93fc777"],["deadbeef","fffffffd","00000000","00000000","63f6c333"],["deadbeef","fffffffe","00000000","00000000","42a48222"],["deadbeef","ffffffff","00000000","00000000","21524111"],["ffff0000","00000000","00000000","00000000","00000000"],["ffff0000","00000001","00000000","00000000","ffff0000"],["ffff0000","00000002","00000000","00000000","fffe0000"],["ffff0000","00000003","00000000","00000000","fffd0000"],["ffff0000","00000005","00000000","00000000","fffb0000"],["ffff0000","00000007","00000000","00000000","fff90000"],["ffff0000","0000001f","00000000","00000000","ffe10000"],["ffff0000","00000020","00000000","00000000","ffe00000"],["ffff0000","00000021","00000000","00000000","ffdf0000"],["ffff0000","0000003f","00000000","00000000","ffc10000"],["ffff0000","00000040","00000000","00000000","ffc00000"],["ffff0000","000000ff","00000000","00000000","ff010000"],["ffff0000","00007fff","00000000","00000000","80010000"],["ffff0000","00008000","00000000","00000000","80000000"],["ffff0000","0000ffff","00000000","00000000","00010000"],["ffff0000","00010000","00000000","00000000","00000000"],["ffff0000","55555555","00000000","00000000","aaab0000"],["ffff0000","7ffffffe","00000000","00000000","00020000"],["ffff0000","7fffffff","00000000","00000000","00010000"],["ffff0000","80000000","00000000","00000000","00000000"],["ffff0000","80000001","00000000","00000000","ffff0000"],["ffff0000","aaaaaaaa","00000000","00000000","55560000"],["ffff0000","deadbeef","00000000","00000000","41110000"],["ffff0000","ffff0000","00000000","00000000","00000000"],["ffff0000","ffff8000","00000000","00000000","80000000"],["ffff0000","ffffffe0","00000000","00000000","00200000"],["ffff0000","ffffffe1","00000000","00000000","001f0000"],["ffff0000","fffffff9","00000000","00000000","00070000"],["ffff0000","fffffffd","00000000","00000000","00030000"],["ffff0000","fffffffe","00000000","00000000","00020000"],["ffff0000","ffffffff","00000000","00000000","00010000"],["ffff8000","00000000","00000000","00000000","00000000"],["ffff8000","00000001","00000000","00000000","ffff8000"],["ffff8000","00000002","00000000","00000000","ffff0000"],["ffff8000","00000003","00000000","00000000","fffe8000"],["ffff8000","00000005","00000000","00000000","fffd8000"],["ffff8000","00000007","00000000","00000000","fffc8000"],["ffff8000","0000001f","00000000","00000000","fff08000"],["ffff8000","00000020","00000000","00000000","fff00000"],["ffff8000","00000021","00000000","00000000","ffef8000"],["ffff8000","0000003f","00000000","00000000","ffe08000"],["ffff8000","00000040","00000000","00000000","ffe00000"],["ffff8000","000000ff","00000000","00000000","ff808000"],["ffff8000","00007fff","00000000","00000000","c0008000"],["ffff8000","00008000","00000000","00000000","c0000000"],["ffff8000","0000ffff","00000000","00000000","80008000"],["ffff8000","00010000","00000000","00000000","80000000"],["ffff8000","55555555","00000000","00000000","55558000"],["ffff8000","7ffffffe","00000000","00000000","00010000"],["ffff8000","7fffffff","00000000","00000000","00008000"],["ffff8000","80000000","00000000","00000000","00000000"],["ffff8000","80000001","00000000","00000000","ffff8000"],["ffff8000","aaaaaaaa","00000000","00000000","aaab0000"],["ffff8000","deadbeef","00000000","00000000","20888000"],["ffff8000","ffff0000","00000000","00000000","80000000"],["ffff8000","ffff8000","00000000","00000000","40000000"],["ffff8000","ffffffe0","00000000","00000000","00100000"],["ffff8000","ffffffe1","00000000","00000000","000f8000"],["ffff8000","fffffff9","00000000","00000000","00038000"],["ffff8000","fffffffd","00000000","00000000","00018000"],["ffff8000","fffffffe","00000000","00000000","00010000"],["ffff8000","ffffffff","00000000","00000000","00008000"],["ffffffe0","00000000","00000000","00000000","00000000"],["ffffffe0","00000001","00000000","00000000","ffffffe0"],["ffffffe0","00000002","00000000","00000000","ffffffc0"],["ffffffe0","00000003","00000000","00000000","ffffffa0"],["ffffffe0","00000005","00000000","00000000","ffffff60"],["ffffffe0","00000007","00000000","00000000","ffffff20"],["ffffffe0","0000001f","00000000","00000000","fffffc20"],["ffffffe0","00000020","00000000","00000000","fffffc00"],["ffffffe0","00000021","00000000","00000000","fffffbe0"],["ffffffe0","0000003f","00000000","00000000","fffff820"],["ffffffe0","00000040","00000000","00000000","fffff800"],["ffffffe0","000000ff","00000000","00000000","ffffe020"],["ffffffe0","00007fff","00000000","00000000","fff00020"],["ffffffe0","00008000","00000000","00000000","fff00000"],["ffffffe0","0000ffff","00000000","00000000","ffe00020"],["ffffffe0","00010000","00000000","00000000","ffe00000"],["ffffffe0","55555555","00000000","00000000","55555560"],["ffffffe0","7ffffffe","00000000","00000000","00000040"],["ffffffe0","7fffffff","00000000","00000000","00000020"],["ffffffe0","80000000","00000000","00000000","00000000"],["ffffffe0","80000001","00000000","00000000","ffffffe0"],["ffffffe0","aaaaaaaa","00000000","00000000","aaaaaac0"],["ffffffe0","deadbeef","00000000","00000000","2a482220"],["ffffffe0","ffff0000","00000000","00000000","00200000"],["ffffffe0","ffff8000","00000000","00000000","00100000"],["ffffffe0","ffffffe0","00000000","00000000","00000400"],["ffffffe0","ffffffe1","00000000","00000000","000003e0"],["ffffffe0","fffffff9","00000000","00000000","000000e0"],["ffffffe0","fffffffd","00000000","00000000","00000060"],["ffffffe0","fffffffe","00000000","00000000","00000040"],["ffffffe0","ffffffff","00000000","00000000","00000020"],["ffffffe1","00000000","00000000","00000000","00000000"],["ffffffe1","00000001","00000000","00000000","ffffffe1"],["ffffffe1","00000002","00000000","00000000","ffffffc2"],["ffffffe1","00000003","00000000","00000000","ffffffa3"],["ffffffe1","00000005","00000000","00000000","ffffff65"],["ffffffe1","00000007","00000000","00000000","ffffff27"],["ffffffe1","0000001f","00000000","00000000","fffffc3f"],["ffffffe1","00000020","00000000","00000000","fffffc20"],["ffffffe1","00000021","00000000","00000000","fffffc01"],["ffffffe1","0000003f","00000000","00000000","fffff85f"],["ffffffe1","00000040","00000000","00000000","fffff840"],["ffffffe1","000000ff","00000000","00000000","ffffe11f"],["ffffffe1","00007fff","00000000","00000000","fff0801f"],["ffffffe1","00008000","00000000","00000000","fff08000"],["ffffffe1","0000ffff","00000000","00000000","ffe1001f"],["ffffffe1","00010000","00000000","00000000","ffe10000"],["ffffffe1","55555555","00000000","00000000","aaaaaab5"],["ffffffe1","7ffffffe","00000000","00000000","8000003e"],["ffffffe1","7fffffff","00000000","00000000","8000001f"],["ffffffe1","80000000","00000000","00000000","80000000"],["ffffffe1","80000001","00000000","00000000","7fffffe1"],["ffffffe1","aaaaaaaa","00000000","00000000","5555556a"],["ffffffe1","deadbeef","00000000","00000000","08f5e10f"],["ffffffe1","ffff0000","00000000","00000000","001f0000"],["ffffffe1","ffff8000","00000000","00000000","000f8000"],["ffffffe1","ffffffe0","00000000","00000000","000003e0"],["ffffffe1","ffffffe1","00000000","00000000","000003c1"],["ffffffe1","fffffff9","00000000","00000000","000000d9"],["ffffffe1","fffffffd","00000000","00000000","0000005d"],["ffffffe1","fffffffe","00000000","00000000","0000003e"],["ffffffe1","ffffffff","00000000","00000000","0000001f"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000001","00000000","00000000","fffffff9"],["fffffff9","00000002","00000000","00000000","fffffff2"],["fffffff9","00000003","00000000","00000000","ffffffeb"],["fffffff9","00000005","00000000","00000000","ffffffdd"],["fffffff9","00000007","00000000","00000000","ffffffcf"],["fffffff9","0000001f","00000000","00000000","ffffff27"],["fffffff9","00000020","00000000","00000000","ffffff20"],["fffffff9","00000021","00000000","00000000","ffffff19"],["fffffff9","0000003f","00000000","00000000","fffffe47"],["fffffff9","00000040","00000000","00000000","fffffe40"],["fffffff9","000000ff","00000000","00000000","fffff907"],["fffffff9","00007fff","00000000","00000000","fffc8007"],["fffffff9","00008000","00000000","00000000","fffc8000"],["fffffff9","0000ffff","00000000","00000000","fff90007"],["fffffff9","00010000","00000000","00000000","fff90000"],["fffffff9","55555555","00000000","00000000","aaaaaaad"],["fffffff9","7ffffffe","00000000","00000000","8000000e"],["fffffff9","7fffffff","00000000","00000000","80000007"],["fffffff9","80000000","00000000","00000000","80000000"],["fffffff9","80000001","00000000","00000000","7ffffff9"],["fffffff9","aaaaaaaa","00000000","00000000","5555555a"],["fffffff9","deadbeef","00000000","00000000","e93fc777"],["fffffff9","ffff0000","00000000","00000000","00070000"],["fffffff9","ffff8000","00000000","00000000","00038000"],["fffffff9","ffffffe0","00000000","00000000","000000e0"],["fffffff9","ffffffe1","00000000","00000000","000000d9"],["fffffff9","fffffff9","00000000","00000000","00000031"],["fffffff9","fffffffd","00000000","00000000","00000015"],["fffffff9","fffffffe","00000000","00000000","0000000e"],["fffffff9","ffffffff","00000000","00000000","00000007"],["fffffffd","00000000","00000000","00000000","00000000"],["fffffffd","00000001","00000000","00000000","fffffffd"],["fffffffd","00000002","00000000","00000000","fffffffa"],["fffffffd","00000003","00000000","00000000","fffffff7"],["fffffffd","00000005","00000000","00000000","fffffff1"],["fffffffd","00000007","00000000","00000000","ffffffeb"],["fffffffd","0000001f","00000000","00000000","ffffffa3"],["fffffffd","00000020","00000000","00000000","ffffffa0"],["fffffffd","00000021","00000000","00000000","ffffff9d"],["fffffffd","0000003f","00000000","00000000","ffffff43"],["fffffffd","00000040","00000000","00000000","ffffff40"],["fffffffd","000000ff","00000000","00000000","fffffd03"],["fffffffd","00007fff","00000000","00000000","fffe8003"],["fffffffd","00008000","00000000","00000000","fffe8000"],["fffffffd","0000ffff","00000000","00000000","fffd0003"],["fffffffd","00010000","00000000","00000000","fffd0000"],["fffffffd","55555555","00000000","00000000","00000001"],["fffffffd","7ffffffe","00000000","00000000","80000006"],["fffffffd","7fffffff","00000000","00000000","80000003"],["fffffffd","80000000","00000000","00000000","80000000"],["fffffffd","80000001","00000000","00000000","7ffffffd"],["fffffffd","aaaaaaaa","00000000","00000000","00000002"],["fffffffd","deadbeef","00000000","00000000","63f6c333"],["fffffffd","ffff0000","00000000","00000000","00030000"],["fffffffd","ffff8000","00000000","00000000","00018000"],["fffffffd","ffffffe0","00000000","00000000","00000060"],["fffffffd","ffffffe1","00000000","00000000","0000005d"],["fffffffd","fffffff9","00000000","00000000","00000015"],["fffffffd","fffffffd","00000000","00000000","00000009"],["fffffffd","fffffffe","00000000","00000000","00000006"],["fffffffd","ffffffff","00000000","00000000","00000003"],["fffffffe","00000000","00000000","00000000","00000000"],["fffffffe","00000001","00000000","00000000","fffffffe"],["fffffffe","00000002","00000000","00000000","fffffffc"],["fffffffe","00000003","00000000","00000000","fffffffa"],["fffffffe","00000005","00000000","00000000","fffffff6"],["fffffffe","00000007","00000000","00000000","fffffff2"],["fffffffe","0000001f","00000000","00000000","ffffffc2"],["fffffffe","00000020","00000000","00000000","ffffffc0"],["fffffffe","00000021","00000000","00000000","ffffffbe"],["fffffffe","0000003f","00000000","00000000","ffffff82"],["fffffffe","00000040","00000000","00000000","ffffff80"],["fffffffe","000000ff","00000000","00000000","fffffe02"],["fffffffe","00007fff","00000000","00000000","ffff0002"],["fffffffe","00008000","00000000","00000000","ffff0000"],["fffffffe","0000ffff","00000000","00000000","fffe0002"],["fffffffe","00010000","00000000","00000000","fffe0000"],["fffffffe","55555555","00000000","00000000","55555556"],["fffffffe","7ffffffe","00000000","00000000","00000004"],["fffffffe","7fffffff","00000000","00000000","00000002"],["fffffffe","80000000","00000000","00000000","00000000"],["fffffffe","80000001","00000000","00000000","fffffffe"],["fffffffe","aaaaaaaa","00000000","00000000","aaaaaaac"],["fffffffe","deadbeef","00000000","00000000","42a48222"],["fffffffe","ffff0000","00000000","00000000","00020000"],["fffffffe","ffff8000","00000000","00000000","00010000"],["fffffffe","ffffffe0","00000000","00000000","00000040"],["fffffffe","ffffffe1","00000000","00000000","0000003e"],["fffffffe","fffffff9","00000000","00000000","0000000e"],["fffffffe","fffffffd","00000000","00000000","00000006"],["fffffffe","fffffffe","00000000","00000000","00000004"],["fffffffe","ffffffff","00000000","00000000","00000002"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000001","00000000","00000000","ffffffff"],["ffffffff","00000002","00000000","00000000","fffffffe"],["ffffffff","00000003","00000000","00000000","fffffffd"],["ffffffff","00000005","00000000","00000000","fffffffb"],["ffffffff","00000007","00000000","00000000","fffffff9"],["ffffffff","0000001f","00000000","00000000","ffffffe1"],["ffffffff","00000020","00000000","00000000","ffffffe0"],["ffffffff","00000021","00000000","00000000","ffffffdf"],["ffffffff","0000003f","00000000","00000000","ffffffc1"],["ffffffff","00000040","00000000","00000000","ffffffc0"],["ffffffff","000000ff","00000000","00000000","ffffff01"],["ffffffff","00007fff","00000000","00000000","ffff8001"],["ffffffff","00008000","00000000","00000000","ffff8000"],["ffffffff","0000ffff","00000000","00000000","ffff0001"],["ffffffff","00010000","00000000","00000000","ffff0000"],["ffffffff","55555555","00000000","00000000","aaaaaaab"],["ffffffff","7ffffffe","00000000","00000000","80000002"],["ffffffff","7fffffff","00000000","00000000","80000001"],["ffffffff","80000000","00000000","00000000","80000000"],["ffffffff","80000001","00000000","00000000","7fffffff"],["ffffffff","aaaaaaaa","00000000","00000000","55555556"],["ffffffff","deadbeef","00000000","00000000","21524111"],["ffffffff","ffff0000","00000000","00000000","00010000"],["ffffffff","ffff8000","00000000","00000000","00008000"],["ffffffff","ffffffe0","00000000","00000000","00000020"],["ffffffff","ffffffe1","00000000","00000000","0000001f"],["ffffffff","fffffff9","00000000","00000000","00000007"],["ffffffff","fffffffd","00000000","00000000","00000003"],["ffffffff","fffffffe","00000000","00000000","00000002"],["ffffffff","ffffffff","00000000","00000000","00000001"]]} +{"op":"add_i32","code":3,"wgsl":"ia + ib","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000002","00000000","00000000","00000002"],["00000000","00000003","00000000","00000000","00000003"],["00000000","00000005","00000000","00000000","00000005"],["00000000","00000007","00000000","00000000","00000007"],["00000000","0000001f","00000000","00000000","0000001f"],["00000000","00000020","00000000","00000000","00000020"],["00000000","00000021","00000000","00000000","00000021"],["00000000","0000003f","00000000","00000000","0000003f"],["00000000","00000040","00000000","00000000","00000040"],["00000000","000000ff","00000000","00000000","000000ff"],["00000000","00007fff","00000000","00000000","00007fff"],["00000000","00008000","00000000","00000000","00008000"],["00000000","0000ffff","00000000","00000000","0000ffff"],["00000000","00010000","00000000","00000000","00010000"],["00000000","55555555","00000000","00000000","55555555"],["00000000","7ffffffe","00000000","00000000","7ffffffe"],["00000000","7fffffff","00000000","00000000","7fffffff"],["00000000","80000000","00000000","00000000","80000000"],["00000000","80000001","00000000","00000000","80000001"],["00000000","aaaaaaaa","00000000","00000000","aaaaaaaa"],["00000000","deadbeef","00000000","00000000","deadbeef"],["00000000","ffff0000","00000000","00000000","ffff0000"],["00000000","ffff8000","00000000","00000000","ffff8000"],["00000000","ffffffe0","00000000","00000000","ffffffe0"],["00000000","ffffffe1","00000000","00000000","ffffffe1"],["00000000","fffffff9","00000000","00000000","fffffff9"],["00000000","fffffffd","00000000","00000000","fffffffd"],["00000000","fffffffe","00000000","00000000","fffffffe"],["00000000","ffffffff","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000002"],["00000001","00000002","00000000","00000000","00000003"],["00000001","00000003","00000000","00000000","00000004"],["00000001","00000005","00000000","00000000","00000006"],["00000001","00000007","00000000","00000000","00000008"],["00000001","0000001f","00000000","00000000","00000020"],["00000001","00000020","00000000","00000000","00000021"],["00000001","00000021","00000000","00000000","00000022"],["00000001","0000003f","00000000","00000000","00000040"],["00000001","00000040","00000000","00000000","00000041"],["00000001","000000ff","00000000","00000000","00000100"],["00000001","00007fff","00000000","00000000","00008000"],["00000001","00008000","00000000","00000000","00008001"],["00000001","0000ffff","00000000","00000000","00010000"],["00000001","00010000","00000000","00000000","00010001"],["00000001","55555555","00000000","00000000","55555556"],["00000001","7ffffffe","00000000","00000000","7fffffff"],["00000001","7fffffff","00000000","00000000","80000000"],["00000001","80000000","00000000","00000000","80000001"],["00000001","80000001","00000000","00000000","80000002"],["00000001","aaaaaaaa","00000000","00000000","aaaaaaab"],["00000001","deadbeef","00000000","00000000","deadbef0"],["00000001","ffff0000","00000000","00000000","ffff0001"],["00000001","ffff8000","00000000","00000000","ffff8001"],["00000001","ffffffe0","00000000","00000000","ffffffe1"],["00000001","ffffffe1","00000000","00000000","ffffffe2"],["00000001","fffffff9","00000000","00000000","fffffffa"],["00000001","fffffffd","00000000","00000000","fffffffe"],["00000001","fffffffe","00000000","00000000","ffffffff"],["00000001","ffffffff","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","00000002"],["00000002","00000001","00000000","00000000","00000003"],["00000002","00000002","00000000","00000000","00000004"],["00000002","00000003","00000000","00000000","00000005"],["00000002","00000005","00000000","00000000","00000007"],["00000002","00000007","00000000","00000000","00000009"],["00000002","0000001f","00000000","00000000","00000021"],["00000002","00000020","00000000","00000000","00000022"],["00000002","00000021","00000000","00000000","00000023"],["00000002","0000003f","00000000","00000000","00000041"],["00000002","00000040","00000000","00000000","00000042"],["00000002","000000ff","00000000","00000000","00000101"],["00000002","00007fff","00000000","00000000","00008001"],["00000002","00008000","00000000","00000000","00008002"],["00000002","0000ffff","00000000","00000000","00010001"],["00000002","00010000","00000000","00000000","00010002"],["00000002","55555555","00000000","00000000","55555557"],["00000002","7ffffffe","00000000","00000000","80000000"],["00000002","7fffffff","00000000","00000000","80000001"],["00000002","80000000","00000000","00000000","80000002"],["00000002","80000001","00000000","00000000","80000003"],["00000002","aaaaaaaa","00000000","00000000","aaaaaaac"],["00000002","deadbeef","00000000","00000000","deadbef1"],["00000002","ffff0000","00000000","00000000","ffff0002"],["00000002","ffff8000","00000000","00000000","ffff8002"],["00000002","ffffffe0","00000000","00000000","ffffffe2"],["00000002","ffffffe1","00000000","00000000","ffffffe3"],["00000002","fffffff9","00000000","00000000","fffffffb"],["00000002","fffffffd","00000000","00000000","ffffffff"],["00000002","fffffffe","00000000","00000000","00000000"],["00000002","ffffffff","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000003"],["00000003","00000001","00000000","00000000","00000004"],["00000003","00000002","00000000","00000000","00000005"],["00000003","00000003","00000000","00000000","00000006"],["00000003","00000005","00000000","00000000","00000008"],["00000003","00000007","00000000","00000000","0000000a"],["00000003","0000001f","00000000","00000000","00000022"],["00000003","00000020","00000000","00000000","00000023"],["00000003","00000021","00000000","00000000","00000024"],["00000003","0000003f","00000000","00000000","00000042"],["00000003","00000040","00000000","00000000","00000043"],["00000003","000000ff","00000000","00000000","00000102"],["00000003","00007fff","00000000","00000000","00008002"],["00000003","00008000","00000000","00000000","00008003"],["00000003","0000ffff","00000000","00000000","00010002"],["00000003","00010000","00000000","00000000","00010003"],["00000003","55555555","00000000","00000000","55555558"],["00000003","7ffffffe","00000000","00000000","80000001"],["00000003","7fffffff","00000000","00000000","80000002"],["00000003","80000000","00000000","00000000","80000003"],["00000003","80000001","00000000","00000000","80000004"],["00000003","aaaaaaaa","00000000","00000000","aaaaaaad"],["00000003","deadbeef","00000000","00000000","deadbef2"],["00000003","ffff0000","00000000","00000000","ffff0003"],["00000003","ffff8000","00000000","00000000","ffff8003"],["00000003","ffffffe0","00000000","00000000","ffffffe3"],["00000003","ffffffe1","00000000","00000000","ffffffe4"],["00000003","fffffff9","00000000","00000000","fffffffc"],["00000003","fffffffd","00000000","00000000","00000000"],["00000003","fffffffe","00000000","00000000","00000001"],["00000003","ffffffff","00000000","00000000","00000002"],["00000005","00000000","00000000","00000000","00000005"],["00000005","00000001","00000000","00000000","00000006"],["00000005","00000002","00000000","00000000","00000007"],["00000005","00000003","00000000","00000000","00000008"],["00000005","00000005","00000000","00000000","0000000a"],["00000005","00000007","00000000","00000000","0000000c"],["00000005","0000001f","00000000","00000000","00000024"],["00000005","00000020","00000000","00000000","00000025"],["00000005","00000021","00000000","00000000","00000026"],["00000005","0000003f","00000000","00000000","00000044"],["00000005","00000040","00000000","00000000","00000045"],["00000005","000000ff","00000000","00000000","00000104"],["00000005","00007fff","00000000","00000000","00008004"],["00000005","00008000","00000000","00000000","00008005"],["00000005","0000ffff","00000000","00000000","00010004"],["00000005","00010000","00000000","00000000","00010005"],["00000005","55555555","00000000","00000000","5555555a"],["00000005","7ffffffe","00000000","00000000","80000003"],["00000005","7fffffff","00000000","00000000","80000004"],["00000005","80000000","00000000","00000000","80000005"],["00000005","80000001","00000000","00000000","80000006"],["00000005","aaaaaaaa","00000000","00000000","aaaaaaaf"],["00000005","deadbeef","00000000","00000000","deadbef4"],["00000005","ffff0000","00000000","00000000","ffff0005"],["00000005","ffff8000","00000000","00000000","ffff8005"],["00000005","ffffffe0","00000000","00000000","ffffffe5"],["00000005","ffffffe1","00000000","00000000","ffffffe6"],["00000005","fffffff9","00000000","00000000","fffffffe"],["00000005","fffffffd","00000000","00000000","00000002"],["00000005","fffffffe","00000000","00000000","00000003"],["00000005","ffffffff","00000000","00000000","00000004"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","00000008"],["00000007","00000002","00000000","00000000","00000009"],["00000007","00000003","00000000","00000000","0000000a"],["00000007","00000005","00000000","00000000","0000000c"],["00000007","00000007","00000000","00000000","0000000e"],["00000007","0000001f","00000000","00000000","00000026"],["00000007","00000020","00000000","00000000","00000027"],["00000007","00000021","00000000","00000000","00000028"],["00000007","0000003f","00000000","00000000","00000046"],["00000007","00000040","00000000","00000000","00000047"],["00000007","000000ff","00000000","00000000","00000106"],["00000007","00007fff","00000000","00000000","00008006"],["00000007","00008000","00000000","00000000","00008007"],["00000007","0000ffff","00000000","00000000","00010006"],["00000007","00010000","00000000","00000000","00010007"],["00000007","55555555","00000000","00000000","5555555c"],["00000007","7ffffffe","00000000","00000000","80000005"],["00000007","7fffffff","00000000","00000000","80000006"],["00000007","80000000","00000000","00000000","80000007"],["00000007","80000001","00000000","00000000","80000008"],["00000007","aaaaaaaa","00000000","00000000","aaaaaab1"],["00000007","deadbeef","00000000","00000000","deadbef6"],["00000007","ffff0000","00000000","00000000","ffff0007"],["00000007","ffff8000","00000000","00000000","ffff8007"],["00000007","ffffffe0","00000000","00000000","ffffffe7"],["00000007","ffffffe1","00000000","00000000","ffffffe8"],["00000007","fffffff9","00000000","00000000","00000000"],["00000007","fffffffd","00000000","00000000","00000004"],["00000007","fffffffe","00000000","00000000","00000005"],["00000007","ffffffff","00000000","00000000","00000006"],["0000001f","00000000","00000000","00000000","0000001f"],["0000001f","00000001","00000000","00000000","00000020"],["0000001f","00000002","00000000","00000000","00000021"],["0000001f","00000003","00000000","00000000","00000022"],["0000001f","00000005","00000000","00000000","00000024"],["0000001f","00000007","00000000","00000000","00000026"],["0000001f","0000001f","00000000","00000000","0000003e"],["0000001f","00000020","00000000","00000000","0000003f"],["0000001f","00000021","00000000","00000000","00000040"],["0000001f","0000003f","00000000","00000000","0000005e"],["0000001f","00000040","00000000","00000000","0000005f"],["0000001f","000000ff","00000000","00000000","0000011e"],["0000001f","00007fff","00000000","00000000","0000801e"],["0000001f","00008000","00000000","00000000","0000801f"],["0000001f","0000ffff","00000000","00000000","0001001e"],["0000001f","00010000","00000000","00000000","0001001f"],["0000001f","55555555","00000000","00000000","55555574"],["0000001f","7ffffffe","00000000","00000000","8000001d"],["0000001f","7fffffff","00000000","00000000","8000001e"],["0000001f","80000000","00000000","00000000","8000001f"],["0000001f","80000001","00000000","00000000","80000020"],["0000001f","aaaaaaaa","00000000","00000000","aaaaaac9"],["0000001f","deadbeef","00000000","00000000","deadbf0e"],["0000001f","ffff0000","00000000","00000000","ffff001f"],["0000001f","ffff8000","00000000","00000000","ffff801f"],["0000001f","ffffffe0","00000000","00000000","ffffffff"],["0000001f","ffffffe1","00000000","00000000","00000000"],["0000001f","fffffff9","00000000","00000000","00000018"],["0000001f","fffffffd","00000000","00000000","0000001c"],["0000001f","fffffffe","00000000","00000000","0000001d"],["0000001f","ffffffff","00000000","00000000","0000001e"],["00000020","00000000","00000000","00000000","00000020"],["00000020","00000001","00000000","00000000","00000021"],["00000020","00000002","00000000","00000000","00000022"],["00000020","00000003","00000000","00000000","00000023"],["00000020","00000005","00000000","00000000","00000025"],["00000020","00000007","00000000","00000000","00000027"],["00000020","0000001f","00000000","00000000","0000003f"],["00000020","00000020","00000000","00000000","00000040"],["00000020","00000021","00000000","00000000","00000041"],["00000020","0000003f","00000000","00000000","0000005f"],["00000020","00000040","00000000","00000000","00000060"],["00000020","000000ff","00000000","00000000","0000011f"],["00000020","00007fff","00000000","00000000","0000801f"],["00000020","00008000","00000000","00000000","00008020"],["00000020","0000ffff","00000000","00000000","0001001f"],["00000020","00010000","00000000","00000000","00010020"],["00000020","55555555","00000000","00000000","55555575"],["00000020","7ffffffe","00000000","00000000","8000001e"],["00000020","7fffffff","00000000","00000000","8000001f"],["00000020","80000000","00000000","00000000","80000020"],["00000020","80000001","00000000","00000000","80000021"],["00000020","aaaaaaaa","00000000","00000000","aaaaaaca"],["00000020","deadbeef","00000000","00000000","deadbf0f"],["00000020","ffff0000","00000000","00000000","ffff0020"],["00000020","ffff8000","00000000","00000000","ffff8020"],["00000020","ffffffe0","00000000","00000000","00000000"],["00000020","ffffffe1","00000000","00000000","00000001"],["00000020","fffffff9","00000000","00000000","00000019"],["00000020","fffffffd","00000000","00000000","0000001d"],["00000020","fffffffe","00000000","00000000","0000001e"],["00000020","ffffffff","00000000","00000000","0000001f"],["00000021","00000000","00000000","00000000","00000021"],["00000021","00000001","00000000","00000000","00000022"],["00000021","00000002","00000000","00000000","00000023"],["00000021","00000003","00000000","00000000","00000024"],["00000021","00000005","00000000","00000000","00000026"],["00000021","00000007","00000000","00000000","00000028"],["00000021","0000001f","00000000","00000000","00000040"],["00000021","00000020","00000000","00000000","00000041"],["00000021","00000021","00000000","00000000","00000042"],["00000021","0000003f","00000000","00000000","00000060"],["00000021","00000040","00000000","00000000","00000061"],["00000021","000000ff","00000000","00000000","00000120"],["00000021","00007fff","00000000","00000000","00008020"],["00000021","00008000","00000000","00000000","00008021"],["00000021","0000ffff","00000000","00000000","00010020"],["00000021","00010000","00000000","00000000","00010021"],["00000021","55555555","00000000","00000000","55555576"],["00000021","7ffffffe","00000000","00000000","8000001f"],["00000021","7fffffff","00000000","00000000","80000020"],["00000021","80000000","00000000","00000000","80000021"],["00000021","80000001","00000000","00000000","80000022"],["00000021","aaaaaaaa","00000000","00000000","aaaaaacb"],["00000021","deadbeef","00000000","00000000","deadbf10"],["00000021","ffff0000","00000000","00000000","ffff0021"],["00000021","ffff8000","00000000","00000000","ffff8021"],["00000021","ffffffe0","00000000","00000000","00000001"],["00000021","ffffffe1","00000000","00000000","00000002"],["00000021","fffffff9","00000000","00000000","0000001a"],["00000021","fffffffd","00000000","00000000","0000001e"],["00000021","fffffffe","00000000","00000000","0000001f"],["00000021","ffffffff","00000000","00000000","00000020"],["0000003f","00000000","00000000","00000000","0000003f"],["0000003f","00000001","00000000","00000000","00000040"],["0000003f","00000002","00000000","00000000","00000041"],["0000003f","00000003","00000000","00000000","00000042"],["0000003f","00000005","00000000","00000000","00000044"],["0000003f","00000007","00000000","00000000","00000046"],["0000003f","0000001f","00000000","00000000","0000005e"],["0000003f","00000020","00000000","00000000","0000005f"],["0000003f","00000021","00000000","00000000","00000060"],["0000003f","0000003f","00000000","00000000","0000007e"],["0000003f","00000040","00000000","00000000","0000007f"],["0000003f","000000ff","00000000","00000000","0000013e"],["0000003f","00007fff","00000000","00000000","0000803e"],["0000003f","00008000","00000000","00000000","0000803f"],["0000003f","0000ffff","00000000","00000000","0001003e"],["0000003f","00010000","00000000","00000000","0001003f"],["0000003f","55555555","00000000","00000000","55555594"],["0000003f","7ffffffe","00000000","00000000","8000003d"],["0000003f","7fffffff","00000000","00000000","8000003e"],["0000003f","80000000","00000000","00000000","8000003f"],["0000003f","80000001","00000000","00000000","80000040"],["0000003f","aaaaaaaa","00000000","00000000","aaaaaae9"],["0000003f","deadbeef","00000000","00000000","deadbf2e"],["0000003f","ffff0000","00000000","00000000","ffff003f"],["0000003f","ffff8000","00000000","00000000","ffff803f"],["0000003f","ffffffe0","00000000","00000000","0000001f"],["0000003f","ffffffe1","00000000","00000000","00000020"],["0000003f","fffffff9","00000000","00000000","00000038"],["0000003f","fffffffd","00000000","00000000","0000003c"],["0000003f","fffffffe","00000000","00000000","0000003d"],["0000003f","ffffffff","00000000","00000000","0000003e"],["00000040","00000000","00000000","00000000","00000040"],["00000040","00000001","00000000","00000000","00000041"],["00000040","00000002","00000000","00000000","00000042"],["00000040","00000003","00000000","00000000","00000043"],["00000040","00000005","00000000","00000000","00000045"],["00000040","00000007","00000000","00000000","00000047"],["00000040","0000001f","00000000","00000000","0000005f"],["00000040","00000020","00000000","00000000","00000060"],["00000040","00000021","00000000","00000000","00000061"],["00000040","0000003f","00000000","00000000","0000007f"],["00000040","00000040","00000000","00000000","00000080"],["00000040","000000ff","00000000","00000000","0000013f"],["00000040","00007fff","00000000","00000000","0000803f"],["00000040","00008000","00000000","00000000","00008040"],["00000040","0000ffff","00000000","00000000","0001003f"],["00000040","00010000","00000000","00000000","00010040"],["00000040","55555555","00000000","00000000","55555595"],["00000040","7ffffffe","00000000","00000000","8000003e"],["00000040","7fffffff","00000000","00000000","8000003f"],["00000040","80000000","00000000","00000000","80000040"],["00000040","80000001","00000000","00000000","80000041"],["00000040","aaaaaaaa","00000000","00000000","aaaaaaea"],["00000040","deadbeef","00000000","00000000","deadbf2f"],["00000040","ffff0000","00000000","00000000","ffff0040"],["00000040","ffff8000","00000000","00000000","ffff8040"],["00000040","ffffffe0","00000000","00000000","00000020"],["00000040","ffffffe1","00000000","00000000","00000021"],["00000040","fffffff9","00000000","00000000","00000039"],["00000040","fffffffd","00000000","00000000","0000003d"],["00000040","fffffffe","00000000","00000000","0000003e"],["00000040","ffffffff","00000000","00000000","0000003f"],["000000ff","00000000","00000000","00000000","000000ff"],["000000ff","00000001","00000000","00000000","00000100"],["000000ff","00000002","00000000","00000000","00000101"],["000000ff","00000003","00000000","00000000","00000102"],["000000ff","00000005","00000000","00000000","00000104"],["000000ff","00000007","00000000","00000000","00000106"],["000000ff","0000001f","00000000","00000000","0000011e"],["000000ff","00000020","00000000","00000000","0000011f"],["000000ff","00000021","00000000","00000000","00000120"],["000000ff","0000003f","00000000","00000000","0000013e"],["000000ff","00000040","00000000","00000000","0000013f"],["000000ff","000000ff","00000000","00000000","000001fe"],["000000ff","00007fff","00000000","00000000","000080fe"],["000000ff","00008000","00000000","00000000","000080ff"],["000000ff","0000ffff","00000000","00000000","000100fe"],["000000ff","00010000","00000000","00000000","000100ff"],["000000ff","55555555","00000000","00000000","55555654"],["000000ff","7ffffffe","00000000","00000000","800000fd"],["000000ff","7fffffff","00000000","00000000","800000fe"],["000000ff","80000000","00000000","00000000","800000ff"],["000000ff","80000001","00000000","00000000","80000100"],["000000ff","aaaaaaaa","00000000","00000000","aaaaaba9"],["000000ff","deadbeef","00000000","00000000","deadbfee"],["000000ff","ffff0000","00000000","00000000","ffff00ff"],["000000ff","ffff8000","00000000","00000000","ffff80ff"],["000000ff","ffffffe0","00000000","00000000","000000df"],["000000ff","ffffffe1","00000000","00000000","000000e0"],["000000ff","fffffff9","00000000","00000000","000000f8"],["000000ff","fffffffd","00000000","00000000","000000fc"],["000000ff","fffffffe","00000000","00000000","000000fd"],["000000ff","ffffffff","00000000","00000000","000000fe"],["00007fff","00000000","00000000","00000000","00007fff"],["00007fff","00000001","00000000","00000000","00008000"],["00007fff","00000002","00000000","00000000","00008001"],["00007fff","00000003","00000000","00000000","00008002"],["00007fff","00000005","00000000","00000000","00008004"],["00007fff","00000007","00000000","00000000","00008006"],["00007fff","0000001f","00000000","00000000","0000801e"],["00007fff","00000020","00000000","00000000","0000801f"],["00007fff","00000021","00000000","00000000","00008020"],["00007fff","0000003f","00000000","00000000","0000803e"],["00007fff","00000040","00000000","00000000","0000803f"],["00007fff","000000ff","00000000","00000000","000080fe"],["00007fff","00007fff","00000000","00000000","0000fffe"],["00007fff","00008000","00000000","00000000","0000ffff"],["00007fff","0000ffff","00000000","00000000","00017ffe"],["00007fff","00010000","00000000","00000000","00017fff"],["00007fff","55555555","00000000","00000000","5555d554"],["00007fff","7ffffffe","00000000","00000000","80007ffd"],["00007fff","7fffffff","00000000","00000000","80007ffe"],["00007fff","80000000","00000000","00000000","80007fff"],["00007fff","80000001","00000000","00000000","80008000"],["00007fff","aaaaaaaa","00000000","00000000","aaab2aa9"],["00007fff","deadbeef","00000000","00000000","deae3eee"],["00007fff","ffff0000","00000000","00000000","ffff7fff"],["00007fff","ffff8000","00000000","00000000","ffffffff"],["00007fff","ffffffe0","00000000","00000000","00007fdf"],["00007fff","ffffffe1","00000000","00000000","00007fe0"],["00007fff","fffffff9","00000000","00000000","00007ff8"],["00007fff","fffffffd","00000000","00000000","00007ffc"],["00007fff","fffffffe","00000000","00000000","00007ffd"],["00007fff","ffffffff","00000000","00000000","00007ffe"],["00008000","00000000","00000000","00000000","00008000"],["00008000","00000001","00000000","00000000","00008001"],["00008000","00000002","00000000","00000000","00008002"],["00008000","00000003","00000000","00000000","00008003"],["00008000","00000005","00000000","00000000","00008005"],["00008000","00000007","00000000","00000000","00008007"],["00008000","0000001f","00000000","00000000","0000801f"],["00008000","00000020","00000000","00000000","00008020"],["00008000","00000021","00000000","00000000","00008021"],["00008000","0000003f","00000000","00000000","0000803f"],["00008000","00000040","00000000","00000000","00008040"],["00008000","000000ff","00000000","00000000","000080ff"],["00008000","00007fff","00000000","00000000","0000ffff"],["00008000","00008000","00000000","00000000","00010000"],["00008000","0000ffff","00000000","00000000","00017fff"],["00008000","00010000","00000000","00000000","00018000"],["00008000","55555555","00000000","00000000","5555d555"],["00008000","7ffffffe","00000000","00000000","80007ffe"],["00008000","7fffffff","00000000","00000000","80007fff"],["00008000","80000000","00000000","00000000","80008000"],["00008000","80000001","00000000","00000000","80008001"],["00008000","aaaaaaaa","00000000","00000000","aaab2aaa"],["00008000","deadbeef","00000000","00000000","deae3eef"],["00008000","ffff0000","00000000","00000000","ffff8000"],["00008000","ffff8000","00000000","00000000","00000000"],["00008000","ffffffe0","00000000","00000000","00007fe0"],["00008000","ffffffe1","00000000","00000000","00007fe1"],["00008000","fffffff9","00000000","00000000","00007ff9"],["00008000","fffffffd","00000000","00000000","00007ffd"],["00008000","fffffffe","00000000","00000000","00007ffe"],["00008000","ffffffff","00000000","00000000","00007fff"],["0000ffff","00000000","00000000","00000000","0000ffff"],["0000ffff","00000001","00000000","00000000","00010000"],["0000ffff","00000002","00000000","00000000","00010001"],["0000ffff","00000003","00000000","00000000","00010002"],["0000ffff","00000005","00000000","00000000","00010004"],["0000ffff","00000007","00000000","00000000","00010006"],["0000ffff","0000001f","00000000","00000000","0001001e"],["0000ffff","00000020","00000000","00000000","0001001f"],["0000ffff","00000021","00000000","00000000","00010020"],["0000ffff","0000003f","00000000","00000000","0001003e"],["0000ffff","00000040","00000000","00000000","0001003f"],["0000ffff","000000ff","00000000","00000000","000100fe"],["0000ffff","00007fff","00000000","00000000","00017ffe"],["0000ffff","00008000","00000000","00000000","00017fff"],["0000ffff","0000ffff","00000000","00000000","0001fffe"],["0000ffff","00010000","00000000","00000000","0001ffff"],["0000ffff","55555555","00000000","00000000","55565554"],["0000ffff","7ffffffe","00000000","00000000","8000fffd"],["0000ffff","7fffffff","00000000","00000000","8000fffe"],["0000ffff","80000000","00000000","00000000","8000ffff"],["0000ffff","80000001","00000000","00000000","80010000"],["0000ffff","aaaaaaaa","00000000","00000000","aaabaaa9"],["0000ffff","deadbeef","00000000","00000000","deaebeee"],["0000ffff","ffff0000","00000000","00000000","ffffffff"],["0000ffff","ffff8000","00000000","00000000","00007fff"],["0000ffff","ffffffe0","00000000","00000000","0000ffdf"],["0000ffff","ffffffe1","00000000","00000000","0000ffe0"],["0000ffff","fffffff9","00000000","00000000","0000fff8"],["0000ffff","fffffffd","00000000","00000000","0000fffc"],["0000ffff","fffffffe","00000000","00000000","0000fffd"],["0000ffff","ffffffff","00000000","00000000","0000fffe"],["00010000","00000000","00000000","00000000","00010000"],["00010000","00000001","00000000","00000000","00010001"],["00010000","00000002","00000000","00000000","00010002"],["00010000","00000003","00000000","00000000","00010003"],["00010000","00000005","00000000","00000000","00010005"],["00010000","00000007","00000000","00000000","00010007"],["00010000","0000001f","00000000","00000000","0001001f"],["00010000","00000020","00000000","00000000","00010020"],["00010000","00000021","00000000","00000000","00010021"],["00010000","0000003f","00000000","00000000","0001003f"],["00010000","00000040","00000000","00000000","00010040"],["00010000","000000ff","00000000","00000000","000100ff"],["00010000","00007fff","00000000","00000000","00017fff"],["00010000","00008000","00000000","00000000","00018000"],["00010000","0000ffff","00000000","00000000","0001ffff"],["00010000","00010000","00000000","00000000","00020000"],["00010000","55555555","00000000","00000000","55565555"],["00010000","7ffffffe","00000000","00000000","8000fffe"],["00010000","7fffffff","00000000","00000000","8000ffff"],["00010000","80000000","00000000","00000000","80010000"],["00010000","80000001","00000000","00000000","80010001"],["00010000","aaaaaaaa","00000000","00000000","aaabaaaa"],["00010000","deadbeef","00000000","00000000","deaebeef"],["00010000","ffff0000","00000000","00000000","00000000"],["00010000","ffff8000","00000000","00000000","00008000"],["00010000","ffffffe0","00000000","00000000","0000ffe0"],["00010000","ffffffe1","00000000","00000000","0000ffe1"],["00010000","fffffff9","00000000","00000000","0000fff9"],["00010000","fffffffd","00000000","00000000","0000fffd"],["00010000","fffffffe","00000000","00000000","0000fffe"],["00010000","ffffffff","00000000","00000000","0000ffff"],["55555555","00000000","00000000","00000000","55555555"],["55555555","00000001","00000000","00000000","55555556"],["55555555","00000002","00000000","00000000","55555557"],["55555555","00000003","00000000","00000000","55555558"],["55555555","00000005","00000000","00000000","5555555a"],["55555555","00000007","00000000","00000000","5555555c"],["55555555","0000001f","00000000","00000000","55555574"],["55555555","00000020","00000000","00000000","55555575"],["55555555","00000021","00000000","00000000","55555576"],["55555555","0000003f","00000000","00000000","55555594"],["55555555","00000040","00000000","00000000","55555595"],["55555555","000000ff","00000000","00000000","55555654"],["55555555","00007fff","00000000","00000000","5555d554"],["55555555","00008000","00000000","00000000","5555d555"],["55555555","0000ffff","00000000","00000000","55565554"],["55555555","00010000","00000000","00000000","55565555"],["55555555","55555555","00000000","00000000","aaaaaaaa"],["55555555","7ffffffe","00000000","00000000","d5555553"],["55555555","7fffffff","00000000","00000000","d5555554"],["55555555","80000000","00000000","00000000","d5555555"],["55555555","80000001","00000000","00000000","d5555556"],["55555555","aaaaaaaa","00000000","00000000","ffffffff"],["55555555","deadbeef","00000000","00000000","34031444"],["55555555","ffff0000","00000000","00000000","55545555"],["55555555","ffff8000","00000000","00000000","5554d555"],["55555555","ffffffe0","00000000","00000000","55555535"],["55555555","ffffffe1","00000000","00000000","55555536"],["55555555","fffffff9","00000000","00000000","5555554e"],["55555555","fffffffd","00000000","00000000","55555552"],["55555555","fffffffe","00000000","00000000","55555553"],["55555555","ffffffff","00000000","00000000","55555554"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7ffffffe","00000001","00000000","00000000","7fffffff"],["7ffffffe","00000002","00000000","00000000","80000000"],["7ffffffe","00000003","00000000","00000000","80000001"],["7ffffffe","00000005","00000000","00000000","80000003"],["7ffffffe","00000007","00000000","00000000","80000005"],["7ffffffe","0000001f","00000000","00000000","8000001d"],["7ffffffe","00000020","00000000","00000000","8000001e"],["7ffffffe","00000021","00000000","00000000","8000001f"],["7ffffffe","0000003f","00000000","00000000","8000003d"],["7ffffffe","00000040","00000000","00000000","8000003e"],["7ffffffe","000000ff","00000000","00000000","800000fd"],["7ffffffe","00007fff","00000000","00000000","80007ffd"],["7ffffffe","00008000","00000000","00000000","80007ffe"],["7ffffffe","0000ffff","00000000","00000000","8000fffd"],["7ffffffe","00010000","00000000","00000000","8000fffe"],["7ffffffe","55555555","00000000","00000000","d5555553"],["7ffffffe","7ffffffe","00000000","00000000","fffffffc"],["7ffffffe","7fffffff","00000000","00000000","fffffffd"],["7ffffffe","80000000","00000000","00000000","fffffffe"],["7ffffffe","80000001","00000000","00000000","ffffffff"],["7ffffffe","aaaaaaaa","00000000","00000000","2aaaaaa8"],["7ffffffe","deadbeef","00000000","00000000","5eadbeed"],["7ffffffe","ffff0000","00000000","00000000","7ffefffe"],["7ffffffe","ffff8000","00000000","00000000","7fff7ffe"],["7ffffffe","ffffffe0","00000000","00000000","7fffffde"],["7ffffffe","ffffffe1","00000000","00000000","7fffffdf"],["7ffffffe","fffffff9","00000000","00000000","7ffffff7"],["7ffffffe","fffffffd","00000000","00000000","7ffffffb"],["7ffffffe","fffffffe","00000000","00000000","7ffffffc"],["7ffffffe","ffffffff","00000000","00000000","7ffffffd"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","80000000"],["7fffffff","00000002","00000000","00000000","80000001"],["7fffffff","00000003","00000000","00000000","80000002"],["7fffffff","00000005","00000000","00000000","80000004"],["7fffffff","00000007","00000000","00000000","80000006"],["7fffffff","0000001f","00000000","00000000","8000001e"],["7fffffff","00000020","00000000","00000000","8000001f"],["7fffffff","00000021","00000000","00000000","80000020"],["7fffffff","0000003f","00000000","00000000","8000003e"],["7fffffff","00000040","00000000","00000000","8000003f"],["7fffffff","000000ff","00000000","00000000","800000fe"],["7fffffff","00007fff","00000000","00000000","80007ffe"],["7fffffff","00008000","00000000","00000000","80007fff"],["7fffffff","0000ffff","00000000","00000000","8000fffe"],["7fffffff","00010000","00000000","00000000","8000ffff"],["7fffffff","55555555","00000000","00000000","d5555554"],["7fffffff","7ffffffe","00000000","00000000","fffffffd"],["7fffffff","7fffffff","00000000","00000000","fffffffe"],["7fffffff","80000000","00000000","00000000","ffffffff"],["7fffffff","80000001","00000000","00000000","00000000"],["7fffffff","aaaaaaaa","00000000","00000000","2aaaaaa9"],["7fffffff","deadbeef","00000000","00000000","5eadbeee"],["7fffffff","ffff0000","00000000","00000000","7ffeffff"],["7fffffff","ffff8000","00000000","00000000","7fff7fff"],["7fffffff","ffffffe0","00000000","00000000","7fffffdf"],["7fffffff","ffffffe1","00000000","00000000","7fffffe0"],["7fffffff","fffffff9","00000000","00000000","7ffffff8"],["7fffffff","fffffffd","00000000","00000000","7ffffffc"],["7fffffff","fffffffe","00000000","00000000","7ffffffd"],["7fffffff","ffffffff","00000000","00000000","7ffffffe"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","80000001"],["80000000","00000002","00000000","00000000","80000002"],["80000000","00000003","00000000","00000000","80000003"],["80000000","00000005","00000000","00000000","80000005"],["80000000","00000007","00000000","00000000","80000007"],["80000000","0000001f","00000000","00000000","8000001f"],["80000000","00000020","00000000","00000000","80000020"],["80000000","00000021","00000000","00000000","80000021"],["80000000","0000003f","00000000","00000000","8000003f"],["80000000","00000040","00000000","00000000","80000040"],["80000000","000000ff","00000000","00000000","800000ff"],["80000000","00007fff","00000000","00000000","80007fff"],["80000000","00008000","00000000","00000000","80008000"],["80000000","0000ffff","00000000","00000000","8000ffff"],["80000000","00010000","00000000","00000000","80010000"],["80000000","55555555","00000000","00000000","d5555555"],["80000000","7ffffffe","00000000","00000000","fffffffe"],["80000000","7fffffff","00000000","00000000","ffffffff"],["80000000","80000000","00000000","00000000","00000000"],["80000000","80000001","00000000","00000000","00000001"],["80000000","aaaaaaaa","00000000","00000000","2aaaaaaa"],["80000000","deadbeef","00000000","00000000","5eadbeef"],["80000000","ffff0000","00000000","00000000","7fff0000"],["80000000","ffff8000","00000000","00000000","7fff8000"],["80000000","ffffffe0","00000000","00000000","7fffffe0"],["80000000","ffffffe1","00000000","00000000","7fffffe1"],["80000000","fffffff9","00000000","00000000","7ffffff9"],["80000000","fffffffd","00000000","00000000","7ffffffd"],["80000000","fffffffe","00000000","00000000","7ffffffe"],["80000000","ffffffff","00000000","00000000","7fffffff"],["80000001","00000000","00000000","00000000","80000001"],["80000001","00000001","00000000","00000000","80000002"],["80000001","00000002","00000000","00000000","80000003"],["80000001","00000003","00000000","00000000","80000004"],["80000001","00000005","00000000","00000000","80000006"],["80000001","00000007","00000000","00000000","80000008"],["80000001","0000001f","00000000","00000000","80000020"],["80000001","00000020","00000000","00000000","80000021"],["80000001","00000021","00000000","00000000","80000022"],["80000001","0000003f","00000000","00000000","80000040"],["80000001","00000040","00000000","00000000","80000041"],["80000001","000000ff","00000000","00000000","80000100"],["80000001","00007fff","00000000","00000000","80008000"],["80000001","00008000","00000000","00000000","80008001"],["80000001","0000ffff","00000000","00000000","80010000"],["80000001","00010000","00000000","00000000","80010001"],["80000001","55555555","00000000","00000000","d5555556"],["80000001","7ffffffe","00000000","00000000","ffffffff"],["80000001","7fffffff","00000000","00000000","00000000"],["80000001","80000000","00000000","00000000","00000001"],["80000001","80000001","00000000","00000000","00000002"],["80000001","aaaaaaaa","00000000","00000000","2aaaaaab"],["80000001","deadbeef","00000000","00000000","5eadbef0"],["80000001","ffff0000","00000000","00000000","7fff0001"],["80000001","ffff8000","00000000","00000000","7fff8001"],["80000001","ffffffe0","00000000","00000000","7fffffe1"],["80000001","ffffffe1","00000000","00000000","7fffffe2"],["80000001","fffffff9","00000000","00000000","7ffffffa"],["80000001","fffffffd","00000000","00000000","7ffffffe"],["80000001","fffffffe","00000000","00000000","7fffffff"],["80000001","ffffffff","00000000","00000000","80000000"],["aaaaaaaa","00000000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000001","00000000","00000000","aaaaaaab"],["aaaaaaaa","00000002","00000000","00000000","aaaaaaac"],["aaaaaaaa","00000003","00000000","00000000","aaaaaaad"],["aaaaaaaa","00000005","00000000","00000000","aaaaaaaf"],["aaaaaaaa","00000007","00000000","00000000","aaaaaab1"],["aaaaaaaa","0000001f","00000000","00000000","aaaaaac9"],["aaaaaaaa","00000020","00000000","00000000","aaaaaaca"],["aaaaaaaa","00000021","00000000","00000000","aaaaaacb"],["aaaaaaaa","0000003f","00000000","00000000","aaaaaae9"],["aaaaaaaa","00000040","00000000","00000000","aaaaaaea"],["aaaaaaaa","000000ff","00000000","00000000","aaaaaba9"],["aaaaaaaa","00007fff","00000000","00000000","aaab2aa9"],["aaaaaaaa","00008000","00000000","00000000","aaab2aaa"],["aaaaaaaa","0000ffff","00000000","00000000","aaabaaa9"],["aaaaaaaa","00010000","00000000","00000000","aaabaaaa"],["aaaaaaaa","55555555","00000000","00000000","ffffffff"],["aaaaaaaa","7ffffffe","00000000","00000000","2aaaaaa8"],["aaaaaaaa","7fffffff","00000000","00000000","2aaaaaa9"],["aaaaaaaa","80000000","00000000","00000000","2aaaaaaa"],["aaaaaaaa","80000001","00000000","00000000","2aaaaaab"],["aaaaaaaa","aaaaaaaa","00000000","00000000","55555554"],["aaaaaaaa","deadbeef","00000000","00000000","89586999"],["aaaaaaaa","ffff0000","00000000","00000000","aaa9aaaa"],["aaaaaaaa","ffff8000","00000000","00000000","aaaa2aaa"],["aaaaaaaa","ffffffe0","00000000","00000000","aaaaaa8a"],["aaaaaaaa","ffffffe1","00000000","00000000","aaaaaa8b"],["aaaaaaaa","fffffff9","00000000","00000000","aaaaaaa3"],["aaaaaaaa","fffffffd","00000000","00000000","aaaaaaa7"],["aaaaaaaa","fffffffe","00000000","00000000","aaaaaaa8"],["aaaaaaaa","ffffffff","00000000","00000000","aaaaaaa9"],["deadbeef","00000000","00000000","00000000","deadbeef"],["deadbeef","00000001","00000000","00000000","deadbef0"],["deadbeef","00000002","00000000","00000000","deadbef1"],["deadbeef","00000003","00000000","00000000","deadbef2"],["deadbeef","00000005","00000000","00000000","deadbef4"],["deadbeef","00000007","00000000","00000000","deadbef6"],["deadbeef","0000001f","00000000","00000000","deadbf0e"],["deadbeef","00000020","00000000","00000000","deadbf0f"],["deadbeef","00000021","00000000","00000000","deadbf10"],["deadbeef","0000003f","00000000","00000000","deadbf2e"],["deadbeef","00000040","00000000","00000000","deadbf2f"],["deadbeef","000000ff","00000000","00000000","deadbfee"],["deadbeef","00007fff","00000000","00000000","deae3eee"],["deadbeef","00008000","00000000","00000000","deae3eef"],["deadbeef","0000ffff","00000000","00000000","deaebeee"],["deadbeef","00010000","00000000","00000000","deaebeef"],["deadbeef","55555555","00000000","00000000","34031444"],["deadbeef","7ffffffe","00000000","00000000","5eadbeed"],["deadbeef","7fffffff","00000000","00000000","5eadbeee"],["deadbeef","80000000","00000000","00000000","5eadbeef"],["deadbeef","80000001","00000000","00000000","5eadbef0"],["deadbeef","aaaaaaaa","00000000","00000000","89586999"],["deadbeef","deadbeef","00000000","00000000","bd5b7dde"],["deadbeef","ffff0000","00000000","00000000","deacbeef"],["deadbeef","ffff8000","00000000","00000000","dead3eef"],["deadbeef","ffffffe0","00000000","00000000","deadbecf"],["deadbeef","ffffffe1","00000000","00000000","deadbed0"],["deadbeef","fffffff9","00000000","00000000","deadbee8"],["deadbeef","fffffffd","00000000","00000000","deadbeec"],["deadbeef","fffffffe","00000000","00000000","deadbeed"],["deadbeef","ffffffff","00000000","00000000","deadbeee"],["ffff0000","00000000","00000000","00000000","ffff0000"],["ffff0000","00000001","00000000","00000000","ffff0001"],["ffff0000","00000002","00000000","00000000","ffff0002"],["ffff0000","00000003","00000000","00000000","ffff0003"],["ffff0000","00000005","00000000","00000000","ffff0005"],["ffff0000","00000007","00000000","00000000","ffff0007"],["ffff0000","0000001f","00000000","00000000","ffff001f"],["ffff0000","00000020","00000000","00000000","ffff0020"],["ffff0000","00000021","00000000","00000000","ffff0021"],["ffff0000","0000003f","00000000","00000000","ffff003f"],["ffff0000","00000040","00000000","00000000","ffff0040"],["ffff0000","000000ff","00000000","00000000","ffff00ff"],["ffff0000","00007fff","00000000","00000000","ffff7fff"],["ffff0000","00008000","00000000","00000000","ffff8000"],["ffff0000","0000ffff","00000000","00000000","ffffffff"],["ffff0000","00010000","00000000","00000000","00000000"],["ffff0000","55555555","00000000","00000000","55545555"],["ffff0000","7ffffffe","00000000","00000000","7ffefffe"],["ffff0000","7fffffff","00000000","00000000","7ffeffff"],["ffff0000","80000000","00000000","00000000","7fff0000"],["ffff0000","80000001","00000000","00000000","7fff0001"],["ffff0000","aaaaaaaa","00000000","00000000","aaa9aaaa"],["ffff0000","deadbeef","00000000","00000000","deacbeef"],["ffff0000","ffff0000","00000000","00000000","fffe0000"],["ffff0000","ffff8000","00000000","00000000","fffe8000"],["ffff0000","ffffffe0","00000000","00000000","fffeffe0"],["ffff0000","ffffffe1","00000000","00000000","fffeffe1"],["ffff0000","fffffff9","00000000","00000000","fffefff9"],["ffff0000","fffffffd","00000000","00000000","fffefffd"],["ffff0000","fffffffe","00000000","00000000","fffefffe"],["ffff0000","ffffffff","00000000","00000000","fffeffff"],["ffff8000","00000000","00000000","00000000","ffff8000"],["ffff8000","00000001","00000000","00000000","ffff8001"],["ffff8000","00000002","00000000","00000000","ffff8002"],["ffff8000","00000003","00000000","00000000","ffff8003"],["ffff8000","00000005","00000000","00000000","ffff8005"],["ffff8000","00000007","00000000","00000000","ffff8007"],["ffff8000","0000001f","00000000","00000000","ffff801f"],["ffff8000","00000020","00000000","00000000","ffff8020"],["ffff8000","00000021","00000000","00000000","ffff8021"],["ffff8000","0000003f","00000000","00000000","ffff803f"],["ffff8000","00000040","00000000","00000000","ffff8040"],["ffff8000","000000ff","00000000","00000000","ffff80ff"],["ffff8000","00007fff","00000000","00000000","ffffffff"],["ffff8000","00008000","00000000","00000000","00000000"],["ffff8000","0000ffff","00000000","00000000","00007fff"],["ffff8000","00010000","00000000","00000000","00008000"],["ffff8000","55555555","00000000","00000000","5554d555"],["ffff8000","7ffffffe","00000000","00000000","7fff7ffe"],["ffff8000","7fffffff","00000000","00000000","7fff7fff"],["ffff8000","80000000","00000000","00000000","7fff8000"],["ffff8000","80000001","00000000","00000000","7fff8001"],["ffff8000","aaaaaaaa","00000000","00000000","aaaa2aaa"],["ffff8000","deadbeef","00000000","00000000","dead3eef"],["ffff8000","ffff0000","00000000","00000000","fffe8000"],["ffff8000","ffff8000","00000000","00000000","ffff0000"],["ffff8000","ffffffe0","00000000","00000000","ffff7fe0"],["ffff8000","ffffffe1","00000000","00000000","ffff7fe1"],["ffff8000","fffffff9","00000000","00000000","ffff7ff9"],["ffff8000","fffffffd","00000000","00000000","ffff7ffd"],["ffff8000","fffffffe","00000000","00000000","ffff7ffe"],["ffff8000","ffffffff","00000000","00000000","ffff7fff"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["ffffffe0","00000001","00000000","00000000","ffffffe1"],["ffffffe0","00000002","00000000","00000000","ffffffe2"],["ffffffe0","00000003","00000000","00000000","ffffffe3"],["ffffffe0","00000005","00000000","00000000","ffffffe5"],["ffffffe0","00000007","00000000","00000000","ffffffe7"],["ffffffe0","0000001f","00000000","00000000","ffffffff"],["ffffffe0","00000020","00000000","00000000","00000000"],["ffffffe0","00000021","00000000","00000000","00000001"],["ffffffe0","0000003f","00000000","00000000","0000001f"],["ffffffe0","00000040","00000000","00000000","00000020"],["ffffffe0","000000ff","00000000","00000000","000000df"],["ffffffe0","00007fff","00000000","00000000","00007fdf"],["ffffffe0","00008000","00000000","00000000","00007fe0"],["ffffffe0","0000ffff","00000000","00000000","0000ffdf"],["ffffffe0","00010000","00000000","00000000","0000ffe0"],["ffffffe0","55555555","00000000","00000000","55555535"],["ffffffe0","7ffffffe","00000000","00000000","7fffffde"],["ffffffe0","7fffffff","00000000","00000000","7fffffdf"],["ffffffe0","80000000","00000000","00000000","7fffffe0"],["ffffffe0","80000001","00000000","00000000","7fffffe1"],["ffffffe0","aaaaaaaa","00000000","00000000","aaaaaa8a"],["ffffffe0","deadbeef","00000000","00000000","deadbecf"],["ffffffe0","ffff0000","00000000","00000000","fffeffe0"],["ffffffe0","ffff8000","00000000","00000000","ffff7fe0"],["ffffffe0","ffffffe0","00000000","00000000","ffffffc0"],["ffffffe0","ffffffe1","00000000","00000000","ffffffc1"],["ffffffe0","fffffff9","00000000","00000000","ffffffd9"],["ffffffe0","fffffffd","00000000","00000000","ffffffdd"],["ffffffe0","fffffffe","00000000","00000000","ffffffde"],["ffffffe0","ffffffff","00000000","00000000","ffffffdf"],["ffffffe1","00000000","00000000","00000000","ffffffe1"],["ffffffe1","00000001","00000000","00000000","ffffffe2"],["ffffffe1","00000002","00000000","00000000","ffffffe3"],["ffffffe1","00000003","00000000","00000000","ffffffe4"],["ffffffe1","00000005","00000000","00000000","ffffffe6"],["ffffffe1","00000007","00000000","00000000","ffffffe8"],["ffffffe1","0000001f","00000000","00000000","00000000"],["ffffffe1","00000020","00000000","00000000","00000001"],["ffffffe1","00000021","00000000","00000000","00000002"],["ffffffe1","0000003f","00000000","00000000","00000020"],["ffffffe1","00000040","00000000","00000000","00000021"],["ffffffe1","000000ff","00000000","00000000","000000e0"],["ffffffe1","00007fff","00000000","00000000","00007fe0"],["ffffffe1","00008000","00000000","00000000","00007fe1"],["ffffffe1","0000ffff","00000000","00000000","0000ffe0"],["ffffffe1","00010000","00000000","00000000","0000ffe1"],["ffffffe1","55555555","00000000","00000000","55555536"],["ffffffe1","7ffffffe","00000000","00000000","7fffffdf"],["ffffffe1","7fffffff","00000000","00000000","7fffffe0"],["ffffffe1","80000000","00000000","00000000","7fffffe1"],["ffffffe1","80000001","00000000","00000000","7fffffe2"],["ffffffe1","aaaaaaaa","00000000","00000000","aaaaaa8b"],["ffffffe1","deadbeef","00000000","00000000","deadbed0"],["ffffffe1","ffff0000","00000000","00000000","fffeffe1"],["ffffffe1","ffff8000","00000000","00000000","ffff7fe1"],["ffffffe1","ffffffe0","00000000","00000000","ffffffc1"],["ffffffe1","ffffffe1","00000000","00000000","ffffffc2"],["ffffffe1","fffffff9","00000000","00000000","ffffffda"],["ffffffe1","fffffffd","00000000","00000000","ffffffde"],["ffffffe1","fffffffe","00000000","00000000","ffffffdf"],["ffffffe1","ffffffff","00000000","00000000","ffffffe0"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffffa"],["fffffff9","00000002","00000000","00000000","fffffffb"],["fffffff9","00000003","00000000","00000000","fffffffc"],["fffffff9","00000005","00000000","00000000","fffffffe"],["fffffff9","00000007","00000000","00000000","00000000"],["fffffff9","0000001f","00000000","00000000","00000018"],["fffffff9","00000020","00000000","00000000","00000019"],["fffffff9","00000021","00000000","00000000","0000001a"],["fffffff9","0000003f","00000000","00000000","00000038"],["fffffff9","00000040","00000000","00000000","00000039"],["fffffff9","000000ff","00000000","00000000","000000f8"],["fffffff9","00007fff","00000000","00000000","00007ff8"],["fffffff9","00008000","00000000","00000000","00007ff9"],["fffffff9","0000ffff","00000000","00000000","0000fff8"],["fffffff9","00010000","00000000","00000000","0000fff9"],["fffffff9","55555555","00000000","00000000","5555554e"],["fffffff9","7ffffffe","00000000","00000000","7ffffff7"],["fffffff9","7fffffff","00000000","00000000","7ffffff8"],["fffffff9","80000000","00000000","00000000","7ffffff9"],["fffffff9","80000001","00000000","00000000","7ffffffa"],["fffffff9","aaaaaaaa","00000000","00000000","aaaaaaa3"],["fffffff9","deadbeef","00000000","00000000","deadbee8"],["fffffff9","ffff0000","00000000","00000000","fffefff9"],["fffffff9","ffff8000","00000000","00000000","ffff7ff9"],["fffffff9","ffffffe0","00000000","00000000","ffffffd9"],["fffffff9","ffffffe1","00000000","00000000","ffffffda"],["fffffff9","fffffff9","00000000","00000000","fffffff2"],["fffffff9","fffffffd","00000000","00000000","fffffff6"],["fffffff9","fffffffe","00000000","00000000","fffffff7"],["fffffff9","ffffffff","00000000","00000000","fffffff8"],["fffffffd","00000000","00000000","00000000","fffffffd"],["fffffffd","00000001","00000000","00000000","fffffffe"],["fffffffd","00000002","00000000","00000000","ffffffff"],["fffffffd","00000003","00000000","00000000","00000000"],["fffffffd","00000005","00000000","00000000","00000002"],["fffffffd","00000007","00000000","00000000","00000004"],["fffffffd","0000001f","00000000","00000000","0000001c"],["fffffffd","00000020","00000000","00000000","0000001d"],["fffffffd","00000021","00000000","00000000","0000001e"],["fffffffd","0000003f","00000000","00000000","0000003c"],["fffffffd","00000040","00000000","00000000","0000003d"],["fffffffd","000000ff","00000000","00000000","000000fc"],["fffffffd","00007fff","00000000","00000000","00007ffc"],["fffffffd","00008000","00000000","00000000","00007ffd"],["fffffffd","0000ffff","00000000","00000000","0000fffc"],["fffffffd","00010000","00000000","00000000","0000fffd"],["fffffffd","55555555","00000000","00000000","55555552"],["fffffffd","7ffffffe","00000000","00000000","7ffffffb"],["fffffffd","7fffffff","00000000","00000000","7ffffffc"],["fffffffd","80000000","00000000","00000000","7ffffffd"],["fffffffd","80000001","00000000","00000000","7ffffffe"],["fffffffd","aaaaaaaa","00000000","00000000","aaaaaaa7"],["fffffffd","deadbeef","00000000","00000000","deadbeec"],["fffffffd","ffff0000","00000000","00000000","fffefffd"],["fffffffd","ffff8000","00000000","00000000","ffff7ffd"],["fffffffd","ffffffe0","00000000","00000000","ffffffdd"],["fffffffd","ffffffe1","00000000","00000000","ffffffde"],["fffffffd","fffffff9","00000000","00000000","fffffff6"],["fffffffd","fffffffd","00000000","00000000","fffffffa"],["fffffffd","fffffffe","00000000","00000000","fffffffb"],["fffffffd","ffffffff","00000000","00000000","fffffffc"],["fffffffe","00000000","00000000","00000000","fffffffe"],["fffffffe","00000001","00000000","00000000","ffffffff"],["fffffffe","00000002","00000000","00000000","00000000"],["fffffffe","00000003","00000000","00000000","00000001"],["fffffffe","00000005","00000000","00000000","00000003"],["fffffffe","00000007","00000000","00000000","00000005"],["fffffffe","0000001f","00000000","00000000","0000001d"],["fffffffe","00000020","00000000","00000000","0000001e"],["fffffffe","00000021","00000000","00000000","0000001f"],["fffffffe","0000003f","00000000","00000000","0000003d"],["fffffffe","00000040","00000000","00000000","0000003e"],["fffffffe","000000ff","00000000","00000000","000000fd"],["fffffffe","00007fff","00000000","00000000","00007ffd"],["fffffffe","00008000","00000000","00000000","00007ffe"],["fffffffe","0000ffff","00000000","00000000","0000fffd"],["fffffffe","00010000","00000000","00000000","0000fffe"],["fffffffe","55555555","00000000","00000000","55555553"],["fffffffe","7ffffffe","00000000","00000000","7ffffffc"],["fffffffe","7fffffff","00000000","00000000","7ffffffd"],["fffffffe","80000000","00000000","00000000","7ffffffe"],["fffffffe","80000001","00000000","00000000","7fffffff"],["fffffffe","aaaaaaaa","00000000","00000000","aaaaaaa8"],["fffffffe","deadbeef","00000000","00000000","deadbeed"],["fffffffe","ffff0000","00000000","00000000","fffefffe"],["fffffffe","ffff8000","00000000","00000000","ffff7ffe"],["fffffffe","ffffffe0","00000000","00000000","ffffffde"],["fffffffe","ffffffe1","00000000","00000000","ffffffdf"],["fffffffe","fffffff9","00000000","00000000","fffffff7"],["fffffffe","fffffffd","00000000","00000000","fffffffb"],["fffffffe","fffffffe","00000000","00000000","fffffffc"],["fffffffe","ffffffff","00000000","00000000","fffffffd"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","00000000"],["ffffffff","00000002","00000000","00000000","00000001"],["ffffffff","00000003","00000000","00000000","00000002"],["ffffffff","00000005","00000000","00000000","00000004"],["ffffffff","00000007","00000000","00000000","00000006"],["ffffffff","0000001f","00000000","00000000","0000001e"],["ffffffff","00000020","00000000","00000000","0000001f"],["ffffffff","00000021","00000000","00000000","00000020"],["ffffffff","0000003f","00000000","00000000","0000003e"],["ffffffff","00000040","00000000","00000000","0000003f"],["ffffffff","000000ff","00000000","00000000","000000fe"],["ffffffff","00007fff","00000000","00000000","00007ffe"],["ffffffff","00008000","00000000","00000000","00007fff"],["ffffffff","0000ffff","00000000","00000000","0000fffe"],["ffffffff","00010000","00000000","00000000","0000ffff"],["ffffffff","55555555","00000000","00000000","55555554"],["ffffffff","7ffffffe","00000000","00000000","7ffffffd"],["ffffffff","7fffffff","00000000","00000000","7ffffffe"],["ffffffff","80000000","00000000","00000000","7fffffff"],["ffffffff","80000001","00000000","00000000","80000000"],["ffffffff","aaaaaaaa","00000000","00000000","aaaaaaa9"],["ffffffff","deadbeef","00000000","00000000","deadbeee"],["ffffffff","ffff0000","00000000","00000000","fffeffff"],["ffffffff","ffff8000","00000000","00000000","ffff7fff"],["ffffffff","ffffffe0","00000000","00000000","ffffffdf"],["ffffffff","ffffffe1","00000000","00000000","ffffffe0"],["ffffffff","fffffff9","00000000","00000000","fffffff8"],["ffffffff","fffffffd","00000000","00000000","fffffffc"],["ffffffff","fffffffe","00000000","00000000","fffffffd"],["ffffffff","ffffffff","00000000","00000000","fffffffe"]]} +{"op":"sub_i32","code":4,"wgsl":"ia - ib","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","ffffffff"],["00000000","00000002","00000000","00000000","fffffffe"],["00000000","00000003","00000000","00000000","fffffffd"],["00000000","00000005","00000000","00000000","fffffffb"],["00000000","00000007","00000000","00000000","fffffff9"],["00000000","0000001f","00000000","00000000","ffffffe1"],["00000000","00000020","00000000","00000000","ffffffe0"],["00000000","00000021","00000000","00000000","ffffffdf"],["00000000","0000003f","00000000","00000000","ffffffc1"],["00000000","00000040","00000000","00000000","ffffffc0"],["00000000","000000ff","00000000","00000000","ffffff01"],["00000000","00007fff","00000000","00000000","ffff8001"],["00000000","00008000","00000000","00000000","ffff8000"],["00000000","0000ffff","00000000","00000000","ffff0001"],["00000000","00010000","00000000","00000000","ffff0000"],["00000000","55555555","00000000","00000000","aaaaaaab"],["00000000","7ffffffe","00000000","00000000","80000002"],["00000000","7fffffff","00000000","00000000","80000001"],["00000000","80000000","00000000","00000000","80000000"],["00000000","80000001","00000000","00000000","7fffffff"],["00000000","aaaaaaaa","00000000","00000000","55555556"],["00000000","deadbeef","00000000","00000000","21524111"],["00000000","ffff0000","00000000","00000000","00010000"],["00000000","ffff8000","00000000","00000000","00008000"],["00000000","ffffffe0","00000000","00000000","00000020"],["00000000","ffffffe1","00000000","00000000","0000001f"],["00000000","fffffff9","00000000","00000000","00000007"],["00000000","fffffffd","00000000","00000000","00000003"],["00000000","fffffffe","00000000","00000000","00000002"],["00000000","ffffffff","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000002","00000000","00000000","ffffffff"],["00000001","00000003","00000000","00000000","fffffffe"],["00000001","00000005","00000000","00000000","fffffffc"],["00000001","00000007","00000000","00000000","fffffffa"],["00000001","0000001f","00000000","00000000","ffffffe2"],["00000001","00000020","00000000","00000000","ffffffe1"],["00000001","00000021","00000000","00000000","ffffffe0"],["00000001","0000003f","00000000","00000000","ffffffc2"],["00000001","00000040","00000000","00000000","ffffffc1"],["00000001","000000ff","00000000","00000000","ffffff02"],["00000001","00007fff","00000000","00000000","ffff8002"],["00000001","00008000","00000000","00000000","ffff8001"],["00000001","0000ffff","00000000","00000000","ffff0002"],["00000001","00010000","00000000","00000000","ffff0001"],["00000001","55555555","00000000","00000000","aaaaaaac"],["00000001","7ffffffe","00000000","00000000","80000003"],["00000001","7fffffff","00000000","00000000","80000002"],["00000001","80000000","00000000","00000000","80000001"],["00000001","80000001","00000000","00000000","80000000"],["00000001","aaaaaaaa","00000000","00000000","55555557"],["00000001","deadbeef","00000000","00000000","21524112"],["00000001","ffff0000","00000000","00000000","00010001"],["00000001","ffff8000","00000000","00000000","00008001"],["00000001","ffffffe0","00000000","00000000","00000021"],["00000001","ffffffe1","00000000","00000000","00000020"],["00000001","fffffff9","00000000","00000000","00000008"],["00000001","fffffffd","00000000","00000000","00000004"],["00000001","fffffffe","00000000","00000000","00000003"],["00000001","ffffffff","00000000","00000000","00000002"],["00000002","00000000","00000000","00000000","00000002"],["00000002","00000001","00000000","00000000","00000001"],["00000002","00000002","00000000","00000000","00000000"],["00000002","00000003","00000000","00000000","ffffffff"],["00000002","00000005","00000000","00000000","fffffffd"],["00000002","00000007","00000000","00000000","fffffffb"],["00000002","0000001f","00000000","00000000","ffffffe3"],["00000002","00000020","00000000","00000000","ffffffe2"],["00000002","00000021","00000000","00000000","ffffffe1"],["00000002","0000003f","00000000","00000000","ffffffc3"],["00000002","00000040","00000000","00000000","ffffffc2"],["00000002","000000ff","00000000","00000000","ffffff03"],["00000002","00007fff","00000000","00000000","ffff8003"],["00000002","00008000","00000000","00000000","ffff8002"],["00000002","0000ffff","00000000","00000000","ffff0003"],["00000002","00010000","00000000","00000000","ffff0002"],["00000002","55555555","00000000","00000000","aaaaaaad"],["00000002","7ffffffe","00000000","00000000","80000004"],["00000002","7fffffff","00000000","00000000","80000003"],["00000002","80000000","00000000","00000000","80000002"],["00000002","80000001","00000000","00000000","80000001"],["00000002","aaaaaaaa","00000000","00000000","55555558"],["00000002","deadbeef","00000000","00000000","21524113"],["00000002","ffff0000","00000000","00000000","00010002"],["00000002","ffff8000","00000000","00000000","00008002"],["00000002","ffffffe0","00000000","00000000","00000022"],["00000002","ffffffe1","00000000","00000000","00000021"],["00000002","fffffff9","00000000","00000000","00000009"],["00000002","fffffffd","00000000","00000000","00000005"],["00000002","fffffffe","00000000","00000000","00000004"],["00000002","ffffffff","00000000","00000000","00000003"],["00000003","00000000","00000000","00000000","00000003"],["00000003","00000001","00000000","00000000","00000002"],["00000003","00000002","00000000","00000000","00000001"],["00000003","00000003","00000000","00000000","00000000"],["00000003","00000005","00000000","00000000","fffffffe"],["00000003","00000007","00000000","00000000","fffffffc"],["00000003","0000001f","00000000","00000000","ffffffe4"],["00000003","00000020","00000000","00000000","ffffffe3"],["00000003","00000021","00000000","00000000","ffffffe2"],["00000003","0000003f","00000000","00000000","ffffffc4"],["00000003","00000040","00000000","00000000","ffffffc3"],["00000003","000000ff","00000000","00000000","ffffff04"],["00000003","00007fff","00000000","00000000","ffff8004"],["00000003","00008000","00000000","00000000","ffff8003"],["00000003","0000ffff","00000000","00000000","ffff0004"],["00000003","00010000","00000000","00000000","ffff0003"],["00000003","55555555","00000000","00000000","aaaaaaae"],["00000003","7ffffffe","00000000","00000000","80000005"],["00000003","7fffffff","00000000","00000000","80000004"],["00000003","80000000","00000000","00000000","80000003"],["00000003","80000001","00000000","00000000","80000002"],["00000003","aaaaaaaa","00000000","00000000","55555559"],["00000003","deadbeef","00000000","00000000","21524114"],["00000003","ffff0000","00000000","00000000","00010003"],["00000003","ffff8000","00000000","00000000","00008003"],["00000003","ffffffe0","00000000","00000000","00000023"],["00000003","ffffffe1","00000000","00000000","00000022"],["00000003","fffffff9","00000000","00000000","0000000a"],["00000003","fffffffd","00000000","00000000","00000006"],["00000003","fffffffe","00000000","00000000","00000005"],["00000003","ffffffff","00000000","00000000","00000004"],["00000005","00000000","00000000","00000000","00000005"],["00000005","00000001","00000000","00000000","00000004"],["00000005","00000002","00000000","00000000","00000003"],["00000005","00000003","00000000","00000000","00000002"],["00000005","00000005","00000000","00000000","00000000"],["00000005","00000007","00000000","00000000","fffffffe"],["00000005","0000001f","00000000","00000000","ffffffe6"],["00000005","00000020","00000000","00000000","ffffffe5"],["00000005","00000021","00000000","00000000","ffffffe4"],["00000005","0000003f","00000000","00000000","ffffffc6"],["00000005","00000040","00000000","00000000","ffffffc5"],["00000005","000000ff","00000000","00000000","ffffff06"],["00000005","00007fff","00000000","00000000","ffff8006"],["00000005","00008000","00000000","00000000","ffff8005"],["00000005","0000ffff","00000000","00000000","ffff0006"],["00000005","00010000","00000000","00000000","ffff0005"],["00000005","55555555","00000000","00000000","aaaaaab0"],["00000005","7ffffffe","00000000","00000000","80000007"],["00000005","7fffffff","00000000","00000000","80000006"],["00000005","80000000","00000000","00000000","80000005"],["00000005","80000001","00000000","00000000","80000004"],["00000005","aaaaaaaa","00000000","00000000","5555555b"],["00000005","deadbeef","00000000","00000000","21524116"],["00000005","ffff0000","00000000","00000000","00010005"],["00000005","ffff8000","00000000","00000000","00008005"],["00000005","ffffffe0","00000000","00000000","00000025"],["00000005","ffffffe1","00000000","00000000","00000024"],["00000005","fffffff9","00000000","00000000","0000000c"],["00000005","fffffffd","00000000","00000000","00000008"],["00000005","fffffffe","00000000","00000000","00000007"],["00000005","ffffffff","00000000","00000000","00000006"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","00000006"],["00000007","00000002","00000000","00000000","00000005"],["00000007","00000003","00000000","00000000","00000004"],["00000007","00000005","00000000","00000000","00000002"],["00000007","00000007","00000000","00000000","00000000"],["00000007","0000001f","00000000","00000000","ffffffe8"],["00000007","00000020","00000000","00000000","ffffffe7"],["00000007","00000021","00000000","00000000","ffffffe6"],["00000007","0000003f","00000000","00000000","ffffffc8"],["00000007","00000040","00000000","00000000","ffffffc7"],["00000007","000000ff","00000000","00000000","ffffff08"],["00000007","00007fff","00000000","00000000","ffff8008"],["00000007","00008000","00000000","00000000","ffff8007"],["00000007","0000ffff","00000000","00000000","ffff0008"],["00000007","00010000","00000000","00000000","ffff0007"],["00000007","55555555","00000000","00000000","aaaaaab2"],["00000007","7ffffffe","00000000","00000000","80000009"],["00000007","7fffffff","00000000","00000000","80000008"],["00000007","80000000","00000000","00000000","80000007"],["00000007","80000001","00000000","00000000","80000006"],["00000007","aaaaaaaa","00000000","00000000","5555555d"],["00000007","deadbeef","00000000","00000000","21524118"],["00000007","ffff0000","00000000","00000000","00010007"],["00000007","ffff8000","00000000","00000000","00008007"],["00000007","ffffffe0","00000000","00000000","00000027"],["00000007","ffffffe1","00000000","00000000","00000026"],["00000007","fffffff9","00000000","00000000","0000000e"],["00000007","fffffffd","00000000","00000000","0000000a"],["00000007","fffffffe","00000000","00000000","00000009"],["00000007","ffffffff","00000000","00000000","00000008"],["0000001f","00000000","00000000","00000000","0000001f"],["0000001f","00000001","00000000","00000000","0000001e"],["0000001f","00000002","00000000","00000000","0000001d"],["0000001f","00000003","00000000","00000000","0000001c"],["0000001f","00000005","00000000","00000000","0000001a"],["0000001f","00000007","00000000","00000000","00000018"],["0000001f","0000001f","00000000","00000000","00000000"],["0000001f","00000020","00000000","00000000","ffffffff"],["0000001f","00000021","00000000","00000000","fffffffe"],["0000001f","0000003f","00000000","00000000","ffffffe0"],["0000001f","00000040","00000000","00000000","ffffffdf"],["0000001f","000000ff","00000000","00000000","ffffff20"],["0000001f","00007fff","00000000","00000000","ffff8020"],["0000001f","00008000","00000000","00000000","ffff801f"],["0000001f","0000ffff","00000000","00000000","ffff0020"],["0000001f","00010000","00000000","00000000","ffff001f"],["0000001f","55555555","00000000","00000000","aaaaaaca"],["0000001f","7ffffffe","00000000","00000000","80000021"],["0000001f","7fffffff","00000000","00000000","80000020"],["0000001f","80000000","00000000","00000000","8000001f"],["0000001f","80000001","00000000","00000000","8000001e"],["0000001f","aaaaaaaa","00000000","00000000","55555575"],["0000001f","deadbeef","00000000","00000000","21524130"],["0000001f","ffff0000","00000000","00000000","0001001f"],["0000001f","ffff8000","00000000","00000000","0000801f"],["0000001f","ffffffe0","00000000","00000000","0000003f"],["0000001f","ffffffe1","00000000","00000000","0000003e"],["0000001f","fffffff9","00000000","00000000","00000026"],["0000001f","fffffffd","00000000","00000000","00000022"],["0000001f","fffffffe","00000000","00000000","00000021"],["0000001f","ffffffff","00000000","00000000","00000020"],["00000020","00000000","00000000","00000000","00000020"],["00000020","00000001","00000000","00000000","0000001f"],["00000020","00000002","00000000","00000000","0000001e"],["00000020","00000003","00000000","00000000","0000001d"],["00000020","00000005","00000000","00000000","0000001b"],["00000020","00000007","00000000","00000000","00000019"],["00000020","0000001f","00000000","00000000","00000001"],["00000020","00000020","00000000","00000000","00000000"],["00000020","00000021","00000000","00000000","ffffffff"],["00000020","0000003f","00000000","00000000","ffffffe1"],["00000020","00000040","00000000","00000000","ffffffe0"],["00000020","000000ff","00000000","00000000","ffffff21"],["00000020","00007fff","00000000","00000000","ffff8021"],["00000020","00008000","00000000","00000000","ffff8020"],["00000020","0000ffff","00000000","00000000","ffff0021"],["00000020","00010000","00000000","00000000","ffff0020"],["00000020","55555555","00000000","00000000","aaaaaacb"],["00000020","7ffffffe","00000000","00000000","80000022"],["00000020","7fffffff","00000000","00000000","80000021"],["00000020","80000000","00000000","00000000","80000020"],["00000020","80000001","00000000","00000000","8000001f"],["00000020","aaaaaaaa","00000000","00000000","55555576"],["00000020","deadbeef","00000000","00000000","21524131"],["00000020","ffff0000","00000000","00000000","00010020"],["00000020","ffff8000","00000000","00000000","00008020"],["00000020","ffffffe0","00000000","00000000","00000040"],["00000020","ffffffe1","00000000","00000000","0000003f"],["00000020","fffffff9","00000000","00000000","00000027"],["00000020","fffffffd","00000000","00000000","00000023"],["00000020","fffffffe","00000000","00000000","00000022"],["00000020","ffffffff","00000000","00000000","00000021"],["00000021","00000000","00000000","00000000","00000021"],["00000021","00000001","00000000","00000000","00000020"],["00000021","00000002","00000000","00000000","0000001f"],["00000021","00000003","00000000","00000000","0000001e"],["00000021","00000005","00000000","00000000","0000001c"],["00000021","00000007","00000000","00000000","0000001a"],["00000021","0000001f","00000000","00000000","00000002"],["00000021","00000020","00000000","00000000","00000001"],["00000021","00000021","00000000","00000000","00000000"],["00000021","0000003f","00000000","00000000","ffffffe2"],["00000021","00000040","00000000","00000000","ffffffe1"],["00000021","000000ff","00000000","00000000","ffffff22"],["00000021","00007fff","00000000","00000000","ffff8022"],["00000021","00008000","00000000","00000000","ffff8021"],["00000021","0000ffff","00000000","00000000","ffff0022"],["00000021","00010000","00000000","00000000","ffff0021"],["00000021","55555555","00000000","00000000","aaaaaacc"],["00000021","7ffffffe","00000000","00000000","80000023"],["00000021","7fffffff","00000000","00000000","80000022"],["00000021","80000000","00000000","00000000","80000021"],["00000021","80000001","00000000","00000000","80000020"],["00000021","aaaaaaaa","00000000","00000000","55555577"],["00000021","deadbeef","00000000","00000000","21524132"],["00000021","ffff0000","00000000","00000000","00010021"],["00000021","ffff8000","00000000","00000000","00008021"],["00000021","ffffffe0","00000000","00000000","00000041"],["00000021","ffffffe1","00000000","00000000","00000040"],["00000021","fffffff9","00000000","00000000","00000028"],["00000021","fffffffd","00000000","00000000","00000024"],["00000021","fffffffe","00000000","00000000","00000023"],["00000021","ffffffff","00000000","00000000","00000022"],["0000003f","00000000","00000000","00000000","0000003f"],["0000003f","00000001","00000000","00000000","0000003e"],["0000003f","00000002","00000000","00000000","0000003d"],["0000003f","00000003","00000000","00000000","0000003c"],["0000003f","00000005","00000000","00000000","0000003a"],["0000003f","00000007","00000000","00000000","00000038"],["0000003f","0000001f","00000000","00000000","00000020"],["0000003f","00000020","00000000","00000000","0000001f"],["0000003f","00000021","00000000","00000000","0000001e"],["0000003f","0000003f","00000000","00000000","00000000"],["0000003f","00000040","00000000","00000000","ffffffff"],["0000003f","000000ff","00000000","00000000","ffffff40"],["0000003f","00007fff","00000000","00000000","ffff8040"],["0000003f","00008000","00000000","00000000","ffff803f"],["0000003f","0000ffff","00000000","00000000","ffff0040"],["0000003f","00010000","00000000","00000000","ffff003f"],["0000003f","55555555","00000000","00000000","aaaaaaea"],["0000003f","7ffffffe","00000000","00000000","80000041"],["0000003f","7fffffff","00000000","00000000","80000040"],["0000003f","80000000","00000000","00000000","8000003f"],["0000003f","80000001","00000000","00000000","8000003e"],["0000003f","aaaaaaaa","00000000","00000000","55555595"],["0000003f","deadbeef","00000000","00000000","21524150"],["0000003f","ffff0000","00000000","00000000","0001003f"],["0000003f","ffff8000","00000000","00000000","0000803f"],["0000003f","ffffffe0","00000000","00000000","0000005f"],["0000003f","ffffffe1","00000000","00000000","0000005e"],["0000003f","fffffff9","00000000","00000000","00000046"],["0000003f","fffffffd","00000000","00000000","00000042"],["0000003f","fffffffe","00000000","00000000","00000041"],["0000003f","ffffffff","00000000","00000000","00000040"],["00000040","00000000","00000000","00000000","00000040"],["00000040","00000001","00000000","00000000","0000003f"],["00000040","00000002","00000000","00000000","0000003e"],["00000040","00000003","00000000","00000000","0000003d"],["00000040","00000005","00000000","00000000","0000003b"],["00000040","00000007","00000000","00000000","00000039"],["00000040","0000001f","00000000","00000000","00000021"],["00000040","00000020","00000000","00000000","00000020"],["00000040","00000021","00000000","00000000","0000001f"],["00000040","0000003f","00000000","00000000","00000001"],["00000040","00000040","00000000","00000000","00000000"],["00000040","000000ff","00000000","00000000","ffffff41"],["00000040","00007fff","00000000","00000000","ffff8041"],["00000040","00008000","00000000","00000000","ffff8040"],["00000040","0000ffff","00000000","00000000","ffff0041"],["00000040","00010000","00000000","00000000","ffff0040"],["00000040","55555555","00000000","00000000","aaaaaaeb"],["00000040","7ffffffe","00000000","00000000","80000042"],["00000040","7fffffff","00000000","00000000","80000041"],["00000040","80000000","00000000","00000000","80000040"],["00000040","80000001","00000000","00000000","8000003f"],["00000040","aaaaaaaa","00000000","00000000","55555596"],["00000040","deadbeef","00000000","00000000","21524151"],["00000040","ffff0000","00000000","00000000","00010040"],["00000040","ffff8000","00000000","00000000","00008040"],["00000040","ffffffe0","00000000","00000000","00000060"],["00000040","ffffffe1","00000000","00000000","0000005f"],["00000040","fffffff9","00000000","00000000","00000047"],["00000040","fffffffd","00000000","00000000","00000043"],["00000040","fffffffe","00000000","00000000","00000042"],["00000040","ffffffff","00000000","00000000","00000041"],["000000ff","00000000","00000000","00000000","000000ff"],["000000ff","00000001","00000000","00000000","000000fe"],["000000ff","00000002","00000000","00000000","000000fd"],["000000ff","00000003","00000000","00000000","000000fc"],["000000ff","00000005","00000000","00000000","000000fa"],["000000ff","00000007","00000000","00000000","000000f8"],["000000ff","0000001f","00000000","00000000","000000e0"],["000000ff","00000020","00000000","00000000","000000df"],["000000ff","00000021","00000000","00000000","000000de"],["000000ff","0000003f","00000000","00000000","000000c0"],["000000ff","00000040","00000000","00000000","000000bf"],["000000ff","000000ff","00000000","00000000","00000000"],["000000ff","00007fff","00000000","00000000","ffff8100"],["000000ff","00008000","00000000","00000000","ffff80ff"],["000000ff","0000ffff","00000000","00000000","ffff0100"],["000000ff","00010000","00000000","00000000","ffff00ff"],["000000ff","55555555","00000000","00000000","aaaaabaa"],["000000ff","7ffffffe","00000000","00000000","80000101"],["000000ff","7fffffff","00000000","00000000","80000100"],["000000ff","80000000","00000000","00000000","800000ff"],["000000ff","80000001","00000000","00000000","800000fe"],["000000ff","aaaaaaaa","00000000","00000000","55555655"],["000000ff","deadbeef","00000000","00000000","21524210"],["000000ff","ffff0000","00000000","00000000","000100ff"],["000000ff","ffff8000","00000000","00000000","000080ff"],["000000ff","ffffffe0","00000000","00000000","0000011f"],["000000ff","ffffffe1","00000000","00000000","0000011e"],["000000ff","fffffff9","00000000","00000000","00000106"],["000000ff","fffffffd","00000000","00000000","00000102"],["000000ff","fffffffe","00000000","00000000","00000101"],["000000ff","ffffffff","00000000","00000000","00000100"],["00007fff","00000000","00000000","00000000","00007fff"],["00007fff","00000001","00000000","00000000","00007ffe"],["00007fff","00000002","00000000","00000000","00007ffd"],["00007fff","00000003","00000000","00000000","00007ffc"],["00007fff","00000005","00000000","00000000","00007ffa"],["00007fff","00000007","00000000","00000000","00007ff8"],["00007fff","0000001f","00000000","00000000","00007fe0"],["00007fff","00000020","00000000","00000000","00007fdf"],["00007fff","00000021","00000000","00000000","00007fde"],["00007fff","0000003f","00000000","00000000","00007fc0"],["00007fff","00000040","00000000","00000000","00007fbf"],["00007fff","000000ff","00000000","00000000","00007f00"],["00007fff","00007fff","00000000","00000000","00000000"],["00007fff","00008000","00000000","00000000","ffffffff"],["00007fff","0000ffff","00000000","00000000","ffff8000"],["00007fff","00010000","00000000","00000000","ffff7fff"],["00007fff","55555555","00000000","00000000","aaab2aaa"],["00007fff","7ffffffe","00000000","00000000","80008001"],["00007fff","7fffffff","00000000","00000000","80008000"],["00007fff","80000000","00000000","00000000","80007fff"],["00007fff","80000001","00000000","00000000","80007ffe"],["00007fff","aaaaaaaa","00000000","00000000","5555d555"],["00007fff","deadbeef","00000000","00000000","2152c110"],["00007fff","ffff0000","00000000","00000000","00017fff"],["00007fff","ffff8000","00000000","00000000","0000ffff"],["00007fff","ffffffe0","00000000","00000000","0000801f"],["00007fff","ffffffe1","00000000","00000000","0000801e"],["00007fff","fffffff9","00000000","00000000","00008006"],["00007fff","fffffffd","00000000","00000000","00008002"],["00007fff","fffffffe","00000000","00000000","00008001"],["00007fff","ffffffff","00000000","00000000","00008000"],["00008000","00000000","00000000","00000000","00008000"],["00008000","00000001","00000000","00000000","00007fff"],["00008000","00000002","00000000","00000000","00007ffe"],["00008000","00000003","00000000","00000000","00007ffd"],["00008000","00000005","00000000","00000000","00007ffb"],["00008000","00000007","00000000","00000000","00007ff9"],["00008000","0000001f","00000000","00000000","00007fe1"],["00008000","00000020","00000000","00000000","00007fe0"],["00008000","00000021","00000000","00000000","00007fdf"],["00008000","0000003f","00000000","00000000","00007fc1"],["00008000","00000040","00000000","00000000","00007fc0"],["00008000","000000ff","00000000","00000000","00007f01"],["00008000","00007fff","00000000","00000000","00000001"],["00008000","00008000","00000000","00000000","00000000"],["00008000","0000ffff","00000000","00000000","ffff8001"],["00008000","00010000","00000000","00000000","ffff8000"],["00008000","55555555","00000000","00000000","aaab2aab"],["00008000","7ffffffe","00000000","00000000","80008002"],["00008000","7fffffff","00000000","00000000","80008001"],["00008000","80000000","00000000","00000000","80008000"],["00008000","80000001","00000000","00000000","80007fff"],["00008000","aaaaaaaa","00000000","00000000","5555d556"],["00008000","deadbeef","00000000","00000000","2152c111"],["00008000","ffff0000","00000000","00000000","00018000"],["00008000","ffff8000","00000000","00000000","00010000"],["00008000","ffffffe0","00000000","00000000","00008020"],["00008000","ffffffe1","00000000","00000000","0000801f"],["00008000","fffffff9","00000000","00000000","00008007"],["00008000","fffffffd","00000000","00000000","00008003"],["00008000","fffffffe","00000000","00000000","00008002"],["00008000","ffffffff","00000000","00000000","00008001"],["0000ffff","00000000","00000000","00000000","0000ffff"],["0000ffff","00000001","00000000","00000000","0000fffe"],["0000ffff","00000002","00000000","00000000","0000fffd"],["0000ffff","00000003","00000000","00000000","0000fffc"],["0000ffff","00000005","00000000","00000000","0000fffa"],["0000ffff","00000007","00000000","00000000","0000fff8"],["0000ffff","0000001f","00000000","00000000","0000ffe0"],["0000ffff","00000020","00000000","00000000","0000ffdf"],["0000ffff","00000021","00000000","00000000","0000ffde"],["0000ffff","0000003f","00000000","00000000","0000ffc0"],["0000ffff","00000040","00000000","00000000","0000ffbf"],["0000ffff","000000ff","00000000","00000000","0000ff00"],["0000ffff","00007fff","00000000","00000000","00008000"],["0000ffff","00008000","00000000","00000000","00007fff"],["0000ffff","0000ffff","00000000","00000000","00000000"],["0000ffff","00010000","00000000","00000000","ffffffff"],["0000ffff","55555555","00000000","00000000","aaabaaaa"],["0000ffff","7ffffffe","00000000","00000000","80010001"],["0000ffff","7fffffff","00000000","00000000","80010000"],["0000ffff","80000000","00000000","00000000","8000ffff"],["0000ffff","80000001","00000000","00000000","8000fffe"],["0000ffff","aaaaaaaa","00000000","00000000","55565555"],["0000ffff","deadbeef","00000000","00000000","21534110"],["0000ffff","ffff0000","00000000","00000000","0001ffff"],["0000ffff","ffff8000","00000000","00000000","00017fff"],["0000ffff","ffffffe0","00000000","00000000","0001001f"],["0000ffff","ffffffe1","00000000","00000000","0001001e"],["0000ffff","fffffff9","00000000","00000000","00010006"],["0000ffff","fffffffd","00000000","00000000","00010002"],["0000ffff","fffffffe","00000000","00000000","00010001"],["0000ffff","ffffffff","00000000","00000000","00010000"],["00010000","00000000","00000000","00000000","00010000"],["00010000","00000001","00000000","00000000","0000ffff"],["00010000","00000002","00000000","00000000","0000fffe"],["00010000","00000003","00000000","00000000","0000fffd"],["00010000","00000005","00000000","00000000","0000fffb"],["00010000","00000007","00000000","00000000","0000fff9"],["00010000","0000001f","00000000","00000000","0000ffe1"],["00010000","00000020","00000000","00000000","0000ffe0"],["00010000","00000021","00000000","00000000","0000ffdf"],["00010000","0000003f","00000000","00000000","0000ffc1"],["00010000","00000040","00000000","00000000","0000ffc0"],["00010000","000000ff","00000000","00000000","0000ff01"],["00010000","00007fff","00000000","00000000","00008001"],["00010000","00008000","00000000","00000000","00008000"],["00010000","0000ffff","00000000","00000000","00000001"],["00010000","00010000","00000000","00000000","00000000"],["00010000","55555555","00000000","00000000","aaabaaab"],["00010000","7ffffffe","00000000","00000000","80010002"],["00010000","7fffffff","00000000","00000000","80010001"],["00010000","80000000","00000000","00000000","80010000"],["00010000","80000001","00000000","00000000","8000ffff"],["00010000","aaaaaaaa","00000000","00000000","55565556"],["00010000","deadbeef","00000000","00000000","21534111"],["00010000","ffff0000","00000000","00000000","00020000"],["00010000","ffff8000","00000000","00000000","00018000"],["00010000","ffffffe0","00000000","00000000","00010020"],["00010000","ffffffe1","00000000","00000000","0001001f"],["00010000","fffffff9","00000000","00000000","00010007"],["00010000","fffffffd","00000000","00000000","00010003"],["00010000","fffffffe","00000000","00000000","00010002"],["00010000","ffffffff","00000000","00000000","00010001"],["55555555","00000000","00000000","00000000","55555555"],["55555555","00000001","00000000","00000000","55555554"],["55555555","00000002","00000000","00000000","55555553"],["55555555","00000003","00000000","00000000","55555552"],["55555555","00000005","00000000","00000000","55555550"],["55555555","00000007","00000000","00000000","5555554e"],["55555555","0000001f","00000000","00000000","55555536"],["55555555","00000020","00000000","00000000","55555535"],["55555555","00000021","00000000","00000000","55555534"],["55555555","0000003f","00000000","00000000","55555516"],["55555555","00000040","00000000","00000000","55555515"],["55555555","000000ff","00000000","00000000","55555456"],["55555555","00007fff","00000000","00000000","5554d556"],["55555555","00008000","00000000","00000000","5554d555"],["55555555","0000ffff","00000000","00000000","55545556"],["55555555","00010000","00000000","00000000","55545555"],["55555555","55555555","00000000","00000000","00000000"],["55555555","7ffffffe","00000000","00000000","d5555557"],["55555555","7fffffff","00000000","00000000","d5555556"],["55555555","80000000","00000000","00000000","d5555555"],["55555555","80000001","00000000","00000000","d5555554"],["55555555","aaaaaaaa","00000000","00000000","aaaaaaab"],["55555555","deadbeef","00000000","00000000","76a79666"],["55555555","ffff0000","00000000","00000000","55565555"],["55555555","ffff8000","00000000","00000000","5555d555"],["55555555","ffffffe0","00000000","00000000","55555575"],["55555555","ffffffe1","00000000","00000000","55555574"],["55555555","fffffff9","00000000","00000000","5555555c"],["55555555","fffffffd","00000000","00000000","55555558"],["55555555","fffffffe","00000000","00000000","55555557"],["55555555","ffffffff","00000000","00000000","55555556"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7ffffffe","00000001","00000000","00000000","7ffffffd"],["7ffffffe","00000002","00000000","00000000","7ffffffc"],["7ffffffe","00000003","00000000","00000000","7ffffffb"],["7ffffffe","00000005","00000000","00000000","7ffffff9"],["7ffffffe","00000007","00000000","00000000","7ffffff7"],["7ffffffe","0000001f","00000000","00000000","7fffffdf"],["7ffffffe","00000020","00000000","00000000","7fffffde"],["7ffffffe","00000021","00000000","00000000","7fffffdd"],["7ffffffe","0000003f","00000000","00000000","7fffffbf"],["7ffffffe","00000040","00000000","00000000","7fffffbe"],["7ffffffe","000000ff","00000000","00000000","7ffffeff"],["7ffffffe","00007fff","00000000","00000000","7fff7fff"],["7ffffffe","00008000","00000000","00000000","7fff7ffe"],["7ffffffe","0000ffff","00000000","00000000","7ffeffff"],["7ffffffe","00010000","00000000","00000000","7ffefffe"],["7ffffffe","55555555","00000000","00000000","2aaaaaa9"],["7ffffffe","7ffffffe","00000000","00000000","00000000"],["7ffffffe","7fffffff","00000000","00000000","ffffffff"],["7ffffffe","80000000","00000000","00000000","fffffffe"],["7ffffffe","80000001","00000000","00000000","fffffffd"],["7ffffffe","aaaaaaaa","00000000","00000000","d5555554"],["7ffffffe","deadbeef","00000000","00000000","a152410f"],["7ffffffe","ffff0000","00000000","00000000","8000fffe"],["7ffffffe","ffff8000","00000000","00000000","80007ffe"],["7ffffffe","ffffffe0","00000000","00000000","8000001e"],["7ffffffe","ffffffe1","00000000","00000000","8000001d"],["7ffffffe","fffffff9","00000000","00000000","80000005"],["7ffffffe","fffffffd","00000000","00000000","80000001"],["7ffffffe","fffffffe","00000000","00000000","80000000"],["7ffffffe","ffffffff","00000000","00000000","7fffffff"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","7ffffffe"],["7fffffff","00000002","00000000","00000000","7ffffffd"],["7fffffff","00000003","00000000","00000000","7ffffffc"],["7fffffff","00000005","00000000","00000000","7ffffffa"],["7fffffff","00000007","00000000","00000000","7ffffff8"],["7fffffff","0000001f","00000000","00000000","7fffffe0"],["7fffffff","00000020","00000000","00000000","7fffffdf"],["7fffffff","00000021","00000000","00000000","7fffffde"],["7fffffff","0000003f","00000000","00000000","7fffffc0"],["7fffffff","00000040","00000000","00000000","7fffffbf"],["7fffffff","000000ff","00000000","00000000","7fffff00"],["7fffffff","00007fff","00000000","00000000","7fff8000"],["7fffffff","00008000","00000000","00000000","7fff7fff"],["7fffffff","0000ffff","00000000","00000000","7fff0000"],["7fffffff","00010000","00000000","00000000","7ffeffff"],["7fffffff","55555555","00000000","00000000","2aaaaaaa"],["7fffffff","7ffffffe","00000000","00000000","00000001"],["7fffffff","7fffffff","00000000","00000000","00000000"],["7fffffff","80000000","00000000","00000000","ffffffff"],["7fffffff","80000001","00000000","00000000","fffffffe"],["7fffffff","aaaaaaaa","00000000","00000000","d5555555"],["7fffffff","deadbeef","00000000","00000000","a1524110"],["7fffffff","ffff0000","00000000","00000000","8000ffff"],["7fffffff","ffff8000","00000000","00000000","80007fff"],["7fffffff","ffffffe0","00000000","00000000","8000001f"],["7fffffff","ffffffe1","00000000","00000000","8000001e"],["7fffffff","fffffff9","00000000","00000000","80000006"],["7fffffff","fffffffd","00000000","00000000","80000002"],["7fffffff","fffffffe","00000000","00000000","80000001"],["7fffffff","ffffffff","00000000","00000000","80000000"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","7fffffff"],["80000000","00000002","00000000","00000000","7ffffffe"],["80000000","00000003","00000000","00000000","7ffffffd"],["80000000","00000005","00000000","00000000","7ffffffb"],["80000000","00000007","00000000","00000000","7ffffff9"],["80000000","0000001f","00000000","00000000","7fffffe1"],["80000000","00000020","00000000","00000000","7fffffe0"],["80000000","00000021","00000000","00000000","7fffffdf"],["80000000","0000003f","00000000","00000000","7fffffc1"],["80000000","00000040","00000000","00000000","7fffffc0"],["80000000","000000ff","00000000","00000000","7fffff01"],["80000000","00007fff","00000000","00000000","7fff8001"],["80000000","00008000","00000000","00000000","7fff8000"],["80000000","0000ffff","00000000","00000000","7fff0001"],["80000000","00010000","00000000","00000000","7fff0000"],["80000000","55555555","00000000","00000000","2aaaaaab"],["80000000","7ffffffe","00000000","00000000","00000002"],["80000000","7fffffff","00000000","00000000","00000001"],["80000000","80000000","00000000","00000000","00000000"],["80000000","80000001","00000000","00000000","ffffffff"],["80000000","aaaaaaaa","00000000","00000000","d5555556"],["80000000","deadbeef","00000000","00000000","a1524111"],["80000000","ffff0000","00000000","00000000","80010000"],["80000000","ffff8000","00000000","00000000","80008000"],["80000000","ffffffe0","00000000","00000000","80000020"],["80000000","ffffffe1","00000000","00000000","8000001f"],["80000000","fffffff9","00000000","00000000","80000007"],["80000000","fffffffd","00000000","00000000","80000003"],["80000000","fffffffe","00000000","00000000","80000002"],["80000000","ffffffff","00000000","00000000","80000001"],["80000001","00000000","00000000","00000000","80000001"],["80000001","00000001","00000000","00000000","80000000"],["80000001","00000002","00000000","00000000","7fffffff"],["80000001","00000003","00000000","00000000","7ffffffe"],["80000001","00000005","00000000","00000000","7ffffffc"],["80000001","00000007","00000000","00000000","7ffffffa"],["80000001","0000001f","00000000","00000000","7fffffe2"],["80000001","00000020","00000000","00000000","7fffffe1"],["80000001","00000021","00000000","00000000","7fffffe0"],["80000001","0000003f","00000000","00000000","7fffffc2"],["80000001","00000040","00000000","00000000","7fffffc1"],["80000001","000000ff","00000000","00000000","7fffff02"],["80000001","00007fff","00000000","00000000","7fff8002"],["80000001","00008000","00000000","00000000","7fff8001"],["80000001","0000ffff","00000000","00000000","7fff0002"],["80000001","00010000","00000000","00000000","7fff0001"],["80000001","55555555","00000000","00000000","2aaaaaac"],["80000001","7ffffffe","00000000","00000000","00000003"],["80000001","7fffffff","00000000","00000000","00000002"],["80000001","80000000","00000000","00000000","00000001"],["80000001","80000001","00000000","00000000","00000000"],["80000001","aaaaaaaa","00000000","00000000","d5555557"],["80000001","deadbeef","00000000","00000000","a1524112"],["80000001","ffff0000","00000000","00000000","80010001"],["80000001","ffff8000","00000000","00000000","80008001"],["80000001","ffffffe0","00000000","00000000","80000021"],["80000001","ffffffe1","00000000","00000000","80000020"],["80000001","fffffff9","00000000","00000000","80000008"],["80000001","fffffffd","00000000","00000000","80000004"],["80000001","fffffffe","00000000","00000000","80000003"],["80000001","ffffffff","00000000","00000000","80000002"],["aaaaaaaa","00000000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000001","00000000","00000000","aaaaaaa9"],["aaaaaaaa","00000002","00000000","00000000","aaaaaaa8"],["aaaaaaaa","00000003","00000000","00000000","aaaaaaa7"],["aaaaaaaa","00000005","00000000","00000000","aaaaaaa5"],["aaaaaaaa","00000007","00000000","00000000","aaaaaaa3"],["aaaaaaaa","0000001f","00000000","00000000","aaaaaa8b"],["aaaaaaaa","00000020","00000000","00000000","aaaaaa8a"],["aaaaaaaa","00000021","00000000","00000000","aaaaaa89"],["aaaaaaaa","0000003f","00000000","00000000","aaaaaa6b"],["aaaaaaaa","00000040","00000000","00000000","aaaaaa6a"],["aaaaaaaa","000000ff","00000000","00000000","aaaaa9ab"],["aaaaaaaa","00007fff","00000000","00000000","aaaa2aab"],["aaaaaaaa","00008000","00000000","00000000","aaaa2aaa"],["aaaaaaaa","0000ffff","00000000","00000000","aaa9aaab"],["aaaaaaaa","00010000","00000000","00000000","aaa9aaaa"],["aaaaaaaa","55555555","00000000","00000000","55555555"],["aaaaaaaa","7ffffffe","00000000","00000000","2aaaaaac"],["aaaaaaaa","7fffffff","00000000","00000000","2aaaaaab"],["aaaaaaaa","80000000","00000000","00000000","2aaaaaaa"],["aaaaaaaa","80000001","00000000","00000000","2aaaaaa9"],["aaaaaaaa","aaaaaaaa","00000000","00000000","00000000"],["aaaaaaaa","deadbeef","00000000","00000000","cbfcebbb"],["aaaaaaaa","ffff0000","00000000","00000000","aaabaaaa"],["aaaaaaaa","ffff8000","00000000","00000000","aaab2aaa"],["aaaaaaaa","ffffffe0","00000000","00000000","aaaaaaca"],["aaaaaaaa","ffffffe1","00000000","00000000","aaaaaac9"],["aaaaaaaa","fffffff9","00000000","00000000","aaaaaab1"],["aaaaaaaa","fffffffd","00000000","00000000","aaaaaaad"],["aaaaaaaa","fffffffe","00000000","00000000","aaaaaaac"],["aaaaaaaa","ffffffff","00000000","00000000","aaaaaaab"],["deadbeef","00000000","00000000","00000000","deadbeef"],["deadbeef","00000001","00000000","00000000","deadbeee"],["deadbeef","00000002","00000000","00000000","deadbeed"],["deadbeef","00000003","00000000","00000000","deadbeec"],["deadbeef","00000005","00000000","00000000","deadbeea"],["deadbeef","00000007","00000000","00000000","deadbee8"],["deadbeef","0000001f","00000000","00000000","deadbed0"],["deadbeef","00000020","00000000","00000000","deadbecf"],["deadbeef","00000021","00000000","00000000","deadbece"],["deadbeef","0000003f","00000000","00000000","deadbeb0"],["deadbeef","00000040","00000000","00000000","deadbeaf"],["deadbeef","000000ff","00000000","00000000","deadbdf0"],["deadbeef","00007fff","00000000","00000000","dead3ef0"],["deadbeef","00008000","00000000","00000000","dead3eef"],["deadbeef","0000ffff","00000000","00000000","deacbef0"],["deadbeef","00010000","00000000","00000000","deacbeef"],["deadbeef","55555555","00000000","00000000","8958699a"],["deadbeef","7ffffffe","00000000","00000000","5eadbef1"],["deadbeef","7fffffff","00000000","00000000","5eadbef0"],["deadbeef","80000000","00000000","00000000","5eadbeef"],["deadbeef","80000001","00000000","00000000","5eadbeee"],["deadbeef","aaaaaaaa","00000000","00000000","34031445"],["deadbeef","deadbeef","00000000","00000000","00000000"],["deadbeef","ffff0000","00000000","00000000","deaebeef"],["deadbeef","ffff8000","00000000","00000000","deae3eef"],["deadbeef","ffffffe0","00000000","00000000","deadbf0f"],["deadbeef","ffffffe1","00000000","00000000","deadbf0e"],["deadbeef","fffffff9","00000000","00000000","deadbef6"],["deadbeef","fffffffd","00000000","00000000","deadbef2"],["deadbeef","fffffffe","00000000","00000000","deadbef1"],["deadbeef","ffffffff","00000000","00000000","deadbef0"],["ffff0000","00000000","00000000","00000000","ffff0000"],["ffff0000","00000001","00000000","00000000","fffeffff"],["ffff0000","00000002","00000000","00000000","fffefffe"],["ffff0000","00000003","00000000","00000000","fffefffd"],["ffff0000","00000005","00000000","00000000","fffefffb"],["ffff0000","00000007","00000000","00000000","fffefff9"],["ffff0000","0000001f","00000000","00000000","fffeffe1"],["ffff0000","00000020","00000000","00000000","fffeffe0"],["ffff0000","00000021","00000000","00000000","fffeffdf"],["ffff0000","0000003f","00000000","00000000","fffeffc1"],["ffff0000","00000040","00000000","00000000","fffeffc0"],["ffff0000","000000ff","00000000","00000000","fffeff01"],["ffff0000","00007fff","00000000","00000000","fffe8001"],["ffff0000","00008000","00000000","00000000","fffe8000"],["ffff0000","0000ffff","00000000","00000000","fffe0001"],["ffff0000","00010000","00000000","00000000","fffe0000"],["ffff0000","55555555","00000000","00000000","aaa9aaab"],["ffff0000","7ffffffe","00000000","00000000","7fff0002"],["ffff0000","7fffffff","00000000","00000000","7fff0001"],["ffff0000","80000000","00000000","00000000","7fff0000"],["ffff0000","80000001","00000000","00000000","7ffeffff"],["ffff0000","aaaaaaaa","00000000","00000000","55545556"],["ffff0000","deadbeef","00000000","00000000","21514111"],["ffff0000","ffff0000","00000000","00000000","00000000"],["ffff0000","ffff8000","00000000","00000000","ffff8000"],["ffff0000","ffffffe0","00000000","00000000","ffff0020"],["ffff0000","ffffffe1","00000000","00000000","ffff001f"],["ffff0000","fffffff9","00000000","00000000","ffff0007"],["ffff0000","fffffffd","00000000","00000000","ffff0003"],["ffff0000","fffffffe","00000000","00000000","ffff0002"],["ffff0000","ffffffff","00000000","00000000","ffff0001"],["ffff8000","00000000","00000000","00000000","ffff8000"],["ffff8000","00000001","00000000","00000000","ffff7fff"],["ffff8000","00000002","00000000","00000000","ffff7ffe"],["ffff8000","00000003","00000000","00000000","ffff7ffd"],["ffff8000","00000005","00000000","00000000","ffff7ffb"],["ffff8000","00000007","00000000","00000000","ffff7ff9"],["ffff8000","0000001f","00000000","00000000","ffff7fe1"],["ffff8000","00000020","00000000","00000000","ffff7fe0"],["ffff8000","00000021","00000000","00000000","ffff7fdf"],["ffff8000","0000003f","00000000","00000000","ffff7fc1"],["ffff8000","00000040","00000000","00000000","ffff7fc0"],["ffff8000","000000ff","00000000","00000000","ffff7f01"],["ffff8000","00007fff","00000000","00000000","ffff0001"],["ffff8000","00008000","00000000","00000000","ffff0000"],["ffff8000","0000ffff","00000000","00000000","fffe8001"],["ffff8000","00010000","00000000","00000000","fffe8000"],["ffff8000","55555555","00000000","00000000","aaaa2aab"],["ffff8000","7ffffffe","00000000","00000000","7fff8002"],["ffff8000","7fffffff","00000000","00000000","7fff8001"],["ffff8000","80000000","00000000","00000000","7fff8000"],["ffff8000","80000001","00000000","00000000","7fff7fff"],["ffff8000","aaaaaaaa","00000000","00000000","5554d556"],["ffff8000","deadbeef","00000000","00000000","2151c111"],["ffff8000","ffff0000","00000000","00000000","00008000"],["ffff8000","ffff8000","00000000","00000000","00000000"],["ffff8000","ffffffe0","00000000","00000000","ffff8020"],["ffff8000","ffffffe1","00000000","00000000","ffff801f"],["ffff8000","fffffff9","00000000","00000000","ffff8007"],["ffff8000","fffffffd","00000000","00000000","ffff8003"],["ffff8000","fffffffe","00000000","00000000","ffff8002"],["ffff8000","ffffffff","00000000","00000000","ffff8001"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["ffffffe0","00000001","00000000","00000000","ffffffdf"],["ffffffe0","00000002","00000000","00000000","ffffffde"],["ffffffe0","00000003","00000000","00000000","ffffffdd"],["ffffffe0","00000005","00000000","00000000","ffffffdb"],["ffffffe0","00000007","00000000","00000000","ffffffd9"],["ffffffe0","0000001f","00000000","00000000","ffffffc1"],["ffffffe0","00000020","00000000","00000000","ffffffc0"],["ffffffe0","00000021","00000000","00000000","ffffffbf"],["ffffffe0","0000003f","00000000","00000000","ffffffa1"],["ffffffe0","00000040","00000000","00000000","ffffffa0"],["ffffffe0","000000ff","00000000","00000000","fffffee1"],["ffffffe0","00007fff","00000000","00000000","ffff7fe1"],["ffffffe0","00008000","00000000","00000000","ffff7fe0"],["ffffffe0","0000ffff","00000000","00000000","fffeffe1"],["ffffffe0","00010000","00000000","00000000","fffeffe0"],["ffffffe0","55555555","00000000","00000000","aaaaaa8b"],["ffffffe0","7ffffffe","00000000","00000000","7fffffe2"],["ffffffe0","7fffffff","00000000","00000000","7fffffe1"],["ffffffe0","80000000","00000000","00000000","7fffffe0"],["ffffffe0","80000001","00000000","00000000","7fffffdf"],["ffffffe0","aaaaaaaa","00000000","00000000","55555536"],["ffffffe0","deadbeef","00000000","00000000","215240f1"],["ffffffe0","ffff0000","00000000","00000000","0000ffe0"],["ffffffe0","ffff8000","00000000","00000000","00007fe0"],["ffffffe0","ffffffe0","00000000","00000000","00000000"],["ffffffe0","ffffffe1","00000000","00000000","ffffffff"],["ffffffe0","fffffff9","00000000","00000000","ffffffe7"],["ffffffe0","fffffffd","00000000","00000000","ffffffe3"],["ffffffe0","fffffffe","00000000","00000000","ffffffe2"],["ffffffe0","ffffffff","00000000","00000000","ffffffe1"],["ffffffe1","00000000","00000000","00000000","ffffffe1"],["ffffffe1","00000001","00000000","00000000","ffffffe0"],["ffffffe1","00000002","00000000","00000000","ffffffdf"],["ffffffe1","00000003","00000000","00000000","ffffffde"],["ffffffe1","00000005","00000000","00000000","ffffffdc"],["ffffffe1","00000007","00000000","00000000","ffffffda"],["ffffffe1","0000001f","00000000","00000000","ffffffc2"],["ffffffe1","00000020","00000000","00000000","ffffffc1"],["ffffffe1","00000021","00000000","00000000","ffffffc0"],["ffffffe1","0000003f","00000000","00000000","ffffffa2"],["ffffffe1","00000040","00000000","00000000","ffffffa1"],["ffffffe1","000000ff","00000000","00000000","fffffee2"],["ffffffe1","00007fff","00000000","00000000","ffff7fe2"],["ffffffe1","00008000","00000000","00000000","ffff7fe1"],["ffffffe1","0000ffff","00000000","00000000","fffeffe2"],["ffffffe1","00010000","00000000","00000000","fffeffe1"],["ffffffe1","55555555","00000000","00000000","aaaaaa8c"],["ffffffe1","7ffffffe","00000000","00000000","7fffffe3"],["ffffffe1","7fffffff","00000000","00000000","7fffffe2"],["ffffffe1","80000000","00000000","00000000","7fffffe1"],["ffffffe1","80000001","00000000","00000000","7fffffe0"],["ffffffe1","aaaaaaaa","00000000","00000000","55555537"],["ffffffe1","deadbeef","00000000","00000000","215240f2"],["ffffffe1","ffff0000","00000000","00000000","0000ffe1"],["ffffffe1","ffff8000","00000000","00000000","00007fe1"],["ffffffe1","ffffffe0","00000000","00000000","00000001"],["ffffffe1","ffffffe1","00000000","00000000","00000000"],["ffffffe1","fffffff9","00000000","00000000","ffffffe8"],["ffffffe1","fffffffd","00000000","00000000","ffffffe4"],["ffffffe1","fffffffe","00000000","00000000","ffffffe3"],["ffffffe1","ffffffff","00000000","00000000","ffffffe2"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffff8"],["fffffff9","00000002","00000000","00000000","fffffff7"],["fffffff9","00000003","00000000","00000000","fffffff6"],["fffffff9","00000005","00000000","00000000","fffffff4"],["fffffff9","00000007","00000000","00000000","fffffff2"],["fffffff9","0000001f","00000000","00000000","ffffffda"],["fffffff9","00000020","00000000","00000000","ffffffd9"],["fffffff9","00000021","00000000","00000000","ffffffd8"],["fffffff9","0000003f","00000000","00000000","ffffffba"],["fffffff9","00000040","00000000","00000000","ffffffb9"],["fffffff9","000000ff","00000000","00000000","fffffefa"],["fffffff9","00007fff","00000000","00000000","ffff7ffa"],["fffffff9","00008000","00000000","00000000","ffff7ff9"],["fffffff9","0000ffff","00000000","00000000","fffefffa"],["fffffff9","00010000","00000000","00000000","fffefff9"],["fffffff9","55555555","00000000","00000000","aaaaaaa4"],["fffffff9","7ffffffe","00000000","00000000","7ffffffb"],["fffffff9","7fffffff","00000000","00000000","7ffffffa"],["fffffff9","80000000","00000000","00000000","7ffffff9"],["fffffff9","80000001","00000000","00000000","7ffffff8"],["fffffff9","aaaaaaaa","00000000","00000000","5555554f"],["fffffff9","deadbeef","00000000","00000000","2152410a"],["fffffff9","ffff0000","00000000","00000000","0000fff9"],["fffffff9","ffff8000","00000000","00000000","00007ff9"],["fffffff9","ffffffe0","00000000","00000000","00000019"],["fffffff9","ffffffe1","00000000","00000000","00000018"],["fffffff9","fffffff9","00000000","00000000","00000000"],["fffffff9","fffffffd","00000000","00000000","fffffffc"],["fffffff9","fffffffe","00000000","00000000","fffffffb"],["fffffff9","ffffffff","00000000","00000000","fffffffa"],["fffffffd","00000000","00000000","00000000","fffffffd"],["fffffffd","00000001","00000000","00000000","fffffffc"],["fffffffd","00000002","00000000","00000000","fffffffb"],["fffffffd","00000003","00000000","00000000","fffffffa"],["fffffffd","00000005","00000000","00000000","fffffff8"],["fffffffd","00000007","00000000","00000000","fffffff6"],["fffffffd","0000001f","00000000","00000000","ffffffde"],["fffffffd","00000020","00000000","00000000","ffffffdd"],["fffffffd","00000021","00000000","00000000","ffffffdc"],["fffffffd","0000003f","00000000","00000000","ffffffbe"],["fffffffd","00000040","00000000","00000000","ffffffbd"],["fffffffd","000000ff","00000000","00000000","fffffefe"],["fffffffd","00007fff","00000000","00000000","ffff7ffe"],["fffffffd","00008000","00000000","00000000","ffff7ffd"],["fffffffd","0000ffff","00000000","00000000","fffefffe"],["fffffffd","00010000","00000000","00000000","fffefffd"],["fffffffd","55555555","00000000","00000000","aaaaaaa8"],["fffffffd","7ffffffe","00000000","00000000","7fffffff"],["fffffffd","7fffffff","00000000","00000000","7ffffffe"],["fffffffd","80000000","00000000","00000000","7ffffffd"],["fffffffd","80000001","00000000","00000000","7ffffffc"],["fffffffd","aaaaaaaa","00000000","00000000","55555553"],["fffffffd","deadbeef","00000000","00000000","2152410e"],["fffffffd","ffff0000","00000000","00000000","0000fffd"],["fffffffd","ffff8000","00000000","00000000","00007ffd"],["fffffffd","ffffffe0","00000000","00000000","0000001d"],["fffffffd","ffffffe1","00000000","00000000","0000001c"],["fffffffd","fffffff9","00000000","00000000","00000004"],["fffffffd","fffffffd","00000000","00000000","00000000"],["fffffffd","fffffffe","00000000","00000000","ffffffff"],["fffffffd","ffffffff","00000000","00000000","fffffffe"],["fffffffe","00000000","00000000","00000000","fffffffe"],["fffffffe","00000001","00000000","00000000","fffffffd"],["fffffffe","00000002","00000000","00000000","fffffffc"],["fffffffe","00000003","00000000","00000000","fffffffb"],["fffffffe","00000005","00000000","00000000","fffffff9"],["fffffffe","00000007","00000000","00000000","fffffff7"],["fffffffe","0000001f","00000000","00000000","ffffffdf"],["fffffffe","00000020","00000000","00000000","ffffffde"],["fffffffe","00000021","00000000","00000000","ffffffdd"],["fffffffe","0000003f","00000000","00000000","ffffffbf"],["fffffffe","00000040","00000000","00000000","ffffffbe"],["fffffffe","000000ff","00000000","00000000","fffffeff"],["fffffffe","00007fff","00000000","00000000","ffff7fff"],["fffffffe","00008000","00000000","00000000","ffff7ffe"],["fffffffe","0000ffff","00000000","00000000","fffeffff"],["fffffffe","00010000","00000000","00000000","fffefffe"],["fffffffe","55555555","00000000","00000000","aaaaaaa9"],["fffffffe","7ffffffe","00000000","00000000","80000000"],["fffffffe","7fffffff","00000000","00000000","7fffffff"],["fffffffe","80000000","00000000","00000000","7ffffffe"],["fffffffe","80000001","00000000","00000000","7ffffffd"],["fffffffe","aaaaaaaa","00000000","00000000","55555554"],["fffffffe","deadbeef","00000000","00000000","2152410f"],["fffffffe","ffff0000","00000000","00000000","0000fffe"],["fffffffe","ffff8000","00000000","00000000","00007ffe"],["fffffffe","ffffffe0","00000000","00000000","0000001e"],["fffffffe","ffffffe1","00000000","00000000","0000001d"],["fffffffe","fffffff9","00000000","00000000","00000005"],["fffffffe","fffffffd","00000000","00000000","00000001"],["fffffffe","fffffffe","00000000","00000000","00000000"],["fffffffe","ffffffff","00000000","00000000","ffffffff"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","fffffffe"],["ffffffff","00000002","00000000","00000000","fffffffd"],["ffffffff","00000003","00000000","00000000","fffffffc"],["ffffffff","00000005","00000000","00000000","fffffffa"],["ffffffff","00000007","00000000","00000000","fffffff8"],["ffffffff","0000001f","00000000","00000000","ffffffe0"],["ffffffff","00000020","00000000","00000000","ffffffdf"],["ffffffff","00000021","00000000","00000000","ffffffde"],["ffffffff","0000003f","00000000","00000000","ffffffc0"],["ffffffff","00000040","00000000","00000000","ffffffbf"],["ffffffff","000000ff","00000000","00000000","ffffff00"],["ffffffff","00007fff","00000000","00000000","ffff8000"],["ffffffff","00008000","00000000","00000000","ffff7fff"],["ffffffff","0000ffff","00000000","00000000","ffff0000"],["ffffffff","00010000","00000000","00000000","fffeffff"],["ffffffff","55555555","00000000","00000000","aaaaaaaa"],["ffffffff","7ffffffe","00000000","00000000","80000001"],["ffffffff","7fffffff","00000000","00000000","80000000"],["ffffffff","80000000","00000000","00000000","7fffffff"],["ffffffff","80000001","00000000","00000000","7ffffffe"],["ffffffff","aaaaaaaa","00000000","00000000","55555555"],["ffffffff","deadbeef","00000000","00000000","21524110"],["ffffffff","ffff0000","00000000","00000000","0000ffff"],["ffffffff","ffff8000","00000000","00000000","00007fff"],["ffffffff","ffffffe0","00000000","00000000","0000001f"],["ffffffff","ffffffe1","00000000","00000000","0000001e"],["ffffffff","fffffff9","00000000","00000000","00000006"],["ffffffff","fffffffd","00000000","00000000","00000002"],["ffffffff","fffffffe","00000000","00000000","00000001"],["ffffffff","ffffffff","00000000","00000000","00000000"]]} +{"op":"mul_i32","code":5,"wgsl":"ia * ib","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000002","00000000","00000000","00000000"],["00000000","00000003","00000000","00000000","00000000"],["00000000","00000005","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","0000001f","00000000","00000000","00000000"],["00000000","00000020","00000000","00000000","00000000"],["00000000","00000021","00000000","00000000","00000000"],["00000000","0000003f","00000000","00000000","00000000"],["00000000","00000040","00000000","00000000","00000000"],["00000000","000000ff","00000000","00000000","00000000"],["00000000","00007fff","00000000","00000000","00000000"],["00000000","00008000","00000000","00000000","00000000"],["00000000","0000ffff","00000000","00000000","00000000"],["00000000","00010000","00000000","00000000","00000000"],["00000000","55555555","00000000","00000000","00000000"],["00000000","7ffffffe","00000000","00000000","00000000"],["00000000","7fffffff","00000000","00000000","00000000"],["00000000","80000000","00000000","00000000","00000000"],["00000000","80000001","00000000","00000000","00000000"],["00000000","aaaaaaaa","00000000","00000000","00000000"],["00000000","deadbeef","00000000","00000000","00000000"],["00000000","ffff0000","00000000","00000000","00000000"],["00000000","ffff8000","00000000","00000000","00000000"],["00000000","ffffffe0","00000000","00000000","00000000"],["00000000","ffffffe1","00000000","00000000","00000000"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","fffffffd","00000000","00000000","00000000"],["00000000","fffffffe","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000002","00000000","00000000","00000002"],["00000001","00000003","00000000","00000000","00000003"],["00000001","00000005","00000000","00000000","00000005"],["00000001","00000007","00000000","00000000","00000007"],["00000001","0000001f","00000000","00000000","0000001f"],["00000001","00000020","00000000","00000000","00000020"],["00000001","00000021","00000000","00000000","00000021"],["00000001","0000003f","00000000","00000000","0000003f"],["00000001","00000040","00000000","00000000","00000040"],["00000001","000000ff","00000000","00000000","000000ff"],["00000001","00007fff","00000000","00000000","00007fff"],["00000001","00008000","00000000","00000000","00008000"],["00000001","0000ffff","00000000","00000000","0000ffff"],["00000001","00010000","00000000","00000000","00010000"],["00000001","55555555","00000000","00000000","55555555"],["00000001","7ffffffe","00000000","00000000","7ffffffe"],["00000001","7fffffff","00000000","00000000","7fffffff"],["00000001","80000000","00000000","00000000","80000000"],["00000001","80000001","00000000","00000000","80000001"],["00000001","aaaaaaaa","00000000","00000000","aaaaaaaa"],["00000001","deadbeef","00000000","00000000","deadbeef"],["00000001","ffff0000","00000000","00000000","ffff0000"],["00000001","ffff8000","00000000","00000000","ffff8000"],["00000001","ffffffe0","00000000","00000000","ffffffe0"],["00000001","ffffffe1","00000000","00000000","ffffffe1"],["00000001","fffffff9","00000000","00000000","fffffff9"],["00000001","fffffffd","00000000","00000000","fffffffd"],["00000001","fffffffe","00000000","00000000","fffffffe"],["00000001","ffffffff","00000000","00000000","ffffffff"],["00000002","00000000","00000000","00000000","00000000"],["00000002","00000001","00000000","00000000","00000002"],["00000002","00000002","00000000","00000000","00000004"],["00000002","00000003","00000000","00000000","00000006"],["00000002","00000005","00000000","00000000","0000000a"],["00000002","00000007","00000000","00000000","0000000e"],["00000002","0000001f","00000000","00000000","0000003e"],["00000002","00000020","00000000","00000000","00000040"],["00000002","00000021","00000000","00000000","00000042"],["00000002","0000003f","00000000","00000000","0000007e"],["00000002","00000040","00000000","00000000","00000080"],["00000002","000000ff","00000000","00000000","000001fe"],["00000002","00007fff","00000000","00000000","0000fffe"],["00000002","00008000","00000000","00000000","00010000"],["00000002","0000ffff","00000000","00000000","0001fffe"],["00000002","00010000","00000000","00000000","00020000"],["00000002","55555555","00000000","00000000","aaaaaaaa"],["00000002","7ffffffe","00000000","00000000","fffffffc"],["00000002","7fffffff","00000000","00000000","fffffffe"],["00000002","80000000","00000000","00000000","00000000"],["00000002","80000001","00000000","00000000","00000002"],["00000002","aaaaaaaa","00000000","00000000","55555554"],["00000002","deadbeef","00000000","00000000","bd5b7dde"],["00000002","ffff0000","00000000","00000000","fffe0000"],["00000002","ffff8000","00000000","00000000","ffff0000"],["00000002","ffffffe0","00000000","00000000","ffffffc0"],["00000002","ffffffe1","00000000","00000000","ffffffc2"],["00000002","fffffff9","00000000","00000000","fffffff2"],["00000002","fffffffd","00000000","00000000","fffffffa"],["00000002","fffffffe","00000000","00000000","fffffffc"],["00000002","ffffffff","00000000","00000000","fffffffe"],["00000003","00000000","00000000","00000000","00000000"],["00000003","00000001","00000000","00000000","00000003"],["00000003","00000002","00000000","00000000","00000006"],["00000003","00000003","00000000","00000000","00000009"],["00000003","00000005","00000000","00000000","0000000f"],["00000003","00000007","00000000","00000000","00000015"],["00000003","0000001f","00000000","00000000","0000005d"],["00000003","00000020","00000000","00000000","00000060"],["00000003","00000021","00000000","00000000","00000063"],["00000003","0000003f","00000000","00000000","000000bd"],["00000003","00000040","00000000","00000000","000000c0"],["00000003","000000ff","00000000","00000000","000002fd"],["00000003","00007fff","00000000","00000000","00017ffd"],["00000003","00008000","00000000","00000000","00018000"],["00000003","0000ffff","00000000","00000000","0002fffd"],["00000003","00010000","00000000","00000000","00030000"],["00000003","55555555","00000000","00000000","ffffffff"],["00000003","7ffffffe","00000000","00000000","7ffffffa"],["00000003","7fffffff","00000000","00000000","7ffffffd"],["00000003","80000000","00000000","00000000","80000000"],["00000003","80000001","00000000","00000000","80000003"],["00000003","aaaaaaaa","00000000","00000000","fffffffe"],["00000003","deadbeef","00000000","00000000","9c093ccd"],["00000003","ffff0000","00000000","00000000","fffd0000"],["00000003","ffff8000","00000000","00000000","fffe8000"],["00000003","ffffffe0","00000000","00000000","ffffffa0"],["00000003","ffffffe1","00000000","00000000","ffffffa3"],["00000003","fffffff9","00000000","00000000","ffffffeb"],["00000003","fffffffd","00000000","00000000","fffffff7"],["00000003","fffffffe","00000000","00000000","fffffffa"],["00000003","ffffffff","00000000","00000000","fffffffd"],["00000005","00000000","00000000","00000000","00000000"],["00000005","00000001","00000000","00000000","00000005"],["00000005","00000002","00000000","00000000","0000000a"],["00000005","00000003","00000000","00000000","0000000f"],["00000005","00000005","00000000","00000000","00000019"],["00000005","00000007","00000000","00000000","00000023"],["00000005","0000001f","00000000","00000000","0000009b"],["00000005","00000020","00000000","00000000","000000a0"],["00000005","00000021","00000000","00000000","000000a5"],["00000005","0000003f","00000000","00000000","0000013b"],["00000005","00000040","00000000","00000000","00000140"],["00000005","000000ff","00000000","00000000","000004fb"],["00000005","00007fff","00000000","00000000","00027ffb"],["00000005","00008000","00000000","00000000","00028000"],["00000005","0000ffff","00000000","00000000","0004fffb"],["00000005","00010000","00000000","00000000","00050000"],["00000005","55555555","00000000","00000000","aaaaaaa9"],["00000005","7ffffffe","00000000","00000000","7ffffff6"],["00000005","7fffffff","00000000","00000000","7ffffffb"],["00000005","80000000","00000000","00000000","80000000"],["00000005","80000001","00000000","00000000","80000005"],["00000005","aaaaaaaa","00000000","00000000","55555552"],["00000005","deadbeef","00000000","00000000","5964baab"],["00000005","ffff0000","00000000","00000000","fffb0000"],["00000005","ffff8000","00000000","00000000","fffd8000"],["00000005","ffffffe0","00000000","00000000","ffffff60"],["00000005","ffffffe1","00000000","00000000","ffffff65"],["00000005","fffffff9","00000000","00000000","ffffffdd"],["00000005","fffffffd","00000000","00000000","fffffff1"],["00000005","fffffffe","00000000","00000000","fffffff6"],["00000005","ffffffff","00000000","00000000","fffffffb"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000007"],["00000007","00000002","00000000","00000000","0000000e"],["00000007","00000003","00000000","00000000","00000015"],["00000007","00000005","00000000","00000000","00000023"],["00000007","00000007","00000000","00000000","00000031"],["00000007","0000001f","00000000","00000000","000000d9"],["00000007","00000020","00000000","00000000","000000e0"],["00000007","00000021","00000000","00000000","000000e7"],["00000007","0000003f","00000000","00000000","000001b9"],["00000007","00000040","00000000","00000000","000001c0"],["00000007","000000ff","00000000","00000000","000006f9"],["00000007","00007fff","00000000","00000000","00037ff9"],["00000007","00008000","00000000","00000000","00038000"],["00000007","0000ffff","00000000","00000000","0006fff9"],["00000007","00010000","00000000","00000000","00070000"],["00000007","55555555","00000000","00000000","55555553"],["00000007","7ffffffe","00000000","00000000","7ffffff2"],["00000007","7fffffff","00000000","00000000","7ffffff9"],["00000007","80000000","00000000","00000000","80000000"],["00000007","80000001","00000000","00000000","80000007"],["00000007","aaaaaaaa","00000000","00000000","aaaaaaa6"],["00000007","deadbeef","00000000","00000000","16c03889"],["00000007","ffff0000","00000000","00000000","fff90000"],["00000007","ffff8000","00000000","00000000","fffc8000"],["00000007","ffffffe0","00000000","00000000","ffffff20"],["00000007","ffffffe1","00000000","00000000","ffffff27"],["00000007","fffffff9","00000000","00000000","ffffffcf"],["00000007","fffffffd","00000000","00000000","ffffffeb"],["00000007","fffffffe","00000000","00000000","fffffff2"],["00000007","ffffffff","00000000","00000000","fffffff9"],["0000001f","00000000","00000000","00000000","00000000"],["0000001f","00000001","00000000","00000000","0000001f"],["0000001f","00000002","00000000","00000000","0000003e"],["0000001f","00000003","00000000","00000000","0000005d"],["0000001f","00000005","00000000","00000000","0000009b"],["0000001f","00000007","00000000","00000000","000000d9"],["0000001f","0000001f","00000000","00000000","000003c1"],["0000001f","00000020","00000000","00000000","000003e0"],["0000001f","00000021","00000000","00000000","000003ff"],["0000001f","0000003f","00000000","00000000","000007a1"],["0000001f","00000040","00000000","00000000","000007c0"],["0000001f","000000ff","00000000","00000000","00001ee1"],["0000001f","00007fff","00000000","00000000","000f7fe1"],["0000001f","00008000","00000000","00000000","000f8000"],["0000001f","0000ffff","00000000","00000000","001effe1"],["0000001f","00010000","00000000","00000000","001f0000"],["0000001f","55555555","00000000","00000000","5555554b"],["0000001f","7ffffffe","00000000","00000000","7fffffc2"],["0000001f","7fffffff","00000000","00000000","7fffffe1"],["0000001f","80000000","00000000","00000000","80000000"],["0000001f","80000001","00000000","00000000","8000001f"],["0000001f","aaaaaaaa","00000000","00000000","aaaaaa96"],["0000001f","deadbeef","00000000","00000000","f70a1ef1"],["0000001f","ffff0000","00000000","00000000","ffe10000"],["0000001f","ffff8000","00000000","00000000","fff08000"],["0000001f","ffffffe0","00000000","00000000","fffffc20"],["0000001f","ffffffe1","00000000","00000000","fffffc3f"],["0000001f","fffffff9","00000000","00000000","ffffff27"],["0000001f","fffffffd","00000000","00000000","ffffffa3"],["0000001f","fffffffe","00000000","00000000","ffffffc2"],["0000001f","ffffffff","00000000","00000000","ffffffe1"],["00000020","00000000","00000000","00000000","00000000"],["00000020","00000001","00000000","00000000","00000020"],["00000020","00000002","00000000","00000000","00000040"],["00000020","00000003","00000000","00000000","00000060"],["00000020","00000005","00000000","00000000","000000a0"],["00000020","00000007","00000000","00000000","000000e0"],["00000020","0000001f","00000000","00000000","000003e0"],["00000020","00000020","00000000","00000000","00000400"],["00000020","00000021","00000000","00000000","00000420"],["00000020","0000003f","00000000","00000000","000007e0"],["00000020","00000040","00000000","00000000","00000800"],["00000020","000000ff","00000000","00000000","00001fe0"],["00000020","00007fff","00000000","00000000","000fffe0"],["00000020","00008000","00000000","00000000","00100000"],["00000020","0000ffff","00000000","00000000","001fffe0"],["00000020","00010000","00000000","00000000","00200000"],["00000020","55555555","00000000","00000000","aaaaaaa0"],["00000020","7ffffffe","00000000","00000000","ffffffc0"],["00000020","7fffffff","00000000","00000000","ffffffe0"],["00000020","80000000","00000000","00000000","00000000"],["00000020","80000001","00000000","00000000","00000020"],["00000020","aaaaaaaa","00000000","00000000","55555540"],["00000020","deadbeef","00000000","00000000","d5b7dde0"],["00000020","ffff0000","00000000","00000000","ffe00000"],["00000020","ffff8000","00000000","00000000","fff00000"],["00000020","ffffffe0","00000000","00000000","fffffc00"],["00000020","ffffffe1","00000000","00000000","fffffc20"],["00000020","fffffff9","00000000","00000000","ffffff20"],["00000020","fffffffd","00000000","00000000","ffffffa0"],["00000020","fffffffe","00000000","00000000","ffffffc0"],["00000020","ffffffff","00000000","00000000","ffffffe0"],["00000021","00000000","00000000","00000000","00000000"],["00000021","00000001","00000000","00000000","00000021"],["00000021","00000002","00000000","00000000","00000042"],["00000021","00000003","00000000","00000000","00000063"],["00000021","00000005","00000000","00000000","000000a5"],["00000021","00000007","00000000","00000000","000000e7"],["00000021","0000001f","00000000","00000000","000003ff"],["00000021","00000020","00000000","00000000","00000420"],["00000021","00000021","00000000","00000000","00000441"],["00000021","0000003f","00000000","00000000","0000081f"],["00000021","00000040","00000000","00000000","00000840"],["00000021","000000ff","00000000","00000000","000020df"],["00000021","00007fff","00000000","00000000","00107fdf"],["00000021","00008000","00000000","00000000","00108000"],["00000021","0000ffff","00000000","00000000","0020ffdf"],["00000021","00010000","00000000","00000000","00210000"],["00000021","55555555","00000000","00000000","fffffff5"],["00000021","7ffffffe","00000000","00000000","7fffffbe"],["00000021","7fffffff","00000000","00000000","7fffffdf"],["00000021","80000000","00000000","00000000","80000000"],["00000021","80000001","00000000","00000000","80000021"],["00000021","aaaaaaaa","00000000","00000000","ffffffea"],["00000021","deadbeef","00000000","00000000","b4659ccf"],["00000021","ffff0000","00000000","00000000","ffdf0000"],["00000021","ffff8000","00000000","00000000","ffef8000"],["00000021","ffffffe0","00000000","00000000","fffffbe0"],["00000021","ffffffe1","00000000","00000000","fffffc01"],["00000021","fffffff9","00000000","00000000","ffffff19"],["00000021","fffffffd","00000000","00000000","ffffff9d"],["00000021","fffffffe","00000000","00000000","ffffffbe"],["00000021","ffffffff","00000000","00000000","ffffffdf"],["0000003f","00000000","00000000","00000000","00000000"],["0000003f","00000001","00000000","00000000","0000003f"],["0000003f","00000002","00000000","00000000","0000007e"],["0000003f","00000003","00000000","00000000","000000bd"],["0000003f","00000005","00000000","00000000","0000013b"],["0000003f","00000007","00000000","00000000","000001b9"],["0000003f","0000001f","00000000","00000000","000007a1"],["0000003f","00000020","00000000","00000000","000007e0"],["0000003f","00000021","00000000","00000000","0000081f"],["0000003f","0000003f","00000000","00000000","00000f81"],["0000003f","00000040","00000000","00000000","00000fc0"],["0000003f","000000ff","00000000","00000000","00003ec1"],["0000003f","00007fff","00000000","00000000","001f7fc1"],["0000003f","00008000","00000000","00000000","001f8000"],["0000003f","0000ffff","00000000","00000000","003effc1"],["0000003f","00010000","00000000","00000000","003f0000"],["0000003f","55555555","00000000","00000000","ffffffeb"],["0000003f","7ffffffe","00000000","00000000","7fffff82"],["0000003f","7fffffff","00000000","00000000","7fffffc1"],["0000003f","80000000","00000000","00000000","80000000"],["0000003f","80000001","00000000","00000000","8000003f"],["0000003f","aaaaaaaa","00000000","00000000","ffffffd6"],["0000003f","deadbeef","00000000","00000000","ccc1fcd1"],["0000003f","ffff0000","00000000","00000000","ffc10000"],["0000003f","ffff8000","00000000","00000000","ffe08000"],["0000003f","ffffffe0","00000000","00000000","fffff820"],["0000003f","ffffffe1","00000000","00000000","fffff85f"],["0000003f","fffffff9","00000000","00000000","fffffe47"],["0000003f","fffffffd","00000000","00000000","ffffff43"],["0000003f","fffffffe","00000000","00000000","ffffff82"],["0000003f","ffffffff","00000000","00000000","ffffffc1"],["00000040","00000000","00000000","00000000","00000000"],["00000040","00000001","00000000","00000000","00000040"],["00000040","00000002","00000000","00000000","00000080"],["00000040","00000003","00000000","00000000","000000c0"],["00000040","00000005","00000000","00000000","00000140"],["00000040","00000007","00000000","00000000","000001c0"],["00000040","0000001f","00000000","00000000","000007c0"],["00000040","00000020","00000000","00000000","00000800"],["00000040","00000021","00000000","00000000","00000840"],["00000040","0000003f","00000000","00000000","00000fc0"],["00000040","00000040","00000000","00000000","00001000"],["00000040","000000ff","00000000","00000000","00003fc0"],["00000040","00007fff","00000000","00000000","001fffc0"],["00000040","00008000","00000000","00000000","00200000"],["00000040","0000ffff","00000000","00000000","003fffc0"],["00000040","00010000","00000000","00000000","00400000"],["00000040","55555555","00000000","00000000","55555540"],["00000040","7ffffffe","00000000","00000000","ffffff80"],["00000040","7fffffff","00000000","00000000","ffffffc0"],["00000040","80000000","00000000","00000000","00000000"],["00000040","80000001","00000000","00000000","00000040"],["00000040","aaaaaaaa","00000000","00000000","aaaaaa80"],["00000040","deadbeef","00000000","00000000","ab6fbbc0"],["00000040","ffff0000","00000000","00000000","ffc00000"],["00000040","ffff8000","00000000","00000000","ffe00000"],["00000040","ffffffe0","00000000","00000000","fffff800"],["00000040","ffffffe1","00000000","00000000","fffff840"],["00000040","fffffff9","00000000","00000000","fffffe40"],["00000040","fffffffd","00000000","00000000","ffffff40"],["00000040","fffffffe","00000000","00000000","ffffff80"],["00000040","ffffffff","00000000","00000000","ffffffc0"],["000000ff","00000000","00000000","00000000","00000000"],["000000ff","00000001","00000000","00000000","000000ff"],["000000ff","00000002","00000000","00000000","000001fe"],["000000ff","00000003","00000000","00000000","000002fd"],["000000ff","00000005","00000000","00000000","000004fb"],["000000ff","00000007","00000000","00000000","000006f9"],["000000ff","0000001f","00000000","00000000","00001ee1"],["000000ff","00000020","00000000","00000000","00001fe0"],["000000ff","00000021","00000000","00000000","000020df"],["000000ff","0000003f","00000000","00000000","00003ec1"],["000000ff","00000040","00000000","00000000","00003fc0"],["000000ff","000000ff","00000000","00000000","0000fe01"],["000000ff","00007fff","00000000","00000000","007f7f01"],["000000ff","00008000","00000000","00000000","007f8000"],["000000ff","0000ffff","00000000","00000000","00feff01"],["000000ff","00010000","00000000","00000000","00ff0000"],["000000ff","55555555","00000000","00000000","ffffffab"],["000000ff","7ffffffe","00000000","00000000","7ffffe02"],["000000ff","7fffffff","00000000","00000000","7fffff01"],["000000ff","80000000","00000000","00000000","80000000"],["000000ff","80000001","00000000","00000000","800000ff"],["000000ff","aaaaaaaa","00000000","00000000","ffffff56"],["000000ff","deadbeef","00000000","00000000","cf113011"],["000000ff","ffff0000","00000000","00000000","ff010000"],["000000ff","ffff8000","00000000","00000000","ff808000"],["000000ff","ffffffe0","00000000","00000000","ffffe020"],["000000ff","ffffffe1","00000000","00000000","ffffe11f"],["000000ff","fffffff9","00000000","00000000","fffff907"],["000000ff","fffffffd","00000000","00000000","fffffd03"],["000000ff","fffffffe","00000000","00000000","fffffe02"],["000000ff","ffffffff","00000000","00000000","ffffff01"],["00007fff","00000000","00000000","00000000","00000000"],["00007fff","00000001","00000000","00000000","00007fff"],["00007fff","00000002","00000000","00000000","0000fffe"],["00007fff","00000003","00000000","00000000","00017ffd"],["00007fff","00000005","00000000","00000000","00027ffb"],["00007fff","00000007","00000000","00000000","00037ff9"],["00007fff","0000001f","00000000","00000000","000f7fe1"],["00007fff","00000020","00000000","00000000","000fffe0"],["00007fff","00000021","00000000","00000000","00107fdf"],["00007fff","0000003f","00000000","00000000","001f7fc1"],["00007fff","00000040","00000000","00000000","001fffc0"],["00007fff","000000ff","00000000","00000000","007f7f01"],["00007fff","00007fff","00000000","00000000","3fff0001"],["00007fff","00008000","00000000","00000000","3fff8000"],["00007fff","0000ffff","00000000","00000000","7ffe8001"],["00007fff","00010000","00000000","00000000","7fff0000"],["00007fff","55555555","00000000","00000000","55552aab"],["00007fff","7ffffffe","00000000","00000000","7fff0002"],["00007fff","7fffffff","00000000","00000000","7fff8001"],["00007fff","80000000","00000000","00000000","80000000"],["00007fff","80000001","00000000","00000000","80007fff"],["00007fff","aaaaaaaa","00000000","00000000","aaaa5556"],["00007fff","deadbeef","00000000","00000000","00c9c111"],["00007fff","ffff0000","00000000","00000000","80010000"],["00007fff","ffff8000","00000000","00000000","c0008000"],["00007fff","ffffffe0","00000000","00000000","fff00020"],["00007fff","ffffffe1","00000000","00000000","fff0801f"],["00007fff","fffffff9","00000000","00000000","fffc8007"],["00007fff","fffffffd","00000000","00000000","fffe8003"],["00007fff","fffffffe","00000000","00000000","ffff0002"],["00007fff","ffffffff","00000000","00000000","ffff8001"],["00008000","00000000","00000000","00000000","00000000"],["00008000","00000001","00000000","00000000","00008000"],["00008000","00000002","00000000","00000000","00010000"],["00008000","00000003","00000000","00000000","00018000"],["00008000","00000005","00000000","00000000","00028000"],["00008000","00000007","00000000","00000000","00038000"],["00008000","0000001f","00000000","00000000","000f8000"],["00008000","00000020","00000000","00000000","00100000"],["00008000","00000021","00000000","00000000","00108000"],["00008000","0000003f","00000000","00000000","001f8000"],["00008000","00000040","00000000","00000000","00200000"],["00008000","000000ff","00000000","00000000","007f8000"],["00008000","00007fff","00000000","00000000","3fff8000"],["00008000","00008000","00000000","00000000","40000000"],["00008000","0000ffff","00000000","00000000","7fff8000"],["00008000","00010000","00000000","00000000","80000000"],["00008000","55555555","00000000","00000000","aaaa8000"],["00008000","7ffffffe","00000000","00000000","ffff0000"],["00008000","7fffffff","00000000","00000000","ffff8000"],["00008000","80000000","00000000","00000000","00000000"],["00008000","80000001","00000000","00000000","00008000"],["00008000","aaaaaaaa","00000000","00000000","55550000"],["00008000","deadbeef","00000000","00000000","df778000"],["00008000","ffff0000","00000000","00000000","80000000"],["00008000","ffff8000","00000000","00000000","c0000000"],["00008000","ffffffe0","00000000","00000000","fff00000"],["00008000","ffffffe1","00000000","00000000","fff08000"],["00008000","fffffff9","00000000","00000000","fffc8000"],["00008000","fffffffd","00000000","00000000","fffe8000"],["00008000","fffffffe","00000000","00000000","ffff0000"],["00008000","ffffffff","00000000","00000000","ffff8000"],["0000ffff","00000000","00000000","00000000","00000000"],["0000ffff","00000001","00000000","00000000","0000ffff"],["0000ffff","00000002","00000000","00000000","0001fffe"],["0000ffff","00000003","00000000","00000000","0002fffd"],["0000ffff","00000005","00000000","00000000","0004fffb"],["0000ffff","00000007","00000000","00000000","0006fff9"],["0000ffff","0000001f","00000000","00000000","001effe1"],["0000ffff","00000020","00000000","00000000","001fffe0"],["0000ffff","00000021","00000000","00000000","0020ffdf"],["0000ffff","0000003f","00000000","00000000","003effc1"],["0000ffff","00000040","00000000","00000000","003fffc0"],["0000ffff","000000ff","00000000","00000000","00feff01"],["0000ffff","00007fff","00000000","00000000","7ffe8001"],["0000ffff","00008000","00000000","00000000","7fff8000"],["0000ffff","0000ffff","00000000","00000000","fffe0001"],["0000ffff","00010000","00000000","00000000","ffff0000"],["0000ffff","55555555","00000000","00000000","ffffaaab"],["0000ffff","7ffffffe","00000000","00000000","7ffe0002"],["0000ffff","7fffffff","00000000","00000000","7fff0001"],["0000ffff","80000000","00000000","00000000","80000000"],["0000ffff","80000001","00000000","00000000","8000ffff"],["0000ffff","aaaaaaaa","00000000","00000000","ffff5556"],["0000ffff","deadbeef","00000000","00000000","e0414111"],["0000ffff","ffff0000","00000000","00000000","00010000"],["0000ffff","ffff8000","00000000","00000000","80008000"],["0000ffff","ffffffe0","00000000","00000000","ffe00020"],["0000ffff","ffffffe1","00000000","00000000","ffe1001f"],["0000ffff","fffffff9","00000000","00000000","fff90007"],["0000ffff","fffffffd","00000000","00000000","fffd0003"],["0000ffff","fffffffe","00000000","00000000","fffe0002"],["0000ffff","ffffffff","00000000","00000000","ffff0001"],["00010000","00000000","00000000","00000000","00000000"],["00010000","00000001","00000000","00000000","00010000"],["00010000","00000002","00000000","00000000","00020000"],["00010000","00000003","00000000","00000000","00030000"],["00010000","00000005","00000000","00000000","00050000"],["00010000","00000007","00000000","00000000","00070000"],["00010000","0000001f","00000000","00000000","001f0000"],["00010000","00000020","00000000","00000000","00200000"],["00010000","00000021","00000000","00000000","00210000"],["00010000","0000003f","00000000","00000000","003f0000"],["00010000","00000040","00000000","00000000","00400000"],["00010000","000000ff","00000000","00000000","00ff0000"],["00010000","00007fff","00000000","00000000","7fff0000"],["00010000","00008000","00000000","00000000","80000000"],["00010000","0000ffff","00000000","00000000","ffff0000"],["00010000","00010000","00000000","00000000","00000000"],["00010000","55555555","00000000","00000000","55550000"],["00010000","7ffffffe","00000000","00000000","fffe0000"],["00010000","7fffffff","00000000","00000000","ffff0000"],["00010000","80000000","00000000","00000000","00000000"],["00010000","80000001","00000000","00000000","00010000"],["00010000","aaaaaaaa","00000000","00000000","aaaa0000"],["00010000","deadbeef","00000000","00000000","beef0000"],["00010000","ffff0000","00000000","00000000","00000000"],["00010000","ffff8000","00000000","00000000","80000000"],["00010000","ffffffe0","00000000","00000000","ffe00000"],["00010000","ffffffe1","00000000","00000000","ffe10000"],["00010000","fffffff9","00000000","00000000","fff90000"],["00010000","fffffffd","00000000","00000000","fffd0000"],["00010000","fffffffe","00000000","00000000","fffe0000"],["00010000","ffffffff","00000000","00000000","ffff0000"],["55555555","00000000","00000000","00000000","00000000"],["55555555","00000001","00000000","00000000","55555555"],["55555555","00000002","00000000","00000000","aaaaaaaa"],["55555555","00000003","00000000","00000000","ffffffff"],["55555555","00000005","00000000","00000000","aaaaaaa9"],["55555555","00000007","00000000","00000000","55555553"],["55555555","0000001f","00000000","00000000","5555554b"],["55555555","00000020","00000000","00000000","aaaaaaa0"],["55555555","00000021","00000000","00000000","fffffff5"],["55555555","0000003f","00000000","00000000","ffffffeb"],["55555555","00000040","00000000","00000000","55555540"],["55555555","000000ff","00000000","00000000","ffffffab"],["55555555","00007fff","00000000","00000000","55552aab"],["55555555","00008000","00000000","00000000","aaaa8000"],["55555555","0000ffff","00000000","00000000","ffffaaab"],["55555555","00010000","00000000","00000000","55550000"],["55555555","55555555","00000000","00000000","38e38e39"],["55555555","7ffffffe","00000000","00000000","d5555556"],["55555555","7fffffff","00000000","00000000","2aaaaaab"],["55555555","80000000","00000000","00000000","80000000"],["55555555","80000001","00000000","00000000","d5555555"],["55555555","aaaaaaaa","00000000","00000000","71c71c72"],["55555555","deadbeef","00000000","00000000","6070c05b"],["55555555","ffff0000","00000000","00000000","aaab0000"],["55555555","ffff8000","00000000","00000000","55558000"],["55555555","ffffffe0","00000000","00000000","55555560"],["55555555","ffffffe1","00000000","00000000","aaaaaab5"],["55555555","fffffff9","00000000","00000000","aaaaaaad"],["55555555","fffffffd","00000000","00000000","00000001"],["55555555","fffffffe","00000000","00000000","55555556"],["55555555","ffffffff","00000000","00000000","aaaaaaab"],["7ffffffe","00000000","00000000","00000000","00000000"],["7ffffffe","00000001","00000000","00000000","7ffffffe"],["7ffffffe","00000002","00000000","00000000","fffffffc"],["7ffffffe","00000003","00000000","00000000","7ffffffa"],["7ffffffe","00000005","00000000","00000000","7ffffff6"],["7ffffffe","00000007","00000000","00000000","7ffffff2"],["7ffffffe","0000001f","00000000","00000000","7fffffc2"],["7ffffffe","00000020","00000000","00000000","ffffffc0"],["7ffffffe","00000021","00000000","00000000","7fffffbe"],["7ffffffe","0000003f","00000000","00000000","7fffff82"],["7ffffffe","00000040","00000000","00000000","ffffff80"],["7ffffffe","000000ff","00000000","00000000","7ffffe02"],["7ffffffe","00007fff","00000000","00000000","7fff0002"],["7ffffffe","00008000","00000000","00000000","ffff0000"],["7ffffffe","0000ffff","00000000","00000000","7ffe0002"],["7ffffffe","00010000","00000000","00000000","fffe0000"],["7ffffffe","55555555","00000000","00000000","d5555556"],["7ffffffe","7ffffffe","00000000","00000000","00000004"],["7ffffffe","7fffffff","00000000","00000000","80000002"],["7ffffffe","80000000","00000000","00000000","00000000"],["7ffffffe","80000001","00000000","00000000","7ffffffe"],["7ffffffe","aaaaaaaa","00000000","00000000","aaaaaaac"],["7ffffffe","deadbeef","00000000","00000000","c2a48222"],["7ffffffe","ffff0000","00000000","00000000","00020000"],["7ffffffe","ffff8000","00000000","00000000","00010000"],["7ffffffe","ffffffe0","00000000","00000000","00000040"],["7ffffffe","ffffffe1","00000000","00000000","8000003e"],["7ffffffe","fffffff9","00000000","00000000","8000000e"],["7ffffffe","fffffffd","00000000","00000000","80000006"],["7ffffffe","fffffffe","00000000","00000000","00000004"],["7ffffffe","ffffffff","00000000","00000000","80000002"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","7fffffff"],["7fffffff","00000002","00000000","00000000","fffffffe"],["7fffffff","00000003","00000000","00000000","7ffffffd"],["7fffffff","00000005","00000000","00000000","7ffffffb"],["7fffffff","00000007","00000000","00000000","7ffffff9"],["7fffffff","0000001f","00000000","00000000","7fffffe1"],["7fffffff","00000020","00000000","00000000","ffffffe0"],["7fffffff","00000021","00000000","00000000","7fffffdf"],["7fffffff","0000003f","00000000","00000000","7fffffc1"],["7fffffff","00000040","00000000","00000000","ffffffc0"],["7fffffff","000000ff","00000000","00000000","7fffff01"],["7fffffff","00007fff","00000000","00000000","7fff8001"],["7fffffff","00008000","00000000","00000000","ffff8000"],["7fffffff","0000ffff","00000000","00000000","7fff0001"],["7fffffff","00010000","00000000","00000000","ffff0000"],["7fffffff","55555555","00000000","00000000","2aaaaaab"],["7fffffff","7ffffffe","00000000","00000000","80000002"],["7fffffff","7fffffff","00000000","00000000","00000001"],["7fffffff","80000000","00000000","00000000","80000000"],["7fffffff","80000001","00000000","00000000","ffffffff"],["7fffffff","aaaaaaaa","00000000","00000000","55555556"],["7fffffff","deadbeef","00000000","00000000","a1524111"],["7fffffff","ffff0000","00000000","00000000","00010000"],["7fffffff","ffff8000","00000000","00000000","00008000"],["7fffffff","ffffffe0","00000000","00000000","00000020"],["7fffffff","ffffffe1","00000000","00000000","8000001f"],["7fffffff","fffffff9","00000000","00000000","80000007"],["7fffffff","fffffffd","00000000","00000000","80000003"],["7fffffff","fffffffe","00000000","00000000","00000002"],["7fffffff","ffffffff","00000000","00000000","80000001"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000001","00000000","00000000","80000000"],["80000000","00000002","00000000","00000000","00000000"],["80000000","00000003","00000000","00000000","80000000"],["80000000","00000005","00000000","00000000","80000000"],["80000000","00000007","00000000","00000000","80000000"],["80000000","0000001f","00000000","00000000","80000000"],["80000000","00000020","00000000","00000000","00000000"],["80000000","00000021","00000000","00000000","80000000"],["80000000","0000003f","00000000","00000000","80000000"],["80000000","00000040","00000000","00000000","00000000"],["80000000","000000ff","00000000","00000000","80000000"],["80000000","00007fff","00000000","00000000","80000000"],["80000000","00008000","00000000","00000000","00000000"],["80000000","0000ffff","00000000","00000000","80000000"],["80000000","00010000","00000000","00000000","00000000"],["80000000","55555555","00000000","00000000","80000000"],["80000000","7ffffffe","00000000","00000000","00000000"],["80000000","7fffffff","00000000","00000000","80000000"],["80000000","80000000","00000000","00000000","00000000"],["80000000","80000001","00000000","00000000","80000000"],["80000000","aaaaaaaa","00000000","00000000","00000000"],["80000000","deadbeef","00000000","00000000","80000000"],["80000000","ffff0000","00000000","00000000","00000000"],["80000000","ffff8000","00000000","00000000","00000000"],["80000000","ffffffe0","00000000","00000000","00000000"],["80000000","ffffffe1","00000000","00000000","80000000"],["80000000","fffffff9","00000000","00000000","80000000"],["80000000","fffffffd","00000000","00000000","80000000"],["80000000","fffffffe","00000000","00000000","00000000"],["80000000","ffffffff","00000000","00000000","80000000"],["80000001","00000000","00000000","00000000","00000000"],["80000001","00000001","00000000","00000000","80000001"],["80000001","00000002","00000000","00000000","00000002"],["80000001","00000003","00000000","00000000","80000003"],["80000001","00000005","00000000","00000000","80000005"],["80000001","00000007","00000000","00000000","80000007"],["80000001","0000001f","00000000","00000000","8000001f"],["80000001","00000020","00000000","00000000","00000020"],["80000001","00000021","00000000","00000000","80000021"],["80000001","0000003f","00000000","00000000","8000003f"],["80000001","00000040","00000000","00000000","00000040"],["80000001","000000ff","00000000","00000000","800000ff"],["80000001","00007fff","00000000","00000000","80007fff"],["80000001","00008000","00000000","00000000","00008000"],["80000001","0000ffff","00000000","00000000","8000ffff"],["80000001","00010000","00000000","00000000","00010000"],["80000001","55555555","00000000","00000000","d5555555"],["80000001","7ffffffe","00000000","00000000","7ffffffe"],["80000001","7fffffff","00000000","00000000","ffffffff"],["80000001","80000000","00000000","00000000","80000000"],["80000001","80000001","00000000","00000000","00000001"],["80000001","aaaaaaaa","00000000","00000000","aaaaaaaa"],["80000001","deadbeef","00000000","00000000","5eadbeef"],["80000001","ffff0000","00000000","00000000","ffff0000"],["80000001","ffff8000","00000000","00000000","ffff8000"],["80000001","ffffffe0","00000000","00000000","ffffffe0"],["80000001","ffffffe1","00000000","00000000","7fffffe1"],["80000001","fffffff9","00000000","00000000","7ffffff9"],["80000001","fffffffd","00000000","00000000","7ffffffd"],["80000001","fffffffe","00000000","00000000","fffffffe"],["80000001","ffffffff","00000000","00000000","7fffffff"],["aaaaaaaa","00000000","00000000","00000000","00000000"],["aaaaaaaa","00000001","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000002","00000000","00000000","55555554"],["aaaaaaaa","00000003","00000000","00000000","fffffffe"],["aaaaaaaa","00000005","00000000","00000000","55555552"],["aaaaaaaa","00000007","00000000","00000000","aaaaaaa6"],["aaaaaaaa","0000001f","00000000","00000000","aaaaaa96"],["aaaaaaaa","00000020","00000000","00000000","55555540"],["aaaaaaaa","00000021","00000000","00000000","ffffffea"],["aaaaaaaa","0000003f","00000000","00000000","ffffffd6"],["aaaaaaaa","00000040","00000000","00000000","aaaaaa80"],["aaaaaaaa","000000ff","00000000","00000000","ffffff56"],["aaaaaaaa","00007fff","00000000","00000000","aaaa5556"],["aaaaaaaa","00008000","00000000","00000000","55550000"],["aaaaaaaa","0000ffff","00000000","00000000","ffff5556"],["aaaaaaaa","00010000","00000000","00000000","aaaa0000"],["aaaaaaaa","55555555","00000000","00000000","71c71c72"],["aaaaaaaa","7ffffffe","00000000","00000000","aaaaaaac"],["aaaaaaaa","7fffffff","00000000","00000000","55555556"],["aaaaaaaa","80000000","00000000","00000000","00000000"],["aaaaaaaa","80000001","00000000","00000000","aaaaaaaa"],["aaaaaaaa","aaaaaaaa","00000000","00000000","e38e38e4"],["aaaaaaaa","deadbeef","00000000","00000000","c0e180b6"],["aaaaaaaa","ffff0000","00000000","00000000","55560000"],["aaaaaaaa","ffff8000","00000000","00000000","aaab0000"],["aaaaaaaa","ffffffe0","00000000","00000000","aaaaaac0"],["aaaaaaaa","ffffffe1","00000000","00000000","5555556a"],["aaaaaaaa","fffffff9","00000000","00000000","5555555a"],["aaaaaaaa","fffffffd","00000000","00000000","00000002"],["aaaaaaaa","fffffffe","00000000","00000000","aaaaaaac"],["aaaaaaaa","ffffffff","00000000","00000000","55555556"],["deadbeef","00000000","00000000","00000000","00000000"],["deadbeef","00000001","00000000","00000000","deadbeef"],["deadbeef","00000002","00000000","00000000","bd5b7dde"],["deadbeef","00000003","00000000","00000000","9c093ccd"],["deadbeef","00000005","00000000","00000000","5964baab"],["deadbeef","00000007","00000000","00000000","16c03889"],["deadbeef","0000001f","00000000","00000000","f70a1ef1"],["deadbeef","00000020","00000000","00000000","d5b7dde0"],["deadbeef","00000021","00000000","00000000","b4659ccf"],["deadbeef","0000003f","00000000","00000000","ccc1fcd1"],["deadbeef","00000040","00000000","00000000","ab6fbbc0"],["deadbeef","000000ff","00000000","00000000","cf113011"],["deadbeef","00007fff","00000000","00000000","00c9c111"],["deadbeef","00008000","00000000","00000000","df778000"],["deadbeef","0000ffff","00000000","00000000","e0414111"],["deadbeef","00010000","00000000","00000000","beef0000"],["deadbeef","55555555","00000000","00000000","6070c05b"],["deadbeef","7ffffffe","00000000","00000000","c2a48222"],["deadbeef","7fffffff","00000000","00000000","a1524111"],["deadbeef","80000000","00000000","00000000","80000000"],["deadbeef","80000001","00000000","00000000","5eadbeef"],["deadbeef","aaaaaaaa","00000000","00000000","c0e180b6"],["deadbeef","deadbeef","00000000","00000000","216da321"],["deadbeef","ffff0000","00000000","00000000","41110000"],["deadbeef","ffff8000","00000000","00000000","20888000"],["deadbeef","ffffffe0","00000000","00000000","2a482220"],["deadbeef","ffffffe1","00000000","00000000","08f5e10f"],["deadbeef","fffffff9","00000000","00000000","e93fc777"],["deadbeef","fffffffd","00000000","00000000","63f6c333"],["deadbeef","fffffffe","00000000","00000000","42a48222"],["deadbeef","ffffffff","00000000","00000000","21524111"],["ffff0000","00000000","00000000","00000000","00000000"],["ffff0000","00000001","00000000","00000000","ffff0000"],["ffff0000","00000002","00000000","00000000","fffe0000"],["ffff0000","00000003","00000000","00000000","fffd0000"],["ffff0000","00000005","00000000","00000000","fffb0000"],["ffff0000","00000007","00000000","00000000","fff90000"],["ffff0000","0000001f","00000000","00000000","ffe10000"],["ffff0000","00000020","00000000","00000000","ffe00000"],["ffff0000","00000021","00000000","00000000","ffdf0000"],["ffff0000","0000003f","00000000","00000000","ffc10000"],["ffff0000","00000040","00000000","00000000","ffc00000"],["ffff0000","000000ff","00000000","00000000","ff010000"],["ffff0000","00007fff","00000000","00000000","80010000"],["ffff0000","00008000","00000000","00000000","80000000"],["ffff0000","0000ffff","00000000","00000000","00010000"],["ffff0000","00010000","00000000","00000000","00000000"],["ffff0000","55555555","00000000","00000000","aaab0000"],["ffff0000","7ffffffe","00000000","00000000","00020000"],["ffff0000","7fffffff","00000000","00000000","00010000"],["ffff0000","80000000","00000000","00000000","00000000"],["ffff0000","80000001","00000000","00000000","ffff0000"],["ffff0000","aaaaaaaa","00000000","00000000","55560000"],["ffff0000","deadbeef","00000000","00000000","41110000"],["ffff0000","ffff0000","00000000","00000000","00000000"],["ffff0000","ffff8000","00000000","00000000","80000000"],["ffff0000","ffffffe0","00000000","00000000","00200000"],["ffff0000","ffffffe1","00000000","00000000","001f0000"],["ffff0000","fffffff9","00000000","00000000","00070000"],["ffff0000","fffffffd","00000000","00000000","00030000"],["ffff0000","fffffffe","00000000","00000000","00020000"],["ffff0000","ffffffff","00000000","00000000","00010000"],["ffff8000","00000000","00000000","00000000","00000000"],["ffff8000","00000001","00000000","00000000","ffff8000"],["ffff8000","00000002","00000000","00000000","ffff0000"],["ffff8000","00000003","00000000","00000000","fffe8000"],["ffff8000","00000005","00000000","00000000","fffd8000"],["ffff8000","00000007","00000000","00000000","fffc8000"],["ffff8000","0000001f","00000000","00000000","fff08000"],["ffff8000","00000020","00000000","00000000","fff00000"],["ffff8000","00000021","00000000","00000000","ffef8000"],["ffff8000","0000003f","00000000","00000000","ffe08000"],["ffff8000","00000040","00000000","00000000","ffe00000"],["ffff8000","000000ff","00000000","00000000","ff808000"],["ffff8000","00007fff","00000000","00000000","c0008000"],["ffff8000","00008000","00000000","00000000","c0000000"],["ffff8000","0000ffff","00000000","00000000","80008000"],["ffff8000","00010000","00000000","00000000","80000000"],["ffff8000","55555555","00000000","00000000","55558000"],["ffff8000","7ffffffe","00000000","00000000","00010000"],["ffff8000","7fffffff","00000000","00000000","00008000"],["ffff8000","80000000","00000000","00000000","00000000"],["ffff8000","80000001","00000000","00000000","ffff8000"],["ffff8000","aaaaaaaa","00000000","00000000","aaab0000"],["ffff8000","deadbeef","00000000","00000000","20888000"],["ffff8000","ffff0000","00000000","00000000","80000000"],["ffff8000","ffff8000","00000000","00000000","40000000"],["ffff8000","ffffffe0","00000000","00000000","00100000"],["ffff8000","ffffffe1","00000000","00000000","000f8000"],["ffff8000","fffffff9","00000000","00000000","00038000"],["ffff8000","fffffffd","00000000","00000000","00018000"],["ffff8000","fffffffe","00000000","00000000","00010000"],["ffff8000","ffffffff","00000000","00000000","00008000"],["ffffffe0","00000000","00000000","00000000","00000000"],["ffffffe0","00000001","00000000","00000000","ffffffe0"],["ffffffe0","00000002","00000000","00000000","ffffffc0"],["ffffffe0","00000003","00000000","00000000","ffffffa0"],["ffffffe0","00000005","00000000","00000000","ffffff60"],["ffffffe0","00000007","00000000","00000000","ffffff20"],["ffffffe0","0000001f","00000000","00000000","fffffc20"],["ffffffe0","00000020","00000000","00000000","fffffc00"],["ffffffe0","00000021","00000000","00000000","fffffbe0"],["ffffffe0","0000003f","00000000","00000000","fffff820"],["ffffffe0","00000040","00000000","00000000","fffff800"],["ffffffe0","000000ff","00000000","00000000","ffffe020"],["ffffffe0","00007fff","00000000","00000000","fff00020"],["ffffffe0","00008000","00000000","00000000","fff00000"],["ffffffe0","0000ffff","00000000","00000000","ffe00020"],["ffffffe0","00010000","00000000","00000000","ffe00000"],["ffffffe0","55555555","00000000","00000000","55555560"],["ffffffe0","7ffffffe","00000000","00000000","00000040"],["ffffffe0","7fffffff","00000000","00000000","00000020"],["ffffffe0","80000000","00000000","00000000","00000000"],["ffffffe0","80000001","00000000","00000000","ffffffe0"],["ffffffe0","aaaaaaaa","00000000","00000000","aaaaaac0"],["ffffffe0","deadbeef","00000000","00000000","2a482220"],["ffffffe0","ffff0000","00000000","00000000","00200000"],["ffffffe0","ffff8000","00000000","00000000","00100000"],["ffffffe0","ffffffe0","00000000","00000000","00000400"],["ffffffe0","ffffffe1","00000000","00000000","000003e0"],["ffffffe0","fffffff9","00000000","00000000","000000e0"],["ffffffe0","fffffffd","00000000","00000000","00000060"],["ffffffe0","fffffffe","00000000","00000000","00000040"],["ffffffe0","ffffffff","00000000","00000000","00000020"],["ffffffe1","00000000","00000000","00000000","00000000"],["ffffffe1","00000001","00000000","00000000","ffffffe1"],["ffffffe1","00000002","00000000","00000000","ffffffc2"],["ffffffe1","00000003","00000000","00000000","ffffffa3"],["ffffffe1","00000005","00000000","00000000","ffffff65"],["ffffffe1","00000007","00000000","00000000","ffffff27"],["ffffffe1","0000001f","00000000","00000000","fffffc3f"],["ffffffe1","00000020","00000000","00000000","fffffc20"],["ffffffe1","00000021","00000000","00000000","fffffc01"],["ffffffe1","0000003f","00000000","00000000","fffff85f"],["ffffffe1","00000040","00000000","00000000","fffff840"],["ffffffe1","000000ff","00000000","00000000","ffffe11f"],["ffffffe1","00007fff","00000000","00000000","fff0801f"],["ffffffe1","00008000","00000000","00000000","fff08000"],["ffffffe1","0000ffff","00000000","00000000","ffe1001f"],["ffffffe1","00010000","00000000","00000000","ffe10000"],["ffffffe1","55555555","00000000","00000000","aaaaaab5"],["ffffffe1","7ffffffe","00000000","00000000","8000003e"],["ffffffe1","7fffffff","00000000","00000000","8000001f"],["ffffffe1","80000000","00000000","00000000","80000000"],["ffffffe1","80000001","00000000","00000000","7fffffe1"],["ffffffe1","aaaaaaaa","00000000","00000000","5555556a"],["ffffffe1","deadbeef","00000000","00000000","08f5e10f"],["ffffffe1","ffff0000","00000000","00000000","001f0000"],["ffffffe1","ffff8000","00000000","00000000","000f8000"],["ffffffe1","ffffffe0","00000000","00000000","000003e0"],["ffffffe1","ffffffe1","00000000","00000000","000003c1"],["ffffffe1","fffffff9","00000000","00000000","000000d9"],["ffffffe1","fffffffd","00000000","00000000","0000005d"],["ffffffe1","fffffffe","00000000","00000000","0000003e"],["ffffffe1","ffffffff","00000000","00000000","0000001f"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000001","00000000","00000000","fffffff9"],["fffffff9","00000002","00000000","00000000","fffffff2"],["fffffff9","00000003","00000000","00000000","ffffffeb"],["fffffff9","00000005","00000000","00000000","ffffffdd"],["fffffff9","00000007","00000000","00000000","ffffffcf"],["fffffff9","0000001f","00000000","00000000","ffffff27"],["fffffff9","00000020","00000000","00000000","ffffff20"],["fffffff9","00000021","00000000","00000000","ffffff19"],["fffffff9","0000003f","00000000","00000000","fffffe47"],["fffffff9","00000040","00000000","00000000","fffffe40"],["fffffff9","000000ff","00000000","00000000","fffff907"],["fffffff9","00007fff","00000000","00000000","fffc8007"],["fffffff9","00008000","00000000","00000000","fffc8000"],["fffffff9","0000ffff","00000000","00000000","fff90007"],["fffffff9","00010000","00000000","00000000","fff90000"],["fffffff9","55555555","00000000","00000000","aaaaaaad"],["fffffff9","7ffffffe","00000000","00000000","8000000e"],["fffffff9","7fffffff","00000000","00000000","80000007"],["fffffff9","80000000","00000000","00000000","80000000"],["fffffff9","80000001","00000000","00000000","7ffffff9"],["fffffff9","aaaaaaaa","00000000","00000000","5555555a"],["fffffff9","deadbeef","00000000","00000000","e93fc777"],["fffffff9","ffff0000","00000000","00000000","00070000"],["fffffff9","ffff8000","00000000","00000000","00038000"],["fffffff9","ffffffe0","00000000","00000000","000000e0"],["fffffff9","ffffffe1","00000000","00000000","000000d9"],["fffffff9","fffffff9","00000000","00000000","00000031"],["fffffff9","fffffffd","00000000","00000000","00000015"],["fffffff9","fffffffe","00000000","00000000","0000000e"],["fffffff9","ffffffff","00000000","00000000","00000007"],["fffffffd","00000000","00000000","00000000","00000000"],["fffffffd","00000001","00000000","00000000","fffffffd"],["fffffffd","00000002","00000000","00000000","fffffffa"],["fffffffd","00000003","00000000","00000000","fffffff7"],["fffffffd","00000005","00000000","00000000","fffffff1"],["fffffffd","00000007","00000000","00000000","ffffffeb"],["fffffffd","0000001f","00000000","00000000","ffffffa3"],["fffffffd","00000020","00000000","00000000","ffffffa0"],["fffffffd","00000021","00000000","00000000","ffffff9d"],["fffffffd","0000003f","00000000","00000000","ffffff43"],["fffffffd","00000040","00000000","00000000","ffffff40"],["fffffffd","000000ff","00000000","00000000","fffffd03"],["fffffffd","00007fff","00000000","00000000","fffe8003"],["fffffffd","00008000","00000000","00000000","fffe8000"],["fffffffd","0000ffff","00000000","00000000","fffd0003"],["fffffffd","00010000","00000000","00000000","fffd0000"],["fffffffd","55555555","00000000","00000000","00000001"],["fffffffd","7ffffffe","00000000","00000000","80000006"],["fffffffd","7fffffff","00000000","00000000","80000003"],["fffffffd","80000000","00000000","00000000","80000000"],["fffffffd","80000001","00000000","00000000","7ffffffd"],["fffffffd","aaaaaaaa","00000000","00000000","00000002"],["fffffffd","deadbeef","00000000","00000000","63f6c333"],["fffffffd","ffff0000","00000000","00000000","00030000"],["fffffffd","ffff8000","00000000","00000000","00018000"],["fffffffd","ffffffe0","00000000","00000000","00000060"],["fffffffd","ffffffe1","00000000","00000000","0000005d"],["fffffffd","fffffff9","00000000","00000000","00000015"],["fffffffd","fffffffd","00000000","00000000","00000009"],["fffffffd","fffffffe","00000000","00000000","00000006"],["fffffffd","ffffffff","00000000","00000000","00000003"],["fffffffe","00000000","00000000","00000000","00000000"],["fffffffe","00000001","00000000","00000000","fffffffe"],["fffffffe","00000002","00000000","00000000","fffffffc"],["fffffffe","00000003","00000000","00000000","fffffffa"],["fffffffe","00000005","00000000","00000000","fffffff6"],["fffffffe","00000007","00000000","00000000","fffffff2"],["fffffffe","0000001f","00000000","00000000","ffffffc2"],["fffffffe","00000020","00000000","00000000","ffffffc0"],["fffffffe","00000021","00000000","00000000","ffffffbe"],["fffffffe","0000003f","00000000","00000000","ffffff82"],["fffffffe","00000040","00000000","00000000","ffffff80"],["fffffffe","000000ff","00000000","00000000","fffffe02"],["fffffffe","00007fff","00000000","00000000","ffff0002"],["fffffffe","00008000","00000000","00000000","ffff0000"],["fffffffe","0000ffff","00000000","00000000","fffe0002"],["fffffffe","00010000","00000000","00000000","fffe0000"],["fffffffe","55555555","00000000","00000000","55555556"],["fffffffe","7ffffffe","00000000","00000000","00000004"],["fffffffe","7fffffff","00000000","00000000","00000002"],["fffffffe","80000000","00000000","00000000","00000000"],["fffffffe","80000001","00000000","00000000","fffffffe"],["fffffffe","aaaaaaaa","00000000","00000000","aaaaaaac"],["fffffffe","deadbeef","00000000","00000000","42a48222"],["fffffffe","ffff0000","00000000","00000000","00020000"],["fffffffe","ffff8000","00000000","00000000","00010000"],["fffffffe","ffffffe0","00000000","00000000","00000040"],["fffffffe","ffffffe1","00000000","00000000","0000003e"],["fffffffe","fffffff9","00000000","00000000","0000000e"],["fffffffe","fffffffd","00000000","00000000","00000006"],["fffffffe","fffffffe","00000000","00000000","00000004"],["fffffffe","ffffffff","00000000","00000000","00000002"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000001","00000000","00000000","ffffffff"],["ffffffff","00000002","00000000","00000000","fffffffe"],["ffffffff","00000003","00000000","00000000","fffffffd"],["ffffffff","00000005","00000000","00000000","fffffffb"],["ffffffff","00000007","00000000","00000000","fffffff9"],["ffffffff","0000001f","00000000","00000000","ffffffe1"],["ffffffff","00000020","00000000","00000000","ffffffe0"],["ffffffff","00000021","00000000","00000000","ffffffdf"],["ffffffff","0000003f","00000000","00000000","ffffffc1"],["ffffffff","00000040","00000000","00000000","ffffffc0"],["ffffffff","000000ff","00000000","00000000","ffffff01"],["ffffffff","00007fff","00000000","00000000","ffff8001"],["ffffffff","00008000","00000000","00000000","ffff8000"],["ffffffff","0000ffff","00000000","00000000","ffff0001"],["ffffffff","00010000","00000000","00000000","ffff0000"],["ffffffff","55555555","00000000","00000000","aaaaaaab"],["ffffffff","7ffffffe","00000000","00000000","80000002"],["ffffffff","7fffffff","00000000","00000000","80000001"],["ffffffff","80000000","00000000","00000000","80000000"],["ffffffff","80000001","00000000","00000000","7fffffff"],["ffffffff","aaaaaaaa","00000000","00000000","55555556"],["ffffffff","deadbeef","00000000","00000000","21524111"],["ffffffff","ffff0000","00000000","00000000","00010000"],["ffffffff","ffff8000","00000000","00000000","00008000"],["ffffffff","ffffffe0","00000000","00000000","00000020"],["ffffffff","ffffffe1","00000000","00000000","0000001f"],["ffffffff","fffffff9","00000000","00000000","00000007"],["ffffffff","fffffffd","00000000","00000000","00000003"],["ffffffff","fffffffe","00000000","00000000","00000002"],["ffffffff","ffffffff","00000000","00000000","00000001"]]} +{"op":"neg_i32","code":6,"wgsl":"-ia","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","ffffffff"],["00000002","00000000","00000000","00000000","fffffffe"],["00000003","00000000","00000000","00000000","fffffffd"],["00000005","00000000","00000000","00000000","fffffffb"],["00000007","00000000","00000000","00000000","fffffff9"],["0000001f","00000000","00000000","00000000","ffffffe1"],["00000020","00000000","00000000","00000000","ffffffe0"],["00000021","00000000","00000000","00000000","ffffffdf"],["0000003f","00000000","00000000","00000000","ffffffc1"],["00000040","00000000","00000000","00000000","ffffffc0"],["000000ff","00000000","00000000","00000000","ffffff01"],["00007fff","00000000","00000000","00000000","ffff8001"],["00008000","00000000","00000000","00000000","ffff8000"],["0000ffff","00000000","00000000","00000000","ffff0001"],["00010000","00000000","00000000","00000000","ffff0000"],["55555555","00000000","00000000","00000000","aaaaaaab"],["7ffffffe","00000000","00000000","00000000","80000002"],["7fffffff","00000000","00000000","00000000","80000001"],["80000000","00000000","00000000","00000000","80000000"],["80000001","00000000","00000000","00000000","7fffffff"],["aaaaaaaa","00000000","00000000","00000000","55555556"],["deadbeef","00000000","00000000","00000000","21524111"],["ffff0000","00000000","00000000","00000000","00010000"],["ffff8000","00000000","00000000","00000000","00008000"],["ffffffe0","00000000","00000000","00000000","00000020"],["ffffffe1","00000000","00000000","00000000","0000001f"],["fffffff9","00000000","00000000","00000000","00000007"],["fffffffd","00000000","00000000","00000000","00000003"],["fffffffe","00000000","00000000","00000000","00000002"],["ffffffff","00000000","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","ffffffff"],["ffffffff","00000000","00000000","00000000","00000001"],["00000002","00000000","00000000","00000000","fffffffe"],["00000003","00000000","00000000","00000000","fffffffd"],["fffffffe","00000000","00000000","00000000","00000002"],["00000004","00000000","00000000","00000000","fffffffc"],["00000007","00000000","00000000","00000000","fffffff9"],["fffffffc","00000000","00000000","00000000","00000004"],["00000008","00000000","00000000","00000000","fffffff8"],["0000000f","00000000","00000000","00000000","fffffff1"],["fffffff8","00000000","00000000","00000000","00000008"],["00000010","00000000","00000000","00000000","fffffff0"],["0000001f","00000000","00000000","00000000","ffffffe1"],["fffffff0","00000000","00000000","00000000","00000010"],["00000020","00000000","00000000","00000000","ffffffe0"],["0000003f","00000000","00000000","00000000","ffffffc1"],["ffffffe0","00000000","00000000","00000000","00000020"],["00000040","00000000","00000000","00000000","ffffffc0"],["0000007f","00000000","00000000","00000000","ffffff81"],["ffffffc0","00000000","00000000","00000000","00000040"],["00000080","00000000","00000000","00000000","ffffff80"],["000000ff","00000000","00000000","00000000","ffffff01"],["ffffff80","00000000","00000000","00000000","00000080"],["00000100","00000000","00000000","00000000","ffffff00"],["000001ff","00000000","00000000","00000000","fffffe01"],["ffffff00","00000000","00000000","00000000","00000100"],["00000200","00000000","00000000","00000000","fffffe00"],["000003ff","00000000","00000000","00000000","fffffc01"],["fffffe00","00000000","00000000","00000000","00000200"],["00000400","00000000","00000000","00000000","fffffc00"],["000007ff","00000000","00000000","00000000","fffff801"],["fffffc00","00000000","00000000","00000000","00000400"],["00000800","00000000","00000000","00000000","fffff800"],["00000fff","00000000","00000000","00000000","fffff001"],["fffff800","00000000","00000000","00000000","00000800"],["00001000","00000000","00000000","00000000","fffff000"],["00001fff","00000000","00000000","00000000","ffffe001"],["fffff000","00000000","00000000","00000000","00001000"],["00002000","00000000","00000000","00000000","ffffe000"],["00003fff","00000000","00000000","00000000","ffffc001"],["ffffe000","00000000","00000000","00000000","00002000"],["00004000","00000000","00000000","00000000","ffffc000"],["00007fff","00000000","00000000","00000000","ffff8001"],["ffffc000","00000000","00000000","00000000","00004000"],["00008000","00000000","00000000","00000000","ffff8000"],["0000ffff","00000000","00000000","00000000","ffff0001"],["ffff8000","00000000","00000000","00000000","00008000"],["00010000","00000000","00000000","00000000","ffff0000"],["0001ffff","00000000","00000000","00000000","fffe0001"],["ffff0000","00000000","00000000","00000000","00010000"],["00020000","00000000","00000000","00000000","fffe0000"],["0003ffff","00000000","00000000","00000000","fffc0001"],["fffe0000","00000000","00000000","00000000","00020000"],["00040000","00000000","00000000","00000000","fffc0000"],["0007ffff","00000000","00000000","00000000","fff80001"],["fffc0000","00000000","00000000","00000000","00040000"],["00080000","00000000","00000000","00000000","fff80000"],["000fffff","00000000","00000000","00000000","fff00001"],["fff80000","00000000","00000000","00000000","00080000"],["00100000","00000000","00000000","00000000","fff00000"],["001fffff","00000000","00000000","00000000","ffe00001"],["fff00000","00000000","00000000","00000000","00100000"],["00200000","00000000","00000000","00000000","ffe00000"],["003fffff","00000000","00000000","00000000","ffc00001"],["ffe00000","00000000","00000000","00000000","00200000"],["00400000","00000000","00000000","00000000","ffc00000"],["007fffff","00000000","00000000","00000000","ff800001"],["ffc00000","00000000","00000000","00000000","00400000"],["00800000","00000000","00000000","00000000","ff800000"],["00ffffff","00000000","00000000","00000000","ff000001"],["ff800000","00000000","00000000","00000000","00800000"],["01000000","00000000","00000000","00000000","ff000000"],["01ffffff","00000000","00000000","00000000","fe000001"],["ff000000","00000000","00000000","00000000","01000000"],["02000000","00000000","00000000","00000000","fe000000"],["03ffffff","00000000","00000000","00000000","fc000001"],["fe000000","00000000","00000000","00000000","02000000"],["04000000","00000000","00000000","00000000","fc000000"],["07ffffff","00000000","00000000","00000000","f8000001"],["fc000000","00000000","00000000","00000000","04000000"],["08000000","00000000","00000000","00000000","f8000000"],["0fffffff","00000000","00000000","00000000","f0000001"],["f8000000","00000000","00000000","00000000","08000000"],["10000000","00000000","00000000","00000000","f0000000"],["1fffffff","00000000","00000000","00000000","e0000001"],["f0000000","00000000","00000000","00000000","10000000"],["20000000","00000000","00000000","00000000","e0000000"],["3fffffff","00000000","00000000","00000000","c0000001"],["e0000000","00000000","00000000","00000000","20000000"],["40000000","00000000","00000000","00000000","c0000000"],["7fffffff","00000000","00000000","00000000","80000001"],["c0000000","00000000","00000000","00000000","40000000"],["80000000","00000000","00000000","00000000","80000000"],["ffffffff","00000000","00000000","00000000","00000001"],["80000000","00000000","00000000","00000000","80000000"]]} +{"op":"div_u32","code":7,"wgsl":"a / b","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000002","00000000","00000000","00000000"],["00000000","00000003","00000000","00000000","00000000"],["00000000","00000005","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","0000001f","00000000","00000000","00000000"],["00000000","00000020","00000000","00000000","00000000"],["00000000","00000021","00000000","00000000","00000000"],["00000000","0000003f","00000000","00000000","00000000"],["00000000","00000040","00000000","00000000","00000000"],["00000000","000000ff","00000000","00000000","00000000"],["00000000","00007fff","00000000","00000000","00000000"],["00000000","00008000","00000000","00000000","00000000"],["00000000","0000ffff","00000000","00000000","00000000"],["00000000","00010000","00000000","00000000","00000000"],["00000000","55555555","00000000","00000000","00000000"],["00000000","7ffffffe","00000000","00000000","00000000"],["00000000","7fffffff","00000000","00000000","00000000"],["00000000","80000000","00000000","00000000","00000000"],["00000000","80000001","00000000","00000000","00000000"],["00000000","aaaaaaaa","00000000","00000000","00000000"],["00000000","deadbeef","00000000","00000000","00000000"],["00000000","ffff0000","00000000","00000000","00000000"],["00000000","ffff8000","00000000","00000000","00000000"],["00000000","ffffffe0","00000000","00000000","00000000"],["00000000","ffffffe1","00000000","00000000","00000000"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","fffffffd","00000000","00000000","00000000"],["00000000","fffffffe","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000002","00000000","00000000","00000000"],["00000001","00000003","00000000","00000000","00000000"],["00000001","00000005","00000000","00000000","00000000"],["00000001","00000007","00000000","00000000","00000000"],["00000001","0000001f","00000000","00000000","00000000"],["00000001","00000020","00000000","00000000","00000000"],["00000001","00000021","00000000","00000000","00000000"],["00000001","0000003f","00000000","00000000","00000000"],["00000001","00000040","00000000","00000000","00000000"],["00000001","000000ff","00000000","00000000","00000000"],["00000001","00007fff","00000000","00000000","00000000"],["00000001","00008000","00000000","00000000","00000000"],["00000001","0000ffff","00000000","00000000","00000000"],["00000001","00010000","00000000","00000000","00000000"],["00000001","55555555","00000000","00000000","00000000"],["00000001","7ffffffe","00000000","00000000","00000000"],["00000001","7fffffff","00000000","00000000","00000000"],["00000001","80000000","00000000","00000000","00000000"],["00000001","80000001","00000000","00000000","00000000"],["00000001","aaaaaaaa","00000000","00000000","00000000"],["00000001","deadbeef","00000000","00000000","00000000"],["00000001","ffff0000","00000000","00000000","00000000"],["00000001","ffff8000","00000000","00000000","00000000"],["00000001","ffffffe0","00000000","00000000","00000000"],["00000001","ffffffe1","00000000","00000000","00000000"],["00000001","fffffff9","00000000","00000000","00000000"],["00000001","fffffffd","00000000","00000000","00000000"],["00000001","fffffffe","00000000","00000000","00000000"],["00000001","ffffffff","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","00000002"],["00000002","00000001","00000000","00000000","00000002"],["00000002","00000002","00000000","00000000","00000001"],["00000002","00000003","00000000","00000000","00000000"],["00000002","00000005","00000000","00000000","00000000"],["00000002","00000007","00000000","00000000","00000000"],["00000002","0000001f","00000000","00000000","00000000"],["00000002","00000020","00000000","00000000","00000000"],["00000002","00000021","00000000","00000000","00000000"],["00000002","0000003f","00000000","00000000","00000000"],["00000002","00000040","00000000","00000000","00000000"],["00000002","000000ff","00000000","00000000","00000000"],["00000002","00007fff","00000000","00000000","00000000"],["00000002","00008000","00000000","00000000","00000000"],["00000002","0000ffff","00000000","00000000","00000000"],["00000002","00010000","00000000","00000000","00000000"],["00000002","55555555","00000000","00000000","00000000"],["00000002","7ffffffe","00000000","00000000","00000000"],["00000002","7fffffff","00000000","00000000","00000000"],["00000002","80000000","00000000","00000000","00000000"],["00000002","80000001","00000000","00000000","00000000"],["00000002","aaaaaaaa","00000000","00000000","00000000"],["00000002","deadbeef","00000000","00000000","00000000"],["00000002","ffff0000","00000000","00000000","00000000"],["00000002","ffff8000","00000000","00000000","00000000"],["00000002","ffffffe0","00000000","00000000","00000000"],["00000002","ffffffe1","00000000","00000000","00000000"],["00000002","fffffff9","00000000","00000000","00000000"],["00000002","fffffffd","00000000","00000000","00000000"],["00000002","fffffffe","00000000","00000000","00000000"],["00000002","ffffffff","00000000","00000000","00000000"],["00000003","00000000","00000000","00000000","00000003"],["00000003","00000001","00000000","00000000","00000003"],["00000003","00000002","00000000","00000000","00000001"],["00000003","00000003","00000000","00000000","00000001"],["00000003","00000005","00000000","00000000","00000000"],["00000003","00000007","00000000","00000000","00000000"],["00000003","0000001f","00000000","00000000","00000000"],["00000003","00000020","00000000","00000000","00000000"],["00000003","00000021","00000000","00000000","00000000"],["00000003","0000003f","00000000","00000000","00000000"],["00000003","00000040","00000000","00000000","00000000"],["00000003","000000ff","00000000","00000000","00000000"],["00000003","00007fff","00000000","00000000","00000000"],["00000003","00008000","00000000","00000000","00000000"],["00000003","0000ffff","00000000","00000000","00000000"],["00000003","00010000","00000000","00000000","00000000"],["00000003","55555555","00000000","00000000","00000000"],["00000003","7ffffffe","00000000","00000000","00000000"],["00000003","7fffffff","00000000","00000000","00000000"],["00000003","80000000","00000000","00000000","00000000"],["00000003","80000001","00000000","00000000","00000000"],["00000003","aaaaaaaa","00000000","00000000","00000000"],["00000003","deadbeef","00000000","00000000","00000000"],["00000003","ffff0000","00000000","00000000","00000000"],["00000003","ffff8000","00000000","00000000","00000000"],["00000003","ffffffe0","00000000","00000000","00000000"],["00000003","ffffffe1","00000000","00000000","00000000"],["00000003","fffffff9","00000000","00000000","00000000"],["00000003","fffffffd","00000000","00000000","00000000"],["00000003","fffffffe","00000000","00000000","00000000"],["00000003","ffffffff","00000000","00000000","00000000"],["00000005","00000000","00000000","00000000","00000005"],["00000005","00000001","00000000","00000000","00000005"],["00000005","00000002","00000000","00000000","00000002"],["00000005","00000003","00000000","00000000","00000001"],["00000005","00000005","00000000","00000000","00000001"],["00000005","00000007","00000000","00000000","00000000"],["00000005","0000001f","00000000","00000000","00000000"],["00000005","00000020","00000000","00000000","00000000"],["00000005","00000021","00000000","00000000","00000000"],["00000005","0000003f","00000000","00000000","00000000"],["00000005","00000040","00000000","00000000","00000000"],["00000005","000000ff","00000000","00000000","00000000"],["00000005","00007fff","00000000","00000000","00000000"],["00000005","00008000","00000000","00000000","00000000"],["00000005","0000ffff","00000000","00000000","00000000"],["00000005","00010000","00000000","00000000","00000000"],["00000005","55555555","00000000","00000000","00000000"],["00000005","7ffffffe","00000000","00000000","00000000"],["00000005","7fffffff","00000000","00000000","00000000"],["00000005","80000000","00000000","00000000","00000000"],["00000005","80000001","00000000","00000000","00000000"],["00000005","aaaaaaaa","00000000","00000000","00000000"],["00000005","deadbeef","00000000","00000000","00000000"],["00000005","ffff0000","00000000","00000000","00000000"],["00000005","ffff8000","00000000","00000000","00000000"],["00000005","ffffffe0","00000000","00000000","00000000"],["00000005","ffffffe1","00000000","00000000","00000000"],["00000005","fffffff9","00000000","00000000","00000000"],["00000005","fffffffd","00000000","00000000","00000000"],["00000005","fffffffe","00000000","00000000","00000000"],["00000005","ffffffff","00000000","00000000","00000000"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","00000007"],["00000007","00000002","00000000","00000000","00000003"],["00000007","00000003","00000000","00000000","00000002"],["00000007","00000005","00000000","00000000","00000001"],["00000007","00000007","00000000","00000000","00000001"],["00000007","0000001f","00000000","00000000","00000000"],["00000007","00000020","00000000","00000000","00000000"],["00000007","00000021","00000000","00000000","00000000"],["00000007","0000003f","00000000","00000000","00000000"],["00000007","00000040","00000000","00000000","00000000"],["00000007","000000ff","00000000","00000000","00000000"],["00000007","00007fff","00000000","00000000","00000000"],["00000007","00008000","00000000","00000000","00000000"],["00000007","0000ffff","00000000","00000000","00000000"],["00000007","00010000","00000000","00000000","00000000"],["00000007","55555555","00000000","00000000","00000000"],["00000007","7ffffffe","00000000","00000000","00000000"],["00000007","7fffffff","00000000","00000000","00000000"],["00000007","80000000","00000000","00000000","00000000"],["00000007","80000001","00000000","00000000","00000000"],["00000007","aaaaaaaa","00000000","00000000","00000000"],["00000007","deadbeef","00000000","00000000","00000000"],["00000007","ffff0000","00000000","00000000","00000000"],["00000007","ffff8000","00000000","00000000","00000000"],["00000007","ffffffe0","00000000","00000000","00000000"],["00000007","ffffffe1","00000000","00000000","00000000"],["00000007","fffffff9","00000000","00000000","00000000"],["00000007","fffffffd","00000000","00000000","00000000"],["00000007","fffffffe","00000000","00000000","00000000"],["00000007","ffffffff","00000000","00000000","00000000"],["0000001f","00000000","00000000","00000000","0000001f"],["0000001f","00000001","00000000","00000000","0000001f"],["0000001f","00000002","00000000","00000000","0000000f"],["0000001f","00000003","00000000","00000000","0000000a"],["0000001f","00000005","00000000","00000000","00000006"],["0000001f","00000007","00000000","00000000","00000004"],["0000001f","0000001f","00000000","00000000","00000001"],["0000001f","00000020","00000000","00000000","00000000"],["0000001f","00000021","00000000","00000000","00000000"],["0000001f","0000003f","00000000","00000000","00000000"],["0000001f","00000040","00000000","00000000","00000000"],["0000001f","000000ff","00000000","00000000","00000000"],["0000001f","00007fff","00000000","00000000","00000000"],["0000001f","00008000","00000000","00000000","00000000"],["0000001f","0000ffff","00000000","00000000","00000000"],["0000001f","00010000","00000000","00000000","00000000"],["0000001f","55555555","00000000","00000000","00000000"],["0000001f","7ffffffe","00000000","00000000","00000000"],["0000001f","7fffffff","00000000","00000000","00000000"],["0000001f","80000000","00000000","00000000","00000000"],["0000001f","80000001","00000000","00000000","00000000"],["0000001f","aaaaaaaa","00000000","00000000","00000000"],["0000001f","deadbeef","00000000","00000000","00000000"],["0000001f","ffff0000","00000000","00000000","00000000"],["0000001f","ffff8000","00000000","00000000","00000000"],["0000001f","ffffffe0","00000000","00000000","00000000"],["0000001f","ffffffe1","00000000","00000000","00000000"],["0000001f","fffffff9","00000000","00000000","00000000"],["0000001f","fffffffd","00000000","00000000","00000000"],["0000001f","fffffffe","00000000","00000000","00000000"],["0000001f","ffffffff","00000000","00000000","00000000"],["00000020","00000000","00000000","00000000","00000020"],["00000020","00000001","00000000","00000000","00000020"],["00000020","00000002","00000000","00000000","00000010"],["00000020","00000003","00000000","00000000","0000000a"],["00000020","00000005","00000000","00000000","00000006"],["00000020","00000007","00000000","00000000","00000004"],["00000020","0000001f","00000000","00000000","00000001"],["00000020","00000020","00000000","00000000","00000001"],["00000020","00000021","00000000","00000000","00000000"],["00000020","0000003f","00000000","00000000","00000000"],["00000020","00000040","00000000","00000000","00000000"],["00000020","000000ff","00000000","00000000","00000000"],["00000020","00007fff","00000000","00000000","00000000"],["00000020","00008000","00000000","00000000","00000000"],["00000020","0000ffff","00000000","00000000","00000000"],["00000020","00010000","00000000","00000000","00000000"],["00000020","55555555","00000000","00000000","00000000"],["00000020","7ffffffe","00000000","00000000","00000000"],["00000020","7fffffff","00000000","00000000","00000000"],["00000020","80000000","00000000","00000000","00000000"],["00000020","80000001","00000000","00000000","00000000"],["00000020","aaaaaaaa","00000000","00000000","00000000"],["00000020","deadbeef","00000000","00000000","00000000"],["00000020","ffff0000","00000000","00000000","00000000"],["00000020","ffff8000","00000000","00000000","00000000"],["00000020","ffffffe0","00000000","00000000","00000000"],["00000020","ffffffe1","00000000","00000000","00000000"],["00000020","fffffff9","00000000","00000000","00000000"],["00000020","fffffffd","00000000","00000000","00000000"],["00000020","fffffffe","00000000","00000000","00000000"],["00000020","ffffffff","00000000","00000000","00000000"],["00000021","00000000","00000000","00000000","00000021"],["00000021","00000001","00000000","00000000","00000021"],["00000021","00000002","00000000","00000000","00000010"],["00000021","00000003","00000000","00000000","0000000b"],["00000021","00000005","00000000","00000000","00000006"],["00000021","00000007","00000000","00000000","00000004"],["00000021","0000001f","00000000","00000000","00000001"],["00000021","00000020","00000000","00000000","00000001"],["00000021","00000021","00000000","00000000","00000001"],["00000021","0000003f","00000000","00000000","00000000"],["00000021","00000040","00000000","00000000","00000000"],["00000021","000000ff","00000000","00000000","00000000"],["00000021","00007fff","00000000","00000000","00000000"],["00000021","00008000","00000000","00000000","00000000"],["00000021","0000ffff","00000000","00000000","00000000"],["00000021","00010000","00000000","00000000","00000000"],["00000021","55555555","00000000","00000000","00000000"],["00000021","7ffffffe","00000000","00000000","00000000"],["00000021","7fffffff","00000000","00000000","00000000"],["00000021","80000000","00000000","00000000","00000000"],["00000021","80000001","00000000","00000000","00000000"],["00000021","aaaaaaaa","00000000","00000000","00000000"],["00000021","deadbeef","00000000","00000000","00000000"],["00000021","ffff0000","00000000","00000000","00000000"],["00000021","ffff8000","00000000","00000000","00000000"],["00000021","ffffffe0","00000000","00000000","00000000"],["00000021","ffffffe1","00000000","00000000","00000000"],["00000021","fffffff9","00000000","00000000","00000000"],["00000021","fffffffd","00000000","00000000","00000000"],["00000021","fffffffe","00000000","00000000","00000000"],["00000021","ffffffff","00000000","00000000","00000000"],["0000003f","00000000","00000000","00000000","0000003f"],["0000003f","00000001","00000000","00000000","0000003f"],["0000003f","00000002","00000000","00000000","0000001f"],["0000003f","00000003","00000000","00000000","00000015"],["0000003f","00000005","00000000","00000000","0000000c"],["0000003f","00000007","00000000","00000000","00000009"],["0000003f","0000001f","00000000","00000000","00000002"],["0000003f","00000020","00000000","00000000","00000001"],["0000003f","00000021","00000000","00000000","00000001"],["0000003f","0000003f","00000000","00000000","00000001"],["0000003f","00000040","00000000","00000000","00000000"],["0000003f","000000ff","00000000","00000000","00000000"],["0000003f","00007fff","00000000","00000000","00000000"],["0000003f","00008000","00000000","00000000","00000000"],["0000003f","0000ffff","00000000","00000000","00000000"],["0000003f","00010000","00000000","00000000","00000000"],["0000003f","55555555","00000000","00000000","00000000"],["0000003f","7ffffffe","00000000","00000000","00000000"],["0000003f","7fffffff","00000000","00000000","00000000"],["0000003f","80000000","00000000","00000000","00000000"],["0000003f","80000001","00000000","00000000","00000000"],["0000003f","aaaaaaaa","00000000","00000000","00000000"],["0000003f","deadbeef","00000000","00000000","00000000"],["0000003f","ffff0000","00000000","00000000","00000000"],["0000003f","ffff8000","00000000","00000000","00000000"],["0000003f","ffffffe0","00000000","00000000","00000000"],["0000003f","ffffffe1","00000000","00000000","00000000"],["0000003f","fffffff9","00000000","00000000","00000000"],["0000003f","fffffffd","00000000","00000000","00000000"],["0000003f","fffffffe","00000000","00000000","00000000"],["0000003f","ffffffff","00000000","00000000","00000000"],["00000040","00000000","00000000","00000000","00000040"],["00000040","00000001","00000000","00000000","00000040"],["00000040","00000002","00000000","00000000","00000020"],["00000040","00000003","00000000","00000000","00000015"],["00000040","00000005","00000000","00000000","0000000c"],["00000040","00000007","00000000","00000000","00000009"],["00000040","0000001f","00000000","00000000","00000002"],["00000040","00000020","00000000","00000000","00000002"],["00000040","00000021","00000000","00000000","00000001"],["00000040","0000003f","00000000","00000000","00000001"],["00000040","00000040","00000000","00000000","00000001"],["00000040","000000ff","00000000","00000000","00000000"],["00000040","00007fff","00000000","00000000","00000000"],["00000040","00008000","00000000","00000000","00000000"],["00000040","0000ffff","00000000","00000000","00000000"],["00000040","00010000","00000000","00000000","00000000"],["00000040","55555555","00000000","00000000","00000000"],["00000040","7ffffffe","00000000","00000000","00000000"],["00000040","7fffffff","00000000","00000000","00000000"],["00000040","80000000","00000000","00000000","00000000"],["00000040","80000001","00000000","00000000","00000000"],["00000040","aaaaaaaa","00000000","00000000","00000000"],["00000040","deadbeef","00000000","00000000","00000000"],["00000040","ffff0000","00000000","00000000","00000000"],["00000040","ffff8000","00000000","00000000","00000000"],["00000040","ffffffe0","00000000","00000000","00000000"],["00000040","ffffffe1","00000000","00000000","00000000"],["00000040","fffffff9","00000000","00000000","00000000"],["00000040","fffffffd","00000000","00000000","00000000"],["00000040","fffffffe","00000000","00000000","00000000"],["00000040","ffffffff","00000000","00000000","00000000"],["000000ff","00000000","00000000","00000000","000000ff"],["000000ff","00000001","00000000","00000000","000000ff"],["000000ff","00000002","00000000","00000000","0000007f"],["000000ff","00000003","00000000","00000000","00000055"],["000000ff","00000005","00000000","00000000","00000033"],["000000ff","00000007","00000000","00000000","00000024"],["000000ff","0000001f","00000000","00000000","00000008"],["000000ff","00000020","00000000","00000000","00000007"],["000000ff","00000021","00000000","00000000","00000007"],["000000ff","0000003f","00000000","00000000","00000004"],["000000ff","00000040","00000000","00000000","00000003"],["000000ff","000000ff","00000000","00000000","00000001"],["000000ff","00007fff","00000000","00000000","00000000"],["000000ff","00008000","00000000","00000000","00000000"],["000000ff","0000ffff","00000000","00000000","00000000"],["000000ff","00010000","00000000","00000000","00000000"],["000000ff","55555555","00000000","00000000","00000000"],["000000ff","7ffffffe","00000000","00000000","00000000"],["000000ff","7fffffff","00000000","00000000","00000000"],["000000ff","80000000","00000000","00000000","00000000"],["000000ff","80000001","00000000","00000000","00000000"],["000000ff","aaaaaaaa","00000000","00000000","00000000"],["000000ff","deadbeef","00000000","00000000","00000000"],["000000ff","ffff0000","00000000","00000000","00000000"],["000000ff","ffff8000","00000000","00000000","00000000"],["000000ff","ffffffe0","00000000","00000000","00000000"],["000000ff","ffffffe1","00000000","00000000","00000000"],["000000ff","fffffff9","00000000","00000000","00000000"],["000000ff","fffffffd","00000000","00000000","00000000"],["000000ff","fffffffe","00000000","00000000","00000000"],["000000ff","ffffffff","00000000","00000000","00000000"],["00007fff","00000000","00000000","00000000","00007fff"],["00007fff","00000001","00000000","00000000","00007fff"],["00007fff","00000002","00000000","00000000","00003fff"],["00007fff","00000003","00000000","00000000","00002aaa"],["00007fff","00000005","00000000","00000000","00001999"],["00007fff","00000007","00000000","00000000","00001249"],["00007fff","0000001f","00000000","00000000","00000421"],["00007fff","00000020","00000000","00000000","000003ff"],["00007fff","00000021","00000000","00000000","000003e0"],["00007fff","0000003f","00000000","00000000","00000208"],["00007fff","00000040","00000000","00000000","000001ff"],["00007fff","000000ff","00000000","00000000","00000080"],["00007fff","00007fff","00000000","00000000","00000001"],["00007fff","00008000","00000000","00000000","00000000"],["00007fff","0000ffff","00000000","00000000","00000000"],["00007fff","00010000","00000000","00000000","00000000"],["00007fff","55555555","00000000","00000000","00000000"],["00007fff","7ffffffe","00000000","00000000","00000000"],["00007fff","7fffffff","00000000","00000000","00000000"],["00007fff","80000000","00000000","00000000","00000000"],["00007fff","80000001","00000000","00000000","00000000"],["00007fff","aaaaaaaa","00000000","00000000","00000000"],["00007fff","deadbeef","00000000","00000000","00000000"],["00007fff","ffff0000","00000000","00000000","00000000"],["00007fff","ffff8000","00000000","00000000","00000000"],["00007fff","ffffffe0","00000000","00000000","00000000"],["00007fff","ffffffe1","00000000","00000000","00000000"],["00007fff","fffffff9","00000000","00000000","00000000"],["00007fff","fffffffd","00000000","00000000","00000000"],["00007fff","fffffffe","00000000","00000000","00000000"],["00007fff","ffffffff","00000000","00000000","00000000"],["00008000","00000000","00000000","00000000","00008000"],["00008000","00000001","00000000","00000000","00008000"],["00008000","00000002","00000000","00000000","00004000"],["00008000","00000003","00000000","00000000","00002aaa"],["00008000","00000005","00000000","00000000","00001999"],["00008000","00000007","00000000","00000000","00001249"],["00008000","0000001f","00000000","00000000","00000421"],["00008000","00000020","00000000","00000000","00000400"],["00008000","00000021","00000000","00000000","000003e0"],["00008000","0000003f","00000000","00000000","00000208"],["00008000","00000040","00000000","00000000","00000200"],["00008000","000000ff","00000000","00000000","00000080"],["00008000","00007fff","00000000","00000000","00000001"],["00008000","00008000","00000000","00000000","00000001"],["00008000","0000ffff","00000000","00000000","00000000"],["00008000","00010000","00000000","00000000","00000000"],["00008000","55555555","00000000","00000000","00000000"],["00008000","7ffffffe","00000000","00000000","00000000"],["00008000","7fffffff","00000000","00000000","00000000"],["00008000","80000000","00000000","00000000","00000000"],["00008000","80000001","00000000","00000000","00000000"],["00008000","aaaaaaaa","00000000","00000000","00000000"],["00008000","deadbeef","00000000","00000000","00000000"],["00008000","ffff0000","00000000","00000000","00000000"],["00008000","ffff8000","00000000","00000000","00000000"],["00008000","ffffffe0","00000000","00000000","00000000"],["00008000","ffffffe1","00000000","00000000","00000000"],["00008000","fffffff9","00000000","00000000","00000000"],["00008000","fffffffd","00000000","00000000","00000000"],["00008000","fffffffe","00000000","00000000","00000000"],["00008000","ffffffff","00000000","00000000","00000000"],["0000ffff","00000000","00000000","00000000","0000ffff"],["0000ffff","00000001","00000000","00000000","0000ffff"],["0000ffff","00000002","00000000","00000000","00007fff"],["0000ffff","00000003","00000000","00000000","00005555"],["0000ffff","00000005","00000000","00000000","00003333"],["0000ffff","00000007","00000000","00000000","00002492"],["0000ffff","0000001f","00000000","00000000","00000842"],["0000ffff","00000020","00000000","00000000","000007ff"],["0000ffff","00000021","00000000","00000000","000007c1"],["0000ffff","0000003f","00000000","00000000","00000410"],["0000ffff","00000040","00000000","00000000","000003ff"],["0000ffff","000000ff","00000000","00000000","00000101"],["0000ffff","00007fff","00000000","00000000","00000002"],["0000ffff","00008000","00000000","00000000","00000001"],["0000ffff","0000ffff","00000000","00000000","00000001"],["0000ffff","00010000","00000000","00000000","00000000"],["0000ffff","55555555","00000000","00000000","00000000"],["0000ffff","7ffffffe","00000000","00000000","00000000"],["0000ffff","7fffffff","00000000","00000000","00000000"],["0000ffff","80000000","00000000","00000000","00000000"],["0000ffff","80000001","00000000","00000000","00000000"],["0000ffff","aaaaaaaa","00000000","00000000","00000000"],["0000ffff","deadbeef","00000000","00000000","00000000"],["0000ffff","ffff0000","00000000","00000000","00000000"],["0000ffff","ffff8000","00000000","00000000","00000000"],["0000ffff","ffffffe0","00000000","00000000","00000000"],["0000ffff","ffffffe1","00000000","00000000","00000000"],["0000ffff","fffffff9","00000000","00000000","00000000"],["0000ffff","fffffffd","00000000","00000000","00000000"],["0000ffff","fffffffe","00000000","00000000","00000000"],["0000ffff","ffffffff","00000000","00000000","00000000"],["00010000","00000000","00000000","00000000","00010000"],["00010000","00000001","00000000","00000000","00010000"],["00010000","00000002","00000000","00000000","00008000"],["00010000","00000003","00000000","00000000","00005555"],["00010000","00000005","00000000","00000000","00003333"],["00010000","00000007","00000000","00000000","00002492"],["00010000","0000001f","00000000","00000000","00000842"],["00010000","00000020","00000000","00000000","00000800"],["00010000","00000021","00000000","00000000","000007c1"],["00010000","0000003f","00000000","00000000","00000410"],["00010000","00000040","00000000","00000000","00000400"],["00010000","000000ff","00000000","00000000","00000101"],["00010000","00007fff","00000000","00000000","00000002"],["00010000","00008000","00000000","00000000","00000002"],["00010000","0000ffff","00000000","00000000","00000001"],["00010000","00010000","00000000","00000000","00000001"],["00010000","55555555","00000000","00000000","00000000"],["00010000","7ffffffe","00000000","00000000","00000000"],["00010000","7fffffff","00000000","00000000","00000000"],["00010000","80000000","00000000","00000000","00000000"],["00010000","80000001","00000000","00000000","00000000"],["00010000","aaaaaaaa","00000000","00000000","00000000"],["00010000","deadbeef","00000000","00000000","00000000"],["00010000","ffff0000","00000000","00000000","00000000"],["00010000","ffff8000","00000000","00000000","00000000"],["00010000","ffffffe0","00000000","00000000","00000000"],["00010000","ffffffe1","00000000","00000000","00000000"],["00010000","fffffff9","00000000","00000000","00000000"],["00010000","fffffffd","00000000","00000000","00000000"],["00010000","fffffffe","00000000","00000000","00000000"],["00010000","ffffffff","00000000","00000000","00000000"],["55555555","00000000","00000000","00000000","55555555"],["55555555","00000001","00000000","00000000","55555555"],["55555555","00000002","00000000","00000000","2aaaaaaa"],["55555555","00000003","00000000","00000000","1c71c71c"],["55555555","00000005","00000000","00000000","11111111"],["55555555","00000007","00000000","00000000","0c30c30c"],["55555555","0000001f","00000000","00000000","02c0b02c"],["55555555","00000020","00000000","00000000","02aaaaaa"],["55555555","00000021","00000000","00000000","0295fad4"],["55555555","0000003f","00000000","00000000","015ac056"],["55555555","00000040","00000000","00000000","01555555"],["55555555","000000ff","00000000","00000000","0055ab00"],["55555555","00007fff","00000000","00000000","0000aaac"],["55555555","00008000","00000000","00000000","0000aaaa"],["55555555","0000ffff","00000000","00000000","00005555"],["55555555","00010000","00000000","00000000","00005555"],["55555555","55555555","00000000","00000000","00000001"],["55555555","7ffffffe","00000000","00000000","00000000"],["55555555","7fffffff","00000000","00000000","00000000"],["55555555","80000000","00000000","00000000","00000000"],["55555555","80000001","00000000","00000000","00000000"],["55555555","aaaaaaaa","00000000","00000000","00000000"],["55555555","deadbeef","00000000","00000000","00000000"],["55555555","ffff0000","00000000","00000000","00000000"],["55555555","ffff8000","00000000","00000000","00000000"],["55555555","ffffffe0","00000000","00000000","00000000"],["55555555","ffffffe1","00000000","00000000","00000000"],["55555555","fffffff9","00000000","00000000","00000000"],["55555555","fffffffd","00000000","00000000","00000000"],["55555555","fffffffe","00000000","00000000","00000000"],["55555555","ffffffff","00000000","00000000","00000000"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7ffffffe","00000001","00000000","00000000","7ffffffe"],["7ffffffe","00000002","00000000","00000000","3fffffff"],["7ffffffe","00000003","00000000","00000000","2aaaaaaa"],["7ffffffe","00000005","00000000","00000000","19999999"],["7ffffffe","00000007","00000000","00000000","12492492"],["7ffffffe","0000001f","00000000","00000000","04210842"],["7ffffffe","00000020","00000000","00000000","03ffffff"],["7ffffffe","00000021","00000000","00000000","03e0f83e"],["7ffffffe","0000003f","00000000","00000000","02082082"],["7ffffffe","00000040","00000000","00000000","01ffffff"],["7ffffffe","000000ff","00000000","00000000","00808080"],["7ffffffe","00007fff","00000000","00000000","00010002"],["7ffffffe","00008000","00000000","00000000","0000ffff"],["7ffffffe","0000ffff","00000000","00000000","00008000"],["7ffffffe","00010000","00000000","00000000","00007fff"],["7ffffffe","55555555","00000000","00000000","00000001"],["7ffffffe","7ffffffe","00000000","00000000","00000001"],["7ffffffe","7fffffff","00000000","00000000","00000000"],["7ffffffe","80000000","00000000","00000000","00000000"],["7ffffffe","80000001","00000000","00000000","00000000"],["7ffffffe","aaaaaaaa","00000000","00000000","00000000"],["7ffffffe","deadbeef","00000000","00000000","00000000"],["7ffffffe","ffff0000","00000000","00000000","00000000"],["7ffffffe","ffff8000","00000000","00000000","00000000"],["7ffffffe","ffffffe0","00000000","00000000","00000000"],["7ffffffe","ffffffe1","00000000","00000000","00000000"],["7ffffffe","fffffff9","00000000","00000000","00000000"],["7ffffffe","fffffffd","00000000","00000000","00000000"],["7ffffffe","fffffffe","00000000","00000000","00000000"],["7ffffffe","ffffffff","00000000","00000000","00000000"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","7fffffff"],["7fffffff","00000002","00000000","00000000","3fffffff"],["7fffffff","00000003","00000000","00000000","2aaaaaaa"],["7fffffff","00000005","00000000","00000000","19999999"],["7fffffff","00000007","00000000","00000000","12492492"],["7fffffff","0000001f","00000000","00000000","04210842"],["7fffffff","00000020","00000000","00000000","03ffffff"],["7fffffff","00000021","00000000","00000000","03e0f83e"],["7fffffff","0000003f","00000000","00000000","02082082"],["7fffffff","00000040","00000000","00000000","01ffffff"],["7fffffff","000000ff","00000000","00000000","00808080"],["7fffffff","00007fff","00000000","00000000","00010002"],["7fffffff","00008000","00000000","00000000","0000ffff"],["7fffffff","0000ffff","00000000","00000000","00008000"],["7fffffff","00010000","00000000","00000000","00007fff"],["7fffffff","55555555","00000000","00000000","00000001"],["7fffffff","7ffffffe","00000000","00000000","00000001"],["7fffffff","7fffffff","00000000","00000000","00000001"],["7fffffff","80000000","00000000","00000000","00000000"],["7fffffff","80000001","00000000","00000000","00000000"],["7fffffff","aaaaaaaa","00000000","00000000","00000000"],["7fffffff","deadbeef","00000000","00000000","00000000"],["7fffffff","ffff0000","00000000","00000000","00000000"],["7fffffff","ffff8000","00000000","00000000","00000000"],["7fffffff","ffffffe0","00000000","00000000","00000000"],["7fffffff","ffffffe1","00000000","00000000","00000000"],["7fffffff","fffffff9","00000000","00000000","00000000"],["7fffffff","fffffffd","00000000","00000000","00000000"],["7fffffff","fffffffe","00000000","00000000","00000000"],["7fffffff","ffffffff","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","80000000"],["80000000","00000002","00000000","00000000","40000000"],["80000000","00000003","00000000","00000000","2aaaaaaa"],["80000000","00000005","00000000","00000000","19999999"],["80000000","00000007","00000000","00000000","12492492"],["80000000","0000001f","00000000","00000000","04210842"],["80000000","00000020","00000000","00000000","04000000"],["80000000","00000021","00000000","00000000","03e0f83e"],["80000000","0000003f","00000000","00000000","02082082"],["80000000","00000040","00000000","00000000","02000000"],["80000000","000000ff","00000000","00000000","00808080"],["80000000","00007fff","00000000","00000000","00010002"],["80000000","00008000","00000000","00000000","00010000"],["80000000","0000ffff","00000000","00000000","00008000"],["80000000","00010000","00000000","00000000","00008000"],["80000000","55555555","00000000","00000000","00000001"],["80000000","7ffffffe","00000000","00000000","00000001"],["80000000","7fffffff","00000000","00000000","00000001"],["80000000","80000000","00000000","00000000","00000001"],["80000000","80000001","00000000","00000000","00000000"],["80000000","aaaaaaaa","00000000","00000000","00000000"],["80000000","deadbeef","00000000","00000000","00000000"],["80000000","ffff0000","00000000","00000000","00000000"],["80000000","ffff8000","00000000","00000000","00000000"],["80000000","ffffffe0","00000000","00000000","00000000"],["80000000","ffffffe1","00000000","00000000","00000000"],["80000000","fffffff9","00000000","00000000","00000000"],["80000000","fffffffd","00000000","00000000","00000000"],["80000000","fffffffe","00000000","00000000","00000000"],["80000000","ffffffff","00000000","00000000","00000000"],["80000001","00000000","00000000","00000000","80000001"],["80000001","00000001","00000000","00000000","80000001"],["80000001","00000002","00000000","00000000","40000000"],["80000001","00000003","00000000","00000000","2aaaaaab"],["80000001","00000005","00000000","00000000","19999999"],["80000001","00000007","00000000","00000000","12492492"],["80000001","0000001f","00000000","00000000","04210842"],["80000001","00000020","00000000","00000000","04000000"],["80000001","00000021","00000000","00000000","03e0f83e"],["80000001","0000003f","00000000","00000000","02082082"],["80000001","00000040","00000000","00000000","02000000"],["80000001","000000ff","00000000","00000000","00808080"],["80000001","00007fff","00000000","00000000","00010002"],["80000001","00008000","00000000","00000000","00010000"],["80000001","0000ffff","00000000","00000000","00008000"],["80000001","00010000","00000000","00000000","00008000"],["80000001","55555555","00000000","00000000","00000001"],["80000001","7ffffffe","00000000","00000000","00000001"],["80000001","7fffffff","00000000","00000000","00000001"],["80000001","80000000","00000000","00000000","00000001"],["80000001","80000001","00000000","00000000","00000001"],["80000001","aaaaaaaa","00000000","00000000","00000000"],["80000001","deadbeef","00000000","00000000","00000000"],["80000001","ffff0000","00000000","00000000","00000000"],["80000001","ffff8000","00000000","00000000","00000000"],["80000001","ffffffe0","00000000","00000000","00000000"],["80000001","ffffffe1","00000000","00000000","00000000"],["80000001","fffffff9","00000000","00000000","00000000"],["80000001","fffffffd","00000000","00000000","00000000"],["80000001","fffffffe","00000000","00000000","00000000"],["80000001","ffffffff","00000000","00000000","00000000"],["aaaaaaaa","00000000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000001","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000002","00000000","00000000","55555555"],["aaaaaaaa","00000003","00000000","00000000","38e38e38"],["aaaaaaaa","00000005","00000000","00000000","22222222"],["aaaaaaaa","00000007","00000000","00000000","18618618"],["aaaaaaaa","0000001f","00000000","00000000","05816058"],["aaaaaaaa","00000020","00000000","00000000","05555555"],["aaaaaaaa","00000021","00000000","00000000","052bf5a8"],["aaaaaaaa","0000003f","00000000","00000000","02b580ad"],["aaaaaaaa","00000040","00000000","00000000","02aaaaaa"],["aaaaaaaa","000000ff","00000000","00000000","00ab5600"],["aaaaaaaa","00007fff","00000000","00000000","00015558"],["aaaaaaaa","00008000","00000000","00000000","00015555"],["aaaaaaaa","0000ffff","00000000","00000000","0000aaab"],["aaaaaaaa","00010000","00000000","00000000","0000aaaa"],["aaaaaaaa","55555555","00000000","00000000","00000002"],["aaaaaaaa","7ffffffe","00000000","00000000","00000001"],["aaaaaaaa","7fffffff","00000000","00000000","00000001"],["aaaaaaaa","80000000","00000000","00000000","00000001"],["aaaaaaaa","80000001","00000000","00000000","00000001"],["aaaaaaaa","aaaaaaaa","00000000","00000000","00000001"],["aaaaaaaa","deadbeef","00000000","00000000","00000000"],["aaaaaaaa","ffff0000","00000000","00000000","00000000"],["aaaaaaaa","ffff8000","00000000","00000000","00000000"],["aaaaaaaa","ffffffe0","00000000","00000000","00000000"],["aaaaaaaa","ffffffe1","00000000","00000000","00000000"],["aaaaaaaa","fffffff9","00000000","00000000","00000000"],["aaaaaaaa","fffffffd","00000000","00000000","00000000"],["aaaaaaaa","fffffffe","00000000","00000000","00000000"],["aaaaaaaa","ffffffff","00000000","00000000","00000000"],["deadbeef","00000000","00000000","00000000","deadbeef"],["deadbeef","00000001","00000000","00000000","deadbeef"],["deadbeef","00000002","00000000","00000000","6f56df77"],["deadbeef","00000003","00000000","00000000","4a39ea4f"],["deadbeef","00000005","00000000","00000000","2c89262f"],["deadbeef","00000007","00000000","00000000","1fcfad8f"],["deadbeef","0000001f","00000000","00000000","072ee520"],["deadbeef","00000020","00000000","00000000","06f56df7"],["deadbeef","00000021","00000000","00000000","06bf7264"],["deadbeef","0000003f","00000000","00000000","0388da65"],["deadbeef","00000040","00000000","00000000","037ab6fb"],["deadbeef","000000ff","00000000","00000000","00df8d4c"],["deadbeef","00007fff","00000000","00000000","0001bd5e"],["deadbeef","00008000","00000000","00000000","0001bd5b"],["deadbeef","0000ffff","00000000","00000000","0000deae"],["deadbeef","00010000","00000000","00000000","0000dead"],["deadbeef","55555555","00000000","00000000","00000002"],["deadbeef","7ffffffe","00000000","00000000","00000001"],["deadbeef","7fffffff","00000000","00000000","00000001"],["deadbeef","80000000","00000000","00000000","00000001"],["deadbeef","80000001","00000000","00000000","00000001"],["deadbeef","aaaaaaaa","00000000","00000000","00000001"],["deadbeef","deadbeef","00000000","00000000","00000001"],["deadbeef","ffff0000","00000000","00000000","00000000"],["deadbeef","ffff8000","00000000","00000000","00000000"],["deadbeef","ffffffe0","00000000","00000000","00000000"],["deadbeef","ffffffe1","00000000","00000000","00000000"],["deadbeef","fffffff9","00000000","00000000","00000000"],["deadbeef","fffffffd","00000000","00000000","00000000"],["deadbeef","fffffffe","00000000","00000000","00000000"],["deadbeef","ffffffff","00000000","00000000","00000000"],["ffff0000","00000000","00000000","00000000","ffff0000"],["ffff0000","00000001","00000000","00000000","ffff0000"],["ffff0000","00000002","00000000","00000000","7fff8000"],["ffff0000","00000003","00000000","00000000","55550000"],["ffff0000","00000005","00000000","00000000","33330000"],["ffff0000","00000007","00000000","00000000","24922492"],["ffff0000","0000001f","00000000","00000000","08420842"],["ffff0000","00000020","00000000","00000000","07fff800"],["ffff0000","00000021","00000000","00000000","07c1e8ba"],["ffff0000","0000003f","00000000","00000000","04103cf3"],["ffff0000","00000040","00000000","00000000","03fffc00"],["ffff0000","000000ff","00000000","00000000","01010000"],["ffff0000","00007fff","00000000","00000000","00020002"],["ffff0000","00008000","00000000","00000000","0001fffe"],["ffff0000","0000ffff","00000000","00000000","00010000"],["ffff0000","00010000","00000000","00000000","0000ffff"],["ffff0000","55555555","00000000","00000000","00000002"],["ffff0000","7ffffffe","00000000","00000000","00000001"],["ffff0000","7fffffff","00000000","00000000","00000001"],["ffff0000","80000000","00000000","00000000","00000001"],["ffff0000","80000001","00000000","00000000","00000001"],["ffff0000","aaaaaaaa","00000000","00000000","00000001"],["ffff0000","deadbeef","00000000","00000000","00000001"],["ffff0000","ffff0000","00000000","00000000","00000001"],["ffff0000","ffff8000","00000000","00000000","00000000"],["ffff0000","ffffffe0","00000000","00000000","00000000"],["ffff0000","ffffffe1","00000000","00000000","00000000"],["ffff0000","fffffff9","00000000","00000000","00000000"],["ffff0000","fffffffd","00000000","00000000","00000000"],["ffff0000","fffffffe","00000000","00000000","00000000"],["ffff0000","ffffffff","00000000","00000000","00000000"],["ffff8000","00000000","00000000","00000000","ffff8000"],["ffff8000","00000001","00000000","00000000","ffff8000"],["ffff8000","00000002","00000000","00000000","7fffc000"],["ffff8000","00000003","00000000","00000000","55552aaa"],["ffff8000","00000005","00000000","00000000","33331999"],["ffff8000","00000007","00000000","00000000","249236db"],["ffff8000","0000001f","00000000","00000000","08420c63"],["ffff8000","00000020","00000000","00000000","07fffc00"],["ffff8000","00000021","00000000","00000000","07c1ec9b"],["ffff8000","0000003f","00000000","00000000","04103efb"],["ffff8000","00000040","00000000","00000000","03fffe00"],["ffff8000","000000ff","00000000","00000000","01010080"],["ffff8000","00007fff","00000000","00000000","00020003"],["ffff8000","00008000","00000000","00000000","0001ffff"],["ffff8000","0000ffff","00000000","00000000","00010000"],["ffff8000","00010000","00000000","00000000","0000ffff"],["ffff8000","55555555","00000000","00000000","00000002"],["ffff8000","7ffffffe","00000000","00000000","00000001"],["ffff8000","7fffffff","00000000","00000000","00000001"],["ffff8000","80000000","00000000","00000000","00000001"],["ffff8000","80000001","00000000","00000000","00000001"],["ffff8000","aaaaaaaa","00000000","00000000","00000001"],["ffff8000","deadbeef","00000000","00000000","00000001"],["ffff8000","ffff0000","00000000","00000000","00000001"],["ffff8000","ffff8000","00000000","00000000","00000001"],["ffff8000","ffffffe0","00000000","00000000","00000000"],["ffff8000","ffffffe1","00000000","00000000","00000000"],["ffff8000","fffffff9","00000000","00000000","00000000"],["ffff8000","fffffffd","00000000","00000000","00000000"],["ffff8000","fffffffe","00000000","00000000","00000000"],["ffff8000","ffffffff","00000000","00000000","00000000"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["ffffffe0","00000001","00000000","00000000","ffffffe0"],["ffffffe0","00000002","00000000","00000000","7ffffff0"],["ffffffe0","00000003","00000000","00000000","5555554a"],["ffffffe0","00000005","00000000","00000000","3333332c"],["ffffffe0","00000007","00000000","00000000","24924920"],["ffffffe0","0000001f","00000000","00000000","08421083"],["ffffffe0","00000020","00000000","00000000","07ffffff"],["ffffffe0","00000021","00000000","00000000","07c1f07b"],["ffffffe0","0000003f","00000000","00000000","04104103"],["ffffffe0","00000040","00000000","00000000","03ffffff"],["ffffffe0","000000ff","00000000","00000000","01010100"],["ffffffe0","00007fff","00000000","00000000","00020003"],["ffffffe0","00008000","00000000","00000000","0001ffff"],["ffffffe0","0000ffff","00000000","00000000","00010000"],["ffffffe0","00010000","00000000","00000000","0000ffff"],["ffffffe0","55555555","00000000","00000000","00000002"],["ffffffe0","7ffffffe","00000000","00000000","00000001"],["ffffffe0","7fffffff","00000000","00000000","00000001"],["ffffffe0","80000000","00000000","00000000","00000001"],["ffffffe0","80000001","00000000","00000000","00000001"],["ffffffe0","aaaaaaaa","00000000","00000000","00000001"],["ffffffe0","deadbeef","00000000","00000000","00000001"],["ffffffe0","ffff0000","00000000","00000000","00000001"],["ffffffe0","ffff8000","00000000","00000000","00000001"],["ffffffe0","ffffffe0","00000000","00000000","00000001"],["ffffffe0","ffffffe1","00000000","00000000","00000000"],["ffffffe0","fffffff9","00000000","00000000","00000000"],["ffffffe0","fffffffd","00000000","00000000","00000000"],["ffffffe0","fffffffe","00000000","00000000","00000000"],["ffffffe0","ffffffff","00000000","00000000","00000000"],["ffffffe1","00000000","00000000","00000000","ffffffe1"],["ffffffe1","00000001","00000000","00000000","ffffffe1"],["ffffffe1","00000002","00000000","00000000","7ffffff0"],["ffffffe1","00000003","00000000","00000000","5555554b"],["ffffffe1","00000005","00000000","00000000","3333332d"],["ffffffe1","00000007","00000000","00000000","24924920"],["ffffffe1","0000001f","00000000","00000000","08421083"],["ffffffe1","00000020","00000000","00000000","07ffffff"],["ffffffe1","00000021","00000000","00000000","07c1f07b"],["ffffffe1","0000003f","00000000","00000000","04104103"],["ffffffe1","00000040","00000000","00000000","03ffffff"],["ffffffe1","000000ff","00000000","00000000","01010100"],["ffffffe1","00007fff","00000000","00000000","00020003"],["ffffffe1","00008000","00000000","00000000","0001ffff"],["ffffffe1","0000ffff","00000000","00000000","00010000"],["ffffffe1","00010000","00000000","00000000","0000ffff"],["ffffffe1","55555555","00000000","00000000","00000002"],["ffffffe1","7ffffffe","00000000","00000000","00000001"],["ffffffe1","7fffffff","00000000","00000000","00000001"],["ffffffe1","80000000","00000000","00000000","00000001"],["ffffffe1","80000001","00000000","00000000","00000001"],["ffffffe1","aaaaaaaa","00000000","00000000","00000001"],["ffffffe1","deadbeef","00000000","00000000","00000001"],["ffffffe1","ffff0000","00000000","00000000","00000001"],["ffffffe1","ffff8000","00000000","00000000","00000001"],["ffffffe1","ffffffe0","00000000","00000000","00000001"],["ffffffe1","ffffffe1","00000000","00000000","00000001"],["ffffffe1","fffffff9","00000000","00000000","00000000"],["ffffffe1","fffffffd","00000000","00000000","00000000"],["ffffffe1","fffffffe","00000000","00000000","00000000"],["ffffffe1","ffffffff","00000000","00000000","00000000"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffff9"],["fffffff9","00000002","00000000","00000000","7ffffffc"],["fffffff9","00000003","00000000","00000000","55555553"],["fffffff9","00000005","00000000","00000000","33333331"],["fffffff9","00000007","00000000","00000000","24924923"],["fffffff9","0000001f","00000000","00000000","08421083"],["fffffff9","00000020","00000000","00000000","07ffffff"],["fffffff9","00000021","00000000","00000000","07c1f07b"],["fffffff9","0000003f","00000000","00000000","04104103"],["fffffff9","00000040","00000000","00000000","03ffffff"],["fffffff9","000000ff","00000000","00000000","01010100"],["fffffff9","00007fff","00000000","00000000","00020003"],["fffffff9","00008000","00000000","00000000","0001ffff"],["fffffff9","0000ffff","00000000","00000000","00010000"],["fffffff9","00010000","00000000","00000000","0000ffff"],["fffffff9","55555555","00000000","00000000","00000002"],["fffffff9","7ffffffe","00000000","00000000","00000001"],["fffffff9","7fffffff","00000000","00000000","00000001"],["fffffff9","80000000","00000000","00000000","00000001"],["fffffff9","80000001","00000000","00000000","00000001"],["fffffff9","aaaaaaaa","00000000","00000000","00000001"],["fffffff9","deadbeef","00000000","00000000","00000001"],["fffffff9","ffff0000","00000000","00000000","00000001"],["fffffff9","ffff8000","00000000","00000000","00000001"],["fffffff9","ffffffe0","00000000","00000000","00000001"],["fffffff9","ffffffe1","00000000","00000000","00000001"],["fffffff9","fffffff9","00000000","00000000","00000001"],["fffffff9","fffffffd","00000000","00000000","00000000"],["fffffff9","fffffffe","00000000","00000000","00000000"],["fffffff9","ffffffff","00000000","00000000","00000000"],["fffffffd","00000000","00000000","00000000","fffffffd"],["fffffffd","00000001","00000000","00000000","fffffffd"],["fffffffd","00000002","00000000","00000000","7ffffffe"],["fffffffd","00000003","00000000","00000000","55555554"],["fffffffd","00000005","00000000","00000000","33333332"],["fffffffd","00000007","00000000","00000000","24924924"],["fffffffd","0000001f","00000000","00000000","08421084"],["fffffffd","00000020","00000000","00000000","07ffffff"],["fffffffd","00000021","00000000","00000000","07c1f07c"],["fffffffd","0000003f","00000000","00000000","04104104"],["fffffffd","00000040","00000000","00000000","03ffffff"],["fffffffd","000000ff","00000000","00000000","01010100"],["fffffffd","00007fff","00000000","00000000","00020004"],["fffffffd","00008000","00000000","00000000","0001ffff"],["fffffffd","0000ffff","00000000","00000000","00010000"],["fffffffd","00010000","00000000","00000000","0000ffff"],["fffffffd","55555555","00000000","00000000","00000002"],["fffffffd","7ffffffe","00000000","00000000","00000002"],["fffffffd","7fffffff","00000000","00000000","00000001"],["fffffffd","80000000","00000000","00000000","00000001"],["fffffffd","80000001","00000000","00000000","00000001"],["fffffffd","aaaaaaaa","00000000","00000000","00000001"],["fffffffd","deadbeef","00000000","00000000","00000001"],["fffffffd","ffff0000","00000000","00000000","00000001"],["fffffffd","ffff8000","00000000","00000000","00000001"],["fffffffd","ffffffe0","00000000","00000000","00000001"],["fffffffd","ffffffe1","00000000","00000000","00000001"],["fffffffd","fffffff9","00000000","00000000","00000001"],["fffffffd","fffffffd","00000000","00000000","00000001"],["fffffffd","fffffffe","00000000","00000000","00000000"],["fffffffd","ffffffff","00000000","00000000","00000000"],["fffffffe","00000000","00000000","00000000","fffffffe"],["fffffffe","00000001","00000000","00000000","fffffffe"],["fffffffe","00000002","00000000","00000000","7fffffff"],["fffffffe","00000003","00000000","00000000","55555554"],["fffffffe","00000005","00000000","00000000","33333332"],["fffffffe","00000007","00000000","00000000","24924924"],["fffffffe","0000001f","00000000","00000000","08421084"],["fffffffe","00000020","00000000","00000000","07ffffff"],["fffffffe","00000021","00000000","00000000","07c1f07c"],["fffffffe","0000003f","00000000","00000000","04104104"],["fffffffe","00000040","00000000","00000000","03ffffff"],["fffffffe","000000ff","00000000","00000000","01010100"],["fffffffe","00007fff","00000000","00000000","00020004"],["fffffffe","00008000","00000000","00000000","0001ffff"],["fffffffe","0000ffff","00000000","00000000","00010000"],["fffffffe","00010000","00000000","00000000","0000ffff"],["fffffffe","55555555","00000000","00000000","00000002"],["fffffffe","7ffffffe","00000000","00000000","00000002"],["fffffffe","7fffffff","00000000","00000000","00000002"],["fffffffe","80000000","00000000","00000000","00000001"],["fffffffe","80000001","00000000","00000000","00000001"],["fffffffe","aaaaaaaa","00000000","00000000","00000001"],["fffffffe","deadbeef","00000000","00000000","00000001"],["fffffffe","ffff0000","00000000","00000000","00000001"],["fffffffe","ffff8000","00000000","00000000","00000001"],["fffffffe","ffffffe0","00000000","00000000","00000001"],["fffffffe","ffffffe1","00000000","00000000","00000001"],["fffffffe","fffffff9","00000000","00000000","00000001"],["fffffffe","fffffffd","00000000","00000000","00000001"],["fffffffe","fffffffe","00000000","00000000","00000001"],["fffffffe","ffffffff","00000000","00000000","00000000"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","ffffffff"],["ffffffff","00000002","00000000","00000000","7fffffff"],["ffffffff","00000003","00000000","00000000","55555555"],["ffffffff","00000005","00000000","00000000","33333333"],["ffffffff","00000007","00000000","00000000","24924924"],["ffffffff","0000001f","00000000","00000000","08421084"],["ffffffff","00000020","00000000","00000000","07ffffff"],["ffffffff","00000021","00000000","00000000","07c1f07c"],["ffffffff","0000003f","00000000","00000000","04104104"],["ffffffff","00000040","00000000","00000000","03ffffff"],["ffffffff","000000ff","00000000","00000000","01010101"],["ffffffff","00007fff","00000000","00000000","00020004"],["ffffffff","00008000","00000000","00000000","0001ffff"],["ffffffff","0000ffff","00000000","00000000","00010001"],["ffffffff","00010000","00000000","00000000","0000ffff"],["ffffffff","55555555","00000000","00000000","00000003"],["ffffffff","7ffffffe","00000000","00000000","00000002"],["ffffffff","7fffffff","00000000","00000000","00000002"],["ffffffff","80000000","00000000","00000000","00000001"],["ffffffff","80000001","00000000","00000000","00000001"],["ffffffff","aaaaaaaa","00000000","00000000","00000001"],["ffffffff","deadbeef","00000000","00000000","00000001"],["ffffffff","ffff0000","00000000","00000000","00000001"],["ffffffff","ffff8000","00000000","00000000","00000001"],["ffffffff","ffffffe0","00000000","00000000","00000001"],["ffffffff","ffffffe1","00000000","00000000","00000001"],["ffffffff","fffffff9","00000000","00000000","00000001"],["ffffffff","fffffffd","00000000","00000000","00000001"],["ffffffff","fffffffe","00000000","00000000","00000001"],["ffffffff","ffffffff","00000000","00000000","00000001"]]} +{"op":"rem_u32","code":8,"wgsl":"a % b","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000002","00000000","00000000","00000000"],["00000000","00000003","00000000","00000000","00000000"],["00000000","00000005","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","0000001f","00000000","00000000","00000000"],["00000000","00000020","00000000","00000000","00000000"],["00000000","00000021","00000000","00000000","00000000"],["00000000","0000003f","00000000","00000000","00000000"],["00000000","00000040","00000000","00000000","00000000"],["00000000","000000ff","00000000","00000000","00000000"],["00000000","00007fff","00000000","00000000","00000000"],["00000000","00008000","00000000","00000000","00000000"],["00000000","0000ffff","00000000","00000000","00000000"],["00000000","00010000","00000000","00000000","00000000"],["00000000","55555555","00000000","00000000","00000000"],["00000000","7ffffffe","00000000","00000000","00000000"],["00000000","7fffffff","00000000","00000000","00000000"],["00000000","80000000","00000000","00000000","00000000"],["00000000","80000001","00000000","00000000","00000000"],["00000000","aaaaaaaa","00000000","00000000","00000000"],["00000000","deadbeef","00000000","00000000","00000000"],["00000000","ffff0000","00000000","00000000","00000000"],["00000000","ffff8000","00000000","00000000","00000000"],["00000000","ffffffe0","00000000","00000000","00000000"],["00000000","ffffffe1","00000000","00000000","00000000"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","fffffffd","00000000","00000000","00000000"],["00000000","fffffffe","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000002","00000000","00000000","00000001"],["00000001","00000003","00000000","00000000","00000001"],["00000001","00000005","00000000","00000000","00000001"],["00000001","00000007","00000000","00000000","00000001"],["00000001","0000001f","00000000","00000000","00000001"],["00000001","00000020","00000000","00000000","00000001"],["00000001","00000021","00000000","00000000","00000001"],["00000001","0000003f","00000000","00000000","00000001"],["00000001","00000040","00000000","00000000","00000001"],["00000001","000000ff","00000000","00000000","00000001"],["00000001","00007fff","00000000","00000000","00000001"],["00000001","00008000","00000000","00000000","00000001"],["00000001","0000ffff","00000000","00000000","00000001"],["00000001","00010000","00000000","00000000","00000001"],["00000001","55555555","00000000","00000000","00000001"],["00000001","7ffffffe","00000000","00000000","00000001"],["00000001","7fffffff","00000000","00000000","00000001"],["00000001","80000000","00000000","00000000","00000001"],["00000001","80000001","00000000","00000000","00000001"],["00000001","aaaaaaaa","00000000","00000000","00000001"],["00000001","deadbeef","00000000","00000000","00000001"],["00000001","ffff0000","00000000","00000000","00000001"],["00000001","ffff8000","00000000","00000000","00000001"],["00000001","ffffffe0","00000000","00000000","00000001"],["00000001","ffffffe1","00000000","00000000","00000001"],["00000001","fffffff9","00000000","00000000","00000001"],["00000001","fffffffd","00000000","00000000","00000001"],["00000001","fffffffe","00000000","00000000","00000001"],["00000001","ffffffff","00000000","00000000","00000001"],["00000002","00000000","00000000","00000000","00000000"],["00000002","00000001","00000000","00000000","00000000"],["00000002","00000002","00000000","00000000","00000000"],["00000002","00000003","00000000","00000000","00000002"],["00000002","00000005","00000000","00000000","00000002"],["00000002","00000007","00000000","00000000","00000002"],["00000002","0000001f","00000000","00000000","00000002"],["00000002","00000020","00000000","00000000","00000002"],["00000002","00000021","00000000","00000000","00000002"],["00000002","0000003f","00000000","00000000","00000002"],["00000002","00000040","00000000","00000000","00000002"],["00000002","000000ff","00000000","00000000","00000002"],["00000002","00007fff","00000000","00000000","00000002"],["00000002","00008000","00000000","00000000","00000002"],["00000002","0000ffff","00000000","00000000","00000002"],["00000002","00010000","00000000","00000000","00000002"],["00000002","55555555","00000000","00000000","00000002"],["00000002","7ffffffe","00000000","00000000","00000002"],["00000002","7fffffff","00000000","00000000","00000002"],["00000002","80000000","00000000","00000000","00000002"],["00000002","80000001","00000000","00000000","00000002"],["00000002","aaaaaaaa","00000000","00000000","00000002"],["00000002","deadbeef","00000000","00000000","00000002"],["00000002","ffff0000","00000000","00000000","00000002"],["00000002","ffff8000","00000000","00000000","00000002"],["00000002","ffffffe0","00000000","00000000","00000002"],["00000002","ffffffe1","00000000","00000000","00000002"],["00000002","fffffff9","00000000","00000000","00000002"],["00000002","fffffffd","00000000","00000000","00000002"],["00000002","fffffffe","00000000","00000000","00000002"],["00000002","ffffffff","00000000","00000000","00000002"],["00000003","00000000","00000000","00000000","00000000"],["00000003","00000001","00000000","00000000","00000000"],["00000003","00000002","00000000","00000000","00000001"],["00000003","00000003","00000000","00000000","00000000"],["00000003","00000005","00000000","00000000","00000003"],["00000003","00000007","00000000","00000000","00000003"],["00000003","0000001f","00000000","00000000","00000003"],["00000003","00000020","00000000","00000000","00000003"],["00000003","00000021","00000000","00000000","00000003"],["00000003","0000003f","00000000","00000000","00000003"],["00000003","00000040","00000000","00000000","00000003"],["00000003","000000ff","00000000","00000000","00000003"],["00000003","00007fff","00000000","00000000","00000003"],["00000003","00008000","00000000","00000000","00000003"],["00000003","0000ffff","00000000","00000000","00000003"],["00000003","00010000","00000000","00000000","00000003"],["00000003","55555555","00000000","00000000","00000003"],["00000003","7ffffffe","00000000","00000000","00000003"],["00000003","7fffffff","00000000","00000000","00000003"],["00000003","80000000","00000000","00000000","00000003"],["00000003","80000001","00000000","00000000","00000003"],["00000003","aaaaaaaa","00000000","00000000","00000003"],["00000003","deadbeef","00000000","00000000","00000003"],["00000003","ffff0000","00000000","00000000","00000003"],["00000003","ffff8000","00000000","00000000","00000003"],["00000003","ffffffe0","00000000","00000000","00000003"],["00000003","ffffffe1","00000000","00000000","00000003"],["00000003","fffffff9","00000000","00000000","00000003"],["00000003","fffffffd","00000000","00000000","00000003"],["00000003","fffffffe","00000000","00000000","00000003"],["00000003","ffffffff","00000000","00000000","00000003"],["00000005","00000000","00000000","00000000","00000000"],["00000005","00000001","00000000","00000000","00000000"],["00000005","00000002","00000000","00000000","00000001"],["00000005","00000003","00000000","00000000","00000002"],["00000005","00000005","00000000","00000000","00000000"],["00000005","00000007","00000000","00000000","00000005"],["00000005","0000001f","00000000","00000000","00000005"],["00000005","00000020","00000000","00000000","00000005"],["00000005","00000021","00000000","00000000","00000005"],["00000005","0000003f","00000000","00000000","00000005"],["00000005","00000040","00000000","00000000","00000005"],["00000005","000000ff","00000000","00000000","00000005"],["00000005","00007fff","00000000","00000000","00000005"],["00000005","00008000","00000000","00000000","00000005"],["00000005","0000ffff","00000000","00000000","00000005"],["00000005","00010000","00000000","00000000","00000005"],["00000005","55555555","00000000","00000000","00000005"],["00000005","7ffffffe","00000000","00000000","00000005"],["00000005","7fffffff","00000000","00000000","00000005"],["00000005","80000000","00000000","00000000","00000005"],["00000005","80000001","00000000","00000000","00000005"],["00000005","aaaaaaaa","00000000","00000000","00000005"],["00000005","deadbeef","00000000","00000000","00000005"],["00000005","ffff0000","00000000","00000000","00000005"],["00000005","ffff8000","00000000","00000000","00000005"],["00000005","ffffffe0","00000000","00000000","00000005"],["00000005","ffffffe1","00000000","00000000","00000005"],["00000005","fffffff9","00000000","00000000","00000005"],["00000005","fffffffd","00000000","00000000","00000005"],["00000005","fffffffe","00000000","00000000","00000005"],["00000005","ffffffff","00000000","00000000","00000005"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000000"],["00000007","00000002","00000000","00000000","00000001"],["00000007","00000003","00000000","00000000","00000001"],["00000007","00000005","00000000","00000000","00000002"],["00000007","00000007","00000000","00000000","00000000"],["00000007","0000001f","00000000","00000000","00000007"],["00000007","00000020","00000000","00000000","00000007"],["00000007","00000021","00000000","00000000","00000007"],["00000007","0000003f","00000000","00000000","00000007"],["00000007","00000040","00000000","00000000","00000007"],["00000007","000000ff","00000000","00000000","00000007"],["00000007","00007fff","00000000","00000000","00000007"],["00000007","00008000","00000000","00000000","00000007"],["00000007","0000ffff","00000000","00000000","00000007"],["00000007","00010000","00000000","00000000","00000007"],["00000007","55555555","00000000","00000000","00000007"],["00000007","7ffffffe","00000000","00000000","00000007"],["00000007","7fffffff","00000000","00000000","00000007"],["00000007","80000000","00000000","00000000","00000007"],["00000007","80000001","00000000","00000000","00000007"],["00000007","aaaaaaaa","00000000","00000000","00000007"],["00000007","deadbeef","00000000","00000000","00000007"],["00000007","ffff0000","00000000","00000000","00000007"],["00000007","ffff8000","00000000","00000000","00000007"],["00000007","ffffffe0","00000000","00000000","00000007"],["00000007","ffffffe1","00000000","00000000","00000007"],["00000007","fffffff9","00000000","00000000","00000007"],["00000007","fffffffd","00000000","00000000","00000007"],["00000007","fffffffe","00000000","00000000","00000007"],["00000007","ffffffff","00000000","00000000","00000007"],["0000001f","00000000","00000000","00000000","00000000"],["0000001f","00000001","00000000","00000000","00000000"],["0000001f","00000002","00000000","00000000","00000001"],["0000001f","00000003","00000000","00000000","00000001"],["0000001f","00000005","00000000","00000000","00000001"],["0000001f","00000007","00000000","00000000","00000003"],["0000001f","0000001f","00000000","00000000","00000000"],["0000001f","00000020","00000000","00000000","0000001f"],["0000001f","00000021","00000000","00000000","0000001f"],["0000001f","0000003f","00000000","00000000","0000001f"],["0000001f","00000040","00000000","00000000","0000001f"],["0000001f","000000ff","00000000","00000000","0000001f"],["0000001f","00007fff","00000000","00000000","0000001f"],["0000001f","00008000","00000000","00000000","0000001f"],["0000001f","0000ffff","00000000","00000000","0000001f"],["0000001f","00010000","00000000","00000000","0000001f"],["0000001f","55555555","00000000","00000000","0000001f"],["0000001f","7ffffffe","00000000","00000000","0000001f"],["0000001f","7fffffff","00000000","00000000","0000001f"],["0000001f","80000000","00000000","00000000","0000001f"],["0000001f","80000001","00000000","00000000","0000001f"],["0000001f","aaaaaaaa","00000000","00000000","0000001f"],["0000001f","deadbeef","00000000","00000000","0000001f"],["0000001f","ffff0000","00000000","00000000","0000001f"],["0000001f","ffff8000","00000000","00000000","0000001f"],["0000001f","ffffffe0","00000000","00000000","0000001f"],["0000001f","ffffffe1","00000000","00000000","0000001f"],["0000001f","fffffff9","00000000","00000000","0000001f"],["0000001f","fffffffd","00000000","00000000","0000001f"],["0000001f","fffffffe","00000000","00000000","0000001f"],["0000001f","ffffffff","00000000","00000000","0000001f"],["00000020","00000000","00000000","00000000","00000000"],["00000020","00000001","00000000","00000000","00000000"],["00000020","00000002","00000000","00000000","00000000"],["00000020","00000003","00000000","00000000","00000002"],["00000020","00000005","00000000","00000000","00000002"],["00000020","00000007","00000000","00000000","00000004"],["00000020","0000001f","00000000","00000000","00000001"],["00000020","00000020","00000000","00000000","00000000"],["00000020","00000021","00000000","00000000","00000020"],["00000020","0000003f","00000000","00000000","00000020"],["00000020","00000040","00000000","00000000","00000020"],["00000020","000000ff","00000000","00000000","00000020"],["00000020","00007fff","00000000","00000000","00000020"],["00000020","00008000","00000000","00000000","00000020"],["00000020","0000ffff","00000000","00000000","00000020"],["00000020","00010000","00000000","00000000","00000020"],["00000020","55555555","00000000","00000000","00000020"],["00000020","7ffffffe","00000000","00000000","00000020"],["00000020","7fffffff","00000000","00000000","00000020"],["00000020","80000000","00000000","00000000","00000020"],["00000020","80000001","00000000","00000000","00000020"],["00000020","aaaaaaaa","00000000","00000000","00000020"],["00000020","deadbeef","00000000","00000000","00000020"],["00000020","ffff0000","00000000","00000000","00000020"],["00000020","ffff8000","00000000","00000000","00000020"],["00000020","ffffffe0","00000000","00000000","00000020"],["00000020","ffffffe1","00000000","00000000","00000020"],["00000020","fffffff9","00000000","00000000","00000020"],["00000020","fffffffd","00000000","00000000","00000020"],["00000020","fffffffe","00000000","00000000","00000020"],["00000020","ffffffff","00000000","00000000","00000020"],["00000021","00000000","00000000","00000000","00000000"],["00000021","00000001","00000000","00000000","00000000"],["00000021","00000002","00000000","00000000","00000001"],["00000021","00000003","00000000","00000000","00000000"],["00000021","00000005","00000000","00000000","00000003"],["00000021","00000007","00000000","00000000","00000005"],["00000021","0000001f","00000000","00000000","00000002"],["00000021","00000020","00000000","00000000","00000001"],["00000021","00000021","00000000","00000000","00000000"],["00000021","0000003f","00000000","00000000","00000021"],["00000021","00000040","00000000","00000000","00000021"],["00000021","000000ff","00000000","00000000","00000021"],["00000021","00007fff","00000000","00000000","00000021"],["00000021","00008000","00000000","00000000","00000021"],["00000021","0000ffff","00000000","00000000","00000021"],["00000021","00010000","00000000","00000000","00000021"],["00000021","55555555","00000000","00000000","00000021"],["00000021","7ffffffe","00000000","00000000","00000021"],["00000021","7fffffff","00000000","00000000","00000021"],["00000021","80000000","00000000","00000000","00000021"],["00000021","80000001","00000000","00000000","00000021"],["00000021","aaaaaaaa","00000000","00000000","00000021"],["00000021","deadbeef","00000000","00000000","00000021"],["00000021","ffff0000","00000000","00000000","00000021"],["00000021","ffff8000","00000000","00000000","00000021"],["00000021","ffffffe0","00000000","00000000","00000021"],["00000021","ffffffe1","00000000","00000000","00000021"],["00000021","fffffff9","00000000","00000000","00000021"],["00000021","fffffffd","00000000","00000000","00000021"],["00000021","fffffffe","00000000","00000000","00000021"],["00000021","ffffffff","00000000","00000000","00000021"],["0000003f","00000000","00000000","00000000","00000000"],["0000003f","00000001","00000000","00000000","00000000"],["0000003f","00000002","00000000","00000000","00000001"],["0000003f","00000003","00000000","00000000","00000000"],["0000003f","00000005","00000000","00000000","00000003"],["0000003f","00000007","00000000","00000000","00000000"],["0000003f","0000001f","00000000","00000000","00000001"],["0000003f","00000020","00000000","00000000","0000001f"],["0000003f","00000021","00000000","00000000","0000001e"],["0000003f","0000003f","00000000","00000000","00000000"],["0000003f","00000040","00000000","00000000","0000003f"],["0000003f","000000ff","00000000","00000000","0000003f"],["0000003f","00007fff","00000000","00000000","0000003f"],["0000003f","00008000","00000000","00000000","0000003f"],["0000003f","0000ffff","00000000","00000000","0000003f"],["0000003f","00010000","00000000","00000000","0000003f"],["0000003f","55555555","00000000","00000000","0000003f"],["0000003f","7ffffffe","00000000","00000000","0000003f"],["0000003f","7fffffff","00000000","00000000","0000003f"],["0000003f","80000000","00000000","00000000","0000003f"],["0000003f","80000001","00000000","00000000","0000003f"],["0000003f","aaaaaaaa","00000000","00000000","0000003f"],["0000003f","deadbeef","00000000","00000000","0000003f"],["0000003f","ffff0000","00000000","00000000","0000003f"],["0000003f","ffff8000","00000000","00000000","0000003f"],["0000003f","ffffffe0","00000000","00000000","0000003f"],["0000003f","ffffffe1","00000000","00000000","0000003f"],["0000003f","fffffff9","00000000","00000000","0000003f"],["0000003f","fffffffd","00000000","00000000","0000003f"],["0000003f","fffffffe","00000000","00000000","0000003f"],["0000003f","ffffffff","00000000","00000000","0000003f"],["00000040","00000000","00000000","00000000","00000000"],["00000040","00000001","00000000","00000000","00000000"],["00000040","00000002","00000000","00000000","00000000"],["00000040","00000003","00000000","00000000","00000001"],["00000040","00000005","00000000","00000000","00000004"],["00000040","00000007","00000000","00000000","00000001"],["00000040","0000001f","00000000","00000000","00000002"],["00000040","00000020","00000000","00000000","00000000"],["00000040","00000021","00000000","00000000","0000001f"],["00000040","0000003f","00000000","00000000","00000001"],["00000040","00000040","00000000","00000000","00000000"],["00000040","000000ff","00000000","00000000","00000040"],["00000040","00007fff","00000000","00000000","00000040"],["00000040","00008000","00000000","00000000","00000040"],["00000040","0000ffff","00000000","00000000","00000040"],["00000040","00010000","00000000","00000000","00000040"],["00000040","55555555","00000000","00000000","00000040"],["00000040","7ffffffe","00000000","00000000","00000040"],["00000040","7fffffff","00000000","00000000","00000040"],["00000040","80000000","00000000","00000000","00000040"],["00000040","80000001","00000000","00000000","00000040"],["00000040","aaaaaaaa","00000000","00000000","00000040"],["00000040","deadbeef","00000000","00000000","00000040"],["00000040","ffff0000","00000000","00000000","00000040"],["00000040","ffff8000","00000000","00000000","00000040"],["00000040","ffffffe0","00000000","00000000","00000040"],["00000040","ffffffe1","00000000","00000000","00000040"],["00000040","fffffff9","00000000","00000000","00000040"],["00000040","fffffffd","00000000","00000000","00000040"],["00000040","fffffffe","00000000","00000000","00000040"],["00000040","ffffffff","00000000","00000000","00000040"],["000000ff","00000000","00000000","00000000","00000000"],["000000ff","00000001","00000000","00000000","00000000"],["000000ff","00000002","00000000","00000000","00000001"],["000000ff","00000003","00000000","00000000","00000000"],["000000ff","00000005","00000000","00000000","00000000"],["000000ff","00000007","00000000","00000000","00000003"],["000000ff","0000001f","00000000","00000000","00000007"],["000000ff","00000020","00000000","00000000","0000001f"],["000000ff","00000021","00000000","00000000","00000018"],["000000ff","0000003f","00000000","00000000","00000003"],["000000ff","00000040","00000000","00000000","0000003f"],["000000ff","000000ff","00000000","00000000","00000000"],["000000ff","00007fff","00000000","00000000","000000ff"],["000000ff","00008000","00000000","00000000","000000ff"],["000000ff","0000ffff","00000000","00000000","000000ff"],["000000ff","00010000","00000000","00000000","000000ff"],["000000ff","55555555","00000000","00000000","000000ff"],["000000ff","7ffffffe","00000000","00000000","000000ff"],["000000ff","7fffffff","00000000","00000000","000000ff"],["000000ff","80000000","00000000","00000000","000000ff"],["000000ff","80000001","00000000","00000000","000000ff"],["000000ff","aaaaaaaa","00000000","00000000","000000ff"],["000000ff","deadbeef","00000000","00000000","000000ff"],["000000ff","ffff0000","00000000","00000000","000000ff"],["000000ff","ffff8000","00000000","00000000","000000ff"],["000000ff","ffffffe0","00000000","00000000","000000ff"],["000000ff","ffffffe1","00000000","00000000","000000ff"],["000000ff","fffffff9","00000000","00000000","000000ff"],["000000ff","fffffffd","00000000","00000000","000000ff"],["000000ff","fffffffe","00000000","00000000","000000ff"],["000000ff","ffffffff","00000000","00000000","000000ff"],["00007fff","00000000","00000000","00000000","00000000"],["00007fff","00000001","00000000","00000000","00000000"],["00007fff","00000002","00000000","00000000","00000001"],["00007fff","00000003","00000000","00000000","00000001"],["00007fff","00000005","00000000","00000000","00000002"],["00007fff","00000007","00000000","00000000","00000000"],["00007fff","0000001f","00000000","00000000","00000000"],["00007fff","00000020","00000000","00000000","0000001f"],["00007fff","00000021","00000000","00000000","0000001f"],["00007fff","0000003f","00000000","00000000","00000007"],["00007fff","00000040","00000000","00000000","0000003f"],["00007fff","000000ff","00000000","00000000","0000007f"],["00007fff","00007fff","00000000","00000000","00000000"],["00007fff","00008000","00000000","00000000","00007fff"],["00007fff","0000ffff","00000000","00000000","00007fff"],["00007fff","00010000","00000000","00000000","00007fff"],["00007fff","55555555","00000000","00000000","00007fff"],["00007fff","7ffffffe","00000000","00000000","00007fff"],["00007fff","7fffffff","00000000","00000000","00007fff"],["00007fff","80000000","00000000","00000000","00007fff"],["00007fff","80000001","00000000","00000000","00007fff"],["00007fff","aaaaaaaa","00000000","00000000","00007fff"],["00007fff","deadbeef","00000000","00000000","00007fff"],["00007fff","ffff0000","00000000","00000000","00007fff"],["00007fff","ffff8000","00000000","00000000","00007fff"],["00007fff","ffffffe0","00000000","00000000","00007fff"],["00007fff","ffffffe1","00000000","00000000","00007fff"],["00007fff","fffffff9","00000000","00000000","00007fff"],["00007fff","fffffffd","00000000","00000000","00007fff"],["00007fff","fffffffe","00000000","00000000","00007fff"],["00007fff","ffffffff","00000000","00000000","00007fff"],["00008000","00000000","00000000","00000000","00000000"],["00008000","00000001","00000000","00000000","00000000"],["00008000","00000002","00000000","00000000","00000000"],["00008000","00000003","00000000","00000000","00000002"],["00008000","00000005","00000000","00000000","00000003"],["00008000","00000007","00000000","00000000","00000001"],["00008000","0000001f","00000000","00000000","00000001"],["00008000","00000020","00000000","00000000","00000000"],["00008000","00000021","00000000","00000000","00000020"],["00008000","0000003f","00000000","00000000","00000008"],["00008000","00000040","00000000","00000000","00000000"],["00008000","000000ff","00000000","00000000","00000080"],["00008000","00007fff","00000000","00000000","00000001"],["00008000","00008000","00000000","00000000","00000000"],["00008000","0000ffff","00000000","00000000","00008000"],["00008000","00010000","00000000","00000000","00008000"],["00008000","55555555","00000000","00000000","00008000"],["00008000","7ffffffe","00000000","00000000","00008000"],["00008000","7fffffff","00000000","00000000","00008000"],["00008000","80000000","00000000","00000000","00008000"],["00008000","80000001","00000000","00000000","00008000"],["00008000","aaaaaaaa","00000000","00000000","00008000"],["00008000","deadbeef","00000000","00000000","00008000"],["00008000","ffff0000","00000000","00000000","00008000"],["00008000","ffff8000","00000000","00000000","00008000"],["00008000","ffffffe0","00000000","00000000","00008000"],["00008000","ffffffe1","00000000","00000000","00008000"],["00008000","fffffff9","00000000","00000000","00008000"],["00008000","fffffffd","00000000","00000000","00008000"],["00008000","fffffffe","00000000","00000000","00008000"],["00008000","ffffffff","00000000","00000000","00008000"],["0000ffff","00000000","00000000","00000000","00000000"],["0000ffff","00000001","00000000","00000000","00000000"],["0000ffff","00000002","00000000","00000000","00000001"],["0000ffff","00000003","00000000","00000000","00000000"],["0000ffff","00000005","00000000","00000000","00000000"],["0000ffff","00000007","00000000","00000000","00000001"],["0000ffff","0000001f","00000000","00000000","00000001"],["0000ffff","00000020","00000000","00000000","0000001f"],["0000ffff","00000021","00000000","00000000","0000001e"],["0000ffff","0000003f","00000000","00000000","0000000f"],["0000ffff","00000040","00000000","00000000","0000003f"],["0000ffff","000000ff","00000000","00000000","00000000"],["0000ffff","00007fff","00000000","00000000","00000001"],["0000ffff","00008000","00000000","00000000","00007fff"],["0000ffff","0000ffff","00000000","00000000","00000000"],["0000ffff","00010000","00000000","00000000","0000ffff"],["0000ffff","55555555","00000000","00000000","0000ffff"],["0000ffff","7ffffffe","00000000","00000000","0000ffff"],["0000ffff","7fffffff","00000000","00000000","0000ffff"],["0000ffff","80000000","00000000","00000000","0000ffff"],["0000ffff","80000001","00000000","00000000","0000ffff"],["0000ffff","aaaaaaaa","00000000","00000000","0000ffff"],["0000ffff","deadbeef","00000000","00000000","0000ffff"],["0000ffff","ffff0000","00000000","00000000","0000ffff"],["0000ffff","ffff8000","00000000","00000000","0000ffff"],["0000ffff","ffffffe0","00000000","00000000","0000ffff"],["0000ffff","ffffffe1","00000000","00000000","0000ffff"],["0000ffff","fffffff9","00000000","00000000","0000ffff"],["0000ffff","fffffffd","00000000","00000000","0000ffff"],["0000ffff","fffffffe","00000000","00000000","0000ffff"],["0000ffff","ffffffff","00000000","00000000","0000ffff"],["00010000","00000000","00000000","00000000","00000000"],["00010000","00000001","00000000","00000000","00000000"],["00010000","00000002","00000000","00000000","00000000"],["00010000","00000003","00000000","00000000","00000001"],["00010000","00000005","00000000","00000000","00000001"],["00010000","00000007","00000000","00000000","00000002"],["00010000","0000001f","00000000","00000000","00000002"],["00010000","00000020","00000000","00000000","00000000"],["00010000","00000021","00000000","00000000","0000001f"],["00010000","0000003f","00000000","00000000","00000010"],["00010000","00000040","00000000","00000000","00000000"],["00010000","000000ff","00000000","00000000","00000001"],["00010000","00007fff","00000000","00000000","00000002"],["00010000","00008000","00000000","00000000","00000000"],["00010000","0000ffff","00000000","00000000","00000001"],["00010000","00010000","00000000","00000000","00000000"],["00010000","55555555","00000000","00000000","00010000"],["00010000","7ffffffe","00000000","00000000","00010000"],["00010000","7fffffff","00000000","00000000","00010000"],["00010000","80000000","00000000","00000000","00010000"],["00010000","80000001","00000000","00000000","00010000"],["00010000","aaaaaaaa","00000000","00000000","00010000"],["00010000","deadbeef","00000000","00000000","00010000"],["00010000","ffff0000","00000000","00000000","00010000"],["00010000","ffff8000","00000000","00000000","00010000"],["00010000","ffffffe0","00000000","00000000","00010000"],["00010000","ffffffe1","00000000","00000000","00010000"],["00010000","fffffff9","00000000","00000000","00010000"],["00010000","fffffffd","00000000","00000000","00010000"],["00010000","fffffffe","00000000","00000000","00010000"],["00010000","ffffffff","00000000","00000000","00010000"],["55555555","00000000","00000000","00000000","00000000"],["55555555","00000001","00000000","00000000","00000000"],["55555555","00000002","00000000","00000000","00000001"],["55555555","00000003","00000000","00000000","00000001"],["55555555","00000005","00000000","00000000","00000000"],["55555555","00000007","00000000","00000000","00000001"],["55555555","0000001f","00000000","00000000","00000001"],["55555555","00000020","00000000","00000000","00000015"],["55555555","00000021","00000000","00000000","00000001"],["55555555","0000003f","00000000","00000000","0000002b"],["55555555","00000040","00000000","00000000","00000015"],["55555555","000000ff","00000000","00000000","00000055"],["55555555","00007fff","00000000","00000000","00000001"],["55555555","00008000","00000000","00000000","00005555"],["55555555","0000ffff","00000000","00000000","0000aaaa"],["55555555","00010000","00000000","00000000","00005555"],["55555555","55555555","00000000","00000000","00000000"],["55555555","7ffffffe","00000000","00000000","55555555"],["55555555","7fffffff","00000000","00000000","55555555"],["55555555","80000000","00000000","00000000","55555555"],["55555555","80000001","00000000","00000000","55555555"],["55555555","aaaaaaaa","00000000","00000000","55555555"],["55555555","deadbeef","00000000","00000000","55555555"],["55555555","ffff0000","00000000","00000000","55555555"],["55555555","ffff8000","00000000","00000000","55555555"],["55555555","ffffffe0","00000000","00000000","55555555"],["55555555","ffffffe1","00000000","00000000","55555555"],["55555555","fffffff9","00000000","00000000","55555555"],["55555555","fffffffd","00000000","00000000","55555555"],["55555555","fffffffe","00000000","00000000","55555555"],["55555555","ffffffff","00000000","00000000","55555555"],["7ffffffe","00000000","00000000","00000000","00000000"],["7ffffffe","00000001","00000000","00000000","00000000"],["7ffffffe","00000002","00000000","00000000","00000000"],["7ffffffe","00000003","00000000","00000000","00000000"],["7ffffffe","00000005","00000000","00000000","00000001"],["7ffffffe","00000007","00000000","00000000","00000000"],["7ffffffe","0000001f","00000000","00000000","00000000"],["7ffffffe","00000020","00000000","00000000","0000001e"],["7ffffffe","00000021","00000000","00000000","00000000"],["7ffffffe","0000003f","00000000","00000000","00000000"],["7ffffffe","00000040","00000000","00000000","0000003e"],["7ffffffe","000000ff","00000000","00000000","0000007e"],["7ffffffe","00007fff","00000000","00000000","00000000"],["7ffffffe","00008000","00000000","00000000","00007ffe"],["7ffffffe","0000ffff","00000000","00000000","00007ffe"],["7ffffffe","00010000","00000000","00000000","0000fffe"],["7ffffffe","55555555","00000000","00000000","2aaaaaa9"],["7ffffffe","7ffffffe","00000000","00000000","00000000"],["7ffffffe","7fffffff","00000000","00000000","7ffffffe"],["7ffffffe","80000000","00000000","00000000","7ffffffe"],["7ffffffe","80000001","00000000","00000000","7ffffffe"],["7ffffffe","aaaaaaaa","00000000","00000000","7ffffffe"],["7ffffffe","deadbeef","00000000","00000000","7ffffffe"],["7ffffffe","ffff0000","00000000","00000000","7ffffffe"],["7ffffffe","ffff8000","00000000","00000000","7ffffffe"],["7ffffffe","ffffffe0","00000000","00000000","7ffffffe"],["7ffffffe","ffffffe1","00000000","00000000","7ffffffe"],["7ffffffe","fffffff9","00000000","00000000","7ffffffe"],["7ffffffe","fffffffd","00000000","00000000","7ffffffe"],["7ffffffe","fffffffe","00000000","00000000","7ffffffe"],["7ffffffe","ffffffff","00000000","00000000","7ffffffe"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","00000000"],["7fffffff","00000002","00000000","00000000","00000001"],["7fffffff","00000003","00000000","00000000","00000001"],["7fffffff","00000005","00000000","00000000","00000002"],["7fffffff","00000007","00000000","00000000","00000001"],["7fffffff","0000001f","00000000","00000000","00000001"],["7fffffff","00000020","00000000","00000000","0000001f"],["7fffffff","00000021","00000000","00000000","00000001"],["7fffffff","0000003f","00000000","00000000","00000001"],["7fffffff","00000040","00000000","00000000","0000003f"],["7fffffff","000000ff","00000000","00000000","0000007f"],["7fffffff","00007fff","00000000","00000000","00000001"],["7fffffff","00008000","00000000","00000000","00007fff"],["7fffffff","0000ffff","00000000","00000000","00007fff"],["7fffffff","00010000","00000000","00000000","0000ffff"],["7fffffff","55555555","00000000","00000000","2aaaaaaa"],["7fffffff","7ffffffe","00000000","00000000","00000001"],["7fffffff","7fffffff","00000000","00000000","00000000"],["7fffffff","80000000","00000000","00000000","7fffffff"],["7fffffff","80000001","00000000","00000000","7fffffff"],["7fffffff","aaaaaaaa","00000000","00000000","7fffffff"],["7fffffff","deadbeef","00000000","00000000","7fffffff"],["7fffffff","ffff0000","00000000","00000000","7fffffff"],["7fffffff","ffff8000","00000000","00000000","7fffffff"],["7fffffff","ffffffe0","00000000","00000000","7fffffff"],["7fffffff","ffffffe1","00000000","00000000","7fffffff"],["7fffffff","fffffff9","00000000","00000000","7fffffff"],["7fffffff","fffffffd","00000000","00000000","7fffffff"],["7fffffff","fffffffe","00000000","00000000","7fffffff"],["7fffffff","ffffffff","00000000","00000000","7fffffff"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000001","00000000","00000000","00000000"],["80000000","00000002","00000000","00000000","00000000"],["80000000","00000003","00000000","00000000","00000002"],["80000000","00000005","00000000","00000000","00000003"],["80000000","00000007","00000000","00000000","00000002"],["80000000","0000001f","00000000","00000000","00000002"],["80000000","00000020","00000000","00000000","00000000"],["80000000","00000021","00000000","00000000","00000002"],["80000000","0000003f","00000000","00000000","00000002"],["80000000","00000040","00000000","00000000","00000000"],["80000000","000000ff","00000000","00000000","00000080"],["80000000","00007fff","00000000","00000000","00000002"],["80000000","00008000","00000000","00000000","00000000"],["80000000","0000ffff","00000000","00000000","00008000"],["80000000","00010000","00000000","00000000","00000000"],["80000000","55555555","00000000","00000000","2aaaaaab"],["80000000","7ffffffe","00000000","00000000","00000002"],["80000000","7fffffff","00000000","00000000","00000001"],["80000000","80000000","00000000","00000000","00000000"],["80000000","80000001","00000000","00000000","80000000"],["80000000","aaaaaaaa","00000000","00000000","80000000"],["80000000","deadbeef","00000000","00000000","80000000"],["80000000","ffff0000","00000000","00000000","80000000"],["80000000","ffff8000","00000000","00000000","80000000"],["80000000","ffffffe0","00000000","00000000","80000000"],["80000000","ffffffe1","00000000","00000000","80000000"],["80000000","fffffff9","00000000","00000000","80000000"],["80000000","fffffffd","00000000","00000000","80000000"],["80000000","fffffffe","00000000","00000000","80000000"],["80000000","ffffffff","00000000","00000000","80000000"],["80000001","00000000","00000000","00000000","00000000"],["80000001","00000001","00000000","00000000","00000000"],["80000001","00000002","00000000","00000000","00000001"],["80000001","00000003","00000000","00000000","00000000"],["80000001","00000005","00000000","00000000","00000004"],["80000001","00000007","00000000","00000000","00000003"],["80000001","0000001f","00000000","00000000","00000003"],["80000001","00000020","00000000","00000000","00000001"],["80000001","00000021","00000000","00000000","00000003"],["80000001","0000003f","00000000","00000000","00000003"],["80000001","00000040","00000000","00000000","00000001"],["80000001","000000ff","00000000","00000000","00000081"],["80000001","00007fff","00000000","00000000","00000003"],["80000001","00008000","00000000","00000000","00000001"],["80000001","0000ffff","00000000","00000000","00008001"],["80000001","00010000","00000000","00000000","00000001"],["80000001","55555555","00000000","00000000","2aaaaaac"],["80000001","7ffffffe","00000000","00000000","00000003"],["80000001","7fffffff","00000000","00000000","00000002"],["80000001","80000000","00000000","00000000","00000001"],["80000001","80000001","00000000","00000000","00000000"],["80000001","aaaaaaaa","00000000","00000000","80000001"],["80000001","deadbeef","00000000","00000000","80000001"],["80000001","ffff0000","00000000","00000000","80000001"],["80000001","ffff8000","00000000","00000000","80000001"],["80000001","ffffffe0","00000000","00000000","80000001"],["80000001","ffffffe1","00000000","00000000","80000001"],["80000001","fffffff9","00000000","00000000","80000001"],["80000001","fffffffd","00000000","00000000","80000001"],["80000001","fffffffe","00000000","00000000","80000001"],["80000001","ffffffff","00000000","00000000","80000001"],["aaaaaaaa","00000000","00000000","00000000","00000000"],["aaaaaaaa","00000001","00000000","00000000","00000000"],["aaaaaaaa","00000002","00000000","00000000","00000000"],["aaaaaaaa","00000003","00000000","00000000","00000002"],["aaaaaaaa","00000005","00000000","00000000","00000000"],["aaaaaaaa","00000007","00000000","00000000","00000002"],["aaaaaaaa","0000001f","00000000","00000000","00000002"],["aaaaaaaa","00000020","00000000","00000000","0000000a"],["aaaaaaaa","00000021","00000000","00000000","00000002"],["aaaaaaaa","0000003f","00000000","00000000","00000017"],["aaaaaaaa","00000040","00000000","00000000","0000002a"],["aaaaaaaa","000000ff","00000000","00000000","000000aa"],["aaaaaaaa","00007fff","00000000","00000000","00000002"],["aaaaaaaa","00008000","00000000","00000000","00002aaa"],["aaaaaaaa","0000ffff","00000000","00000000","00005555"],["aaaaaaaa","00010000","00000000","00000000","0000aaaa"],["aaaaaaaa","55555555","00000000","00000000","00000000"],["aaaaaaaa","7ffffffe","00000000","00000000","2aaaaaac"],["aaaaaaaa","7fffffff","00000000","00000000","2aaaaaab"],["aaaaaaaa","80000000","00000000","00000000","2aaaaaaa"],["aaaaaaaa","80000001","00000000","00000000","2aaaaaa9"],["aaaaaaaa","aaaaaaaa","00000000","00000000","00000000"],["aaaaaaaa","deadbeef","00000000","00000000","aaaaaaaa"],["aaaaaaaa","ffff0000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","ffff8000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","ffffffe0","00000000","00000000","aaaaaaaa"],["aaaaaaaa","ffffffe1","00000000","00000000","aaaaaaaa"],["aaaaaaaa","fffffff9","00000000","00000000","aaaaaaaa"],["aaaaaaaa","fffffffd","00000000","00000000","aaaaaaaa"],["aaaaaaaa","fffffffe","00000000","00000000","aaaaaaaa"],["aaaaaaaa","ffffffff","00000000","00000000","aaaaaaaa"],["deadbeef","00000000","00000000","00000000","00000000"],["deadbeef","00000001","00000000","00000000","00000000"],["deadbeef","00000002","00000000","00000000","00000001"],["deadbeef","00000003","00000000","00000000","00000002"],["deadbeef","00000005","00000000","00000000","00000004"],["deadbeef","00000007","00000000","00000000","00000006"],["deadbeef","0000001f","00000000","00000000","0000000f"],["deadbeef","00000020","00000000","00000000","0000000f"],["deadbeef","00000021","00000000","00000000","0000000b"],["deadbeef","0000003f","00000000","00000000","00000014"],["deadbeef","00000040","00000000","00000000","0000002f"],["deadbeef","000000ff","00000000","00000000","0000003b"],["deadbeef","00007fff","00000000","00000000","00007c4d"],["deadbeef","00008000","00000000","00000000","00003eef"],["deadbeef","0000ffff","00000000","00000000","00009d9d"],["deadbeef","00010000","00000000","00000000","0000beef"],["deadbeef","55555555","00000000","00000000","34031445"],["deadbeef","7ffffffe","00000000","00000000","5eadbef1"],["deadbeef","7fffffff","00000000","00000000","5eadbef0"],["deadbeef","80000000","00000000","00000000","5eadbeef"],["deadbeef","80000001","00000000","00000000","5eadbeee"],["deadbeef","aaaaaaaa","00000000","00000000","34031445"],["deadbeef","deadbeef","00000000","00000000","00000000"],["deadbeef","ffff0000","00000000","00000000","deadbeef"],["deadbeef","ffff8000","00000000","00000000","deadbeef"],["deadbeef","ffffffe0","00000000","00000000","deadbeef"],["deadbeef","ffffffe1","00000000","00000000","deadbeef"],["deadbeef","fffffff9","00000000","00000000","deadbeef"],["deadbeef","fffffffd","00000000","00000000","deadbeef"],["deadbeef","fffffffe","00000000","00000000","deadbeef"],["deadbeef","ffffffff","00000000","00000000","deadbeef"],["ffff0000","00000000","00000000","00000000","00000000"],["ffff0000","00000001","00000000","00000000","00000000"],["ffff0000","00000002","00000000","00000000","00000000"],["ffff0000","00000003","00000000","00000000","00000000"],["ffff0000","00000005","00000000","00000000","00000000"],["ffff0000","00000007","00000000","00000000","00000002"],["ffff0000","0000001f","00000000","00000000","00000002"],["ffff0000","00000020","00000000","00000000","00000000"],["ffff0000","00000021","00000000","00000000","00000006"],["ffff0000","0000003f","00000000","00000000","00000033"],["ffff0000","00000040","00000000","00000000","00000000"],["ffff0000","000000ff","00000000","00000000","00000000"],["ffff0000","00007fff","00000000","00000000","00000002"],["ffff0000","00008000","00000000","00000000","00000000"],["ffff0000","0000ffff","00000000","00000000","00000000"],["ffff0000","00010000","00000000","00000000","00000000"],["ffff0000","55555555","00000000","00000000","55545556"],["ffff0000","7ffffffe","00000000","00000000","7fff0002"],["ffff0000","7fffffff","00000000","00000000","7fff0001"],["ffff0000","80000000","00000000","00000000","7fff0000"],["ffff0000","80000001","00000000","00000000","7ffeffff"],["ffff0000","aaaaaaaa","00000000","00000000","55545556"],["ffff0000","deadbeef","00000000","00000000","21514111"],["ffff0000","ffff0000","00000000","00000000","00000000"],["ffff0000","ffff8000","00000000","00000000","ffff0000"],["ffff0000","ffffffe0","00000000","00000000","ffff0000"],["ffff0000","ffffffe1","00000000","00000000","ffff0000"],["ffff0000","fffffff9","00000000","00000000","ffff0000"],["ffff0000","fffffffd","00000000","00000000","ffff0000"],["ffff0000","fffffffe","00000000","00000000","ffff0000"],["ffff0000","ffffffff","00000000","00000000","ffff0000"],["ffff8000","00000000","00000000","00000000","00000000"],["ffff8000","00000001","00000000","00000000","00000000"],["ffff8000","00000002","00000000","00000000","00000000"],["ffff8000","00000003","00000000","00000000","00000002"],["ffff8000","00000005","00000000","00000000","00000003"],["ffff8000","00000007","00000000","00000000","00000003"],["ffff8000","0000001f","00000000","00000000","00000003"],["ffff8000","00000020","00000000","00000000","00000000"],["ffff8000","00000021","00000000","00000000","00000005"],["ffff8000","0000003f","00000000","00000000","0000003b"],["ffff8000","00000040","00000000","00000000","00000000"],["ffff8000","000000ff","00000000","00000000","00000080"],["ffff8000","00007fff","00000000","00000000","00000003"],["ffff8000","00008000","00000000","00000000","00000000"],["ffff8000","0000ffff","00000000","00000000","00008000"],["ffff8000","00010000","00000000","00000000","00008000"],["ffff8000","55555555","00000000","00000000","5554d556"],["ffff8000","7ffffffe","00000000","00000000","7fff8002"],["ffff8000","7fffffff","00000000","00000000","7fff8001"],["ffff8000","80000000","00000000","00000000","7fff8000"],["ffff8000","80000001","00000000","00000000","7fff7fff"],["ffff8000","aaaaaaaa","00000000","00000000","5554d556"],["ffff8000","deadbeef","00000000","00000000","2151c111"],["ffff8000","ffff0000","00000000","00000000","00008000"],["ffff8000","ffff8000","00000000","00000000","00000000"],["ffff8000","ffffffe0","00000000","00000000","ffff8000"],["ffff8000","ffffffe1","00000000","00000000","ffff8000"],["ffff8000","fffffff9","00000000","00000000","ffff8000"],["ffff8000","fffffffd","00000000","00000000","ffff8000"],["ffff8000","fffffffe","00000000","00000000","ffff8000"],["ffff8000","ffffffff","00000000","00000000","ffff8000"],["ffffffe0","00000000","00000000","00000000","00000000"],["ffffffe0","00000001","00000000","00000000","00000000"],["ffffffe0","00000002","00000000","00000000","00000000"],["ffffffe0","00000003","00000000","00000000","00000002"],["ffffffe0","00000005","00000000","00000000","00000004"],["ffffffe0","00000007","00000000","00000000","00000000"],["ffffffe0","0000001f","00000000","00000000","00000003"],["ffffffe0","00000020","00000000","00000000","00000000"],["ffffffe0","00000021","00000000","00000000","00000005"],["ffffffe0","0000003f","00000000","00000000","00000023"],["ffffffe0","00000040","00000000","00000000","00000020"],["ffffffe0","000000ff","00000000","00000000","000000e0"],["ffffffe0","00007fff","00000000","00000000","00007fe3"],["ffffffe0","00008000","00000000","00000000","00007fe0"],["ffffffe0","0000ffff","00000000","00000000","0000ffe0"],["ffffffe0","00010000","00000000","00000000","0000ffe0"],["ffffffe0","55555555","00000000","00000000","55555536"],["ffffffe0","7ffffffe","00000000","00000000","7fffffe2"],["ffffffe0","7fffffff","00000000","00000000","7fffffe1"],["ffffffe0","80000000","00000000","00000000","7fffffe0"],["ffffffe0","80000001","00000000","00000000","7fffffdf"],["ffffffe0","aaaaaaaa","00000000","00000000","55555536"],["ffffffe0","deadbeef","00000000","00000000","215240f1"],["ffffffe0","ffff0000","00000000","00000000","0000ffe0"],["ffffffe0","ffff8000","00000000","00000000","00007fe0"],["ffffffe0","ffffffe0","00000000","00000000","00000000"],["ffffffe0","ffffffe1","00000000","00000000","ffffffe0"],["ffffffe0","fffffff9","00000000","00000000","ffffffe0"],["ffffffe0","fffffffd","00000000","00000000","ffffffe0"],["ffffffe0","fffffffe","00000000","00000000","ffffffe0"],["ffffffe0","ffffffff","00000000","00000000","ffffffe0"],["ffffffe1","00000000","00000000","00000000","00000000"],["ffffffe1","00000001","00000000","00000000","00000000"],["ffffffe1","00000002","00000000","00000000","00000001"],["ffffffe1","00000003","00000000","00000000","00000000"],["ffffffe1","00000005","00000000","00000000","00000000"],["ffffffe1","00000007","00000000","00000000","00000001"],["ffffffe1","0000001f","00000000","00000000","00000004"],["ffffffe1","00000020","00000000","00000000","00000001"],["ffffffe1","00000021","00000000","00000000","00000006"],["ffffffe1","0000003f","00000000","00000000","00000024"],["ffffffe1","00000040","00000000","00000000","00000021"],["ffffffe1","000000ff","00000000","00000000","000000e1"],["ffffffe1","00007fff","00000000","00000000","00007fe4"],["ffffffe1","00008000","00000000","00000000","00007fe1"],["ffffffe1","0000ffff","00000000","00000000","0000ffe1"],["ffffffe1","00010000","00000000","00000000","0000ffe1"],["ffffffe1","55555555","00000000","00000000","55555537"],["ffffffe1","7ffffffe","00000000","00000000","7fffffe3"],["ffffffe1","7fffffff","00000000","00000000","7fffffe2"],["ffffffe1","80000000","00000000","00000000","7fffffe1"],["ffffffe1","80000001","00000000","00000000","7fffffe0"],["ffffffe1","aaaaaaaa","00000000","00000000","55555537"],["ffffffe1","deadbeef","00000000","00000000","215240f2"],["ffffffe1","ffff0000","00000000","00000000","0000ffe1"],["ffffffe1","ffff8000","00000000","00000000","00007fe1"],["ffffffe1","ffffffe0","00000000","00000000","00000001"],["ffffffe1","ffffffe1","00000000","00000000","00000000"],["ffffffe1","fffffff9","00000000","00000000","ffffffe1"],["ffffffe1","fffffffd","00000000","00000000","ffffffe1"],["ffffffe1","fffffffe","00000000","00000000","ffffffe1"],["ffffffe1","ffffffff","00000000","00000000","ffffffe1"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000001","00000000","00000000","00000000"],["fffffff9","00000002","00000000","00000000","00000001"],["fffffff9","00000003","00000000","00000000","00000000"],["fffffff9","00000005","00000000","00000000","00000004"],["fffffff9","00000007","00000000","00000000","00000004"],["fffffff9","0000001f","00000000","00000000","0000001c"],["fffffff9","00000020","00000000","00000000","00000019"],["fffffff9","00000021","00000000","00000000","0000001e"],["fffffff9","0000003f","00000000","00000000","0000003c"],["fffffff9","00000040","00000000","00000000","00000039"],["fffffff9","000000ff","00000000","00000000","000000f9"],["fffffff9","00007fff","00000000","00000000","00007ffc"],["fffffff9","00008000","00000000","00000000","00007ff9"],["fffffff9","0000ffff","00000000","00000000","0000fff9"],["fffffff9","00010000","00000000","00000000","0000fff9"],["fffffff9","55555555","00000000","00000000","5555554f"],["fffffff9","7ffffffe","00000000","00000000","7ffffffb"],["fffffff9","7fffffff","00000000","00000000","7ffffffa"],["fffffff9","80000000","00000000","00000000","7ffffff9"],["fffffff9","80000001","00000000","00000000","7ffffff8"],["fffffff9","aaaaaaaa","00000000","00000000","5555554f"],["fffffff9","deadbeef","00000000","00000000","2152410a"],["fffffff9","ffff0000","00000000","00000000","0000fff9"],["fffffff9","ffff8000","00000000","00000000","00007ff9"],["fffffff9","ffffffe0","00000000","00000000","00000019"],["fffffff9","ffffffe1","00000000","00000000","00000018"],["fffffff9","fffffff9","00000000","00000000","00000000"],["fffffff9","fffffffd","00000000","00000000","fffffff9"],["fffffff9","fffffffe","00000000","00000000","fffffff9"],["fffffff9","ffffffff","00000000","00000000","fffffff9"],["fffffffd","00000000","00000000","00000000","00000000"],["fffffffd","00000001","00000000","00000000","00000000"],["fffffffd","00000002","00000000","00000000","00000001"],["fffffffd","00000003","00000000","00000000","00000001"],["fffffffd","00000005","00000000","00000000","00000003"],["fffffffd","00000007","00000000","00000000","00000001"],["fffffffd","0000001f","00000000","00000000","00000001"],["fffffffd","00000020","00000000","00000000","0000001d"],["fffffffd","00000021","00000000","00000000","00000001"],["fffffffd","0000003f","00000000","00000000","00000001"],["fffffffd","00000040","00000000","00000000","0000003d"],["fffffffd","000000ff","00000000","00000000","000000fd"],["fffffffd","00007fff","00000000","00000000","00000001"],["fffffffd","00008000","00000000","00000000","00007ffd"],["fffffffd","0000ffff","00000000","00000000","0000fffd"],["fffffffd","00010000","00000000","00000000","0000fffd"],["fffffffd","55555555","00000000","00000000","55555553"],["fffffffd","7ffffffe","00000000","00000000","00000001"],["fffffffd","7fffffff","00000000","00000000","7ffffffe"],["fffffffd","80000000","00000000","00000000","7ffffffd"],["fffffffd","80000001","00000000","00000000","7ffffffc"],["fffffffd","aaaaaaaa","00000000","00000000","55555553"],["fffffffd","deadbeef","00000000","00000000","2152410e"],["fffffffd","ffff0000","00000000","00000000","0000fffd"],["fffffffd","ffff8000","00000000","00000000","00007ffd"],["fffffffd","ffffffe0","00000000","00000000","0000001d"],["fffffffd","ffffffe1","00000000","00000000","0000001c"],["fffffffd","fffffff9","00000000","00000000","00000004"],["fffffffd","fffffffd","00000000","00000000","00000000"],["fffffffd","fffffffe","00000000","00000000","fffffffd"],["fffffffd","ffffffff","00000000","00000000","fffffffd"],["fffffffe","00000000","00000000","00000000","00000000"],["fffffffe","00000001","00000000","00000000","00000000"],["fffffffe","00000002","00000000","00000000","00000000"],["fffffffe","00000003","00000000","00000000","00000002"],["fffffffe","00000005","00000000","00000000","00000004"],["fffffffe","00000007","00000000","00000000","00000002"],["fffffffe","0000001f","00000000","00000000","00000002"],["fffffffe","00000020","00000000","00000000","0000001e"],["fffffffe","00000021","00000000","00000000","00000002"],["fffffffe","0000003f","00000000","00000000","00000002"],["fffffffe","00000040","00000000","00000000","0000003e"],["fffffffe","000000ff","00000000","00000000","000000fe"],["fffffffe","00007fff","00000000","00000000","00000002"],["fffffffe","00008000","00000000","00000000","00007ffe"],["fffffffe","0000ffff","00000000","00000000","0000fffe"],["fffffffe","00010000","00000000","00000000","0000fffe"],["fffffffe","55555555","00000000","00000000","55555554"],["fffffffe","7ffffffe","00000000","00000000","00000002"],["fffffffe","7fffffff","00000000","00000000","00000000"],["fffffffe","80000000","00000000","00000000","7ffffffe"],["fffffffe","80000001","00000000","00000000","7ffffffd"],["fffffffe","aaaaaaaa","00000000","00000000","55555554"],["fffffffe","deadbeef","00000000","00000000","2152410f"],["fffffffe","ffff0000","00000000","00000000","0000fffe"],["fffffffe","ffff8000","00000000","00000000","00007ffe"],["fffffffe","ffffffe0","00000000","00000000","0000001e"],["fffffffe","ffffffe1","00000000","00000000","0000001d"],["fffffffe","fffffff9","00000000","00000000","00000005"],["fffffffe","fffffffd","00000000","00000000","00000001"],["fffffffe","fffffffe","00000000","00000000","00000000"],["fffffffe","ffffffff","00000000","00000000","fffffffe"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000001","00000000","00000000","00000000"],["ffffffff","00000002","00000000","00000000","00000001"],["ffffffff","00000003","00000000","00000000","00000000"],["ffffffff","00000005","00000000","00000000","00000000"],["ffffffff","00000007","00000000","00000000","00000003"],["ffffffff","0000001f","00000000","00000000","00000003"],["ffffffff","00000020","00000000","00000000","0000001f"],["ffffffff","00000021","00000000","00000000","00000003"],["ffffffff","0000003f","00000000","00000000","00000003"],["ffffffff","00000040","00000000","00000000","0000003f"],["ffffffff","000000ff","00000000","00000000","00000000"],["ffffffff","00007fff","00000000","00000000","00000003"],["ffffffff","00008000","00000000","00000000","00007fff"],["ffffffff","0000ffff","00000000","00000000","00000000"],["ffffffff","00010000","00000000","00000000","0000ffff"],["ffffffff","55555555","00000000","00000000","00000000"],["ffffffff","7ffffffe","00000000","00000000","00000003"],["ffffffff","7fffffff","00000000","00000000","00000001"],["ffffffff","80000000","00000000","00000000","7fffffff"],["ffffffff","80000001","00000000","00000000","7ffffffe"],["ffffffff","aaaaaaaa","00000000","00000000","55555555"],["ffffffff","deadbeef","00000000","00000000","21524110"],["ffffffff","ffff0000","00000000","00000000","0000ffff"],["ffffffff","ffff8000","00000000","00000000","00007fff"],["ffffffff","ffffffe0","00000000","00000000","0000001f"],["ffffffff","ffffffe1","00000000","00000000","0000001e"],["ffffffff","fffffff9","00000000","00000000","00000006"],["ffffffff","fffffffd","00000000","00000000","00000002"],["ffffffff","fffffffe","00000000","00000000","00000001"],["ffffffff","ffffffff","00000000","00000000","00000000"]]} +{"op":"div_i32","code":9,"wgsl":"ia / ib","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000002","00000000","00000000","00000000"],["00000000","00000003","00000000","00000000","00000000"],["00000000","00000005","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","0000001f","00000000","00000000","00000000"],["00000000","00000020","00000000","00000000","00000000"],["00000000","00000021","00000000","00000000","00000000"],["00000000","0000003f","00000000","00000000","00000000"],["00000000","00000040","00000000","00000000","00000000"],["00000000","000000ff","00000000","00000000","00000000"],["00000000","00007fff","00000000","00000000","00000000"],["00000000","00008000","00000000","00000000","00000000"],["00000000","0000ffff","00000000","00000000","00000000"],["00000000","00010000","00000000","00000000","00000000"],["00000000","55555555","00000000","00000000","00000000"],["00000000","7ffffffe","00000000","00000000","00000000"],["00000000","7fffffff","00000000","00000000","00000000"],["00000000","80000000","00000000","00000000","00000000"],["00000000","80000001","00000000","00000000","00000000"],["00000000","aaaaaaaa","00000000","00000000","00000000"],["00000000","deadbeef","00000000","00000000","00000000"],["00000000","ffff0000","00000000","00000000","00000000"],["00000000","ffff8000","00000000","00000000","00000000"],["00000000","ffffffe0","00000000","00000000","00000000"],["00000000","ffffffe1","00000000","00000000","00000000"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","fffffffd","00000000","00000000","00000000"],["00000000","fffffffe","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000002","00000000","00000000","00000000"],["00000001","00000003","00000000","00000000","00000000"],["00000001","00000005","00000000","00000000","00000000"],["00000001","00000007","00000000","00000000","00000000"],["00000001","0000001f","00000000","00000000","00000000"],["00000001","00000020","00000000","00000000","00000000"],["00000001","00000021","00000000","00000000","00000000"],["00000001","0000003f","00000000","00000000","00000000"],["00000001","00000040","00000000","00000000","00000000"],["00000001","000000ff","00000000","00000000","00000000"],["00000001","00007fff","00000000","00000000","00000000"],["00000001","00008000","00000000","00000000","00000000"],["00000001","0000ffff","00000000","00000000","00000000"],["00000001","00010000","00000000","00000000","00000000"],["00000001","55555555","00000000","00000000","00000000"],["00000001","7ffffffe","00000000","00000000","00000000"],["00000001","7fffffff","00000000","00000000","00000000"],["00000001","80000000","00000000","00000000","00000000"],["00000001","80000001","00000000","00000000","00000000"],["00000001","aaaaaaaa","00000000","00000000","00000000"],["00000001","deadbeef","00000000","00000000","00000000"],["00000001","ffff0000","00000000","00000000","00000000"],["00000001","ffff8000","00000000","00000000","00000000"],["00000001","ffffffe0","00000000","00000000","00000000"],["00000001","ffffffe1","00000000","00000000","00000000"],["00000001","fffffff9","00000000","00000000","00000000"],["00000001","fffffffd","00000000","00000000","00000000"],["00000001","fffffffe","00000000","00000000","00000000"],["00000001","ffffffff","00000000","00000000","ffffffff"],["00000002","00000000","00000000","00000000","00000002"],["00000002","00000001","00000000","00000000","00000002"],["00000002","00000002","00000000","00000000","00000001"],["00000002","00000003","00000000","00000000","00000000"],["00000002","00000005","00000000","00000000","00000000"],["00000002","00000007","00000000","00000000","00000000"],["00000002","0000001f","00000000","00000000","00000000"],["00000002","00000020","00000000","00000000","00000000"],["00000002","00000021","00000000","00000000","00000000"],["00000002","0000003f","00000000","00000000","00000000"],["00000002","00000040","00000000","00000000","00000000"],["00000002","000000ff","00000000","00000000","00000000"],["00000002","00007fff","00000000","00000000","00000000"],["00000002","00008000","00000000","00000000","00000000"],["00000002","0000ffff","00000000","00000000","00000000"],["00000002","00010000","00000000","00000000","00000000"],["00000002","55555555","00000000","00000000","00000000"],["00000002","7ffffffe","00000000","00000000","00000000"],["00000002","7fffffff","00000000","00000000","00000000"],["00000002","80000000","00000000","00000000","00000000"],["00000002","80000001","00000000","00000000","00000000"],["00000002","aaaaaaaa","00000000","00000000","00000000"],["00000002","deadbeef","00000000","00000000","00000000"],["00000002","ffff0000","00000000","00000000","00000000"],["00000002","ffff8000","00000000","00000000","00000000"],["00000002","ffffffe0","00000000","00000000","00000000"],["00000002","ffffffe1","00000000","00000000","00000000"],["00000002","fffffff9","00000000","00000000","00000000"],["00000002","fffffffd","00000000","00000000","00000000"],["00000002","fffffffe","00000000","00000000","ffffffff"],["00000002","ffffffff","00000000","00000000","fffffffe"],["00000003","00000000","00000000","00000000","00000003"],["00000003","00000001","00000000","00000000","00000003"],["00000003","00000002","00000000","00000000","00000001"],["00000003","00000003","00000000","00000000","00000001"],["00000003","00000005","00000000","00000000","00000000"],["00000003","00000007","00000000","00000000","00000000"],["00000003","0000001f","00000000","00000000","00000000"],["00000003","00000020","00000000","00000000","00000000"],["00000003","00000021","00000000","00000000","00000000"],["00000003","0000003f","00000000","00000000","00000000"],["00000003","00000040","00000000","00000000","00000000"],["00000003","000000ff","00000000","00000000","00000000"],["00000003","00007fff","00000000","00000000","00000000"],["00000003","00008000","00000000","00000000","00000000"],["00000003","0000ffff","00000000","00000000","00000000"],["00000003","00010000","00000000","00000000","00000000"],["00000003","55555555","00000000","00000000","00000000"],["00000003","7ffffffe","00000000","00000000","00000000"],["00000003","7fffffff","00000000","00000000","00000000"],["00000003","80000000","00000000","00000000","00000000"],["00000003","80000001","00000000","00000000","00000000"],["00000003","aaaaaaaa","00000000","00000000","00000000"],["00000003","deadbeef","00000000","00000000","00000000"],["00000003","ffff0000","00000000","00000000","00000000"],["00000003","ffff8000","00000000","00000000","00000000"],["00000003","ffffffe0","00000000","00000000","00000000"],["00000003","ffffffe1","00000000","00000000","00000000"],["00000003","fffffff9","00000000","00000000","00000000"],["00000003","fffffffd","00000000","00000000","ffffffff"],["00000003","fffffffe","00000000","00000000","ffffffff"],["00000003","ffffffff","00000000","00000000","fffffffd"],["00000005","00000000","00000000","00000000","00000005"],["00000005","00000001","00000000","00000000","00000005"],["00000005","00000002","00000000","00000000","00000002"],["00000005","00000003","00000000","00000000","00000001"],["00000005","00000005","00000000","00000000","00000001"],["00000005","00000007","00000000","00000000","00000000"],["00000005","0000001f","00000000","00000000","00000000"],["00000005","00000020","00000000","00000000","00000000"],["00000005","00000021","00000000","00000000","00000000"],["00000005","0000003f","00000000","00000000","00000000"],["00000005","00000040","00000000","00000000","00000000"],["00000005","000000ff","00000000","00000000","00000000"],["00000005","00007fff","00000000","00000000","00000000"],["00000005","00008000","00000000","00000000","00000000"],["00000005","0000ffff","00000000","00000000","00000000"],["00000005","00010000","00000000","00000000","00000000"],["00000005","55555555","00000000","00000000","00000000"],["00000005","7ffffffe","00000000","00000000","00000000"],["00000005","7fffffff","00000000","00000000","00000000"],["00000005","80000000","00000000","00000000","00000000"],["00000005","80000001","00000000","00000000","00000000"],["00000005","aaaaaaaa","00000000","00000000","00000000"],["00000005","deadbeef","00000000","00000000","00000000"],["00000005","ffff0000","00000000","00000000","00000000"],["00000005","ffff8000","00000000","00000000","00000000"],["00000005","ffffffe0","00000000","00000000","00000000"],["00000005","ffffffe1","00000000","00000000","00000000"],["00000005","fffffff9","00000000","00000000","00000000"],["00000005","fffffffd","00000000","00000000","ffffffff"],["00000005","fffffffe","00000000","00000000","fffffffe"],["00000005","ffffffff","00000000","00000000","fffffffb"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","00000007"],["00000007","00000002","00000000","00000000","00000003"],["00000007","00000003","00000000","00000000","00000002"],["00000007","00000005","00000000","00000000","00000001"],["00000007","00000007","00000000","00000000","00000001"],["00000007","0000001f","00000000","00000000","00000000"],["00000007","00000020","00000000","00000000","00000000"],["00000007","00000021","00000000","00000000","00000000"],["00000007","0000003f","00000000","00000000","00000000"],["00000007","00000040","00000000","00000000","00000000"],["00000007","000000ff","00000000","00000000","00000000"],["00000007","00007fff","00000000","00000000","00000000"],["00000007","00008000","00000000","00000000","00000000"],["00000007","0000ffff","00000000","00000000","00000000"],["00000007","00010000","00000000","00000000","00000000"],["00000007","55555555","00000000","00000000","00000000"],["00000007","7ffffffe","00000000","00000000","00000000"],["00000007","7fffffff","00000000","00000000","00000000"],["00000007","80000000","00000000","00000000","00000000"],["00000007","80000001","00000000","00000000","00000000"],["00000007","aaaaaaaa","00000000","00000000","00000000"],["00000007","deadbeef","00000000","00000000","00000000"],["00000007","ffff0000","00000000","00000000","00000000"],["00000007","ffff8000","00000000","00000000","00000000"],["00000007","ffffffe0","00000000","00000000","00000000"],["00000007","ffffffe1","00000000","00000000","00000000"],["00000007","fffffff9","00000000","00000000","ffffffff"],["00000007","fffffffd","00000000","00000000","fffffffe"],["00000007","fffffffe","00000000","00000000","fffffffd"],["00000007","ffffffff","00000000","00000000","fffffff9"],["0000001f","00000000","00000000","00000000","0000001f"],["0000001f","00000001","00000000","00000000","0000001f"],["0000001f","00000002","00000000","00000000","0000000f"],["0000001f","00000003","00000000","00000000","0000000a"],["0000001f","00000005","00000000","00000000","00000006"],["0000001f","00000007","00000000","00000000","00000004"],["0000001f","0000001f","00000000","00000000","00000001"],["0000001f","00000020","00000000","00000000","00000000"],["0000001f","00000021","00000000","00000000","00000000"],["0000001f","0000003f","00000000","00000000","00000000"],["0000001f","00000040","00000000","00000000","00000000"],["0000001f","000000ff","00000000","00000000","00000000"],["0000001f","00007fff","00000000","00000000","00000000"],["0000001f","00008000","00000000","00000000","00000000"],["0000001f","0000ffff","00000000","00000000","00000000"],["0000001f","00010000","00000000","00000000","00000000"],["0000001f","55555555","00000000","00000000","00000000"],["0000001f","7ffffffe","00000000","00000000","00000000"],["0000001f","7fffffff","00000000","00000000","00000000"],["0000001f","80000000","00000000","00000000","00000000"],["0000001f","80000001","00000000","00000000","00000000"],["0000001f","aaaaaaaa","00000000","00000000","00000000"],["0000001f","deadbeef","00000000","00000000","00000000"],["0000001f","ffff0000","00000000","00000000","00000000"],["0000001f","ffff8000","00000000","00000000","00000000"],["0000001f","ffffffe0","00000000","00000000","00000000"],["0000001f","ffffffe1","00000000","00000000","ffffffff"],["0000001f","fffffff9","00000000","00000000","fffffffc"],["0000001f","fffffffd","00000000","00000000","fffffff6"],["0000001f","fffffffe","00000000","00000000","fffffff1"],["0000001f","ffffffff","00000000","00000000","ffffffe1"],["00000020","00000000","00000000","00000000","00000020"],["00000020","00000001","00000000","00000000","00000020"],["00000020","00000002","00000000","00000000","00000010"],["00000020","00000003","00000000","00000000","0000000a"],["00000020","00000005","00000000","00000000","00000006"],["00000020","00000007","00000000","00000000","00000004"],["00000020","0000001f","00000000","00000000","00000001"],["00000020","00000020","00000000","00000000","00000001"],["00000020","00000021","00000000","00000000","00000000"],["00000020","0000003f","00000000","00000000","00000000"],["00000020","00000040","00000000","00000000","00000000"],["00000020","000000ff","00000000","00000000","00000000"],["00000020","00007fff","00000000","00000000","00000000"],["00000020","00008000","00000000","00000000","00000000"],["00000020","0000ffff","00000000","00000000","00000000"],["00000020","00010000","00000000","00000000","00000000"],["00000020","55555555","00000000","00000000","00000000"],["00000020","7ffffffe","00000000","00000000","00000000"],["00000020","7fffffff","00000000","00000000","00000000"],["00000020","80000000","00000000","00000000","00000000"],["00000020","80000001","00000000","00000000","00000000"],["00000020","aaaaaaaa","00000000","00000000","00000000"],["00000020","deadbeef","00000000","00000000","00000000"],["00000020","ffff0000","00000000","00000000","00000000"],["00000020","ffff8000","00000000","00000000","00000000"],["00000020","ffffffe0","00000000","00000000","ffffffff"],["00000020","ffffffe1","00000000","00000000","ffffffff"],["00000020","fffffff9","00000000","00000000","fffffffc"],["00000020","fffffffd","00000000","00000000","fffffff6"],["00000020","fffffffe","00000000","00000000","fffffff0"],["00000020","ffffffff","00000000","00000000","ffffffe0"],["00000021","00000000","00000000","00000000","00000021"],["00000021","00000001","00000000","00000000","00000021"],["00000021","00000002","00000000","00000000","00000010"],["00000021","00000003","00000000","00000000","0000000b"],["00000021","00000005","00000000","00000000","00000006"],["00000021","00000007","00000000","00000000","00000004"],["00000021","0000001f","00000000","00000000","00000001"],["00000021","00000020","00000000","00000000","00000001"],["00000021","00000021","00000000","00000000","00000001"],["00000021","0000003f","00000000","00000000","00000000"],["00000021","00000040","00000000","00000000","00000000"],["00000021","000000ff","00000000","00000000","00000000"],["00000021","00007fff","00000000","00000000","00000000"],["00000021","00008000","00000000","00000000","00000000"],["00000021","0000ffff","00000000","00000000","00000000"],["00000021","00010000","00000000","00000000","00000000"],["00000021","55555555","00000000","00000000","00000000"],["00000021","7ffffffe","00000000","00000000","00000000"],["00000021","7fffffff","00000000","00000000","00000000"],["00000021","80000000","00000000","00000000","00000000"],["00000021","80000001","00000000","00000000","00000000"],["00000021","aaaaaaaa","00000000","00000000","00000000"],["00000021","deadbeef","00000000","00000000","00000000"],["00000021","ffff0000","00000000","00000000","00000000"],["00000021","ffff8000","00000000","00000000","00000000"],["00000021","ffffffe0","00000000","00000000","ffffffff"],["00000021","ffffffe1","00000000","00000000","ffffffff"],["00000021","fffffff9","00000000","00000000","fffffffc"],["00000021","fffffffd","00000000","00000000","fffffff5"],["00000021","fffffffe","00000000","00000000","fffffff0"],["00000021","ffffffff","00000000","00000000","ffffffdf"],["0000003f","00000000","00000000","00000000","0000003f"],["0000003f","00000001","00000000","00000000","0000003f"],["0000003f","00000002","00000000","00000000","0000001f"],["0000003f","00000003","00000000","00000000","00000015"],["0000003f","00000005","00000000","00000000","0000000c"],["0000003f","00000007","00000000","00000000","00000009"],["0000003f","0000001f","00000000","00000000","00000002"],["0000003f","00000020","00000000","00000000","00000001"],["0000003f","00000021","00000000","00000000","00000001"],["0000003f","0000003f","00000000","00000000","00000001"],["0000003f","00000040","00000000","00000000","00000000"],["0000003f","000000ff","00000000","00000000","00000000"],["0000003f","00007fff","00000000","00000000","00000000"],["0000003f","00008000","00000000","00000000","00000000"],["0000003f","0000ffff","00000000","00000000","00000000"],["0000003f","00010000","00000000","00000000","00000000"],["0000003f","55555555","00000000","00000000","00000000"],["0000003f","7ffffffe","00000000","00000000","00000000"],["0000003f","7fffffff","00000000","00000000","00000000"],["0000003f","80000000","00000000","00000000","00000000"],["0000003f","80000001","00000000","00000000","00000000"],["0000003f","aaaaaaaa","00000000","00000000","00000000"],["0000003f","deadbeef","00000000","00000000","00000000"],["0000003f","ffff0000","00000000","00000000","00000000"],["0000003f","ffff8000","00000000","00000000","00000000"],["0000003f","ffffffe0","00000000","00000000","ffffffff"],["0000003f","ffffffe1","00000000","00000000","fffffffe"],["0000003f","fffffff9","00000000","00000000","fffffff7"],["0000003f","fffffffd","00000000","00000000","ffffffeb"],["0000003f","fffffffe","00000000","00000000","ffffffe1"],["0000003f","ffffffff","00000000","00000000","ffffffc1"],["00000040","00000000","00000000","00000000","00000040"],["00000040","00000001","00000000","00000000","00000040"],["00000040","00000002","00000000","00000000","00000020"],["00000040","00000003","00000000","00000000","00000015"],["00000040","00000005","00000000","00000000","0000000c"],["00000040","00000007","00000000","00000000","00000009"],["00000040","0000001f","00000000","00000000","00000002"],["00000040","00000020","00000000","00000000","00000002"],["00000040","00000021","00000000","00000000","00000001"],["00000040","0000003f","00000000","00000000","00000001"],["00000040","00000040","00000000","00000000","00000001"],["00000040","000000ff","00000000","00000000","00000000"],["00000040","00007fff","00000000","00000000","00000000"],["00000040","00008000","00000000","00000000","00000000"],["00000040","0000ffff","00000000","00000000","00000000"],["00000040","00010000","00000000","00000000","00000000"],["00000040","55555555","00000000","00000000","00000000"],["00000040","7ffffffe","00000000","00000000","00000000"],["00000040","7fffffff","00000000","00000000","00000000"],["00000040","80000000","00000000","00000000","00000000"],["00000040","80000001","00000000","00000000","00000000"],["00000040","aaaaaaaa","00000000","00000000","00000000"],["00000040","deadbeef","00000000","00000000","00000000"],["00000040","ffff0000","00000000","00000000","00000000"],["00000040","ffff8000","00000000","00000000","00000000"],["00000040","ffffffe0","00000000","00000000","fffffffe"],["00000040","ffffffe1","00000000","00000000","fffffffe"],["00000040","fffffff9","00000000","00000000","fffffff7"],["00000040","fffffffd","00000000","00000000","ffffffeb"],["00000040","fffffffe","00000000","00000000","ffffffe0"],["00000040","ffffffff","00000000","00000000","ffffffc0"],["000000ff","00000000","00000000","00000000","000000ff"],["000000ff","00000001","00000000","00000000","000000ff"],["000000ff","00000002","00000000","00000000","0000007f"],["000000ff","00000003","00000000","00000000","00000055"],["000000ff","00000005","00000000","00000000","00000033"],["000000ff","00000007","00000000","00000000","00000024"],["000000ff","0000001f","00000000","00000000","00000008"],["000000ff","00000020","00000000","00000000","00000007"],["000000ff","00000021","00000000","00000000","00000007"],["000000ff","0000003f","00000000","00000000","00000004"],["000000ff","00000040","00000000","00000000","00000003"],["000000ff","000000ff","00000000","00000000","00000001"],["000000ff","00007fff","00000000","00000000","00000000"],["000000ff","00008000","00000000","00000000","00000000"],["000000ff","0000ffff","00000000","00000000","00000000"],["000000ff","00010000","00000000","00000000","00000000"],["000000ff","55555555","00000000","00000000","00000000"],["000000ff","7ffffffe","00000000","00000000","00000000"],["000000ff","7fffffff","00000000","00000000","00000000"],["000000ff","80000000","00000000","00000000","00000000"],["000000ff","80000001","00000000","00000000","00000000"],["000000ff","aaaaaaaa","00000000","00000000","00000000"],["000000ff","deadbeef","00000000","00000000","00000000"],["000000ff","ffff0000","00000000","00000000","00000000"],["000000ff","ffff8000","00000000","00000000","00000000"],["000000ff","ffffffe0","00000000","00000000","fffffff9"],["000000ff","ffffffe1","00000000","00000000","fffffff8"],["000000ff","fffffff9","00000000","00000000","ffffffdc"],["000000ff","fffffffd","00000000","00000000","ffffffab"],["000000ff","fffffffe","00000000","00000000","ffffff81"],["000000ff","ffffffff","00000000","00000000","ffffff01"],["00007fff","00000000","00000000","00000000","00007fff"],["00007fff","00000001","00000000","00000000","00007fff"],["00007fff","00000002","00000000","00000000","00003fff"],["00007fff","00000003","00000000","00000000","00002aaa"],["00007fff","00000005","00000000","00000000","00001999"],["00007fff","00000007","00000000","00000000","00001249"],["00007fff","0000001f","00000000","00000000","00000421"],["00007fff","00000020","00000000","00000000","000003ff"],["00007fff","00000021","00000000","00000000","000003e0"],["00007fff","0000003f","00000000","00000000","00000208"],["00007fff","00000040","00000000","00000000","000001ff"],["00007fff","000000ff","00000000","00000000","00000080"],["00007fff","00007fff","00000000","00000000","00000001"],["00007fff","00008000","00000000","00000000","00000000"],["00007fff","0000ffff","00000000","00000000","00000000"],["00007fff","00010000","00000000","00000000","00000000"],["00007fff","55555555","00000000","00000000","00000000"],["00007fff","7ffffffe","00000000","00000000","00000000"],["00007fff","7fffffff","00000000","00000000","00000000"],["00007fff","80000000","00000000","00000000","00000000"],["00007fff","80000001","00000000","00000000","00000000"],["00007fff","aaaaaaaa","00000000","00000000","00000000"],["00007fff","deadbeef","00000000","00000000","00000000"],["00007fff","ffff0000","00000000","00000000","00000000"],["00007fff","ffff8000","00000000","00000000","00000000"],["00007fff","ffffffe0","00000000","00000000","fffffc01"],["00007fff","ffffffe1","00000000","00000000","fffffbdf"],["00007fff","fffffff9","00000000","00000000","ffffedb7"],["00007fff","fffffffd","00000000","00000000","ffffd556"],["00007fff","fffffffe","00000000","00000000","ffffc001"],["00007fff","ffffffff","00000000","00000000","ffff8001"],["00008000","00000000","00000000","00000000","00008000"],["00008000","00000001","00000000","00000000","00008000"],["00008000","00000002","00000000","00000000","00004000"],["00008000","00000003","00000000","00000000","00002aaa"],["00008000","00000005","00000000","00000000","00001999"],["00008000","00000007","00000000","00000000","00001249"],["00008000","0000001f","00000000","00000000","00000421"],["00008000","00000020","00000000","00000000","00000400"],["00008000","00000021","00000000","00000000","000003e0"],["00008000","0000003f","00000000","00000000","00000208"],["00008000","00000040","00000000","00000000","00000200"],["00008000","000000ff","00000000","00000000","00000080"],["00008000","00007fff","00000000","00000000","00000001"],["00008000","00008000","00000000","00000000","00000001"],["00008000","0000ffff","00000000","00000000","00000000"],["00008000","00010000","00000000","00000000","00000000"],["00008000","55555555","00000000","00000000","00000000"],["00008000","7ffffffe","00000000","00000000","00000000"],["00008000","7fffffff","00000000","00000000","00000000"],["00008000","80000000","00000000","00000000","00000000"],["00008000","80000001","00000000","00000000","00000000"],["00008000","aaaaaaaa","00000000","00000000","00000000"],["00008000","deadbeef","00000000","00000000","00000000"],["00008000","ffff0000","00000000","00000000","00000000"],["00008000","ffff8000","00000000","00000000","ffffffff"],["00008000","ffffffe0","00000000","00000000","fffffc00"],["00008000","ffffffe1","00000000","00000000","fffffbdf"],["00008000","fffffff9","00000000","00000000","ffffedb7"],["00008000","fffffffd","00000000","00000000","ffffd556"],["00008000","fffffffe","00000000","00000000","ffffc000"],["00008000","ffffffff","00000000","00000000","ffff8000"],["0000ffff","00000000","00000000","00000000","0000ffff"],["0000ffff","00000001","00000000","00000000","0000ffff"],["0000ffff","00000002","00000000","00000000","00007fff"],["0000ffff","00000003","00000000","00000000","00005555"],["0000ffff","00000005","00000000","00000000","00003333"],["0000ffff","00000007","00000000","00000000","00002492"],["0000ffff","0000001f","00000000","00000000","00000842"],["0000ffff","00000020","00000000","00000000","000007ff"],["0000ffff","00000021","00000000","00000000","000007c1"],["0000ffff","0000003f","00000000","00000000","00000410"],["0000ffff","00000040","00000000","00000000","000003ff"],["0000ffff","000000ff","00000000","00000000","00000101"],["0000ffff","00007fff","00000000","00000000","00000002"],["0000ffff","00008000","00000000","00000000","00000001"],["0000ffff","0000ffff","00000000","00000000","00000001"],["0000ffff","00010000","00000000","00000000","00000000"],["0000ffff","55555555","00000000","00000000","00000000"],["0000ffff","7ffffffe","00000000","00000000","00000000"],["0000ffff","7fffffff","00000000","00000000","00000000"],["0000ffff","80000000","00000000","00000000","00000000"],["0000ffff","80000001","00000000","00000000","00000000"],["0000ffff","aaaaaaaa","00000000","00000000","00000000"],["0000ffff","deadbeef","00000000","00000000","00000000"],["0000ffff","ffff0000","00000000","00000000","00000000"],["0000ffff","ffff8000","00000000","00000000","ffffffff"],["0000ffff","ffffffe0","00000000","00000000","fffff801"],["0000ffff","ffffffe1","00000000","00000000","fffff7be"],["0000ffff","fffffff9","00000000","00000000","ffffdb6e"],["0000ffff","fffffffd","00000000","00000000","ffffaaab"],["0000ffff","fffffffe","00000000","00000000","ffff8001"],["0000ffff","ffffffff","00000000","00000000","ffff0001"],["00010000","00000000","00000000","00000000","00010000"],["00010000","00000001","00000000","00000000","00010000"],["00010000","00000002","00000000","00000000","00008000"],["00010000","00000003","00000000","00000000","00005555"],["00010000","00000005","00000000","00000000","00003333"],["00010000","00000007","00000000","00000000","00002492"],["00010000","0000001f","00000000","00000000","00000842"],["00010000","00000020","00000000","00000000","00000800"],["00010000","00000021","00000000","00000000","000007c1"],["00010000","0000003f","00000000","00000000","00000410"],["00010000","00000040","00000000","00000000","00000400"],["00010000","000000ff","00000000","00000000","00000101"],["00010000","00007fff","00000000","00000000","00000002"],["00010000","00008000","00000000","00000000","00000002"],["00010000","0000ffff","00000000","00000000","00000001"],["00010000","00010000","00000000","00000000","00000001"],["00010000","55555555","00000000","00000000","00000000"],["00010000","7ffffffe","00000000","00000000","00000000"],["00010000","7fffffff","00000000","00000000","00000000"],["00010000","80000000","00000000","00000000","00000000"],["00010000","80000001","00000000","00000000","00000000"],["00010000","aaaaaaaa","00000000","00000000","00000000"],["00010000","deadbeef","00000000","00000000","00000000"],["00010000","ffff0000","00000000","00000000","ffffffff"],["00010000","ffff8000","00000000","00000000","fffffffe"],["00010000","ffffffe0","00000000","00000000","fffff800"],["00010000","ffffffe1","00000000","00000000","fffff7be"],["00010000","fffffff9","00000000","00000000","ffffdb6e"],["00010000","fffffffd","00000000","00000000","ffffaaab"],["00010000","fffffffe","00000000","00000000","ffff8000"],["00010000","ffffffff","00000000","00000000","ffff0000"],["55555555","00000000","00000000","00000000","55555555"],["55555555","00000001","00000000","00000000","55555555"],["55555555","00000002","00000000","00000000","2aaaaaaa"],["55555555","00000003","00000000","00000000","1c71c71c"],["55555555","00000005","00000000","00000000","11111111"],["55555555","00000007","00000000","00000000","0c30c30c"],["55555555","0000001f","00000000","00000000","02c0b02c"],["55555555","00000020","00000000","00000000","02aaaaaa"],["55555555","00000021","00000000","00000000","0295fad4"],["55555555","0000003f","00000000","00000000","015ac056"],["55555555","00000040","00000000","00000000","01555555"],["55555555","000000ff","00000000","00000000","0055ab00"],["55555555","00007fff","00000000","00000000","0000aaac"],["55555555","00008000","00000000","00000000","0000aaaa"],["55555555","0000ffff","00000000","00000000","00005555"],["55555555","00010000","00000000","00000000","00005555"],["55555555","55555555","00000000","00000000","00000001"],["55555555","7ffffffe","00000000","00000000","00000000"],["55555555","7fffffff","00000000","00000000","00000000"],["55555555","80000000","00000000","00000000","00000000"],["55555555","80000001","00000000","00000000","00000000"],["55555555","aaaaaaaa","00000000","00000000","00000000"],["55555555","deadbeef","00000000","00000000","fffffffe"],["55555555","ffff0000","00000000","00000000","ffffaaab"],["55555555","ffff8000","00000000","00000000","ffff5556"],["55555555","ffffffe0","00000000","00000000","fd555556"],["55555555","ffffffe1","00000000","00000000","fd3f4fd4"],["55555555","fffffff9","00000000","00000000","f3cf3cf4"],["55555555","fffffffd","00000000","00000000","e38e38e4"],["55555555","fffffffe","00000000","00000000","d5555556"],["55555555","ffffffff","00000000","00000000","aaaaaaab"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7ffffffe","00000001","00000000","00000000","7ffffffe"],["7ffffffe","00000002","00000000","00000000","3fffffff"],["7ffffffe","00000003","00000000","00000000","2aaaaaaa"],["7ffffffe","00000005","00000000","00000000","19999999"],["7ffffffe","00000007","00000000","00000000","12492492"],["7ffffffe","0000001f","00000000","00000000","04210842"],["7ffffffe","00000020","00000000","00000000","03ffffff"],["7ffffffe","00000021","00000000","00000000","03e0f83e"],["7ffffffe","0000003f","00000000","00000000","02082082"],["7ffffffe","00000040","00000000","00000000","01ffffff"],["7ffffffe","000000ff","00000000","00000000","00808080"],["7ffffffe","00007fff","00000000","00000000","00010002"],["7ffffffe","00008000","00000000","00000000","0000ffff"],["7ffffffe","0000ffff","00000000","00000000","00008000"],["7ffffffe","00010000","00000000","00000000","00007fff"],["7ffffffe","55555555","00000000","00000000","00000001"],["7ffffffe","7ffffffe","00000000","00000000","00000001"],["7ffffffe","7fffffff","00000000","00000000","00000000"],["7ffffffe","80000000","00000000","00000000","00000000"],["7ffffffe","80000001","00000000","00000000","00000000"],["7ffffffe","aaaaaaaa","00000000","00000000","ffffffff"],["7ffffffe","deadbeef","00000000","00000000","fffffffd"],["7ffffffe","ffff0000","00000000","00000000","ffff8001"],["7ffffffe","ffff8000","00000000","00000000","ffff0001"],["7ffffffe","ffffffe0","00000000","00000000","fc000001"],["7ffffffe","ffffffe1","00000000","00000000","fbdef7be"],["7ffffffe","fffffff9","00000000","00000000","edb6db6e"],["7ffffffe","fffffffd","00000000","00000000","d5555556"],["7ffffffe","fffffffe","00000000","00000000","c0000001"],["7ffffffe","ffffffff","00000000","00000000","80000002"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","7fffffff"],["7fffffff","00000002","00000000","00000000","3fffffff"],["7fffffff","00000003","00000000","00000000","2aaaaaaa"],["7fffffff","00000005","00000000","00000000","19999999"],["7fffffff","00000007","00000000","00000000","12492492"],["7fffffff","0000001f","00000000","00000000","04210842"],["7fffffff","00000020","00000000","00000000","03ffffff"],["7fffffff","00000021","00000000","00000000","03e0f83e"],["7fffffff","0000003f","00000000","00000000","02082082"],["7fffffff","00000040","00000000","00000000","01ffffff"],["7fffffff","000000ff","00000000","00000000","00808080"],["7fffffff","00007fff","00000000","00000000","00010002"],["7fffffff","00008000","00000000","00000000","0000ffff"],["7fffffff","0000ffff","00000000","00000000","00008000"],["7fffffff","00010000","00000000","00000000","00007fff"],["7fffffff","55555555","00000000","00000000","00000001"],["7fffffff","7ffffffe","00000000","00000000","00000001"],["7fffffff","7fffffff","00000000","00000000","00000001"],["7fffffff","80000000","00000000","00000000","00000000"],["7fffffff","80000001","00000000","00000000","ffffffff"],["7fffffff","aaaaaaaa","00000000","00000000","ffffffff"],["7fffffff","deadbeef","00000000","00000000","fffffffd"],["7fffffff","ffff0000","00000000","00000000","ffff8001"],["7fffffff","ffff8000","00000000","00000000","ffff0001"],["7fffffff","ffffffe0","00000000","00000000","fc000001"],["7fffffff","ffffffe1","00000000","00000000","fbdef7be"],["7fffffff","fffffff9","00000000","00000000","edb6db6e"],["7fffffff","fffffffd","00000000","00000000","d5555556"],["7fffffff","fffffffe","00000000","00000000","c0000001"],["7fffffff","ffffffff","00000000","00000000","80000001"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","80000000"],["80000000","00000002","00000000","00000000","c0000000"],["80000000","00000003","00000000","00000000","d5555556"],["80000000","00000005","00000000","00000000","e6666667"],["80000000","00000007","00000000","00000000","edb6db6e"],["80000000","0000001f","00000000","00000000","fbdef7be"],["80000000","00000020","00000000","00000000","fc000000"],["80000000","00000021","00000000","00000000","fc1f07c2"],["80000000","0000003f","00000000","00000000","fdf7df7e"],["80000000","00000040","00000000","00000000","fe000000"],["80000000","000000ff","00000000","00000000","ff7f7f80"],["80000000","00007fff","00000000","00000000","fffefffe"],["80000000","00008000","00000000","00000000","ffff0000"],["80000000","0000ffff","00000000","00000000","ffff8000"],["80000000","00010000","00000000","00000000","ffff8000"],["80000000","55555555","00000000","00000000","ffffffff"],["80000000","7ffffffe","00000000","00000000","ffffffff"],["80000000","7fffffff","00000000","00000000","ffffffff"],["80000000","80000000","00000000","00000000","00000001"],["80000000","80000001","00000000","00000000","00000001"],["80000000","aaaaaaaa","00000000","00000000","00000001"],["80000000","deadbeef","00000000","00000000","00000003"],["80000000","ffff0000","00000000","00000000","00008000"],["80000000","ffff8000","00000000","00000000","00010000"],["80000000","ffffffe0","00000000","00000000","04000000"],["80000000","ffffffe1","00000000","00000000","04210842"],["80000000","fffffff9","00000000","00000000","12492492"],["80000000","fffffffd","00000000","00000000","2aaaaaaa"],["80000000","fffffffe","00000000","00000000","40000000"],["80000000","ffffffff","00000000","00000000","80000000"],["80000001","00000000","00000000","00000000","80000001"],["80000001","00000001","00000000","00000000","80000001"],["80000001","00000002","00000000","00000000","c0000001"],["80000001","00000003","00000000","00000000","d5555556"],["80000001","00000005","00000000","00000000","e6666667"],["80000001","00000007","00000000","00000000","edb6db6e"],["80000001","0000001f","00000000","00000000","fbdef7be"],["80000001","00000020","00000000","00000000","fc000001"],["80000001","00000021","00000000","00000000","fc1f07c2"],["80000001","0000003f","00000000","00000000","fdf7df7e"],["80000001","00000040","00000000","00000000","fe000001"],["80000001","000000ff","00000000","00000000","ff7f7f80"],["80000001","00007fff","00000000","00000000","fffefffe"],["80000001","00008000","00000000","00000000","ffff0001"],["80000001","0000ffff","00000000","00000000","ffff8000"],["80000001","00010000","00000000","00000000","ffff8001"],["80000001","55555555","00000000","00000000","ffffffff"],["80000001","7ffffffe","00000000","00000000","ffffffff"],["80000001","7fffffff","00000000","00000000","ffffffff"],["80000001","80000000","00000000","00000000","00000000"],["80000001","80000001","00000000","00000000","00000001"],["80000001","aaaaaaaa","00000000","00000000","00000001"],["80000001","deadbeef","00000000","00000000","00000003"],["80000001","ffff0000","00000000","00000000","00007fff"],["80000001","ffff8000","00000000","00000000","0000ffff"],["80000001","ffffffe0","00000000","00000000","03ffffff"],["80000001","ffffffe1","00000000","00000000","04210842"],["80000001","fffffff9","00000000","00000000","12492492"],["80000001","fffffffd","00000000","00000000","2aaaaaaa"],["80000001","fffffffe","00000000","00000000","3fffffff"],["80000001","ffffffff","00000000","00000000","7fffffff"],["aaaaaaaa","00000000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000001","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000002","00000000","00000000","d5555555"],["aaaaaaaa","00000003","00000000","00000000","e38e38e4"],["aaaaaaaa","00000005","00000000","00000000","eeeeeeef"],["aaaaaaaa","00000007","00000000","00000000","f3cf3cf4"],["aaaaaaaa","0000001f","00000000","00000000","fd3f4fd4"],["aaaaaaaa","00000020","00000000","00000000","fd555556"],["aaaaaaaa","00000021","00000000","00000000","fd6a052c"],["aaaaaaaa","0000003f","00000000","00000000","fea53faa"],["aaaaaaaa","00000040","00000000","00000000","feaaaaab"],["aaaaaaaa","000000ff","00000000","00000000","ffaa5500"],["aaaaaaaa","00007fff","00000000","00000000","ffff5554"],["aaaaaaaa","00008000","00000000","00000000","ffff5556"],["aaaaaaaa","0000ffff","00000000","00000000","ffffaaab"],["aaaaaaaa","00010000","00000000","00000000","ffffaaab"],["aaaaaaaa","55555555","00000000","00000000","ffffffff"],["aaaaaaaa","7ffffffe","00000000","00000000","00000000"],["aaaaaaaa","7fffffff","00000000","00000000","00000000"],["aaaaaaaa","80000000","00000000","00000000","00000000"],["aaaaaaaa","80000001","00000000","00000000","00000000"],["aaaaaaaa","aaaaaaaa","00000000","00000000","00000001"],["aaaaaaaa","deadbeef","00000000","00000000","00000002"],["aaaaaaaa","ffff0000","00000000","00000000","00005555"],["aaaaaaaa","ffff8000","00000000","00000000","0000aaaa"],["aaaaaaaa","ffffffe0","00000000","00000000","02aaaaaa"],["aaaaaaaa","ffffffe1","00000000","00000000","02c0b02c"],["aaaaaaaa","fffffff9","00000000","00000000","0c30c30c"],["aaaaaaaa","fffffffd","00000000","00000000","1c71c71c"],["aaaaaaaa","fffffffe","00000000","00000000","2aaaaaab"],["aaaaaaaa","ffffffff","00000000","00000000","55555556"],["deadbeef","00000000","00000000","00000000","deadbeef"],["deadbeef","00000001","00000000","00000000","deadbeef"],["deadbeef","00000002","00000000","00000000","ef56df78"],["deadbeef","00000003","00000000","00000000","f4e494fb"],["deadbeef","00000005","00000000","00000000","f955f2fd"],["deadbeef","00000007","00000000","00000000","fb3d646c"],["deadbeef","0000001f","00000000","00000000","feecd49d"],["deadbeef","00000020","00000000","00000000","fef56df8"],["deadbeef","00000021","00000000","00000000","fefd81e9"],["deadbeef","0000003f","00000000","00000000","ff789962"],["deadbeef","00000040","00000000","00000000","ff7ab6fc"],["deadbeef","000000ff","00000000","00000000","ffde8c4c"],["deadbeef","00007fff","00000000","00000000","ffffbd5b"],["deadbeef","00008000","00000000","00000000","ffffbd5c"],["deadbeef","0000ffff","00000000","00000000","ffffdeae"],["deadbeef","00010000","00000000","00000000","ffffdeae"],["deadbeef","55555555","00000000","00000000","00000000"],["deadbeef","7ffffffe","00000000","00000000","00000000"],["deadbeef","7fffffff","00000000","00000000","00000000"],["deadbeef","80000000","00000000","00000000","00000000"],["deadbeef","80000001","00000000","00000000","00000000"],["deadbeef","aaaaaaaa","00000000","00000000","00000000"],["deadbeef","deadbeef","00000000","00000000","00000001"],["deadbeef","ffff0000","00000000","00000000","00002152"],["deadbeef","ffff8000","00000000","00000000","000042a4"],["deadbeef","ffffffe0","00000000","00000000","010a9208"],["deadbeef","ffffffe1","00000000","00000000","01132b63"],["deadbeef","fffffff9","00000000","00000000","04c29b94"],["deadbeef","fffffffd","00000000","00000000","0b1b6b05"],["deadbeef","fffffffe","00000000","00000000","10a92088"],["deadbeef","ffffffff","00000000","00000000","21524111"],["ffff0000","00000000","00000000","00000000","ffff0000"],["ffff0000","00000001","00000000","00000000","ffff0000"],["ffff0000","00000002","00000000","00000000","ffff8000"],["ffff0000","00000003","00000000","00000000","ffffaaab"],["ffff0000","00000005","00000000","00000000","ffffcccd"],["ffff0000","00000007","00000000","00000000","ffffdb6e"],["ffff0000","0000001f","00000000","00000000","fffff7be"],["ffff0000","00000020","00000000","00000000","fffff800"],["ffff0000","00000021","00000000","00000000","fffff83f"],["ffff0000","0000003f","00000000","00000000","fffffbf0"],["ffff0000","00000040","00000000","00000000","fffffc00"],["ffff0000","000000ff","00000000","00000000","fffffeff"],["ffff0000","00007fff","00000000","00000000","fffffffe"],["ffff0000","00008000","00000000","00000000","fffffffe"],["ffff0000","0000ffff","00000000","00000000","ffffffff"],["ffff0000","00010000","00000000","00000000","ffffffff"],["ffff0000","55555555","00000000","00000000","00000000"],["ffff0000","7ffffffe","00000000","00000000","00000000"],["ffff0000","7fffffff","00000000","00000000","00000000"],["ffff0000","80000000","00000000","00000000","00000000"],["ffff0000","80000001","00000000","00000000","00000000"],["ffff0000","aaaaaaaa","00000000","00000000","00000000"],["ffff0000","deadbeef","00000000","00000000","00000000"],["ffff0000","ffff0000","00000000","00000000","00000001"],["ffff0000","ffff8000","00000000","00000000","00000002"],["ffff0000","ffffffe0","00000000","00000000","00000800"],["ffff0000","ffffffe1","00000000","00000000","00000842"],["ffff0000","fffffff9","00000000","00000000","00002492"],["ffff0000","fffffffd","00000000","00000000","00005555"],["ffff0000","fffffffe","00000000","00000000","00008000"],["ffff0000","ffffffff","00000000","00000000","00010000"],["ffff8000","00000000","00000000","00000000","ffff8000"],["ffff8000","00000001","00000000","00000000","ffff8000"],["ffff8000","00000002","00000000","00000000","ffffc000"],["ffff8000","00000003","00000000","00000000","ffffd556"],["ffff8000","00000005","00000000","00000000","ffffe667"],["ffff8000","00000007","00000000","00000000","ffffedb7"],["ffff8000","0000001f","00000000","00000000","fffffbdf"],["ffff8000","00000020","00000000","00000000","fffffc00"],["ffff8000","00000021","00000000","00000000","fffffc20"],["ffff8000","0000003f","00000000","00000000","fffffdf8"],["ffff8000","00000040","00000000","00000000","fffffe00"],["ffff8000","000000ff","00000000","00000000","ffffff80"],["ffff8000","00007fff","00000000","00000000","ffffffff"],["ffff8000","00008000","00000000","00000000","ffffffff"],["ffff8000","0000ffff","00000000","00000000","00000000"],["ffff8000","00010000","00000000","00000000","00000000"],["ffff8000","55555555","00000000","00000000","00000000"],["ffff8000","7ffffffe","00000000","00000000","00000000"],["ffff8000","7fffffff","00000000","00000000","00000000"],["ffff8000","80000000","00000000","00000000","00000000"],["ffff8000","80000001","00000000","00000000","00000000"],["ffff8000","aaaaaaaa","00000000","00000000","00000000"],["ffff8000","deadbeef","00000000","00000000","00000000"],["ffff8000","ffff0000","00000000","00000000","00000000"],["ffff8000","ffff8000","00000000","00000000","00000001"],["ffff8000","ffffffe0","00000000","00000000","00000400"],["ffff8000","ffffffe1","00000000","00000000","00000421"],["ffff8000","fffffff9","00000000","00000000","00001249"],["ffff8000","fffffffd","00000000","00000000","00002aaa"],["ffff8000","fffffffe","00000000","00000000","00004000"],["ffff8000","ffffffff","00000000","00000000","00008000"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["ffffffe0","00000001","00000000","00000000","ffffffe0"],["ffffffe0","00000002","00000000","00000000","fffffff0"],["ffffffe0","00000003","00000000","00000000","fffffff6"],["ffffffe0","00000005","00000000","00000000","fffffffa"],["ffffffe0","00000007","00000000","00000000","fffffffc"],["ffffffe0","0000001f","00000000","00000000","ffffffff"],["ffffffe0","00000020","00000000","00000000","ffffffff"],["ffffffe0","00000021","00000000","00000000","00000000"],["ffffffe0","0000003f","00000000","00000000","00000000"],["ffffffe0","00000040","00000000","00000000","00000000"],["ffffffe0","000000ff","00000000","00000000","00000000"],["ffffffe0","00007fff","00000000","00000000","00000000"],["ffffffe0","00008000","00000000","00000000","00000000"],["ffffffe0","0000ffff","00000000","00000000","00000000"],["ffffffe0","00010000","00000000","00000000","00000000"],["ffffffe0","55555555","00000000","00000000","00000000"],["ffffffe0","7ffffffe","00000000","00000000","00000000"],["ffffffe0","7fffffff","00000000","00000000","00000000"],["ffffffe0","80000000","00000000","00000000","00000000"],["ffffffe0","80000001","00000000","00000000","00000000"],["ffffffe0","aaaaaaaa","00000000","00000000","00000000"],["ffffffe0","deadbeef","00000000","00000000","00000000"],["ffffffe0","ffff0000","00000000","00000000","00000000"],["ffffffe0","ffff8000","00000000","00000000","00000000"],["ffffffe0","ffffffe0","00000000","00000000","00000001"],["ffffffe0","ffffffe1","00000000","00000000","00000001"],["ffffffe0","fffffff9","00000000","00000000","00000004"],["ffffffe0","fffffffd","00000000","00000000","0000000a"],["ffffffe0","fffffffe","00000000","00000000","00000010"],["ffffffe0","ffffffff","00000000","00000000","00000020"],["ffffffe1","00000000","00000000","00000000","ffffffe1"],["ffffffe1","00000001","00000000","00000000","ffffffe1"],["ffffffe1","00000002","00000000","00000000","fffffff1"],["ffffffe1","00000003","00000000","00000000","fffffff6"],["ffffffe1","00000005","00000000","00000000","fffffffa"],["ffffffe1","00000007","00000000","00000000","fffffffc"],["ffffffe1","0000001f","00000000","00000000","ffffffff"],["ffffffe1","00000020","00000000","00000000","00000000"],["ffffffe1","00000021","00000000","00000000","00000000"],["ffffffe1","0000003f","00000000","00000000","00000000"],["ffffffe1","00000040","00000000","00000000","00000000"],["ffffffe1","000000ff","00000000","00000000","00000000"],["ffffffe1","00007fff","00000000","00000000","00000000"],["ffffffe1","00008000","00000000","00000000","00000000"],["ffffffe1","0000ffff","00000000","00000000","00000000"],["ffffffe1","00010000","00000000","00000000","00000000"],["ffffffe1","55555555","00000000","00000000","00000000"],["ffffffe1","7ffffffe","00000000","00000000","00000000"],["ffffffe1","7fffffff","00000000","00000000","00000000"],["ffffffe1","80000000","00000000","00000000","00000000"],["ffffffe1","80000001","00000000","00000000","00000000"],["ffffffe1","aaaaaaaa","00000000","00000000","00000000"],["ffffffe1","deadbeef","00000000","00000000","00000000"],["ffffffe1","ffff0000","00000000","00000000","00000000"],["ffffffe1","ffff8000","00000000","00000000","00000000"],["ffffffe1","ffffffe0","00000000","00000000","00000000"],["ffffffe1","ffffffe1","00000000","00000000","00000001"],["ffffffe1","fffffff9","00000000","00000000","00000004"],["ffffffe1","fffffffd","00000000","00000000","0000000a"],["ffffffe1","fffffffe","00000000","00000000","0000000f"],["ffffffe1","ffffffff","00000000","00000000","0000001f"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffff9"],["fffffff9","00000002","00000000","00000000","fffffffd"],["fffffff9","00000003","00000000","00000000","fffffffe"],["fffffff9","00000005","00000000","00000000","ffffffff"],["fffffff9","00000007","00000000","00000000","ffffffff"],["fffffff9","0000001f","00000000","00000000","00000000"],["fffffff9","00000020","00000000","00000000","00000000"],["fffffff9","00000021","00000000","00000000","00000000"],["fffffff9","0000003f","00000000","00000000","00000000"],["fffffff9","00000040","00000000","00000000","00000000"],["fffffff9","000000ff","00000000","00000000","00000000"],["fffffff9","00007fff","00000000","00000000","00000000"],["fffffff9","00008000","00000000","00000000","00000000"],["fffffff9","0000ffff","00000000","00000000","00000000"],["fffffff9","00010000","00000000","00000000","00000000"],["fffffff9","55555555","00000000","00000000","00000000"],["fffffff9","7ffffffe","00000000","00000000","00000000"],["fffffff9","7fffffff","00000000","00000000","00000000"],["fffffff9","80000000","00000000","00000000","00000000"],["fffffff9","80000001","00000000","00000000","00000000"],["fffffff9","aaaaaaaa","00000000","00000000","00000000"],["fffffff9","deadbeef","00000000","00000000","00000000"],["fffffff9","ffff0000","00000000","00000000","00000000"],["fffffff9","ffff8000","00000000","00000000","00000000"],["fffffff9","ffffffe0","00000000","00000000","00000000"],["fffffff9","ffffffe1","00000000","00000000","00000000"],["fffffff9","fffffff9","00000000","00000000","00000001"],["fffffff9","fffffffd","00000000","00000000","00000002"],["fffffff9","fffffffe","00000000","00000000","00000003"],["fffffff9","ffffffff","00000000","00000000","00000007"],["fffffffd","00000000","00000000","00000000","fffffffd"],["fffffffd","00000001","00000000","00000000","fffffffd"],["fffffffd","00000002","00000000","00000000","ffffffff"],["fffffffd","00000003","00000000","00000000","ffffffff"],["fffffffd","00000005","00000000","00000000","00000000"],["fffffffd","00000007","00000000","00000000","00000000"],["fffffffd","0000001f","00000000","00000000","00000000"],["fffffffd","00000020","00000000","00000000","00000000"],["fffffffd","00000021","00000000","00000000","00000000"],["fffffffd","0000003f","00000000","00000000","00000000"],["fffffffd","00000040","00000000","00000000","00000000"],["fffffffd","000000ff","00000000","00000000","00000000"],["fffffffd","00007fff","00000000","00000000","00000000"],["fffffffd","00008000","00000000","00000000","00000000"],["fffffffd","0000ffff","00000000","00000000","00000000"],["fffffffd","00010000","00000000","00000000","00000000"],["fffffffd","55555555","00000000","00000000","00000000"],["fffffffd","7ffffffe","00000000","00000000","00000000"],["fffffffd","7fffffff","00000000","00000000","00000000"],["fffffffd","80000000","00000000","00000000","00000000"],["fffffffd","80000001","00000000","00000000","00000000"],["fffffffd","aaaaaaaa","00000000","00000000","00000000"],["fffffffd","deadbeef","00000000","00000000","00000000"],["fffffffd","ffff0000","00000000","00000000","00000000"],["fffffffd","ffff8000","00000000","00000000","00000000"],["fffffffd","ffffffe0","00000000","00000000","00000000"],["fffffffd","ffffffe1","00000000","00000000","00000000"],["fffffffd","fffffff9","00000000","00000000","00000000"],["fffffffd","fffffffd","00000000","00000000","00000001"],["fffffffd","fffffffe","00000000","00000000","00000001"],["fffffffd","ffffffff","00000000","00000000","00000003"],["fffffffe","00000000","00000000","00000000","fffffffe"],["fffffffe","00000001","00000000","00000000","fffffffe"],["fffffffe","00000002","00000000","00000000","ffffffff"],["fffffffe","00000003","00000000","00000000","00000000"],["fffffffe","00000005","00000000","00000000","00000000"],["fffffffe","00000007","00000000","00000000","00000000"],["fffffffe","0000001f","00000000","00000000","00000000"],["fffffffe","00000020","00000000","00000000","00000000"],["fffffffe","00000021","00000000","00000000","00000000"],["fffffffe","0000003f","00000000","00000000","00000000"],["fffffffe","00000040","00000000","00000000","00000000"],["fffffffe","000000ff","00000000","00000000","00000000"],["fffffffe","00007fff","00000000","00000000","00000000"],["fffffffe","00008000","00000000","00000000","00000000"],["fffffffe","0000ffff","00000000","00000000","00000000"],["fffffffe","00010000","00000000","00000000","00000000"],["fffffffe","55555555","00000000","00000000","00000000"],["fffffffe","7ffffffe","00000000","00000000","00000000"],["fffffffe","7fffffff","00000000","00000000","00000000"],["fffffffe","80000000","00000000","00000000","00000000"],["fffffffe","80000001","00000000","00000000","00000000"],["fffffffe","aaaaaaaa","00000000","00000000","00000000"],["fffffffe","deadbeef","00000000","00000000","00000000"],["fffffffe","ffff0000","00000000","00000000","00000000"],["fffffffe","ffff8000","00000000","00000000","00000000"],["fffffffe","ffffffe0","00000000","00000000","00000000"],["fffffffe","ffffffe1","00000000","00000000","00000000"],["fffffffe","fffffff9","00000000","00000000","00000000"],["fffffffe","fffffffd","00000000","00000000","00000000"],["fffffffe","fffffffe","00000000","00000000","00000001"],["fffffffe","ffffffff","00000000","00000000","00000002"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","ffffffff"],["ffffffff","00000002","00000000","00000000","00000000"],["ffffffff","00000003","00000000","00000000","00000000"],["ffffffff","00000005","00000000","00000000","00000000"],["ffffffff","00000007","00000000","00000000","00000000"],["ffffffff","0000001f","00000000","00000000","00000000"],["ffffffff","00000020","00000000","00000000","00000000"],["ffffffff","00000021","00000000","00000000","00000000"],["ffffffff","0000003f","00000000","00000000","00000000"],["ffffffff","00000040","00000000","00000000","00000000"],["ffffffff","000000ff","00000000","00000000","00000000"],["ffffffff","00007fff","00000000","00000000","00000000"],["ffffffff","00008000","00000000","00000000","00000000"],["ffffffff","0000ffff","00000000","00000000","00000000"],["ffffffff","00010000","00000000","00000000","00000000"],["ffffffff","55555555","00000000","00000000","00000000"],["ffffffff","7ffffffe","00000000","00000000","00000000"],["ffffffff","7fffffff","00000000","00000000","00000000"],["ffffffff","80000000","00000000","00000000","00000000"],["ffffffff","80000001","00000000","00000000","00000000"],["ffffffff","aaaaaaaa","00000000","00000000","00000000"],["ffffffff","deadbeef","00000000","00000000","00000000"],["ffffffff","ffff0000","00000000","00000000","00000000"],["ffffffff","ffff8000","00000000","00000000","00000000"],["ffffffff","ffffffe0","00000000","00000000","00000000"],["ffffffff","ffffffe1","00000000","00000000","00000000"],["ffffffff","fffffff9","00000000","00000000","00000000"],["ffffffff","fffffffd","00000000","00000000","00000000"],["ffffffff","fffffffe","00000000","00000000","00000000"],["ffffffff","ffffffff","00000000","00000000","00000001"]]} +{"op":"rem_i32","code":10,"wgsl":"ia % ib","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000002","00000000","00000000","00000000"],["00000000","00000003","00000000","00000000","00000000"],["00000000","00000005","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","0000001f","00000000","00000000","00000000"],["00000000","00000020","00000000","00000000","00000000"],["00000000","00000021","00000000","00000000","00000000"],["00000000","0000003f","00000000","00000000","00000000"],["00000000","00000040","00000000","00000000","00000000"],["00000000","000000ff","00000000","00000000","00000000"],["00000000","00007fff","00000000","00000000","00000000"],["00000000","00008000","00000000","00000000","00000000"],["00000000","0000ffff","00000000","00000000","00000000"],["00000000","00010000","00000000","00000000","00000000"],["00000000","55555555","00000000","00000000","00000000"],["00000000","7ffffffe","00000000","00000000","00000000"],["00000000","7fffffff","00000000","00000000","00000000"],["00000000","80000000","00000000","00000000","00000000"],["00000000","80000001","00000000","00000000","00000000"],["00000000","aaaaaaaa","00000000","00000000","00000000"],["00000000","deadbeef","00000000","00000000","00000000"],["00000000","ffff0000","00000000","00000000","00000000"],["00000000","ffff8000","00000000","00000000","00000000"],["00000000","ffffffe0","00000000","00000000","00000000"],["00000000","ffffffe1","00000000","00000000","00000000"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","fffffffd","00000000","00000000","00000000"],["00000000","fffffffe","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000002","00000000","00000000","00000001"],["00000001","00000003","00000000","00000000","00000001"],["00000001","00000005","00000000","00000000","00000001"],["00000001","00000007","00000000","00000000","00000001"],["00000001","0000001f","00000000","00000000","00000001"],["00000001","00000020","00000000","00000000","00000001"],["00000001","00000021","00000000","00000000","00000001"],["00000001","0000003f","00000000","00000000","00000001"],["00000001","00000040","00000000","00000000","00000001"],["00000001","000000ff","00000000","00000000","00000001"],["00000001","00007fff","00000000","00000000","00000001"],["00000001","00008000","00000000","00000000","00000001"],["00000001","0000ffff","00000000","00000000","00000001"],["00000001","00010000","00000000","00000000","00000001"],["00000001","55555555","00000000","00000000","00000001"],["00000001","7ffffffe","00000000","00000000","00000001"],["00000001","7fffffff","00000000","00000000","00000001"],["00000001","80000000","00000000","00000000","00000001"],["00000001","80000001","00000000","00000000","00000001"],["00000001","aaaaaaaa","00000000","00000000","00000001"],["00000001","deadbeef","00000000","00000000","00000001"],["00000001","ffff0000","00000000","00000000","00000001"],["00000001","ffff8000","00000000","00000000","00000001"],["00000001","ffffffe0","00000000","00000000","00000001"],["00000001","ffffffe1","00000000","00000000","00000001"],["00000001","fffffff9","00000000","00000000","00000001"],["00000001","fffffffd","00000000","00000000","00000001"],["00000001","fffffffe","00000000","00000000","00000001"],["00000001","ffffffff","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","00000000"],["00000002","00000001","00000000","00000000","00000000"],["00000002","00000002","00000000","00000000","00000000"],["00000002","00000003","00000000","00000000","00000002"],["00000002","00000005","00000000","00000000","00000002"],["00000002","00000007","00000000","00000000","00000002"],["00000002","0000001f","00000000","00000000","00000002"],["00000002","00000020","00000000","00000000","00000002"],["00000002","00000021","00000000","00000000","00000002"],["00000002","0000003f","00000000","00000000","00000002"],["00000002","00000040","00000000","00000000","00000002"],["00000002","000000ff","00000000","00000000","00000002"],["00000002","00007fff","00000000","00000000","00000002"],["00000002","00008000","00000000","00000000","00000002"],["00000002","0000ffff","00000000","00000000","00000002"],["00000002","00010000","00000000","00000000","00000002"],["00000002","55555555","00000000","00000000","00000002"],["00000002","7ffffffe","00000000","00000000","00000002"],["00000002","7fffffff","00000000","00000000","00000002"],["00000002","80000000","00000000","00000000","00000002"],["00000002","80000001","00000000","00000000","00000002"],["00000002","aaaaaaaa","00000000","00000000","00000002"],["00000002","deadbeef","00000000","00000000","00000002"],["00000002","ffff0000","00000000","00000000","00000002"],["00000002","ffff8000","00000000","00000000","00000002"],["00000002","ffffffe0","00000000","00000000","00000002"],["00000002","ffffffe1","00000000","00000000","00000002"],["00000002","fffffff9","00000000","00000000","00000002"],["00000002","fffffffd","00000000","00000000","00000002"],["00000002","fffffffe","00000000","00000000","00000000"],["00000002","ffffffff","00000000","00000000","00000000"],["00000003","00000000","00000000","00000000","00000000"],["00000003","00000001","00000000","00000000","00000000"],["00000003","00000002","00000000","00000000","00000001"],["00000003","00000003","00000000","00000000","00000000"],["00000003","00000005","00000000","00000000","00000003"],["00000003","00000007","00000000","00000000","00000003"],["00000003","0000001f","00000000","00000000","00000003"],["00000003","00000020","00000000","00000000","00000003"],["00000003","00000021","00000000","00000000","00000003"],["00000003","0000003f","00000000","00000000","00000003"],["00000003","00000040","00000000","00000000","00000003"],["00000003","000000ff","00000000","00000000","00000003"],["00000003","00007fff","00000000","00000000","00000003"],["00000003","00008000","00000000","00000000","00000003"],["00000003","0000ffff","00000000","00000000","00000003"],["00000003","00010000","00000000","00000000","00000003"],["00000003","55555555","00000000","00000000","00000003"],["00000003","7ffffffe","00000000","00000000","00000003"],["00000003","7fffffff","00000000","00000000","00000003"],["00000003","80000000","00000000","00000000","00000003"],["00000003","80000001","00000000","00000000","00000003"],["00000003","aaaaaaaa","00000000","00000000","00000003"],["00000003","deadbeef","00000000","00000000","00000003"],["00000003","ffff0000","00000000","00000000","00000003"],["00000003","ffff8000","00000000","00000000","00000003"],["00000003","ffffffe0","00000000","00000000","00000003"],["00000003","ffffffe1","00000000","00000000","00000003"],["00000003","fffffff9","00000000","00000000","00000003"],["00000003","fffffffd","00000000","00000000","00000000"],["00000003","fffffffe","00000000","00000000","00000001"],["00000003","ffffffff","00000000","00000000","00000000"],["00000005","00000000","00000000","00000000","00000000"],["00000005","00000001","00000000","00000000","00000000"],["00000005","00000002","00000000","00000000","00000001"],["00000005","00000003","00000000","00000000","00000002"],["00000005","00000005","00000000","00000000","00000000"],["00000005","00000007","00000000","00000000","00000005"],["00000005","0000001f","00000000","00000000","00000005"],["00000005","00000020","00000000","00000000","00000005"],["00000005","00000021","00000000","00000000","00000005"],["00000005","0000003f","00000000","00000000","00000005"],["00000005","00000040","00000000","00000000","00000005"],["00000005","000000ff","00000000","00000000","00000005"],["00000005","00007fff","00000000","00000000","00000005"],["00000005","00008000","00000000","00000000","00000005"],["00000005","0000ffff","00000000","00000000","00000005"],["00000005","00010000","00000000","00000000","00000005"],["00000005","55555555","00000000","00000000","00000005"],["00000005","7ffffffe","00000000","00000000","00000005"],["00000005","7fffffff","00000000","00000000","00000005"],["00000005","80000000","00000000","00000000","00000005"],["00000005","80000001","00000000","00000000","00000005"],["00000005","aaaaaaaa","00000000","00000000","00000005"],["00000005","deadbeef","00000000","00000000","00000005"],["00000005","ffff0000","00000000","00000000","00000005"],["00000005","ffff8000","00000000","00000000","00000005"],["00000005","ffffffe0","00000000","00000000","00000005"],["00000005","ffffffe1","00000000","00000000","00000005"],["00000005","fffffff9","00000000","00000000","00000005"],["00000005","fffffffd","00000000","00000000","00000002"],["00000005","fffffffe","00000000","00000000","00000001"],["00000005","ffffffff","00000000","00000000","00000000"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000000"],["00000007","00000002","00000000","00000000","00000001"],["00000007","00000003","00000000","00000000","00000001"],["00000007","00000005","00000000","00000000","00000002"],["00000007","00000007","00000000","00000000","00000000"],["00000007","0000001f","00000000","00000000","00000007"],["00000007","00000020","00000000","00000000","00000007"],["00000007","00000021","00000000","00000000","00000007"],["00000007","0000003f","00000000","00000000","00000007"],["00000007","00000040","00000000","00000000","00000007"],["00000007","000000ff","00000000","00000000","00000007"],["00000007","00007fff","00000000","00000000","00000007"],["00000007","00008000","00000000","00000000","00000007"],["00000007","0000ffff","00000000","00000000","00000007"],["00000007","00010000","00000000","00000000","00000007"],["00000007","55555555","00000000","00000000","00000007"],["00000007","7ffffffe","00000000","00000000","00000007"],["00000007","7fffffff","00000000","00000000","00000007"],["00000007","80000000","00000000","00000000","00000007"],["00000007","80000001","00000000","00000000","00000007"],["00000007","aaaaaaaa","00000000","00000000","00000007"],["00000007","deadbeef","00000000","00000000","00000007"],["00000007","ffff0000","00000000","00000000","00000007"],["00000007","ffff8000","00000000","00000000","00000007"],["00000007","ffffffe0","00000000","00000000","00000007"],["00000007","ffffffe1","00000000","00000000","00000007"],["00000007","fffffff9","00000000","00000000","00000000"],["00000007","fffffffd","00000000","00000000","00000001"],["00000007","fffffffe","00000000","00000000","00000001"],["00000007","ffffffff","00000000","00000000","00000000"],["0000001f","00000000","00000000","00000000","00000000"],["0000001f","00000001","00000000","00000000","00000000"],["0000001f","00000002","00000000","00000000","00000001"],["0000001f","00000003","00000000","00000000","00000001"],["0000001f","00000005","00000000","00000000","00000001"],["0000001f","00000007","00000000","00000000","00000003"],["0000001f","0000001f","00000000","00000000","00000000"],["0000001f","00000020","00000000","00000000","0000001f"],["0000001f","00000021","00000000","00000000","0000001f"],["0000001f","0000003f","00000000","00000000","0000001f"],["0000001f","00000040","00000000","00000000","0000001f"],["0000001f","000000ff","00000000","00000000","0000001f"],["0000001f","00007fff","00000000","00000000","0000001f"],["0000001f","00008000","00000000","00000000","0000001f"],["0000001f","0000ffff","00000000","00000000","0000001f"],["0000001f","00010000","00000000","00000000","0000001f"],["0000001f","55555555","00000000","00000000","0000001f"],["0000001f","7ffffffe","00000000","00000000","0000001f"],["0000001f","7fffffff","00000000","00000000","0000001f"],["0000001f","80000000","00000000","00000000","0000001f"],["0000001f","80000001","00000000","00000000","0000001f"],["0000001f","aaaaaaaa","00000000","00000000","0000001f"],["0000001f","deadbeef","00000000","00000000","0000001f"],["0000001f","ffff0000","00000000","00000000","0000001f"],["0000001f","ffff8000","00000000","00000000","0000001f"],["0000001f","ffffffe0","00000000","00000000","0000001f"],["0000001f","ffffffe1","00000000","00000000","00000000"],["0000001f","fffffff9","00000000","00000000","00000003"],["0000001f","fffffffd","00000000","00000000","00000001"],["0000001f","fffffffe","00000000","00000000","00000001"],["0000001f","ffffffff","00000000","00000000","00000000"],["00000020","00000000","00000000","00000000","00000000"],["00000020","00000001","00000000","00000000","00000000"],["00000020","00000002","00000000","00000000","00000000"],["00000020","00000003","00000000","00000000","00000002"],["00000020","00000005","00000000","00000000","00000002"],["00000020","00000007","00000000","00000000","00000004"],["00000020","0000001f","00000000","00000000","00000001"],["00000020","00000020","00000000","00000000","00000000"],["00000020","00000021","00000000","00000000","00000020"],["00000020","0000003f","00000000","00000000","00000020"],["00000020","00000040","00000000","00000000","00000020"],["00000020","000000ff","00000000","00000000","00000020"],["00000020","00007fff","00000000","00000000","00000020"],["00000020","00008000","00000000","00000000","00000020"],["00000020","0000ffff","00000000","00000000","00000020"],["00000020","00010000","00000000","00000000","00000020"],["00000020","55555555","00000000","00000000","00000020"],["00000020","7ffffffe","00000000","00000000","00000020"],["00000020","7fffffff","00000000","00000000","00000020"],["00000020","80000000","00000000","00000000","00000020"],["00000020","80000001","00000000","00000000","00000020"],["00000020","aaaaaaaa","00000000","00000000","00000020"],["00000020","deadbeef","00000000","00000000","00000020"],["00000020","ffff0000","00000000","00000000","00000020"],["00000020","ffff8000","00000000","00000000","00000020"],["00000020","ffffffe0","00000000","00000000","00000000"],["00000020","ffffffe1","00000000","00000000","00000001"],["00000020","fffffff9","00000000","00000000","00000004"],["00000020","fffffffd","00000000","00000000","00000002"],["00000020","fffffffe","00000000","00000000","00000000"],["00000020","ffffffff","00000000","00000000","00000000"],["00000021","00000000","00000000","00000000","00000000"],["00000021","00000001","00000000","00000000","00000000"],["00000021","00000002","00000000","00000000","00000001"],["00000021","00000003","00000000","00000000","00000000"],["00000021","00000005","00000000","00000000","00000003"],["00000021","00000007","00000000","00000000","00000005"],["00000021","0000001f","00000000","00000000","00000002"],["00000021","00000020","00000000","00000000","00000001"],["00000021","00000021","00000000","00000000","00000000"],["00000021","0000003f","00000000","00000000","00000021"],["00000021","00000040","00000000","00000000","00000021"],["00000021","000000ff","00000000","00000000","00000021"],["00000021","00007fff","00000000","00000000","00000021"],["00000021","00008000","00000000","00000000","00000021"],["00000021","0000ffff","00000000","00000000","00000021"],["00000021","00010000","00000000","00000000","00000021"],["00000021","55555555","00000000","00000000","00000021"],["00000021","7ffffffe","00000000","00000000","00000021"],["00000021","7fffffff","00000000","00000000","00000021"],["00000021","80000000","00000000","00000000","00000021"],["00000021","80000001","00000000","00000000","00000021"],["00000021","aaaaaaaa","00000000","00000000","00000021"],["00000021","deadbeef","00000000","00000000","00000021"],["00000021","ffff0000","00000000","00000000","00000021"],["00000021","ffff8000","00000000","00000000","00000021"],["00000021","ffffffe0","00000000","00000000","00000001"],["00000021","ffffffe1","00000000","00000000","00000002"],["00000021","fffffff9","00000000","00000000","00000005"],["00000021","fffffffd","00000000","00000000","00000000"],["00000021","fffffffe","00000000","00000000","00000001"],["00000021","ffffffff","00000000","00000000","00000000"],["0000003f","00000000","00000000","00000000","00000000"],["0000003f","00000001","00000000","00000000","00000000"],["0000003f","00000002","00000000","00000000","00000001"],["0000003f","00000003","00000000","00000000","00000000"],["0000003f","00000005","00000000","00000000","00000003"],["0000003f","00000007","00000000","00000000","00000000"],["0000003f","0000001f","00000000","00000000","00000001"],["0000003f","00000020","00000000","00000000","0000001f"],["0000003f","00000021","00000000","00000000","0000001e"],["0000003f","0000003f","00000000","00000000","00000000"],["0000003f","00000040","00000000","00000000","0000003f"],["0000003f","000000ff","00000000","00000000","0000003f"],["0000003f","00007fff","00000000","00000000","0000003f"],["0000003f","00008000","00000000","00000000","0000003f"],["0000003f","0000ffff","00000000","00000000","0000003f"],["0000003f","00010000","00000000","00000000","0000003f"],["0000003f","55555555","00000000","00000000","0000003f"],["0000003f","7ffffffe","00000000","00000000","0000003f"],["0000003f","7fffffff","00000000","00000000","0000003f"],["0000003f","80000000","00000000","00000000","0000003f"],["0000003f","80000001","00000000","00000000","0000003f"],["0000003f","aaaaaaaa","00000000","00000000","0000003f"],["0000003f","deadbeef","00000000","00000000","0000003f"],["0000003f","ffff0000","00000000","00000000","0000003f"],["0000003f","ffff8000","00000000","00000000","0000003f"],["0000003f","ffffffe0","00000000","00000000","0000001f"],["0000003f","ffffffe1","00000000","00000000","00000001"],["0000003f","fffffff9","00000000","00000000","00000000"],["0000003f","fffffffd","00000000","00000000","00000000"],["0000003f","fffffffe","00000000","00000000","00000001"],["0000003f","ffffffff","00000000","00000000","00000000"],["00000040","00000000","00000000","00000000","00000000"],["00000040","00000001","00000000","00000000","00000000"],["00000040","00000002","00000000","00000000","00000000"],["00000040","00000003","00000000","00000000","00000001"],["00000040","00000005","00000000","00000000","00000004"],["00000040","00000007","00000000","00000000","00000001"],["00000040","0000001f","00000000","00000000","00000002"],["00000040","00000020","00000000","00000000","00000000"],["00000040","00000021","00000000","00000000","0000001f"],["00000040","0000003f","00000000","00000000","00000001"],["00000040","00000040","00000000","00000000","00000000"],["00000040","000000ff","00000000","00000000","00000040"],["00000040","00007fff","00000000","00000000","00000040"],["00000040","00008000","00000000","00000000","00000040"],["00000040","0000ffff","00000000","00000000","00000040"],["00000040","00010000","00000000","00000000","00000040"],["00000040","55555555","00000000","00000000","00000040"],["00000040","7ffffffe","00000000","00000000","00000040"],["00000040","7fffffff","00000000","00000000","00000040"],["00000040","80000000","00000000","00000000","00000040"],["00000040","80000001","00000000","00000000","00000040"],["00000040","aaaaaaaa","00000000","00000000","00000040"],["00000040","deadbeef","00000000","00000000","00000040"],["00000040","ffff0000","00000000","00000000","00000040"],["00000040","ffff8000","00000000","00000000","00000040"],["00000040","ffffffe0","00000000","00000000","00000000"],["00000040","ffffffe1","00000000","00000000","00000002"],["00000040","fffffff9","00000000","00000000","00000001"],["00000040","fffffffd","00000000","00000000","00000001"],["00000040","fffffffe","00000000","00000000","00000000"],["00000040","ffffffff","00000000","00000000","00000000"],["000000ff","00000000","00000000","00000000","00000000"],["000000ff","00000001","00000000","00000000","00000000"],["000000ff","00000002","00000000","00000000","00000001"],["000000ff","00000003","00000000","00000000","00000000"],["000000ff","00000005","00000000","00000000","00000000"],["000000ff","00000007","00000000","00000000","00000003"],["000000ff","0000001f","00000000","00000000","00000007"],["000000ff","00000020","00000000","00000000","0000001f"],["000000ff","00000021","00000000","00000000","00000018"],["000000ff","0000003f","00000000","00000000","00000003"],["000000ff","00000040","00000000","00000000","0000003f"],["000000ff","000000ff","00000000","00000000","00000000"],["000000ff","00007fff","00000000","00000000","000000ff"],["000000ff","00008000","00000000","00000000","000000ff"],["000000ff","0000ffff","00000000","00000000","000000ff"],["000000ff","00010000","00000000","00000000","000000ff"],["000000ff","55555555","00000000","00000000","000000ff"],["000000ff","7ffffffe","00000000","00000000","000000ff"],["000000ff","7fffffff","00000000","00000000","000000ff"],["000000ff","80000000","00000000","00000000","000000ff"],["000000ff","80000001","00000000","00000000","000000ff"],["000000ff","aaaaaaaa","00000000","00000000","000000ff"],["000000ff","deadbeef","00000000","00000000","000000ff"],["000000ff","ffff0000","00000000","00000000","000000ff"],["000000ff","ffff8000","00000000","00000000","000000ff"],["000000ff","ffffffe0","00000000","00000000","0000001f"],["000000ff","ffffffe1","00000000","00000000","00000007"],["000000ff","fffffff9","00000000","00000000","00000003"],["000000ff","fffffffd","00000000","00000000","00000000"],["000000ff","fffffffe","00000000","00000000","00000001"],["000000ff","ffffffff","00000000","00000000","00000000"],["00007fff","00000000","00000000","00000000","00000000"],["00007fff","00000001","00000000","00000000","00000000"],["00007fff","00000002","00000000","00000000","00000001"],["00007fff","00000003","00000000","00000000","00000001"],["00007fff","00000005","00000000","00000000","00000002"],["00007fff","00000007","00000000","00000000","00000000"],["00007fff","0000001f","00000000","00000000","00000000"],["00007fff","00000020","00000000","00000000","0000001f"],["00007fff","00000021","00000000","00000000","0000001f"],["00007fff","0000003f","00000000","00000000","00000007"],["00007fff","00000040","00000000","00000000","0000003f"],["00007fff","000000ff","00000000","00000000","0000007f"],["00007fff","00007fff","00000000","00000000","00000000"],["00007fff","00008000","00000000","00000000","00007fff"],["00007fff","0000ffff","00000000","00000000","00007fff"],["00007fff","00010000","00000000","00000000","00007fff"],["00007fff","55555555","00000000","00000000","00007fff"],["00007fff","7ffffffe","00000000","00000000","00007fff"],["00007fff","7fffffff","00000000","00000000","00007fff"],["00007fff","80000000","00000000","00000000","00007fff"],["00007fff","80000001","00000000","00000000","00007fff"],["00007fff","aaaaaaaa","00000000","00000000","00007fff"],["00007fff","deadbeef","00000000","00000000","00007fff"],["00007fff","ffff0000","00000000","00000000","00007fff"],["00007fff","ffff8000","00000000","00000000","00007fff"],["00007fff","ffffffe0","00000000","00000000","0000001f"],["00007fff","ffffffe1","00000000","00000000","00000000"],["00007fff","fffffff9","00000000","00000000","00000000"],["00007fff","fffffffd","00000000","00000000","00000001"],["00007fff","fffffffe","00000000","00000000","00000001"],["00007fff","ffffffff","00000000","00000000","00000000"],["00008000","00000000","00000000","00000000","00000000"],["00008000","00000001","00000000","00000000","00000000"],["00008000","00000002","00000000","00000000","00000000"],["00008000","00000003","00000000","00000000","00000002"],["00008000","00000005","00000000","00000000","00000003"],["00008000","00000007","00000000","00000000","00000001"],["00008000","0000001f","00000000","00000000","00000001"],["00008000","00000020","00000000","00000000","00000000"],["00008000","00000021","00000000","00000000","00000020"],["00008000","0000003f","00000000","00000000","00000008"],["00008000","00000040","00000000","00000000","00000000"],["00008000","000000ff","00000000","00000000","00000080"],["00008000","00007fff","00000000","00000000","00000001"],["00008000","00008000","00000000","00000000","00000000"],["00008000","0000ffff","00000000","00000000","00008000"],["00008000","00010000","00000000","00000000","00008000"],["00008000","55555555","00000000","00000000","00008000"],["00008000","7ffffffe","00000000","00000000","00008000"],["00008000","7fffffff","00000000","00000000","00008000"],["00008000","80000000","00000000","00000000","00008000"],["00008000","80000001","00000000","00000000","00008000"],["00008000","aaaaaaaa","00000000","00000000","00008000"],["00008000","deadbeef","00000000","00000000","00008000"],["00008000","ffff0000","00000000","00000000","00008000"],["00008000","ffff8000","00000000","00000000","00000000"],["00008000","ffffffe0","00000000","00000000","00000000"],["00008000","ffffffe1","00000000","00000000","00000001"],["00008000","fffffff9","00000000","00000000","00000001"],["00008000","fffffffd","00000000","00000000","00000002"],["00008000","fffffffe","00000000","00000000","00000000"],["00008000","ffffffff","00000000","00000000","00000000"],["0000ffff","00000000","00000000","00000000","00000000"],["0000ffff","00000001","00000000","00000000","00000000"],["0000ffff","00000002","00000000","00000000","00000001"],["0000ffff","00000003","00000000","00000000","00000000"],["0000ffff","00000005","00000000","00000000","00000000"],["0000ffff","00000007","00000000","00000000","00000001"],["0000ffff","0000001f","00000000","00000000","00000001"],["0000ffff","00000020","00000000","00000000","0000001f"],["0000ffff","00000021","00000000","00000000","0000001e"],["0000ffff","0000003f","00000000","00000000","0000000f"],["0000ffff","00000040","00000000","00000000","0000003f"],["0000ffff","000000ff","00000000","00000000","00000000"],["0000ffff","00007fff","00000000","00000000","00000001"],["0000ffff","00008000","00000000","00000000","00007fff"],["0000ffff","0000ffff","00000000","00000000","00000000"],["0000ffff","00010000","00000000","00000000","0000ffff"],["0000ffff","55555555","00000000","00000000","0000ffff"],["0000ffff","7ffffffe","00000000","00000000","0000ffff"],["0000ffff","7fffffff","00000000","00000000","0000ffff"],["0000ffff","80000000","00000000","00000000","0000ffff"],["0000ffff","80000001","00000000","00000000","0000ffff"],["0000ffff","aaaaaaaa","00000000","00000000","0000ffff"],["0000ffff","deadbeef","00000000","00000000","0000ffff"],["0000ffff","ffff0000","00000000","00000000","0000ffff"],["0000ffff","ffff8000","00000000","00000000","00007fff"],["0000ffff","ffffffe0","00000000","00000000","0000001f"],["0000ffff","ffffffe1","00000000","00000000","00000001"],["0000ffff","fffffff9","00000000","00000000","00000001"],["0000ffff","fffffffd","00000000","00000000","00000000"],["0000ffff","fffffffe","00000000","00000000","00000001"],["0000ffff","ffffffff","00000000","00000000","00000000"],["00010000","00000000","00000000","00000000","00000000"],["00010000","00000001","00000000","00000000","00000000"],["00010000","00000002","00000000","00000000","00000000"],["00010000","00000003","00000000","00000000","00000001"],["00010000","00000005","00000000","00000000","00000001"],["00010000","00000007","00000000","00000000","00000002"],["00010000","0000001f","00000000","00000000","00000002"],["00010000","00000020","00000000","00000000","00000000"],["00010000","00000021","00000000","00000000","0000001f"],["00010000","0000003f","00000000","00000000","00000010"],["00010000","00000040","00000000","00000000","00000000"],["00010000","000000ff","00000000","00000000","00000001"],["00010000","00007fff","00000000","00000000","00000002"],["00010000","00008000","00000000","00000000","00000000"],["00010000","0000ffff","00000000","00000000","00000001"],["00010000","00010000","00000000","00000000","00000000"],["00010000","55555555","00000000","00000000","00010000"],["00010000","7ffffffe","00000000","00000000","00010000"],["00010000","7fffffff","00000000","00000000","00010000"],["00010000","80000000","00000000","00000000","00010000"],["00010000","80000001","00000000","00000000","00010000"],["00010000","aaaaaaaa","00000000","00000000","00010000"],["00010000","deadbeef","00000000","00000000","00010000"],["00010000","ffff0000","00000000","00000000","00000000"],["00010000","ffff8000","00000000","00000000","00000000"],["00010000","ffffffe0","00000000","00000000","00000000"],["00010000","ffffffe1","00000000","00000000","00000002"],["00010000","fffffff9","00000000","00000000","00000002"],["00010000","fffffffd","00000000","00000000","00000001"],["00010000","fffffffe","00000000","00000000","00000000"],["00010000","ffffffff","00000000","00000000","00000000"],["55555555","00000000","00000000","00000000","00000000"],["55555555","00000001","00000000","00000000","00000000"],["55555555","00000002","00000000","00000000","00000001"],["55555555","00000003","00000000","00000000","00000001"],["55555555","00000005","00000000","00000000","00000000"],["55555555","00000007","00000000","00000000","00000001"],["55555555","0000001f","00000000","00000000","00000001"],["55555555","00000020","00000000","00000000","00000015"],["55555555","00000021","00000000","00000000","00000001"],["55555555","0000003f","00000000","00000000","0000002b"],["55555555","00000040","00000000","00000000","00000015"],["55555555","000000ff","00000000","00000000","00000055"],["55555555","00007fff","00000000","00000000","00000001"],["55555555","00008000","00000000","00000000","00005555"],["55555555","0000ffff","00000000","00000000","0000aaaa"],["55555555","00010000","00000000","00000000","00005555"],["55555555","55555555","00000000","00000000","00000000"],["55555555","7ffffffe","00000000","00000000","55555555"],["55555555","7fffffff","00000000","00000000","55555555"],["55555555","80000000","00000000","00000000","55555555"],["55555555","80000001","00000000","00000000","55555555"],["55555555","aaaaaaaa","00000000","00000000","55555555"],["55555555","deadbeef","00000000","00000000","12b0d333"],["55555555","ffff0000","00000000","00000000","00005555"],["55555555","ffff8000","00000000","00000000","00005555"],["55555555","ffffffe0","00000000","00000000","00000015"],["55555555","ffffffe1","00000000","00000000","00000001"],["55555555","fffffff9","00000000","00000000","00000001"],["55555555","fffffffd","00000000","00000000","00000001"],["55555555","fffffffe","00000000","00000000","00000001"],["55555555","ffffffff","00000000","00000000","00000000"],["7ffffffe","00000000","00000000","00000000","00000000"],["7ffffffe","00000001","00000000","00000000","00000000"],["7ffffffe","00000002","00000000","00000000","00000000"],["7ffffffe","00000003","00000000","00000000","00000000"],["7ffffffe","00000005","00000000","00000000","00000001"],["7ffffffe","00000007","00000000","00000000","00000000"],["7ffffffe","0000001f","00000000","00000000","00000000"],["7ffffffe","00000020","00000000","00000000","0000001e"],["7ffffffe","00000021","00000000","00000000","00000000"],["7ffffffe","0000003f","00000000","00000000","00000000"],["7ffffffe","00000040","00000000","00000000","0000003e"],["7ffffffe","000000ff","00000000","00000000","0000007e"],["7ffffffe","00007fff","00000000","00000000","00000000"],["7ffffffe","00008000","00000000","00000000","00007ffe"],["7ffffffe","0000ffff","00000000","00000000","00007ffe"],["7ffffffe","00010000","00000000","00000000","0000fffe"],["7ffffffe","55555555","00000000","00000000","2aaaaaa9"],["7ffffffe","7ffffffe","00000000","00000000","00000000"],["7ffffffe","7fffffff","00000000","00000000","7ffffffe"],["7ffffffe","80000000","00000000","00000000","7ffffffe"],["7ffffffe","80000001","00000000","00000000","7ffffffe"],["7ffffffe","aaaaaaaa","00000000","00000000","2aaaaaa8"],["7ffffffe","deadbeef","00000000","00000000","1c093ccb"],["7ffffffe","ffff0000","00000000","00000000","0000fffe"],["7ffffffe","ffff8000","00000000","00000000","00007ffe"],["7ffffffe","ffffffe0","00000000","00000000","0000001e"],["7ffffffe","ffffffe1","00000000","00000000","00000000"],["7ffffffe","fffffff9","00000000","00000000","00000000"],["7ffffffe","fffffffd","00000000","00000000","00000000"],["7ffffffe","fffffffe","00000000","00000000","00000000"],["7ffffffe","ffffffff","00000000","00000000","00000000"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","00000000"],["7fffffff","00000002","00000000","00000000","00000001"],["7fffffff","00000003","00000000","00000000","00000001"],["7fffffff","00000005","00000000","00000000","00000002"],["7fffffff","00000007","00000000","00000000","00000001"],["7fffffff","0000001f","00000000","00000000","00000001"],["7fffffff","00000020","00000000","00000000","0000001f"],["7fffffff","00000021","00000000","00000000","00000001"],["7fffffff","0000003f","00000000","00000000","00000001"],["7fffffff","00000040","00000000","00000000","0000003f"],["7fffffff","000000ff","00000000","00000000","0000007f"],["7fffffff","00007fff","00000000","00000000","00000001"],["7fffffff","00008000","00000000","00000000","00007fff"],["7fffffff","0000ffff","00000000","00000000","00007fff"],["7fffffff","00010000","00000000","00000000","0000ffff"],["7fffffff","55555555","00000000","00000000","2aaaaaaa"],["7fffffff","7ffffffe","00000000","00000000","00000001"],["7fffffff","7fffffff","00000000","00000000","00000000"],["7fffffff","80000000","00000000","00000000","7fffffff"],["7fffffff","80000001","00000000","00000000","00000000"],["7fffffff","aaaaaaaa","00000000","00000000","2aaaaaa9"],["7fffffff","deadbeef","00000000","00000000","1c093ccc"],["7fffffff","ffff0000","00000000","00000000","0000ffff"],["7fffffff","ffff8000","00000000","00000000","00007fff"],["7fffffff","ffffffe0","00000000","00000000","0000001f"],["7fffffff","ffffffe1","00000000","00000000","00000001"],["7fffffff","fffffff9","00000000","00000000","00000001"],["7fffffff","fffffffd","00000000","00000000","00000001"],["7fffffff","fffffffe","00000000","00000000","00000001"],["7fffffff","ffffffff","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000001","00000000","00000000","00000000"],["80000000","00000002","00000000","00000000","00000000"],["80000000","00000003","00000000","00000000","fffffffe"],["80000000","00000005","00000000","00000000","fffffffd"],["80000000","00000007","00000000","00000000","fffffffe"],["80000000","0000001f","00000000","00000000","fffffffe"],["80000000","00000020","00000000","00000000","00000000"],["80000000","00000021","00000000","00000000","fffffffe"],["80000000","0000003f","00000000","00000000","fffffffe"],["80000000","00000040","00000000","00000000","00000000"],["80000000","000000ff","00000000","00000000","ffffff80"],["80000000","00007fff","00000000","00000000","fffffffe"],["80000000","00008000","00000000","00000000","00000000"],["80000000","0000ffff","00000000","00000000","ffff8000"],["80000000","00010000","00000000","00000000","00000000"],["80000000","55555555","00000000","00000000","d5555555"],["80000000","7ffffffe","00000000","00000000","fffffffe"],["80000000","7fffffff","00000000","00000000","ffffffff"],["80000000","80000000","00000000","00000000","00000000"],["80000000","80000001","00000000","00000000","ffffffff"],["80000000","aaaaaaaa","00000000","00000000","d5555556"],["80000000","deadbeef","00000000","00000000","e3f6c333"],["80000000","ffff0000","00000000","00000000","00000000"],["80000000","ffff8000","00000000","00000000","00000000"],["80000000","ffffffe0","00000000","00000000","00000000"],["80000000","ffffffe1","00000000","00000000","fffffffe"],["80000000","fffffff9","00000000","00000000","fffffffe"],["80000000","fffffffd","00000000","00000000","fffffffe"],["80000000","fffffffe","00000000","00000000","00000000"],["80000000","ffffffff","00000000","00000000","00000000"],["80000001","00000000","00000000","00000000","00000000"],["80000001","00000001","00000000","00000000","00000000"],["80000001","00000002","00000000","00000000","ffffffff"],["80000001","00000003","00000000","00000000","ffffffff"],["80000001","00000005","00000000","00000000","fffffffe"],["80000001","00000007","00000000","00000000","ffffffff"],["80000001","0000001f","00000000","00000000","ffffffff"],["80000001","00000020","00000000","00000000","ffffffe1"],["80000001","00000021","00000000","00000000","ffffffff"],["80000001","0000003f","00000000","00000000","ffffffff"],["80000001","00000040","00000000","00000000","ffffffc1"],["80000001","000000ff","00000000","00000000","ffffff81"],["80000001","00007fff","00000000","00000000","ffffffff"],["80000001","00008000","00000000","00000000","ffff8001"],["80000001","0000ffff","00000000","00000000","ffff8001"],["80000001","00010000","00000000","00000000","ffff0001"],["80000001","55555555","00000000","00000000","d5555556"],["80000001","7ffffffe","00000000","00000000","ffffffff"],["80000001","7fffffff","00000000","00000000","00000000"],["80000001","80000000","00000000","00000000","80000001"],["80000001","80000001","00000000","00000000","00000000"],["80000001","aaaaaaaa","00000000","00000000","d5555557"],["80000001","deadbeef","00000000","00000000","e3f6c334"],["80000001","ffff0000","00000000","00000000","ffff0001"],["80000001","ffff8000","00000000","00000000","ffff8001"],["80000001","ffffffe0","00000000","00000000","ffffffe1"],["80000001","ffffffe1","00000000","00000000","ffffffff"],["80000001","fffffff9","00000000","00000000","ffffffff"],["80000001","fffffffd","00000000","00000000","ffffffff"],["80000001","fffffffe","00000000","00000000","ffffffff"],["80000001","ffffffff","00000000","00000000","00000000"],["aaaaaaaa","00000000","00000000","00000000","00000000"],["aaaaaaaa","00000001","00000000","00000000","00000000"],["aaaaaaaa","00000002","00000000","00000000","00000000"],["aaaaaaaa","00000003","00000000","00000000","fffffffe"],["aaaaaaaa","00000005","00000000","00000000","ffffffff"],["aaaaaaaa","00000007","00000000","00000000","fffffffe"],["aaaaaaaa","0000001f","00000000","00000000","fffffffe"],["aaaaaaaa","00000020","00000000","00000000","ffffffea"],["aaaaaaaa","00000021","00000000","00000000","fffffffe"],["aaaaaaaa","0000003f","00000000","00000000","ffffffd4"],["aaaaaaaa","00000040","00000000","00000000","ffffffea"],["aaaaaaaa","000000ff","00000000","00000000","ffffffaa"],["aaaaaaaa","00007fff","00000000","00000000","fffffffe"],["aaaaaaaa","00008000","00000000","00000000","ffffaaaa"],["aaaaaaaa","0000ffff","00000000","00000000","ffff5555"],["aaaaaaaa","00010000","00000000","00000000","ffffaaaa"],["aaaaaaaa","55555555","00000000","00000000","ffffffff"],["aaaaaaaa","7ffffffe","00000000","00000000","aaaaaaaa"],["aaaaaaaa","7fffffff","00000000","00000000","aaaaaaaa"],["aaaaaaaa","80000000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","80000001","00000000","00000000","aaaaaaaa"],["aaaaaaaa","aaaaaaaa","00000000","00000000","00000000"],["aaaaaaaa","deadbeef","00000000","00000000","ed4f2ccc"],["aaaaaaaa","ffff0000","00000000","00000000","ffffaaaa"],["aaaaaaaa","ffff8000","00000000","00000000","ffffaaaa"],["aaaaaaaa","ffffffe0","00000000","00000000","ffffffea"],["aaaaaaaa","ffffffe1","00000000","00000000","fffffffe"],["aaaaaaaa","fffffff9","00000000","00000000","fffffffe"],["aaaaaaaa","fffffffd","00000000","00000000","fffffffe"],["aaaaaaaa","fffffffe","00000000","00000000","00000000"],["aaaaaaaa","ffffffff","00000000","00000000","00000000"],["deadbeef","00000000","00000000","00000000","00000000"],["deadbeef","00000001","00000000","00000000","00000000"],["deadbeef","00000002","00000000","00000000","ffffffff"],["deadbeef","00000003","00000000","00000000","fffffffe"],["deadbeef","00000005","00000000","00000000","fffffffe"],["deadbeef","00000007","00000000","00000000","fffffffb"],["deadbeef","0000001f","00000000","00000000","ffffffec"],["deadbeef","00000020","00000000","00000000","ffffffef"],["deadbeef","00000021","00000000","00000000","ffffffe6"],["deadbeef","0000003f","00000000","00000000","ffffffd1"],["deadbeef","00000040","00000000","00000000","ffffffef"],["deadbeef","000000ff","00000000","00000000","ffffff3b"],["deadbeef","00007fff","00000000","00000000","fffffc4a"],["deadbeef","00008000","00000000","00000000","ffffbeef"],["deadbeef","0000ffff","00000000","00000000","ffff9d9d"],["deadbeef","00010000","00000000","00000000","ffffbeef"],["deadbeef","55555555","00000000","00000000","deadbeef"],["deadbeef","7ffffffe","00000000","00000000","deadbeef"],["deadbeef","7fffffff","00000000","00000000","deadbeef"],["deadbeef","80000000","00000000","00000000","deadbeef"],["deadbeef","80000001","00000000","00000000","deadbeef"],["deadbeef","aaaaaaaa","00000000","00000000","deadbeef"],["deadbeef","deadbeef","00000000","00000000","00000000"],["deadbeef","ffff0000","00000000","00000000","ffffbeef"],["deadbeef","ffff8000","00000000","00000000","ffffbeef"],["deadbeef","ffffffe0","00000000","00000000","ffffffef"],["deadbeef","ffffffe1","00000000","00000000","ffffffec"],["deadbeef","fffffff9","00000000","00000000","fffffffb"],["deadbeef","fffffffd","00000000","00000000","fffffffe"],["deadbeef","fffffffe","00000000","00000000","ffffffff"],["deadbeef","ffffffff","00000000","00000000","00000000"],["ffff0000","00000000","00000000","00000000","00000000"],["ffff0000","00000001","00000000","00000000","00000000"],["ffff0000","00000002","00000000","00000000","00000000"],["ffff0000","00000003","00000000","00000000","ffffffff"],["ffff0000","00000005","00000000","00000000","ffffffff"],["ffff0000","00000007","00000000","00000000","fffffffe"],["ffff0000","0000001f","00000000","00000000","fffffffe"],["ffff0000","00000020","00000000","00000000","00000000"],["ffff0000","00000021","00000000","00000000","ffffffe1"],["ffff0000","0000003f","00000000","00000000","fffffff0"],["ffff0000","00000040","00000000","00000000","00000000"],["ffff0000","000000ff","00000000","00000000","ffffffff"],["ffff0000","00007fff","00000000","00000000","fffffffe"],["ffff0000","00008000","00000000","00000000","00000000"],["ffff0000","0000ffff","00000000","00000000","ffffffff"],["ffff0000","00010000","00000000","00000000","00000000"],["ffff0000","55555555","00000000","00000000","ffff0000"],["ffff0000","7ffffffe","00000000","00000000","ffff0000"],["ffff0000","7fffffff","00000000","00000000","ffff0000"],["ffff0000","80000000","00000000","00000000","ffff0000"],["ffff0000","80000001","00000000","00000000","ffff0000"],["ffff0000","aaaaaaaa","00000000","00000000","ffff0000"],["ffff0000","deadbeef","00000000","00000000","ffff0000"],["ffff0000","ffff0000","00000000","00000000","00000000"],["ffff0000","ffff8000","00000000","00000000","00000000"],["ffff0000","ffffffe0","00000000","00000000","00000000"],["ffff0000","ffffffe1","00000000","00000000","fffffffe"],["ffff0000","fffffff9","00000000","00000000","fffffffe"],["ffff0000","fffffffd","00000000","00000000","ffffffff"],["ffff0000","fffffffe","00000000","00000000","00000000"],["ffff0000","ffffffff","00000000","00000000","00000000"],["ffff8000","00000000","00000000","00000000","00000000"],["ffff8000","00000001","00000000","00000000","00000000"],["ffff8000","00000002","00000000","00000000","00000000"],["ffff8000","00000003","00000000","00000000","fffffffe"],["ffff8000","00000005","00000000","00000000","fffffffd"],["ffff8000","00000007","00000000","00000000","ffffffff"],["ffff8000","0000001f","00000000","00000000","ffffffff"],["ffff8000","00000020","00000000","00000000","00000000"],["ffff8000","00000021","00000000","00000000","ffffffe0"],["ffff8000","0000003f","00000000","00000000","fffffff8"],["ffff8000","00000040","00000000","00000000","00000000"],["ffff8000","000000ff","00000000","00000000","ffffff80"],["ffff8000","00007fff","00000000","00000000","ffffffff"],["ffff8000","00008000","00000000","00000000","00000000"],["ffff8000","0000ffff","00000000","00000000","ffff8000"],["ffff8000","00010000","00000000","00000000","ffff8000"],["ffff8000","55555555","00000000","00000000","ffff8000"],["ffff8000","7ffffffe","00000000","00000000","ffff8000"],["ffff8000","7fffffff","00000000","00000000","ffff8000"],["ffff8000","80000000","00000000","00000000","ffff8000"],["ffff8000","80000001","00000000","00000000","ffff8000"],["ffff8000","aaaaaaaa","00000000","00000000","ffff8000"],["ffff8000","deadbeef","00000000","00000000","ffff8000"],["ffff8000","ffff0000","00000000","00000000","ffff8000"],["ffff8000","ffff8000","00000000","00000000","00000000"],["ffff8000","ffffffe0","00000000","00000000","00000000"],["ffff8000","ffffffe1","00000000","00000000","ffffffff"],["ffff8000","fffffff9","00000000","00000000","ffffffff"],["ffff8000","fffffffd","00000000","00000000","fffffffe"],["ffff8000","fffffffe","00000000","00000000","00000000"],["ffff8000","ffffffff","00000000","00000000","00000000"],["ffffffe0","00000000","00000000","00000000","00000000"],["ffffffe0","00000001","00000000","00000000","00000000"],["ffffffe0","00000002","00000000","00000000","00000000"],["ffffffe0","00000003","00000000","00000000","fffffffe"],["ffffffe0","00000005","00000000","00000000","fffffffe"],["ffffffe0","00000007","00000000","00000000","fffffffc"],["ffffffe0","0000001f","00000000","00000000","ffffffff"],["ffffffe0","00000020","00000000","00000000","00000000"],["ffffffe0","00000021","00000000","00000000","ffffffe0"],["ffffffe0","0000003f","00000000","00000000","ffffffe0"],["ffffffe0","00000040","00000000","00000000","ffffffe0"],["ffffffe0","000000ff","00000000","00000000","ffffffe0"],["ffffffe0","00007fff","00000000","00000000","ffffffe0"],["ffffffe0","00008000","00000000","00000000","ffffffe0"],["ffffffe0","0000ffff","00000000","00000000","ffffffe0"],["ffffffe0","00010000","00000000","00000000","ffffffe0"],["ffffffe0","55555555","00000000","00000000","ffffffe0"],["ffffffe0","7ffffffe","00000000","00000000","ffffffe0"],["ffffffe0","7fffffff","00000000","00000000","ffffffe0"],["ffffffe0","80000000","00000000","00000000","ffffffe0"],["ffffffe0","80000001","00000000","00000000","ffffffe0"],["ffffffe0","aaaaaaaa","00000000","00000000","ffffffe0"],["ffffffe0","deadbeef","00000000","00000000","ffffffe0"],["ffffffe0","ffff0000","00000000","00000000","ffffffe0"],["ffffffe0","ffff8000","00000000","00000000","ffffffe0"],["ffffffe0","ffffffe0","00000000","00000000","00000000"],["ffffffe0","ffffffe1","00000000","00000000","ffffffff"],["ffffffe0","fffffff9","00000000","00000000","fffffffc"],["ffffffe0","fffffffd","00000000","00000000","fffffffe"],["ffffffe0","fffffffe","00000000","00000000","00000000"],["ffffffe0","ffffffff","00000000","00000000","00000000"],["ffffffe1","00000000","00000000","00000000","00000000"],["ffffffe1","00000001","00000000","00000000","00000000"],["ffffffe1","00000002","00000000","00000000","ffffffff"],["ffffffe1","00000003","00000000","00000000","ffffffff"],["ffffffe1","00000005","00000000","00000000","ffffffff"],["ffffffe1","00000007","00000000","00000000","fffffffd"],["ffffffe1","0000001f","00000000","00000000","00000000"],["ffffffe1","00000020","00000000","00000000","ffffffe1"],["ffffffe1","00000021","00000000","00000000","ffffffe1"],["ffffffe1","0000003f","00000000","00000000","ffffffe1"],["ffffffe1","00000040","00000000","00000000","ffffffe1"],["ffffffe1","000000ff","00000000","00000000","ffffffe1"],["ffffffe1","00007fff","00000000","00000000","ffffffe1"],["ffffffe1","00008000","00000000","00000000","ffffffe1"],["ffffffe1","0000ffff","00000000","00000000","ffffffe1"],["ffffffe1","00010000","00000000","00000000","ffffffe1"],["ffffffe1","55555555","00000000","00000000","ffffffe1"],["ffffffe1","7ffffffe","00000000","00000000","ffffffe1"],["ffffffe1","7fffffff","00000000","00000000","ffffffe1"],["ffffffe1","80000000","00000000","00000000","ffffffe1"],["ffffffe1","80000001","00000000","00000000","ffffffe1"],["ffffffe1","aaaaaaaa","00000000","00000000","ffffffe1"],["ffffffe1","deadbeef","00000000","00000000","ffffffe1"],["ffffffe1","ffff0000","00000000","00000000","ffffffe1"],["ffffffe1","ffff8000","00000000","00000000","ffffffe1"],["ffffffe1","ffffffe0","00000000","00000000","ffffffe1"],["ffffffe1","ffffffe1","00000000","00000000","00000000"],["ffffffe1","fffffff9","00000000","00000000","fffffffd"],["ffffffe1","fffffffd","00000000","00000000","ffffffff"],["ffffffe1","fffffffe","00000000","00000000","ffffffff"],["ffffffe1","ffffffff","00000000","00000000","00000000"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000001","00000000","00000000","00000000"],["fffffff9","00000002","00000000","00000000","ffffffff"],["fffffff9","00000003","00000000","00000000","ffffffff"],["fffffff9","00000005","00000000","00000000","fffffffe"],["fffffff9","00000007","00000000","00000000","00000000"],["fffffff9","0000001f","00000000","00000000","fffffff9"],["fffffff9","00000020","00000000","00000000","fffffff9"],["fffffff9","00000021","00000000","00000000","fffffff9"],["fffffff9","0000003f","00000000","00000000","fffffff9"],["fffffff9","00000040","00000000","00000000","fffffff9"],["fffffff9","000000ff","00000000","00000000","fffffff9"],["fffffff9","00007fff","00000000","00000000","fffffff9"],["fffffff9","00008000","00000000","00000000","fffffff9"],["fffffff9","0000ffff","00000000","00000000","fffffff9"],["fffffff9","00010000","00000000","00000000","fffffff9"],["fffffff9","55555555","00000000","00000000","fffffff9"],["fffffff9","7ffffffe","00000000","00000000","fffffff9"],["fffffff9","7fffffff","00000000","00000000","fffffff9"],["fffffff9","80000000","00000000","00000000","fffffff9"],["fffffff9","80000001","00000000","00000000","fffffff9"],["fffffff9","aaaaaaaa","00000000","00000000","fffffff9"],["fffffff9","deadbeef","00000000","00000000","fffffff9"],["fffffff9","ffff0000","00000000","00000000","fffffff9"],["fffffff9","ffff8000","00000000","00000000","fffffff9"],["fffffff9","ffffffe0","00000000","00000000","fffffff9"],["fffffff9","ffffffe1","00000000","00000000","fffffff9"],["fffffff9","fffffff9","00000000","00000000","00000000"],["fffffff9","fffffffd","00000000","00000000","ffffffff"],["fffffff9","fffffffe","00000000","00000000","ffffffff"],["fffffff9","ffffffff","00000000","00000000","00000000"],["fffffffd","00000000","00000000","00000000","00000000"],["fffffffd","00000001","00000000","00000000","00000000"],["fffffffd","00000002","00000000","00000000","ffffffff"],["fffffffd","00000003","00000000","00000000","00000000"],["fffffffd","00000005","00000000","00000000","fffffffd"],["fffffffd","00000007","00000000","00000000","fffffffd"],["fffffffd","0000001f","00000000","00000000","fffffffd"],["fffffffd","00000020","00000000","00000000","fffffffd"],["fffffffd","00000021","00000000","00000000","fffffffd"],["fffffffd","0000003f","00000000","00000000","fffffffd"],["fffffffd","00000040","00000000","00000000","fffffffd"],["fffffffd","000000ff","00000000","00000000","fffffffd"],["fffffffd","00007fff","00000000","00000000","fffffffd"],["fffffffd","00008000","00000000","00000000","fffffffd"],["fffffffd","0000ffff","00000000","00000000","fffffffd"],["fffffffd","00010000","00000000","00000000","fffffffd"],["fffffffd","55555555","00000000","00000000","fffffffd"],["fffffffd","7ffffffe","00000000","00000000","fffffffd"],["fffffffd","7fffffff","00000000","00000000","fffffffd"],["fffffffd","80000000","00000000","00000000","fffffffd"],["fffffffd","80000001","00000000","00000000","fffffffd"],["fffffffd","aaaaaaaa","00000000","00000000","fffffffd"],["fffffffd","deadbeef","00000000","00000000","fffffffd"],["fffffffd","ffff0000","00000000","00000000","fffffffd"],["fffffffd","ffff8000","00000000","00000000","fffffffd"],["fffffffd","ffffffe0","00000000","00000000","fffffffd"],["fffffffd","ffffffe1","00000000","00000000","fffffffd"],["fffffffd","fffffff9","00000000","00000000","fffffffd"],["fffffffd","fffffffd","00000000","00000000","00000000"],["fffffffd","fffffffe","00000000","00000000","ffffffff"],["fffffffd","ffffffff","00000000","00000000","00000000"],["fffffffe","00000000","00000000","00000000","00000000"],["fffffffe","00000001","00000000","00000000","00000000"],["fffffffe","00000002","00000000","00000000","00000000"],["fffffffe","00000003","00000000","00000000","fffffffe"],["fffffffe","00000005","00000000","00000000","fffffffe"],["fffffffe","00000007","00000000","00000000","fffffffe"],["fffffffe","0000001f","00000000","00000000","fffffffe"],["fffffffe","00000020","00000000","00000000","fffffffe"],["fffffffe","00000021","00000000","00000000","fffffffe"],["fffffffe","0000003f","00000000","00000000","fffffffe"],["fffffffe","00000040","00000000","00000000","fffffffe"],["fffffffe","000000ff","00000000","00000000","fffffffe"],["fffffffe","00007fff","00000000","00000000","fffffffe"],["fffffffe","00008000","00000000","00000000","fffffffe"],["fffffffe","0000ffff","00000000","00000000","fffffffe"],["fffffffe","00010000","00000000","00000000","fffffffe"],["fffffffe","55555555","00000000","00000000","fffffffe"],["fffffffe","7ffffffe","00000000","00000000","fffffffe"],["fffffffe","7fffffff","00000000","00000000","fffffffe"],["fffffffe","80000000","00000000","00000000","fffffffe"],["fffffffe","80000001","00000000","00000000","fffffffe"],["fffffffe","aaaaaaaa","00000000","00000000","fffffffe"],["fffffffe","deadbeef","00000000","00000000","fffffffe"],["fffffffe","ffff0000","00000000","00000000","fffffffe"],["fffffffe","ffff8000","00000000","00000000","fffffffe"],["fffffffe","ffffffe0","00000000","00000000","fffffffe"],["fffffffe","ffffffe1","00000000","00000000","fffffffe"],["fffffffe","fffffff9","00000000","00000000","fffffffe"],["fffffffe","fffffffd","00000000","00000000","fffffffe"],["fffffffe","fffffffe","00000000","00000000","00000000"],["fffffffe","ffffffff","00000000","00000000","00000000"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000001","00000000","00000000","00000000"],["ffffffff","00000002","00000000","00000000","ffffffff"],["ffffffff","00000003","00000000","00000000","ffffffff"],["ffffffff","00000005","00000000","00000000","ffffffff"],["ffffffff","00000007","00000000","00000000","ffffffff"],["ffffffff","0000001f","00000000","00000000","ffffffff"],["ffffffff","00000020","00000000","00000000","ffffffff"],["ffffffff","00000021","00000000","00000000","ffffffff"],["ffffffff","0000003f","00000000","00000000","ffffffff"],["ffffffff","00000040","00000000","00000000","ffffffff"],["ffffffff","000000ff","00000000","00000000","ffffffff"],["ffffffff","00007fff","00000000","00000000","ffffffff"],["ffffffff","00008000","00000000","00000000","ffffffff"],["ffffffff","0000ffff","00000000","00000000","ffffffff"],["ffffffff","00010000","00000000","00000000","ffffffff"],["ffffffff","55555555","00000000","00000000","ffffffff"],["ffffffff","7ffffffe","00000000","00000000","ffffffff"],["ffffffff","7fffffff","00000000","00000000","ffffffff"],["ffffffff","80000000","00000000","00000000","ffffffff"],["ffffffff","80000001","00000000","00000000","ffffffff"],["ffffffff","aaaaaaaa","00000000","00000000","ffffffff"],["ffffffff","deadbeef","00000000","00000000","ffffffff"],["ffffffff","ffff0000","00000000","00000000","ffffffff"],["ffffffff","ffff8000","00000000","00000000","ffffffff"],["ffffffff","ffffffe0","00000000","00000000","ffffffff"],["ffffffff","ffffffe1","00000000","00000000","ffffffff"],["ffffffff","fffffff9","00000000","00000000","ffffffff"],["ffffffff","fffffffd","00000000","00000000","ffffffff"],["ffffffff","fffffffe","00000000","00000000","ffffffff"],["ffffffff","ffffffff","00000000","00000000","00000000"]]} +{"op":"shl_u32","code":11,"wgsl":"a << b","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000002","00000000","00000000","00000000"],["00000000","00000003","00000000","00000000","00000000"],["00000000","00000004","00000000","00000000","00000000"],["00000000","00000005","00000000","00000000","00000000"],["00000000","00000006","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","00000008","00000000","00000000","00000000"],["00000000","00000009","00000000","00000000","00000000"],["00000000","0000000a","00000000","00000000","00000000"],["00000000","0000000b","00000000","00000000","00000000"],["00000000","0000000c","00000000","00000000","00000000"],["00000000","0000000d","00000000","00000000","00000000"],["00000000","0000000e","00000000","00000000","00000000"],["00000000","0000000f","00000000","00000000","00000000"],["00000000","00000010","00000000","00000000","00000000"],["00000000","00000011","00000000","00000000","00000000"],["00000000","00000012","00000000","00000000","00000000"],["00000000","00000013","00000000","00000000","00000000"],["00000000","00000014","00000000","00000000","00000000"],["00000000","00000015","00000000","00000000","00000000"],["00000000","00000016","00000000","00000000","00000000"],["00000000","00000017","00000000","00000000","00000000"],["00000000","00000018","00000000","00000000","00000000"],["00000000","00000019","00000000","00000000","00000000"],["00000000","0000001a","00000000","00000000","00000000"],["00000000","0000001b","00000000","00000000","00000000"],["00000000","0000001c","00000000","00000000","00000000"],["00000000","0000001d","00000000","00000000","00000000"],["00000000","0000001e","00000000","00000000","00000000"],["00000000","0000001f","00000000","00000000","00000000"],["00000000","00000020","00000000","00000000","00000000","unguarded"],["00000000","00000021","00000000","00000000","00000000","unguarded"],["00000000","00000022","00000000","00000000","00000000","unguarded"],["00000000","00000023","00000000","00000000","00000000","unguarded"],["00000000","00000024","00000000","00000000","00000000","unguarded"],["00000000","00000025","00000000","00000000","00000000","unguarded"],["00000000","00000026","00000000","00000000","00000000","unguarded"],["00000000","00000027","00000000","00000000","00000000","unguarded"],["00000000","00000028","00000000","00000000","00000000","unguarded"],["00000000","0000003f","00000000","00000000","00000000","unguarded"],["00000000","00000040","00000000","00000000","00000000","unguarded"],["00000000","00000041","00000000","00000000","00000000","unguarded"],["00000000","00000060","00000000","00000000","00000000","unguarded"],["00000000","0000007f","00000000","00000000","00000000","unguarded"],["00000000","00000080","00000000","00000000","00000000","unguarded"],["00000000","000000ff","00000000","00000000","00000000","unguarded"],["00000000","00000100","00000000","00000000","00000000","unguarded"],["00000000","7fffffff","00000000","00000000","00000000","unguarded"],["00000000","80000000","00000000","00000000","00000000","unguarded"],["00000000","ffffffe0","00000000","00000000","00000000","unguarded"],["00000000","ffffffff","00000000","00000000","00000000","unguarded"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000002"],["00000001","00000002","00000000","00000000","00000004"],["00000001","00000003","00000000","00000000","00000008"],["00000001","00000004","00000000","00000000","00000010"],["00000001","00000005","00000000","00000000","00000020"],["00000001","00000006","00000000","00000000","00000040"],["00000001","00000007","00000000","00000000","00000080"],["00000001","00000008","00000000","00000000","00000100"],["00000001","00000009","00000000","00000000","00000200"],["00000001","0000000a","00000000","00000000","00000400"],["00000001","0000000b","00000000","00000000","00000800"],["00000001","0000000c","00000000","00000000","00001000"],["00000001","0000000d","00000000","00000000","00002000"],["00000001","0000000e","00000000","00000000","00004000"],["00000001","0000000f","00000000","00000000","00008000"],["00000001","00000010","00000000","00000000","00010000"],["00000001","00000011","00000000","00000000","00020000"],["00000001","00000012","00000000","00000000","00040000"],["00000001","00000013","00000000","00000000","00080000"],["00000001","00000014","00000000","00000000","00100000"],["00000001","00000015","00000000","00000000","00200000"],["00000001","00000016","00000000","00000000","00400000"],["00000001","00000017","00000000","00000000","00800000"],["00000001","00000018","00000000","00000000","01000000"],["00000001","00000019","00000000","00000000","02000000"],["00000001","0000001a","00000000","00000000","04000000"],["00000001","0000001b","00000000","00000000","08000000"],["00000001","0000001c","00000000","00000000","10000000"],["00000001","0000001d","00000000","00000000","20000000"],["00000001","0000001e","00000000","00000000","40000000"],["00000001","0000001f","00000000","00000000","80000000"],["00000001","00000020","00000000","00000000","00000001","unguarded"],["00000001","00000021","00000000","00000000","00000002","unguarded"],["00000001","00000022","00000000","00000000","00000004","unguarded"],["00000001","00000023","00000000","00000000","00000008","unguarded"],["00000001","00000024","00000000","00000000","00000010","unguarded"],["00000001","00000025","00000000","00000000","00000020","unguarded"],["00000001","00000026","00000000","00000000","00000040","unguarded"],["00000001","00000027","00000000","00000000","00000080","unguarded"],["00000001","00000028","00000000","00000000","00000100","unguarded"],["00000001","0000003f","00000000","00000000","80000000","unguarded"],["00000001","00000040","00000000","00000000","00000001","unguarded"],["00000001","00000041","00000000","00000000","00000002","unguarded"],["00000001","00000060","00000000","00000000","00000001","unguarded"],["00000001","0000007f","00000000","00000000","80000000","unguarded"],["00000001","00000080","00000000","00000000","00000001","unguarded"],["00000001","000000ff","00000000","00000000","80000000","unguarded"],["00000001","00000100","00000000","00000000","00000001","unguarded"],["00000001","7fffffff","00000000","00000000","80000000","unguarded"],["00000001","80000000","00000000","00000000","00000001","unguarded"],["00000001","ffffffe0","00000000","00000000","00000001","unguarded"],["00000001","ffffffff","00000000","00000000","80000000","unguarded"],["00000002","00000000","00000000","00000000","00000002"],["00000002","00000001","00000000","00000000","00000004"],["00000002","00000002","00000000","00000000","00000008"],["00000002","00000003","00000000","00000000","00000010"],["00000002","00000004","00000000","00000000","00000020"],["00000002","00000005","00000000","00000000","00000040"],["00000002","00000006","00000000","00000000","00000080"],["00000002","00000007","00000000","00000000","00000100"],["00000002","00000008","00000000","00000000","00000200"],["00000002","00000009","00000000","00000000","00000400"],["00000002","0000000a","00000000","00000000","00000800"],["00000002","0000000b","00000000","00000000","00001000"],["00000002","0000000c","00000000","00000000","00002000"],["00000002","0000000d","00000000","00000000","00004000"],["00000002","0000000e","00000000","00000000","00008000"],["00000002","0000000f","00000000","00000000","00010000"],["00000002","00000010","00000000","00000000","00020000"],["00000002","00000011","00000000","00000000","00040000"],["00000002","00000012","00000000","00000000","00080000"],["00000002","00000013","00000000","00000000","00100000"],["00000002","00000014","00000000","00000000","00200000"],["00000002","00000015","00000000","00000000","00400000"],["00000002","00000016","00000000","00000000","00800000"],["00000002","00000017","00000000","00000000","01000000"],["00000002","00000018","00000000","00000000","02000000"],["00000002","00000019","00000000","00000000","04000000"],["00000002","0000001a","00000000","00000000","08000000"],["00000002","0000001b","00000000","00000000","10000000"],["00000002","0000001c","00000000","00000000","20000000"],["00000002","0000001d","00000000","00000000","40000000"],["00000002","0000001e","00000000","00000000","80000000"],["00000002","0000001f","00000000","00000000","00000000"],["00000002","00000020","00000000","00000000","00000002","unguarded"],["00000002","00000021","00000000","00000000","00000004","unguarded"],["00000002","00000022","00000000","00000000","00000008","unguarded"],["00000002","00000023","00000000","00000000","00000010","unguarded"],["00000002","00000024","00000000","00000000","00000020","unguarded"],["00000002","00000025","00000000","00000000","00000040","unguarded"],["00000002","00000026","00000000","00000000","00000080","unguarded"],["00000002","00000027","00000000","00000000","00000100","unguarded"],["00000002","00000028","00000000","00000000","00000200","unguarded"],["00000002","0000003f","00000000","00000000","00000000","unguarded"],["00000002","00000040","00000000","00000000","00000002","unguarded"],["00000002","00000041","00000000","00000000","00000004","unguarded"],["00000002","00000060","00000000","00000000","00000002","unguarded"],["00000002","0000007f","00000000","00000000","00000000","unguarded"],["00000002","00000080","00000000","00000000","00000002","unguarded"],["00000002","000000ff","00000000","00000000","00000000","unguarded"],["00000002","00000100","00000000","00000000","00000002","unguarded"],["00000002","7fffffff","00000000","00000000","00000000","unguarded"],["00000002","80000000","00000000","00000000","00000002","unguarded"],["00000002","ffffffe0","00000000","00000000","00000002","unguarded"],["00000002","ffffffff","00000000","00000000","00000000","unguarded"],["00000003","00000000","00000000","00000000","00000003"],["00000003","00000001","00000000","00000000","00000006"],["00000003","00000002","00000000","00000000","0000000c"],["00000003","00000003","00000000","00000000","00000018"],["00000003","00000004","00000000","00000000","00000030"],["00000003","00000005","00000000","00000000","00000060"],["00000003","00000006","00000000","00000000","000000c0"],["00000003","00000007","00000000","00000000","00000180"],["00000003","00000008","00000000","00000000","00000300"],["00000003","00000009","00000000","00000000","00000600"],["00000003","0000000a","00000000","00000000","00000c00"],["00000003","0000000b","00000000","00000000","00001800"],["00000003","0000000c","00000000","00000000","00003000"],["00000003","0000000d","00000000","00000000","00006000"],["00000003","0000000e","00000000","00000000","0000c000"],["00000003","0000000f","00000000","00000000","00018000"],["00000003","00000010","00000000","00000000","00030000"],["00000003","00000011","00000000","00000000","00060000"],["00000003","00000012","00000000","00000000","000c0000"],["00000003","00000013","00000000","00000000","00180000"],["00000003","00000014","00000000","00000000","00300000"],["00000003","00000015","00000000","00000000","00600000"],["00000003","00000016","00000000","00000000","00c00000"],["00000003","00000017","00000000","00000000","01800000"],["00000003","00000018","00000000","00000000","03000000"],["00000003","00000019","00000000","00000000","06000000"],["00000003","0000001a","00000000","00000000","0c000000"],["00000003","0000001b","00000000","00000000","18000000"],["00000003","0000001c","00000000","00000000","30000000"],["00000003","0000001d","00000000","00000000","60000000"],["00000003","0000001e","00000000","00000000","c0000000"],["00000003","0000001f","00000000","00000000","80000000"],["00000003","00000020","00000000","00000000","00000003","unguarded"],["00000003","00000021","00000000","00000000","00000006","unguarded"],["00000003","00000022","00000000","00000000","0000000c","unguarded"],["00000003","00000023","00000000","00000000","00000018","unguarded"],["00000003","00000024","00000000","00000000","00000030","unguarded"],["00000003","00000025","00000000","00000000","00000060","unguarded"],["00000003","00000026","00000000","00000000","000000c0","unguarded"],["00000003","00000027","00000000","00000000","00000180","unguarded"],["00000003","00000028","00000000","00000000","00000300","unguarded"],["00000003","0000003f","00000000","00000000","80000000","unguarded"],["00000003","00000040","00000000","00000000","00000003","unguarded"],["00000003","00000041","00000000","00000000","00000006","unguarded"],["00000003","00000060","00000000","00000000","00000003","unguarded"],["00000003","0000007f","00000000","00000000","80000000","unguarded"],["00000003","00000080","00000000","00000000","00000003","unguarded"],["00000003","000000ff","00000000","00000000","80000000","unguarded"],["00000003","00000100","00000000","00000000","00000003","unguarded"],["00000003","7fffffff","00000000","00000000","80000000","unguarded"],["00000003","80000000","00000000","00000000","00000003","unguarded"],["00000003","ffffffe0","00000000","00000000","00000003","unguarded"],["00000003","ffffffff","00000000","00000000","80000000","unguarded"],["00000005","00000000","00000000","00000000","00000005"],["00000005","00000001","00000000","00000000","0000000a"],["00000005","00000002","00000000","00000000","00000014"],["00000005","00000003","00000000","00000000","00000028"],["00000005","00000004","00000000","00000000","00000050"],["00000005","00000005","00000000","00000000","000000a0"],["00000005","00000006","00000000","00000000","00000140"],["00000005","00000007","00000000","00000000","00000280"],["00000005","00000008","00000000","00000000","00000500"],["00000005","00000009","00000000","00000000","00000a00"],["00000005","0000000a","00000000","00000000","00001400"],["00000005","0000000b","00000000","00000000","00002800"],["00000005","0000000c","00000000","00000000","00005000"],["00000005","0000000d","00000000","00000000","0000a000"],["00000005","0000000e","00000000","00000000","00014000"],["00000005","0000000f","00000000","00000000","00028000"],["00000005","00000010","00000000","00000000","00050000"],["00000005","00000011","00000000","00000000","000a0000"],["00000005","00000012","00000000","00000000","00140000"],["00000005","00000013","00000000","00000000","00280000"],["00000005","00000014","00000000","00000000","00500000"],["00000005","00000015","00000000","00000000","00a00000"],["00000005","00000016","00000000","00000000","01400000"],["00000005","00000017","00000000","00000000","02800000"],["00000005","00000018","00000000","00000000","05000000"],["00000005","00000019","00000000","00000000","0a000000"],["00000005","0000001a","00000000","00000000","14000000"],["00000005","0000001b","00000000","00000000","28000000"],["00000005","0000001c","00000000","00000000","50000000"],["00000005","0000001d","00000000","00000000","a0000000"],["00000005","0000001e","00000000","00000000","40000000"],["00000005","0000001f","00000000","00000000","80000000"],["00000005","00000020","00000000","00000000","00000005","unguarded"],["00000005","00000021","00000000","00000000","0000000a","unguarded"],["00000005","00000022","00000000","00000000","00000014","unguarded"],["00000005","00000023","00000000","00000000","00000028","unguarded"],["00000005","00000024","00000000","00000000","00000050","unguarded"],["00000005","00000025","00000000","00000000","000000a0","unguarded"],["00000005","00000026","00000000","00000000","00000140","unguarded"],["00000005","00000027","00000000","00000000","00000280","unguarded"],["00000005","00000028","00000000","00000000","00000500","unguarded"],["00000005","0000003f","00000000","00000000","80000000","unguarded"],["00000005","00000040","00000000","00000000","00000005","unguarded"],["00000005","00000041","00000000","00000000","0000000a","unguarded"],["00000005","00000060","00000000","00000000","00000005","unguarded"],["00000005","0000007f","00000000","00000000","80000000","unguarded"],["00000005","00000080","00000000","00000000","00000005","unguarded"],["00000005","000000ff","00000000","00000000","80000000","unguarded"],["00000005","00000100","00000000","00000000","00000005","unguarded"],["00000005","7fffffff","00000000","00000000","80000000","unguarded"],["00000005","80000000","00000000","00000000","00000005","unguarded"],["00000005","ffffffe0","00000000","00000000","00000005","unguarded"],["00000005","ffffffff","00000000","00000000","80000000","unguarded"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","0000000e"],["00000007","00000002","00000000","00000000","0000001c"],["00000007","00000003","00000000","00000000","00000038"],["00000007","00000004","00000000","00000000","00000070"],["00000007","00000005","00000000","00000000","000000e0"],["00000007","00000006","00000000","00000000","000001c0"],["00000007","00000007","00000000","00000000","00000380"],["00000007","00000008","00000000","00000000","00000700"],["00000007","00000009","00000000","00000000","00000e00"],["00000007","0000000a","00000000","00000000","00001c00"],["00000007","0000000b","00000000","00000000","00003800"],["00000007","0000000c","00000000","00000000","00007000"],["00000007","0000000d","00000000","00000000","0000e000"],["00000007","0000000e","00000000","00000000","0001c000"],["00000007","0000000f","00000000","00000000","00038000"],["00000007","00000010","00000000","00000000","00070000"],["00000007","00000011","00000000","00000000","000e0000"],["00000007","00000012","00000000","00000000","001c0000"],["00000007","00000013","00000000","00000000","00380000"],["00000007","00000014","00000000","00000000","00700000"],["00000007","00000015","00000000","00000000","00e00000"],["00000007","00000016","00000000","00000000","01c00000"],["00000007","00000017","00000000","00000000","03800000"],["00000007","00000018","00000000","00000000","07000000"],["00000007","00000019","00000000","00000000","0e000000"],["00000007","0000001a","00000000","00000000","1c000000"],["00000007","0000001b","00000000","00000000","38000000"],["00000007","0000001c","00000000","00000000","70000000"],["00000007","0000001d","00000000","00000000","e0000000"],["00000007","0000001e","00000000","00000000","c0000000"],["00000007","0000001f","00000000","00000000","80000000"],["00000007","00000020","00000000","00000000","00000007","unguarded"],["00000007","00000021","00000000","00000000","0000000e","unguarded"],["00000007","00000022","00000000","00000000","0000001c","unguarded"],["00000007","00000023","00000000","00000000","00000038","unguarded"],["00000007","00000024","00000000","00000000","00000070","unguarded"],["00000007","00000025","00000000","00000000","000000e0","unguarded"],["00000007","00000026","00000000","00000000","000001c0","unguarded"],["00000007","00000027","00000000","00000000","00000380","unguarded"],["00000007","00000028","00000000","00000000","00000700","unguarded"],["00000007","0000003f","00000000","00000000","80000000","unguarded"],["00000007","00000040","00000000","00000000","00000007","unguarded"],["00000007","00000041","00000000","00000000","0000000e","unguarded"],["00000007","00000060","00000000","00000000","00000007","unguarded"],["00000007","0000007f","00000000","00000000","80000000","unguarded"],["00000007","00000080","00000000","00000000","00000007","unguarded"],["00000007","000000ff","00000000","00000000","80000000","unguarded"],["00000007","00000100","00000000","00000000","00000007","unguarded"],["00000007","7fffffff","00000000","00000000","80000000","unguarded"],["00000007","80000000","00000000","00000000","00000007","unguarded"],["00000007","ffffffe0","00000000","00000000","00000007","unguarded"],["00000007","ffffffff","00000000","00000000","80000000","unguarded"],["0000001f","00000000","00000000","00000000","0000001f"],["0000001f","00000001","00000000","00000000","0000003e"],["0000001f","00000002","00000000","00000000","0000007c"],["0000001f","00000003","00000000","00000000","000000f8"],["0000001f","00000004","00000000","00000000","000001f0"],["0000001f","00000005","00000000","00000000","000003e0"],["0000001f","00000006","00000000","00000000","000007c0"],["0000001f","00000007","00000000","00000000","00000f80"],["0000001f","00000008","00000000","00000000","00001f00"],["0000001f","00000009","00000000","00000000","00003e00"],["0000001f","0000000a","00000000","00000000","00007c00"],["0000001f","0000000b","00000000","00000000","0000f800"],["0000001f","0000000c","00000000","00000000","0001f000"],["0000001f","0000000d","00000000","00000000","0003e000"],["0000001f","0000000e","00000000","00000000","0007c000"],["0000001f","0000000f","00000000","00000000","000f8000"],["0000001f","00000010","00000000","00000000","001f0000"],["0000001f","00000011","00000000","00000000","003e0000"],["0000001f","00000012","00000000","00000000","007c0000"],["0000001f","00000013","00000000","00000000","00f80000"],["0000001f","00000014","00000000","00000000","01f00000"],["0000001f","00000015","00000000","00000000","03e00000"],["0000001f","00000016","00000000","00000000","07c00000"],["0000001f","00000017","00000000","00000000","0f800000"],["0000001f","00000018","00000000","00000000","1f000000"],["0000001f","00000019","00000000","00000000","3e000000"],["0000001f","0000001a","00000000","00000000","7c000000"],["0000001f","0000001b","00000000","00000000","f8000000"],["0000001f","0000001c","00000000","00000000","f0000000"],["0000001f","0000001d","00000000","00000000","e0000000"],["0000001f","0000001e","00000000","00000000","c0000000"],["0000001f","0000001f","00000000","00000000","80000000"],["0000001f","00000020","00000000","00000000","0000001f","unguarded"],["0000001f","00000021","00000000","00000000","0000003e","unguarded"],["0000001f","00000022","00000000","00000000","0000007c","unguarded"],["0000001f","00000023","00000000","00000000","000000f8","unguarded"],["0000001f","00000024","00000000","00000000","000001f0","unguarded"],["0000001f","00000025","00000000","00000000","000003e0","unguarded"],["0000001f","00000026","00000000","00000000","000007c0","unguarded"],["0000001f","00000027","00000000","00000000","00000f80","unguarded"],["0000001f","00000028","00000000","00000000","00001f00","unguarded"],["0000001f","0000003f","00000000","00000000","80000000","unguarded"],["0000001f","00000040","00000000","00000000","0000001f","unguarded"],["0000001f","00000041","00000000","00000000","0000003e","unguarded"],["0000001f","00000060","00000000","00000000","0000001f","unguarded"],["0000001f","0000007f","00000000","00000000","80000000","unguarded"],["0000001f","00000080","00000000","00000000","0000001f","unguarded"],["0000001f","000000ff","00000000","00000000","80000000","unguarded"],["0000001f","00000100","00000000","00000000","0000001f","unguarded"],["0000001f","7fffffff","00000000","00000000","80000000","unguarded"],["0000001f","80000000","00000000","00000000","0000001f","unguarded"],["0000001f","ffffffe0","00000000","00000000","0000001f","unguarded"],["0000001f","ffffffff","00000000","00000000","80000000","unguarded"],["00000020","00000000","00000000","00000000","00000020"],["00000020","00000001","00000000","00000000","00000040"],["00000020","00000002","00000000","00000000","00000080"],["00000020","00000003","00000000","00000000","00000100"],["00000020","00000004","00000000","00000000","00000200"],["00000020","00000005","00000000","00000000","00000400"],["00000020","00000006","00000000","00000000","00000800"],["00000020","00000007","00000000","00000000","00001000"],["00000020","00000008","00000000","00000000","00002000"],["00000020","00000009","00000000","00000000","00004000"],["00000020","0000000a","00000000","00000000","00008000"],["00000020","0000000b","00000000","00000000","00010000"],["00000020","0000000c","00000000","00000000","00020000"],["00000020","0000000d","00000000","00000000","00040000"],["00000020","0000000e","00000000","00000000","00080000"],["00000020","0000000f","00000000","00000000","00100000"],["00000020","00000010","00000000","00000000","00200000"],["00000020","00000011","00000000","00000000","00400000"],["00000020","00000012","00000000","00000000","00800000"],["00000020","00000013","00000000","00000000","01000000"],["00000020","00000014","00000000","00000000","02000000"],["00000020","00000015","00000000","00000000","04000000"],["00000020","00000016","00000000","00000000","08000000"],["00000020","00000017","00000000","00000000","10000000"],["00000020","00000018","00000000","00000000","20000000"],["00000020","00000019","00000000","00000000","40000000"],["00000020","0000001a","00000000","00000000","80000000"],["00000020","0000001b","00000000","00000000","00000000"],["00000020","0000001c","00000000","00000000","00000000"],["00000020","0000001d","00000000","00000000","00000000"],["00000020","0000001e","00000000","00000000","00000000"],["00000020","0000001f","00000000","00000000","00000000"],["00000020","00000020","00000000","00000000","00000020","unguarded"],["00000020","00000021","00000000","00000000","00000040","unguarded"],["00000020","00000022","00000000","00000000","00000080","unguarded"],["00000020","00000023","00000000","00000000","00000100","unguarded"],["00000020","00000024","00000000","00000000","00000200","unguarded"],["00000020","00000025","00000000","00000000","00000400","unguarded"],["00000020","00000026","00000000","00000000","00000800","unguarded"],["00000020","00000027","00000000","00000000","00001000","unguarded"],["00000020","00000028","00000000","00000000","00002000","unguarded"],["00000020","0000003f","00000000","00000000","00000000","unguarded"],["00000020","00000040","00000000","00000000","00000020","unguarded"],["00000020","00000041","00000000","00000000","00000040","unguarded"],["00000020","00000060","00000000","00000000","00000020","unguarded"],["00000020","0000007f","00000000","00000000","00000000","unguarded"],["00000020","00000080","00000000","00000000","00000020","unguarded"],["00000020","000000ff","00000000","00000000","00000000","unguarded"],["00000020","00000100","00000000","00000000","00000020","unguarded"],["00000020","7fffffff","00000000","00000000","00000000","unguarded"],["00000020","80000000","00000000","00000000","00000020","unguarded"],["00000020","ffffffe0","00000000","00000000","00000020","unguarded"],["00000020","ffffffff","00000000","00000000","00000000","unguarded"],["00000021","00000000","00000000","00000000","00000021"],["00000021","00000001","00000000","00000000","00000042"],["00000021","00000002","00000000","00000000","00000084"],["00000021","00000003","00000000","00000000","00000108"],["00000021","00000004","00000000","00000000","00000210"],["00000021","00000005","00000000","00000000","00000420"],["00000021","00000006","00000000","00000000","00000840"],["00000021","00000007","00000000","00000000","00001080"],["00000021","00000008","00000000","00000000","00002100"],["00000021","00000009","00000000","00000000","00004200"],["00000021","0000000a","00000000","00000000","00008400"],["00000021","0000000b","00000000","00000000","00010800"],["00000021","0000000c","00000000","00000000","00021000"],["00000021","0000000d","00000000","00000000","00042000"],["00000021","0000000e","00000000","00000000","00084000"],["00000021","0000000f","00000000","00000000","00108000"],["00000021","00000010","00000000","00000000","00210000"],["00000021","00000011","00000000","00000000","00420000"],["00000021","00000012","00000000","00000000","00840000"],["00000021","00000013","00000000","00000000","01080000"],["00000021","00000014","00000000","00000000","02100000"],["00000021","00000015","00000000","00000000","04200000"],["00000021","00000016","00000000","00000000","08400000"],["00000021","00000017","00000000","00000000","10800000"],["00000021","00000018","00000000","00000000","21000000"],["00000021","00000019","00000000","00000000","42000000"],["00000021","0000001a","00000000","00000000","84000000"],["00000021","0000001b","00000000","00000000","08000000"],["00000021","0000001c","00000000","00000000","10000000"],["00000021","0000001d","00000000","00000000","20000000"],["00000021","0000001e","00000000","00000000","40000000"],["00000021","0000001f","00000000","00000000","80000000"],["00000021","00000020","00000000","00000000","00000021","unguarded"],["00000021","00000021","00000000","00000000","00000042","unguarded"],["00000021","00000022","00000000","00000000","00000084","unguarded"],["00000021","00000023","00000000","00000000","00000108","unguarded"],["00000021","00000024","00000000","00000000","00000210","unguarded"],["00000021","00000025","00000000","00000000","00000420","unguarded"],["00000021","00000026","00000000","00000000","00000840","unguarded"],["00000021","00000027","00000000","00000000","00001080","unguarded"],["00000021","00000028","00000000","00000000","00002100","unguarded"],["00000021","0000003f","00000000","00000000","80000000","unguarded"],["00000021","00000040","00000000","00000000","00000021","unguarded"],["00000021","00000041","00000000","00000000","00000042","unguarded"],["00000021","00000060","00000000","00000000","00000021","unguarded"],["00000021","0000007f","00000000","00000000","80000000","unguarded"],["00000021","00000080","00000000","00000000","00000021","unguarded"],["00000021","000000ff","00000000","00000000","80000000","unguarded"],["00000021","00000100","00000000","00000000","00000021","unguarded"],["00000021","7fffffff","00000000","00000000","80000000","unguarded"],["00000021","80000000","00000000","00000000","00000021","unguarded"],["00000021","ffffffe0","00000000","00000000","00000021","unguarded"],["00000021","ffffffff","00000000","00000000","80000000","unguarded"],["0000003f","00000000","00000000","00000000","0000003f"],["0000003f","00000001","00000000","00000000","0000007e"],["0000003f","00000002","00000000","00000000","000000fc"],["0000003f","00000003","00000000","00000000","000001f8"],["0000003f","00000004","00000000","00000000","000003f0"],["0000003f","00000005","00000000","00000000","000007e0"],["0000003f","00000006","00000000","00000000","00000fc0"],["0000003f","00000007","00000000","00000000","00001f80"],["0000003f","00000008","00000000","00000000","00003f00"],["0000003f","00000009","00000000","00000000","00007e00"],["0000003f","0000000a","00000000","00000000","0000fc00"],["0000003f","0000000b","00000000","00000000","0001f800"],["0000003f","0000000c","00000000","00000000","0003f000"],["0000003f","0000000d","00000000","00000000","0007e000"],["0000003f","0000000e","00000000","00000000","000fc000"],["0000003f","0000000f","00000000","00000000","001f8000"],["0000003f","00000010","00000000","00000000","003f0000"],["0000003f","00000011","00000000","00000000","007e0000"],["0000003f","00000012","00000000","00000000","00fc0000"],["0000003f","00000013","00000000","00000000","01f80000"],["0000003f","00000014","00000000","00000000","03f00000"],["0000003f","00000015","00000000","00000000","07e00000"],["0000003f","00000016","00000000","00000000","0fc00000"],["0000003f","00000017","00000000","00000000","1f800000"],["0000003f","00000018","00000000","00000000","3f000000"],["0000003f","00000019","00000000","00000000","7e000000"],["0000003f","0000001a","00000000","00000000","fc000000"],["0000003f","0000001b","00000000","00000000","f8000000"],["0000003f","0000001c","00000000","00000000","f0000000"],["0000003f","0000001d","00000000","00000000","e0000000"],["0000003f","0000001e","00000000","00000000","c0000000"],["0000003f","0000001f","00000000","00000000","80000000"],["0000003f","00000020","00000000","00000000","0000003f","unguarded"],["0000003f","00000021","00000000","00000000","0000007e","unguarded"],["0000003f","00000022","00000000","00000000","000000fc","unguarded"],["0000003f","00000023","00000000","00000000","000001f8","unguarded"],["0000003f","00000024","00000000","00000000","000003f0","unguarded"],["0000003f","00000025","00000000","00000000","000007e0","unguarded"],["0000003f","00000026","00000000","00000000","00000fc0","unguarded"],["0000003f","00000027","00000000","00000000","00001f80","unguarded"],["0000003f","00000028","00000000","00000000","00003f00","unguarded"],["0000003f","0000003f","00000000","00000000","80000000","unguarded"],["0000003f","00000040","00000000","00000000","0000003f","unguarded"],["0000003f","00000041","00000000","00000000","0000007e","unguarded"],["0000003f","00000060","00000000","00000000","0000003f","unguarded"],["0000003f","0000007f","00000000","00000000","80000000","unguarded"],["0000003f","00000080","00000000","00000000","0000003f","unguarded"],["0000003f","000000ff","00000000","00000000","80000000","unguarded"],["0000003f","00000100","00000000","00000000","0000003f","unguarded"],["0000003f","7fffffff","00000000","00000000","80000000","unguarded"],["0000003f","80000000","00000000","00000000","0000003f","unguarded"],["0000003f","ffffffe0","00000000","00000000","0000003f","unguarded"],["0000003f","ffffffff","00000000","00000000","80000000","unguarded"],["00000040","00000000","00000000","00000000","00000040"],["00000040","00000001","00000000","00000000","00000080"],["00000040","00000002","00000000","00000000","00000100"],["00000040","00000003","00000000","00000000","00000200"],["00000040","00000004","00000000","00000000","00000400"],["00000040","00000005","00000000","00000000","00000800"],["00000040","00000006","00000000","00000000","00001000"],["00000040","00000007","00000000","00000000","00002000"],["00000040","00000008","00000000","00000000","00004000"],["00000040","00000009","00000000","00000000","00008000"],["00000040","0000000a","00000000","00000000","00010000"],["00000040","0000000b","00000000","00000000","00020000"],["00000040","0000000c","00000000","00000000","00040000"],["00000040","0000000d","00000000","00000000","00080000"],["00000040","0000000e","00000000","00000000","00100000"],["00000040","0000000f","00000000","00000000","00200000"],["00000040","00000010","00000000","00000000","00400000"],["00000040","00000011","00000000","00000000","00800000"],["00000040","00000012","00000000","00000000","01000000"],["00000040","00000013","00000000","00000000","02000000"],["00000040","00000014","00000000","00000000","04000000"],["00000040","00000015","00000000","00000000","08000000"],["00000040","00000016","00000000","00000000","10000000"],["00000040","00000017","00000000","00000000","20000000"],["00000040","00000018","00000000","00000000","40000000"],["00000040","00000019","00000000","00000000","80000000"],["00000040","0000001a","00000000","00000000","00000000"],["00000040","0000001b","00000000","00000000","00000000"],["00000040","0000001c","00000000","00000000","00000000"],["00000040","0000001d","00000000","00000000","00000000"],["00000040","0000001e","00000000","00000000","00000000"],["00000040","0000001f","00000000","00000000","00000000"],["00000040","00000020","00000000","00000000","00000040","unguarded"],["00000040","00000021","00000000","00000000","00000080","unguarded"],["00000040","00000022","00000000","00000000","00000100","unguarded"],["00000040","00000023","00000000","00000000","00000200","unguarded"],["00000040","00000024","00000000","00000000","00000400","unguarded"],["00000040","00000025","00000000","00000000","00000800","unguarded"],["00000040","00000026","00000000","00000000","00001000","unguarded"],["00000040","00000027","00000000","00000000","00002000","unguarded"],["00000040","00000028","00000000","00000000","00004000","unguarded"],["00000040","0000003f","00000000","00000000","00000000","unguarded"],["00000040","00000040","00000000","00000000","00000040","unguarded"],["00000040","00000041","00000000","00000000","00000080","unguarded"],["00000040","00000060","00000000","00000000","00000040","unguarded"],["00000040","0000007f","00000000","00000000","00000000","unguarded"],["00000040","00000080","00000000","00000000","00000040","unguarded"],["00000040","000000ff","00000000","00000000","00000000","unguarded"],["00000040","00000100","00000000","00000000","00000040","unguarded"],["00000040","7fffffff","00000000","00000000","00000000","unguarded"],["00000040","80000000","00000000","00000000","00000040","unguarded"],["00000040","ffffffe0","00000000","00000000","00000040","unguarded"],["00000040","ffffffff","00000000","00000000","00000000","unguarded"],["000000ff","00000000","00000000","00000000","000000ff"],["000000ff","00000001","00000000","00000000","000001fe"],["000000ff","00000002","00000000","00000000","000003fc"],["000000ff","00000003","00000000","00000000","000007f8"],["000000ff","00000004","00000000","00000000","00000ff0"],["000000ff","00000005","00000000","00000000","00001fe0"],["000000ff","00000006","00000000","00000000","00003fc0"],["000000ff","00000007","00000000","00000000","00007f80"],["000000ff","00000008","00000000","00000000","0000ff00"],["000000ff","00000009","00000000","00000000","0001fe00"],["000000ff","0000000a","00000000","00000000","0003fc00"],["000000ff","0000000b","00000000","00000000","0007f800"],["000000ff","0000000c","00000000","00000000","000ff000"],["000000ff","0000000d","00000000","00000000","001fe000"],["000000ff","0000000e","00000000","00000000","003fc000"],["000000ff","0000000f","00000000","00000000","007f8000"],["000000ff","00000010","00000000","00000000","00ff0000"],["000000ff","00000011","00000000","00000000","01fe0000"],["000000ff","00000012","00000000","00000000","03fc0000"],["000000ff","00000013","00000000","00000000","07f80000"],["000000ff","00000014","00000000","00000000","0ff00000"],["000000ff","00000015","00000000","00000000","1fe00000"],["000000ff","00000016","00000000","00000000","3fc00000"],["000000ff","00000017","00000000","00000000","7f800000"],["000000ff","00000018","00000000","00000000","ff000000"],["000000ff","00000019","00000000","00000000","fe000000"],["000000ff","0000001a","00000000","00000000","fc000000"],["000000ff","0000001b","00000000","00000000","f8000000"],["000000ff","0000001c","00000000","00000000","f0000000"],["000000ff","0000001d","00000000","00000000","e0000000"],["000000ff","0000001e","00000000","00000000","c0000000"],["000000ff","0000001f","00000000","00000000","80000000"],["000000ff","00000020","00000000","00000000","000000ff","unguarded"],["000000ff","00000021","00000000","00000000","000001fe","unguarded"],["000000ff","00000022","00000000","00000000","000003fc","unguarded"],["000000ff","00000023","00000000","00000000","000007f8","unguarded"],["000000ff","00000024","00000000","00000000","00000ff0","unguarded"],["000000ff","00000025","00000000","00000000","00001fe0","unguarded"],["000000ff","00000026","00000000","00000000","00003fc0","unguarded"],["000000ff","00000027","00000000","00000000","00007f80","unguarded"],["000000ff","00000028","00000000","00000000","0000ff00","unguarded"],["000000ff","0000003f","00000000","00000000","80000000","unguarded"],["000000ff","00000040","00000000","00000000","000000ff","unguarded"],["000000ff","00000041","00000000","00000000","000001fe","unguarded"],["000000ff","00000060","00000000","00000000","000000ff","unguarded"],["000000ff","0000007f","00000000","00000000","80000000","unguarded"],["000000ff","00000080","00000000","00000000","000000ff","unguarded"],["000000ff","000000ff","00000000","00000000","80000000","unguarded"],["000000ff","00000100","00000000","00000000","000000ff","unguarded"],["000000ff","7fffffff","00000000","00000000","80000000","unguarded"],["000000ff","80000000","00000000","00000000","000000ff","unguarded"],["000000ff","ffffffe0","00000000","00000000","000000ff","unguarded"],["000000ff","ffffffff","00000000","00000000","80000000","unguarded"],["00007fff","00000000","00000000","00000000","00007fff"],["00007fff","00000001","00000000","00000000","0000fffe"],["00007fff","00000002","00000000","00000000","0001fffc"],["00007fff","00000003","00000000","00000000","0003fff8"],["00007fff","00000004","00000000","00000000","0007fff0"],["00007fff","00000005","00000000","00000000","000fffe0"],["00007fff","00000006","00000000","00000000","001fffc0"],["00007fff","00000007","00000000","00000000","003fff80"],["00007fff","00000008","00000000","00000000","007fff00"],["00007fff","00000009","00000000","00000000","00fffe00"],["00007fff","0000000a","00000000","00000000","01fffc00"],["00007fff","0000000b","00000000","00000000","03fff800"],["00007fff","0000000c","00000000","00000000","07fff000"],["00007fff","0000000d","00000000","00000000","0fffe000"],["00007fff","0000000e","00000000","00000000","1fffc000"],["00007fff","0000000f","00000000","00000000","3fff8000"],["00007fff","00000010","00000000","00000000","7fff0000"],["00007fff","00000011","00000000","00000000","fffe0000"],["00007fff","00000012","00000000","00000000","fffc0000"],["00007fff","00000013","00000000","00000000","fff80000"],["00007fff","00000014","00000000","00000000","fff00000"],["00007fff","00000015","00000000","00000000","ffe00000"],["00007fff","00000016","00000000","00000000","ffc00000"],["00007fff","00000017","00000000","00000000","ff800000"],["00007fff","00000018","00000000","00000000","ff000000"],["00007fff","00000019","00000000","00000000","fe000000"],["00007fff","0000001a","00000000","00000000","fc000000"],["00007fff","0000001b","00000000","00000000","f8000000"],["00007fff","0000001c","00000000","00000000","f0000000"],["00007fff","0000001d","00000000","00000000","e0000000"],["00007fff","0000001e","00000000","00000000","c0000000"],["00007fff","0000001f","00000000","00000000","80000000"],["00007fff","00000020","00000000","00000000","00007fff","unguarded"],["00007fff","00000021","00000000","00000000","0000fffe","unguarded"],["00007fff","00000022","00000000","00000000","0001fffc","unguarded"],["00007fff","00000023","00000000","00000000","0003fff8","unguarded"],["00007fff","00000024","00000000","00000000","0007fff0","unguarded"],["00007fff","00000025","00000000","00000000","000fffe0","unguarded"],["00007fff","00000026","00000000","00000000","001fffc0","unguarded"],["00007fff","00000027","00000000","00000000","003fff80","unguarded"],["00007fff","00000028","00000000","00000000","007fff00","unguarded"],["00007fff","0000003f","00000000","00000000","80000000","unguarded"],["00007fff","00000040","00000000","00000000","00007fff","unguarded"],["00007fff","00000041","00000000","00000000","0000fffe","unguarded"],["00007fff","00000060","00000000","00000000","00007fff","unguarded"],["00007fff","0000007f","00000000","00000000","80000000","unguarded"],["00007fff","00000080","00000000","00000000","00007fff","unguarded"],["00007fff","000000ff","00000000","00000000","80000000","unguarded"],["00007fff","00000100","00000000","00000000","00007fff","unguarded"],["00007fff","7fffffff","00000000","00000000","80000000","unguarded"],["00007fff","80000000","00000000","00000000","00007fff","unguarded"],["00007fff","ffffffe0","00000000","00000000","00007fff","unguarded"],["00007fff","ffffffff","00000000","00000000","80000000","unguarded"],["00008000","00000000","00000000","00000000","00008000"],["00008000","00000001","00000000","00000000","00010000"],["00008000","00000002","00000000","00000000","00020000"],["00008000","00000003","00000000","00000000","00040000"],["00008000","00000004","00000000","00000000","00080000"],["00008000","00000005","00000000","00000000","00100000"],["00008000","00000006","00000000","00000000","00200000"],["00008000","00000007","00000000","00000000","00400000"],["00008000","00000008","00000000","00000000","00800000"],["00008000","00000009","00000000","00000000","01000000"],["00008000","0000000a","00000000","00000000","02000000"],["00008000","0000000b","00000000","00000000","04000000"],["00008000","0000000c","00000000","00000000","08000000"],["00008000","0000000d","00000000","00000000","10000000"],["00008000","0000000e","00000000","00000000","20000000"],["00008000","0000000f","00000000","00000000","40000000"],["00008000","00000010","00000000","00000000","80000000"],["00008000","00000011","00000000","00000000","00000000"],["00008000","00000012","00000000","00000000","00000000"],["00008000","00000013","00000000","00000000","00000000"],["00008000","00000014","00000000","00000000","00000000"],["00008000","00000015","00000000","00000000","00000000"],["00008000","00000016","00000000","00000000","00000000"],["00008000","00000017","00000000","00000000","00000000"],["00008000","00000018","00000000","00000000","00000000"],["00008000","00000019","00000000","00000000","00000000"],["00008000","0000001a","00000000","00000000","00000000"],["00008000","0000001b","00000000","00000000","00000000"],["00008000","0000001c","00000000","00000000","00000000"],["00008000","0000001d","00000000","00000000","00000000"],["00008000","0000001e","00000000","00000000","00000000"],["00008000","0000001f","00000000","00000000","00000000"],["00008000","00000020","00000000","00000000","00008000","unguarded"],["00008000","00000021","00000000","00000000","00010000","unguarded"],["00008000","00000022","00000000","00000000","00020000","unguarded"],["00008000","00000023","00000000","00000000","00040000","unguarded"],["00008000","00000024","00000000","00000000","00080000","unguarded"],["00008000","00000025","00000000","00000000","00100000","unguarded"],["00008000","00000026","00000000","00000000","00200000","unguarded"],["00008000","00000027","00000000","00000000","00400000","unguarded"],["00008000","00000028","00000000","00000000","00800000","unguarded"],["00008000","0000003f","00000000","00000000","00000000","unguarded"],["00008000","00000040","00000000","00000000","00008000","unguarded"],["00008000","00000041","00000000","00000000","00010000","unguarded"],["00008000","00000060","00000000","00000000","00008000","unguarded"],["00008000","0000007f","00000000","00000000","00000000","unguarded"],["00008000","00000080","00000000","00000000","00008000","unguarded"],["00008000","000000ff","00000000","00000000","00000000","unguarded"],["00008000","00000100","00000000","00000000","00008000","unguarded"],["00008000","7fffffff","00000000","00000000","00000000","unguarded"],["00008000","80000000","00000000","00000000","00008000","unguarded"],["00008000","ffffffe0","00000000","00000000","00008000","unguarded"],["00008000","ffffffff","00000000","00000000","00000000","unguarded"],["0000ffff","00000000","00000000","00000000","0000ffff"],["0000ffff","00000001","00000000","00000000","0001fffe"],["0000ffff","00000002","00000000","00000000","0003fffc"],["0000ffff","00000003","00000000","00000000","0007fff8"],["0000ffff","00000004","00000000","00000000","000ffff0"],["0000ffff","00000005","00000000","00000000","001fffe0"],["0000ffff","00000006","00000000","00000000","003fffc0"],["0000ffff","00000007","00000000","00000000","007fff80"],["0000ffff","00000008","00000000","00000000","00ffff00"],["0000ffff","00000009","00000000","00000000","01fffe00"],["0000ffff","0000000a","00000000","00000000","03fffc00"],["0000ffff","0000000b","00000000","00000000","07fff800"],["0000ffff","0000000c","00000000","00000000","0ffff000"],["0000ffff","0000000d","00000000","00000000","1fffe000"],["0000ffff","0000000e","00000000","00000000","3fffc000"],["0000ffff","0000000f","00000000","00000000","7fff8000"],["0000ffff","00000010","00000000","00000000","ffff0000"],["0000ffff","00000011","00000000","00000000","fffe0000"],["0000ffff","00000012","00000000","00000000","fffc0000"],["0000ffff","00000013","00000000","00000000","fff80000"],["0000ffff","00000014","00000000","00000000","fff00000"],["0000ffff","00000015","00000000","00000000","ffe00000"],["0000ffff","00000016","00000000","00000000","ffc00000"],["0000ffff","00000017","00000000","00000000","ff800000"],["0000ffff","00000018","00000000","00000000","ff000000"],["0000ffff","00000019","00000000","00000000","fe000000"],["0000ffff","0000001a","00000000","00000000","fc000000"],["0000ffff","0000001b","00000000","00000000","f8000000"],["0000ffff","0000001c","00000000","00000000","f0000000"],["0000ffff","0000001d","00000000","00000000","e0000000"],["0000ffff","0000001e","00000000","00000000","c0000000"],["0000ffff","0000001f","00000000","00000000","80000000"],["0000ffff","00000020","00000000","00000000","0000ffff","unguarded"],["0000ffff","00000021","00000000","00000000","0001fffe","unguarded"],["0000ffff","00000022","00000000","00000000","0003fffc","unguarded"],["0000ffff","00000023","00000000","00000000","0007fff8","unguarded"],["0000ffff","00000024","00000000","00000000","000ffff0","unguarded"],["0000ffff","00000025","00000000","00000000","001fffe0","unguarded"],["0000ffff","00000026","00000000","00000000","003fffc0","unguarded"],["0000ffff","00000027","00000000","00000000","007fff80","unguarded"],["0000ffff","00000028","00000000","00000000","00ffff00","unguarded"],["0000ffff","0000003f","00000000","00000000","80000000","unguarded"],["0000ffff","00000040","00000000","00000000","0000ffff","unguarded"],["0000ffff","00000041","00000000","00000000","0001fffe","unguarded"],["0000ffff","00000060","00000000","00000000","0000ffff","unguarded"],["0000ffff","0000007f","00000000","00000000","80000000","unguarded"],["0000ffff","00000080","00000000","00000000","0000ffff","unguarded"],["0000ffff","000000ff","00000000","00000000","80000000","unguarded"],["0000ffff","00000100","00000000","00000000","0000ffff","unguarded"],["0000ffff","7fffffff","00000000","00000000","80000000","unguarded"],["0000ffff","80000000","00000000","00000000","0000ffff","unguarded"],["0000ffff","ffffffe0","00000000","00000000","0000ffff","unguarded"],["0000ffff","ffffffff","00000000","00000000","80000000","unguarded"],["00010000","00000000","00000000","00000000","00010000"],["00010000","00000001","00000000","00000000","00020000"],["00010000","00000002","00000000","00000000","00040000"],["00010000","00000003","00000000","00000000","00080000"],["00010000","00000004","00000000","00000000","00100000"],["00010000","00000005","00000000","00000000","00200000"],["00010000","00000006","00000000","00000000","00400000"],["00010000","00000007","00000000","00000000","00800000"],["00010000","00000008","00000000","00000000","01000000"],["00010000","00000009","00000000","00000000","02000000"],["00010000","0000000a","00000000","00000000","04000000"],["00010000","0000000b","00000000","00000000","08000000"],["00010000","0000000c","00000000","00000000","10000000"],["00010000","0000000d","00000000","00000000","20000000"],["00010000","0000000e","00000000","00000000","40000000"],["00010000","0000000f","00000000","00000000","80000000"],["00010000","00000010","00000000","00000000","00000000"],["00010000","00000011","00000000","00000000","00000000"],["00010000","00000012","00000000","00000000","00000000"],["00010000","00000013","00000000","00000000","00000000"],["00010000","00000014","00000000","00000000","00000000"],["00010000","00000015","00000000","00000000","00000000"],["00010000","00000016","00000000","00000000","00000000"],["00010000","00000017","00000000","00000000","00000000"],["00010000","00000018","00000000","00000000","00000000"],["00010000","00000019","00000000","00000000","00000000"],["00010000","0000001a","00000000","00000000","00000000"],["00010000","0000001b","00000000","00000000","00000000"],["00010000","0000001c","00000000","00000000","00000000"],["00010000","0000001d","00000000","00000000","00000000"],["00010000","0000001e","00000000","00000000","00000000"],["00010000","0000001f","00000000","00000000","00000000"],["00010000","00000020","00000000","00000000","00010000","unguarded"],["00010000","00000021","00000000","00000000","00020000","unguarded"],["00010000","00000022","00000000","00000000","00040000","unguarded"],["00010000","00000023","00000000","00000000","00080000","unguarded"],["00010000","00000024","00000000","00000000","00100000","unguarded"],["00010000","00000025","00000000","00000000","00200000","unguarded"],["00010000","00000026","00000000","00000000","00400000","unguarded"],["00010000","00000027","00000000","00000000","00800000","unguarded"],["00010000","00000028","00000000","00000000","01000000","unguarded"],["00010000","0000003f","00000000","00000000","00000000","unguarded"],["00010000","00000040","00000000","00000000","00010000","unguarded"],["00010000","00000041","00000000","00000000","00020000","unguarded"],["00010000","00000060","00000000","00000000","00010000","unguarded"],["00010000","0000007f","00000000","00000000","00000000","unguarded"],["00010000","00000080","00000000","00000000","00010000","unguarded"],["00010000","000000ff","00000000","00000000","00000000","unguarded"],["00010000","00000100","00000000","00000000","00010000","unguarded"],["00010000","7fffffff","00000000","00000000","00000000","unguarded"],["00010000","80000000","00000000","00000000","00010000","unguarded"],["00010000","ffffffe0","00000000","00000000","00010000","unguarded"],["00010000","ffffffff","00000000","00000000","00000000","unguarded"],["55555555","00000000","00000000","00000000","55555555"],["55555555","00000001","00000000","00000000","aaaaaaaa"],["55555555","00000002","00000000","00000000","55555554"],["55555555","00000003","00000000","00000000","aaaaaaa8"],["55555555","00000004","00000000","00000000","55555550"],["55555555","00000005","00000000","00000000","aaaaaaa0"],["55555555","00000006","00000000","00000000","55555540"],["55555555","00000007","00000000","00000000","aaaaaa80"],["55555555","00000008","00000000","00000000","55555500"],["55555555","00000009","00000000","00000000","aaaaaa00"],["55555555","0000000a","00000000","00000000","55555400"],["55555555","0000000b","00000000","00000000","aaaaa800"],["55555555","0000000c","00000000","00000000","55555000"],["55555555","0000000d","00000000","00000000","aaaaa000"],["55555555","0000000e","00000000","00000000","55554000"],["55555555","0000000f","00000000","00000000","aaaa8000"],["55555555","00000010","00000000","00000000","55550000"],["55555555","00000011","00000000","00000000","aaaa0000"],["55555555","00000012","00000000","00000000","55540000"],["55555555","00000013","00000000","00000000","aaa80000"],["55555555","00000014","00000000","00000000","55500000"],["55555555","00000015","00000000","00000000","aaa00000"],["55555555","00000016","00000000","00000000","55400000"],["55555555","00000017","00000000","00000000","aa800000"],["55555555","00000018","00000000","00000000","55000000"],["55555555","00000019","00000000","00000000","aa000000"],["55555555","0000001a","00000000","00000000","54000000"],["55555555","0000001b","00000000","00000000","a8000000"],["55555555","0000001c","00000000","00000000","50000000"],["55555555","0000001d","00000000","00000000","a0000000"],["55555555","0000001e","00000000","00000000","40000000"],["55555555","0000001f","00000000","00000000","80000000"],["55555555","00000020","00000000","00000000","55555555","unguarded"],["55555555","00000021","00000000","00000000","aaaaaaaa","unguarded"],["55555555","00000022","00000000","00000000","55555554","unguarded"],["55555555","00000023","00000000","00000000","aaaaaaa8","unguarded"],["55555555","00000024","00000000","00000000","55555550","unguarded"],["55555555","00000025","00000000","00000000","aaaaaaa0","unguarded"],["55555555","00000026","00000000","00000000","55555540","unguarded"],["55555555","00000027","00000000","00000000","aaaaaa80","unguarded"],["55555555","00000028","00000000","00000000","55555500","unguarded"],["55555555","0000003f","00000000","00000000","80000000","unguarded"],["55555555","00000040","00000000","00000000","55555555","unguarded"],["55555555","00000041","00000000","00000000","aaaaaaaa","unguarded"],["55555555","00000060","00000000","00000000","55555555","unguarded"],["55555555","0000007f","00000000","00000000","80000000","unguarded"],["55555555","00000080","00000000","00000000","55555555","unguarded"],["55555555","000000ff","00000000","00000000","80000000","unguarded"],["55555555","00000100","00000000","00000000","55555555","unguarded"],["55555555","7fffffff","00000000","00000000","80000000","unguarded"],["55555555","80000000","00000000","00000000","55555555","unguarded"],["55555555","ffffffe0","00000000","00000000","55555555","unguarded"],["55555555","ffffffff","00000000","00000000","80000000","unguarded"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7ffffffe","00000001","00000000","00000000","fffffffc"],["7ffffffe","00000002","00000000","00000000","fffffff8"],["7ffffffe","00000003","00000000","00000000","fffffff0"],["7ffffffe","00000004","00000000","00000000","ffffffe0"],["7ffffffe","00000005","00000000","00000000","ffffffc0"],["7ffffffe","00000006","00000000","00000000","ffffff80"],["7ffffffe","00000007","00000000","00000000","ffffff00"],["7ffffffe","00000008","00000000","00000000","fffffe00"],["7ffffffe","00000009","00000000","00000000","fffffc00"],["7ffffffe","0000000a","00000000","00000000","fffff800"],["7ffffffe","0000000b","00000000","00000000","fffff000"],["7ffffffe","0000000c","00000000","00000000","ffffe000"],["7ffffffe","0000000d","00000000","00000000","ffffc000"],["7ffffffe","0000000e","00000000","00000000","ffff8000"],["7ffffffe","0000000f","00000000","00000000","ffff0000"],["7ffffffe","00000010","00000000","00000000","fffe0000"],["7ffffffe","00000011","00000000","00000000","fffc0000"],["7ffffffe","00000012","00000000","00000000","fff80000"],["7ffffffe","00000013","00000000","00000000","fff00000"],["7ffffffe","00000014","00000000","00000000","ffe00000"],["7ffffffe","00000015","00000000","00000000","ffc00000"],["7ffffffe","00000016","00000000","00000000","ff800000"],["7ffffffe","00000017","00000000","00000000","ff000000"],["7ffffffe","00000018","00000000","00000000","fe000000"],["7ffffffe","00000019","00000000","00000000","fc000000"],["7ffffffe","0000001a","00000000","00000000","f8000000"],["7ffffffe","0000001b","00000000","00000000","f0000000"],["7ffffffe","0000001c","00000000","00000000","e0000000"],["7ffffffe","0000001d","00000000","00000000","c0000000"],["7ffffffe","0000001e","00000000","00000000","80000000"],["7ffffffe","0000001f","00000000","00000000","00000000"],["7ffffffe","00000020","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","00000021","00000000","00000000","fffffffc","unguarded"],["7ffffffe","00000022","00000000","00000000","fffffff8","unguarded"],["7ffffffe","00000023","00000000","00000000","fffffff0","unguarded"],["7ffffffe","00000024","00000000","00000000","ffffffe0","unguarded"],["7ffffffe","00000025","00000000","00000000","ffffffc0","unguarded"],["7ffffffe","00000026","00000000","00000000","ffffff80","unguarded"],["7ffffffe","00000027","00000000","00000000","ffffff00","unguarded"],["7ffffffe","00000028","00000000","00000000","fffffe00","unguarded"],["7ffffffe","0000003f","00000000","00000000","00000000","unguarded"],["7ffffffe","00000040","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","00000041","00000000","00000000","fffffffc","unguarded"],["7ffffffe","00000060","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","0000007f","00000000","00000000","00000000","unguarded"],["7ffffffe","00000080","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","000000ff","00000000","00000000","00000000","unguarded"],["7ffffffe","00000100","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","7fffffff","00000000","00000000","00000000","unguarded"],["7ffffffe","80000000","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","ffffffe0","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","ffffffff","00000000","00000000","00000000","unguarded"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","fffffffe"],["7fffffff","00000002","00000000","00000000","fffffffc"],["7fffffff","00000003","00000000","00000000","fffffff8"],["7fffffff","00000004","00000000","00000000","fffffff0"],["7fffffff","00000005","00000000","00000000","ffffffe0"],["7fffffff","00000006","00000000","00000000","ffffffc0"],["7fffffff","00000007","00000000","00000000","ffffff80"],["7fffffff","00000008","00000000","00000000","ffffff00"],["7fffffff","00000009","00000000","00000000","fffffe00"],["7fffffff","0000000a","00000000","00000000","fffffc00"],["7fffffff","0000000b","00000000","00000000","fffff800"],["7fffffff","0000000c","00000000","00000000","fffff000"],["7fffffff","0000000d","00000000","00000000","ffffe000"],["7fffffff","0000000e","00000000","00000000","ffffc000"],["7fffffff","0000000f","00000000","00000000","ffff8000"],["7fffffff","00000010","00000000","00000000","ffff0000"],["7fffffff","00000011","00000000","00000000","fffe0000"],["7fffffff","00000012","00000000","00000000","fffc0000"],["7fffffff","00000013","00000000","00000000","fff80000"],["7fffffff","00000014","00000000","00000000","fff00000"],["7fffffff","00000015","00000000","00000000","ffe00000"],["7fffffff","00000016","00000000","00000000","ffc00000"],["7fffffff","00000017","00000000","00000000","ff800000"],["7fffffff","00000018","00000000","00000000","ff000000"],["7fffffff","00000019","00000000","00000000","fe000000"],["7fffffff","0000001a","00000000","00000000","fc000000"],["7fffffff","0000001b","00000000","00000000","f8000000"],["7fffffff","0000001c","00000000","00000000","f0000000"],["7fffffff","0000001d","00000000","00000000","e0000000"],["7fffffff","0000001e","00000000","00000000","c0000000"],["7fffffff","0000001f","00000000","00000000","80000000"],["7fffffff","00000020","00000000","00000000","7fffffff","unguarded"],["7fffffff","00000021","00000000","00000000","fffffffe","unguarded"],["7fffffff","00000022","00000000","00000000","fffffffc","unguarded"],["7fffffff","00000023","00000000","00000000","fffffff8","unguarded"],["7fffffff","00000024","00000000","00000000","fffffff0","unguarded"],["7fffffff","00000025","00000000","00000000","ffffffe0","unguarded"],["7fffffff","00000026","00000000","00000000","ffffffc0","unguarded"],["7fffffff","00000027","00000000","00000000","ffffff80","unguarded"],["7fffffff","00000028","00000000","00000000","ffffff00","unguarded"],["7fffffff","0000003f","00000000","00000000","80000000","unguarded"],["7fffffff","00000040","00000000","00000000","7fffffff","unguarded"],["7fffffff","00000041","00000000","00000000","fffffffe","unguarded"],["7fffffff","00000060","00000000","00000000","7fffffff","unguarded"],["7fffffff","0000007f","00000000","00000000","80000000","unguarded"],["7fffffff","00000080","00000000","00000000","7fffffff","unguarded"],["7fffffff","000000ff","00000000","00000000","80000000","unguarded"],["7fffffff","00000100","00000000","00000000","7fffffff","unguarded"],["7fffffff","7fffffff","00000000","00000000","80000000","unguarded"],["7fffffff","80000000","00000000","00000000","7fffffff","unguarded"],["7fffffff","ffffffe0","00000000","00000000","7fffffff","unguarded"],["7fffffff","ffffffff","00000000","00000000","80000000","unguarded"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","00000000"],["80000000","00000002","00000000","00000000","00000000"],["80000000","00000003","00000000","00000000","00000000"],["80000000","00000004","00000000","00000000","00000000"],["80000000","00000005","00000000","00000000","00000000"],["80000000","00000006","00000000","00000000","00000000"],["80000000","00000007","00000000","00000000","00000000"],["80000000","00000008","00000000","00000000","00000000"],["80000000","00000009","00000000","00000000","00000000"],["80000000","0000000a","00000000","00000000","00000000"],["80000000","0000000b","00000000","00000000","00000000"],["80000000","0000000c","00000000","00000000","00000000"],["80000000","0000000d","00000000","00000000","00000000"],["80000000","0000000e","00000000","00000000","00000000"],["80000000","0000000f","00000000","00000000","00000000"],["80000000","00000010","00000000","00000000","00000000"],["80000000","00000011","00000000","00000000","00000000"],["80000000","00000012","00000000","00000000","00000000"],["80000000","00000013","00000000","00000000","00000000"],["80000000","00000014","00000000","00000000","00000000"],["80000000","00000015","00000000","00000000","00000000"],["80000000","00000016","00000000","00000000","00000000"],["80000000","00000017","00000000","00000000","00000000"],["80000000","00000018","00000000","00000000","00000000"],["80000000","00000019","00000000","00000000","00000000"],["80000000","0000001a","00000000","00000000","00000000"],["80000000","0000001b","00000000","00000000","00000000"],["80000000","0000001c","00000000","00000000","00000000"],["80000000","0000001d","00000000","00000000","00000000"],["80000000","0000001e","00000000","00000000","00000000"],["80000000","0000001f","00000000","00000000","00000000"],["80000000","00000020","00000000","00000000","80000000","unguarded"],["80000000","00000021","00000000","00000000","00000000","unguarded"],["80000000","00000022","00000000","00000000","00000000","unguarded"],["80000000","00000023","00000000","00000000","00000000","unguarded"],["80000000","00000024","00000000","00000000","00000000","unguarded"],["80000000","00000025","00000000","00000000","00000000","unguarded"],["80000000","00000026","00000000","00000000","00000000","unguarded"],["80000000","00000027","00000000","00000000","00000000","unguarded"],["80000000","00000028","00000000","00000000","00000000","unguarded"],["80000000","0000003f","00000000","00000000","00000000","unguarded"],["80000000","00000040","00000000","00000000","80000000","unguarded"],["80000000","00000041","00000000","00000000","00000000","unguarded"],["80000000","00000060","00000000","00000000","80000000","unguarded"],["80000000","0000007f","00000000","00000000","00000000","unguarded"],["80000000","00000080","00000000","00000000","80000000","unguarded"],["80000000","000000ff","00000000","00000000","00000000","unguarded"],["80000000","00000100","00000000","00000000","80000000","unguarded"],["80000000","7fffffff","00000000","00000000","00000000","unguarded"],["80000000","80000000","00000000","00000000","80000000","unguarded"],["80000000","ffffffe0","00000000","00000000","80000000","unguarded"],["80000000","ffffffff","00000000","00000000","00000000","unguarded"],["80000001","00000000","00000000","00000000","80000001"],["80000001","00000001","00000000","00000000","00000002"],["80000001","00000002","00000000","00000000","00000004"],["80000001","00000003","00000000","00000000","00000008"],["80000001","00000004","00000000","00000000","00000010"],["80000001","00000005","00000000","00000000","00000020"],["80000001","00000006","00000000","00000000","00000040"],["80000001","00000007","00000000","00000000","00000080"],["80000001","00000008","00000000","00000000","00000100"],["80000001","00000009","00000000","00000000","00000200"],["80000001","0000000a","00000000","00000000","00000400"],["80000001","0000000b","00000000","00000000","00000800"],["80000001","0000000c","00000000","00000000","00001000"],["80000001","0000000d","00000000","00000000","00002000"],["80000001","0000000e","00000000","00000000","00004000"],["80000001","0000000f","00000000","00000000","00008000"],["80000001","00000010","00000000","00000000","00010000"],["80000001","00000011","00000000","00000000","00020000"],["80000001","00000012","00000000","00000000","00040000"],["80000001","00000013","00000000","00000000","00080000"],["80000001","00000014","00000000","00000000","00100000"],["80000001","00000015","00000000","00000000","00200000"],["80000001","00000016","00000000","00000000","00400000"],["80000001","00000017","00000000","00000000","00800000"],["80000001","00000018","00000000","00000000","01000000"],["80000001","00000019","00000000","00000000","02000000"],["80000001","0000001a","00000000","00000000","04000000"],["80000001","0000001b","00000000","00000000","08000000"],["80000001","0000001c","00000000","00000000","10000000"],["80000001","0000001d","00000000","00000000","20000000"],["80000001","0000001e","00000000","00000000","40000000"],["80000001","0000001f","00000000","00000000","80000000"],["80000001","00000020","00000000","00000000","80000001","unguarded"],["80000001","00000021","00000000","00000000","00000002","unguarded"],["80000001","00000022","00000000","00000000","00000004","unguarded"],["80000001","00000023","00000000","00000000","00000008","unguarded"],["80000001","00000024","00000000","00000000","00000010","unguarded"],["80000001","00000025","00000000","00000000","00000020","unguarded"],["80000001","00000026","00000000","00000000","00000040","unguarded"],["80000001","00000027","00000000","00000000","00000080","unguarded"],["80000001","00000028","00000000","00000000","00000100","unguarded"],["80000001","0000003f","00000000","00000000","80000000","unguarded"],["80000001","00000040","00000000","00000000","80000001","unguarded"],["80000001","00000041","00000000","00000000","00000002","unguarded"],["80000001","00000060","00000000","00000000","80000001","unguarded"],["80000001","0000007f","00000000","00000000","80000000","unguarded"],["80000001","00000080","00000000","00000000","80000001","unguarded"],["80000001","000000ff","00000000","00000000","80000000","unguarded"],["80000001","00000100","00000000","00000000","80000001","unguarded"],["80000001","7fffffff","00000000","00000000","80000000","unguarded"],["80000001","80000000","00000000","00000000","80000001","unguarded"],["80000001","ffffffe0","00000000","00000000","80000001","unguarded"],["80000001","ffffffff","00000000","00000000","80000000","unguarded"],["aaaaaaaa","00000000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000001","00000000","00000000","55555554"],["aaaaaaaa","00000002","00000000","00000000","aaaaaaa8"],["aaaaaaaa","00000003","00000000","00000000","55555550"],["aaaaaaaa","00000004","00000000","00000000","aaaaaaa0"],["aaaaaaaa","00000005","00000000","00000000","55555540"],["aaaaaaaa","00000006","00000000","00000000","aaaaaa80"],["aaaaaaaa","00000007","00000000","00000000","55555500"],["aaaaaaaa","00000008","00000000","00000000","aaaaaa00"],["aaaaaaaa","00000009","00000000","00000000","55555400"],["aaaaaaaa","0000000a","00000000","00000000","aaaaa800"],["aaaaaaaa","0000000b","00000000","00000000","55555000"],["aaaaaaaa","0000000c","00000000","00000000","aaaaa000"],["aaaaaaaa","0000000d","00000000","00000000","55554000"],["aaaaaaaa","0000000e","00000000","00000000","aaaa8000"],["aaaaaaaa","0000000f","00000000","00000000","55550000"],["aaaaaaaa","00000010","00000000","00000000","aaaa0000"],["aaaaaaaa","00000011","00000000","00000000","55540000"],["aaaaaaaa","00000012","00000000","00000000","aaa80000"],["aaaaaaaa","00000013","00000000","00000000","55500000"],["aaaaaaaa","00000014","00000000","00000000","aaa00000"],["aaaaaaaa","00000015","00000000","00000000","55400000"],["aaaaaaaa","00000016","00000000","00000000","aa800000"],["aaaaaaaa","00000017","00000000","00000000","55000000"],["aaaaaaaa","00000018","00000000","00000000","aa000000"],["aaaaaaaa","00000019","00000000","00000000","54000000"],["aaaaaaaa","0000001a","00000000","00000000","a8000000"],["aaaaaaaa","0000001b","00000000","00000000","50000000"],["aaaaaaaa","0000001c","00000000","00000000","a0000000"],["aaaaaaaa","0000001d","00000000","00000000","40000000"],["aaaaaaaa","0000001e","00000000","00000000","80000000"],["aaaaaaaa","0000001f","00000000","00000000","00000000"],["aaaaaaaa","00000020","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","00000021","00000000","00000000","55555554","unguarded"],["aaaaaaaa","00000022","00000000","00000000","aaaaaaa8","unguarded"],["aaaaaaaa","00000023","00000000","00000000","55555550","unguarded"],["aaaaaaaa","00000024","00000000","00000000","aaaaaaa0","unguarded"],["aaaaaaaa","00000025","00000000","00000000","55555540","unguarded"],["aaaaaaaa","00000026","00000000","00000000","aaaaaa80","unguarded"],["aaaaaaaa","00000027","00000000","00000000","55555500","unguarded"],["aaaaaaaa","00000028","00000000","00000000","aaaaaa00","unguarded"],["aaaaaaaa","0000003f","00000000","00000000","00000000","unguarded"],["aaaaaaaa","00000040","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","00000041","00000000","00000000","55555554","unguarded"],["aaaaaaaa","00000060","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","0000007f","00000000","00000000","00000000","unguarded"],["aaaaaaaa","00000080","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","000000ff","00000000","00000000","00000000","unguarded"],["aaaaaaaa","00000100","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","7fffffff","00000000","00000000","00000000","unguarded"],["aaaaaaaa","80000000","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","ffffffe0","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","ffffffff","00000000","00000000","00000000","unguarded"],["deadbeef","00000000","00000000","00000000","deadbeef"],["deadbeef","00000001","00000000","00000000","bd5b7dde"],["deadbeef","00000002","00000000","00000000","7ab6fbbc"],["deadbeef","00000003","00000000","00000000","f56df778"],["deadbeef","00000004","00000000","00000000","eadbeef0"],["deadbeef","00000005","00000000","00000000","d5b7dde0"],["deadbeef","00000006","00000000","00000000","ab6fbbc0"],["deadbeef","00000007","00000000","00000000","56df7780"],["deadbeef","00000008","00000000","00000000","adbeef00"],["deadbeef","00000009","00000000","00000000","5b7dde00"],["deadbeef","0000000a","00000000","00000000","b6fbbc00"],["deadbeef","0000000b","00000000","00000000","6df77800"],["deadbeef","0000000c","00000000","00000000","dbeef000"],["deadbeef","0000000d","00000000","00000000","b7dde000"],["deadbeef","0000000e","00000000","00000000","6fbbc000"],["deadbeef","0000000f","00000000","00000000","df778000"],["deadbeef","00000010","00000000","00000000","beef0000"],["deadbeef","00000011","00000000","00000000","7dde0000"],["deadbeef","00000012","00000000","00000000","fbbc0000"],["deadbeef","00000013","00000000","00000000","f7780000"],["deadbeef","00000014","00000000","00000000","eef00000"],["deadbeef","00000015","00000000","00000000","dde00000"],["deadbeef","00000016","00000000","00000000","bbc00000"],["deadbeef","00000017","00000000","00000000","77800000"],["deadbeef","00000018","00000000","00000000","ef000000"],["deadbeef","00000019","00000000","00000000","de000000"],["deadbeef","0000001a","00000000","00000000","bc000000"],["deadbeef","0000001b","00000000","00000000","78000000"],["deadbeef","0000001c","00000000","00000000","f0000000"],["deadbeef","0000001d","00000000","00000000","e0000000"],["deadbeef","0000001e","00000000","00000000","c0000000"],["deadbeef","0000001f","00000000","00000000","80000000"],["deadbeef","00000020","00000000","00000000","deadbeef","unguarded"],["deadbeef","00000021","00000000","00000000","bd5b7dde","unguarded"],["deadbeef","00000022","00000000","00000000","7ab6fbbc","unguarded"],["deadbeef","00000023","00000000","00000000","f56df778","unguarded"],["deadbeef","00000024","00000000","00000000","eadbeef0","unguarded"],["deadbeef","00000025","00000000","00000000","d5b7dde0","unguarded"],["deadbeef","00000026","00000000","00000000","ab6fbbc0","unguarded"],["deadbeef","00000027","00000000","00000000","56df7780","unguarded"],["deadbeef","00000028","00000000","00000000","adbeef00","unguarded"],["deadbeef","0000003f","00000000","00000000","80000000","unguarded"],["deadbeef","00000040","00000000","00000000","deadbeef","unguarded"],["deadbeef","00000041","00000000","00000000","bd5b7dde","unguarded"],["deadbeef","00000060","00000000","00000000","deadbeef","unguarded"],["deadbeef","0000007f","00000000","00000000","80000000","unguarded"],["deadbeef","00000080","00000000","00000000","deadbeef","unguarded"],["deadbeef","000000ff","00000000","00000000","80000000","unguarded"],["deadbeef","00000100","00000000","00000000","deadbeef","unguarded"],["deadbeef","7fffffff","00000000","00000000","80000000","unguarded"],["deadbeef","80000000","00000000","00000000","deadbeef","unguarded"],["deadbeef","ffffffe0","00000000","00000000","deadbeef","unguarded"],["deadbeef","ffffffff","00000000","00000000","80000000","unguarded"],["ffff0000","00000000","00000000","00000000","ffff0000"],["ffff0000","00000001","00000000","00000000","fffe0000"],["ffff0000","00000002","00000000","00000000","fffc0000"],["ffff0000","00000003","00000000","00000000","fff80000"],["ffff0000","00000004","00000000","00000000","fff00000"],["ffff0000","00000005","00000000","00000000","ffe00000"],["ffff0000","00000006","00000000","00000000","ffc00000"],["ffff0000","00000007","00000000","00000000","ff800000"],["ffff0000","00000008","00000000","00000000","ff000000"],["ffff0000","00000009","00000000","00000000","fe000000"],["ffff0000","0000000a","00000000","00000000","fc000000"],["ffff0000","0000000b","00000000","00000000","f8000000"],["ffff0000","0000000c","00000000","00000000","f0000000"],["ffff0000","0000000d","00000000","00000000","e0000000"],["ffff0000","0000000e","00000000","00000000","c0000000"],["ffff0000","0000000f","00000000","00000000","80000000"],["ffff0000","00000010","00000000","00000000","00000000"],["ffff0000","00000011","00000000","00000000","00000000"],["ffff0000","00000012","00000000","00000000","00000000"],["ffff0000","00000013","00000000","00000000","00000000"],["ffff0000","00000014","00000000","00000000","00000000"],["ffff0000","00000015","00000000","00000000","00000000"],["ffff0000","00000016","00000000","00000000","00000000"],["ffff0000","00000017","00000000","00000000","00000000"],["ffff0000","00000018","00000000","00000000","00000000"],["ffff0000","00000019","00000000","00000000","00000000"],["ffff0000","0000001a","00000000","00000000","00000000"],["ffff0000","0000001b","00000000","00000000","00000000"],["ffff0000","0000001c","00000000","00000000","00000000"],["ffff0000","0000001d","00000000","00000000","00000000"],["ffff0000","0000001e","00000000","00000000","00000000"],["ffff0000","0000001f","00000000","00000000","00000000"],["ffff0000","00000020","00000000","00000000","ffff0000","unguarded"],["ffff0000","00000021","00000000","00000000","fffe0000","unguarded"],["ffff0000","00000022","00000000","00000000","fffc0000","unguarded"],["ffff0000","00000023","00000000","00000000","fff80000","unguarded"],["ffff0000","00000024","00000000","00000000","fff00000","unguarded"],["ffff0000","00000025","00000000","00000000","ffe00000","unguarded"],["ffff0000","00000026","00000000","00000000","ffc00000","unguarded"],["ffff0000","00000027","00000000","00000000","ff800000","unguarded"],["ffff0000","00000028","00000000","00000000","ff000000","unguarded"],["ffff0000","0000003f","00000000","00000000","00000000","unguarded"],["ffff0000","00000040","00000000","00000000","ffff0000","unguarded"],["ffff0000","00000041","00000000","00000000","fffe0000","unguarded"],["ffff0000","00000060","00000000","00000000","ffff0000","unguarded"],["ffff0000","0000007f","00000000","00000000","00000000","unguarded"],["ffff0000","00000080","00000000","00000000","ffff0000","unguarded"],["ffff0000","000000ff","00000000","00000000","00000000","unguarded"],["ffff0000","00000100","00000000","00000000","ffff0000","unguarded"],["ffff0000","7fffffff","00000000","00000000","00000000","unguarded"],["ffff0000","80000000","00000000","00000000","ffff0000","unguarded"],["ffff0000","ffffffe0","00000000","00000000","ffff0000","unguarded"],["ffff0000","ffffffff","00000000","00000000","00000000","unguarded"],["ffff8000","00000000","00000000","00000000","ffff8000"],["ffff8000","00000001","00000000","00000000","ffff0000"],["ffff8000","00000002","00000000","00000000","fffe0000"],["ffff8000","00000003","00000000","00000000","fffc0000"],["ffff8000","00000004","00000000","00000000","fff80000"],["ffff8000","00000005","00000000","00000000","fff00000"],["ffff8000","00000006","00000000","00000000","ffe00000"],["ffff8000","00000007","00000000","00000000","ffc00000"],["ffff8000","00000008","00000000","00000000","ff800000"],["ffff8000","00000009","00000000","00000000","ff000000"],["ffff8000","0000000a","00000000","00000000","fe000000"],["ffff8000","0000000b","00000000","00000000","fc000000"],["ffff8000","0000000c","00000000","00000000","f8000000"],["ffff8000","0000000d","00000000","00000000","f0000000"],["ffff8000","0000000e","00000000","00000000","e0000000"],["ffff8000","0000000f","00000000","00000000","c0000000"],["ffff8000","00000010","00000000","00000000","80000000"],["ffff8000","00000011","00000000","00000000","00000000"],["ffff8000","00000012","00000000","00000000","00000000"],["ffff8000","00000013","00000000","00000000","00000000"],["ffff8000","00000014","00000000","00000000","00000000"],["ffff8000","00000015","00000000","00000000","00000000"],["ffff8000","00000016","00000000","00000000","00000000"],["ffff8000","00000017","00000000","00000000","00000000"],["ffff8000","00000018","00000000","00000000","00000000"],["ffff8000","00000019","00000000","00000000","00000000"],["ffff8000","0000001a","00000000","00000000","00000000"],["ffff8000","0000001b","00000000","00000000","00000000"],["ffff8000","0000001c","00000000","00000000","00000000"],["ffff8000","0000001d","00000000","00000000","00000000"],["ffff8000","0000001e","00000000","00000000","00000000"],["ffff8000","0000001f","00000000","00000000","00000000"],["ffff8000","00000020","00000000","00000000","ffff8000","unguarded"],["ffff8000","00000021","00000000","00000000","ffff0000","unguarded"],["ffff8000","00000022","00000000","00000000","fffe0000","unguarded"],["ffff8000","00000023","00000000","00000000","fffc0000","unguarded"],["ffff8000","00000024","00000000","00000000","fff80000","unguarded"],["ffff8000","00000025","00000000","00000000","fff00000","unguarded"],["ffff8000","00000026","00000000","00000000","ffe00000","unguarded"],["ffff8000","00000027","00000000","00000000","ffc00000","unguarded"],["ffff8000","00000028","00000000","00000000","ff800000","unguarded"],["ffff8000","0000003f","00000000","00000000","00000000","unguarded"],["ffff8000","00000040","00000000","00000000","ffff8000","unguarded"],["ffff8000","00000041","00000000","00000000","ffff0000","unguarded"],["ffff8000","00000060","00000000","00000000","ffff8000","unguarded"],["ffff8000","0000007f","00000000","00000000","00000000","unguarded"],["ffff8000","00000080","00000000","00000000","ffff8000","unguarded"],["ffff8000","000000ff","00000000","00000000","00000000","unguarded"],["ffff8000","00000100","00000000","00000000","ffff8000","unguarded"],["ffff8000","7fffffff","00000000","00000000","00000000","unguarded"],["ffff8000","80000000","00000000","00000000","ffff8000","unguarded"],["ffff8000","ffffffe0","00000000","00000000","ffff8000","unguarded"],["ffff8000","ffffffff","00000000","00000000","00000000","unguarded"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["ffffffe0","00000001","00000000","00000000","ffffffc0"],["ffffffe0","00000002","00000000","00000000","ffffff80"],["ffffffe0","00000003","00000000","00000000","ffffff00"],["ffffffe0","00000004","00000000","00000000","fffffe00"],["ffffffe0","00000005","00000000","00000000","fffffc00"],["ffffffe0","00000006","00000000","00000000","fffff800"],["ffffffe0","00000007","00000000","00000000","fffff000"],["ffffffe0","00000008","00000000","00000000","ffffe000"],["ffffffe0","00000009","00000000","00000000","ffffc000"],["ffffffe0","0000000a","00000000","00000000","ffff8000"],["ffffffe0","0000000b","00000000","00000000","ffff0000"],["ffffffe0","0000000c","00000000","00000000","fffe0000"],["ffffffe0","0000000d","00000000","00000000","fffc0000"],["ffffffe0","0000000e","00000000","00000000","fff80000"],["ffffffe0","0000000f","00000000","00000000","fff00000"],["ffffffe0","00000010","00000000","00000000","ffe00000"],["ffffffe0","00000011","00000000","00000000","ffc00000"],["ffffffe0","00000012","00000000","00000000","ff800000"],["ffffffe0","00000013","00000000","00000000","ff000000"],["ffffffe0","00000014","00000000","00000000","fe000000"],["ffffffe0","00000015","00000000","00000000","fc000000"],["ffffffe0","00000016","00000000","00000000","f8000000"],["ffffffe0","00000017","00000000","00000000","f0000000"],["ffffffe0","00000018","00000000","00000000","e0000000"],["ffffffe0","00000019","00000000","00000000","c0000000"],["ffffffe0","0000001a","00000000","00000000","80000000"],["ffffffe0","0000001b","00000000","00000000","00000000"],["ffffffe0","0000001c","00000000","00000000","00000000"],["ffffffe0","0000001d","00000000","00000000","00000000"],["ffffffe0","0000001e","00000000","00000000","00000000"],["ffffffe0","0000001f","00000000","00000000","00000000"],["ffffffe0","00000020","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","00000021","00000000","00000000","ffffffc0","unguarded"],["ffffffe0","00000022","00000000","00000000","ffffff80","unguarded"],["ffffffe0","00000023","00000000","00000000","ffffff00","unguarded"],["ffffffe0","00000024","00000000","00000000","fffffe00","unguarded"],["ffffffe0","00000025","00000000","00000000","fffffc00","unguarded"],["ffffffe0","00000026","00000000","00000000","fffff800","unguarded"],["ffffffe0","00000027","00000000","00000000","fffff000","unguarded"],["ffffffe0","00000028","00000000","00000000","ffffe000","unguarded"],["ffffffe0","0000003f","00000000","00000000","00000000","unguarded"],["ffffffe0","00000040","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","00000041","00000000","00000000","ffffffc0","unguarded"],["ffffffe0","00000060","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","0000007f","00000000","00000000","00000000","unguarded"],["ffffffe0","00000080","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","000000ff","00000000","00000000","00000000","unguarded"],["ffffffe0","00000100","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","7fffffff","00000000","00000000","00000000","unguarded"],["ffffffe0","80000000","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","ffffffe0","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","ffffffff","00000000","00000000","00000000","unguarded"],["ffffffe1","00000000","00000000","00000000","ffffffe1"],["ffffffe1","00000001","00000000","00000000","ffffffc2"],["ffffffe1","00000002","00000000","00000000","ffffff84"],["ffffffe1","00000003","00000000","00000000","ffffff08"],["ffffffe1","00000004","00000000","00000000","fffffe10"],["ffffffe1","00000005","00000000","00000000","fffffc20"],["ffffffe1","00000006","00000000","00000000","fffff840"],["ffffffe1","00000007","00000000","00000000","fffff080"],["ffffffe1","00000008","00000000","00000000","ffffe100"],["ffffffe1","00000009","00000000","00000000","ffffc200"],["ffffffe1","0000000a","00000000","00000000","ffff8400"],["ffffffe1","0000000b","00000000","00000000","ffff0800"],["ffffffe1","0000000c","00000000","00000000","fffe1000"],["ffffffe1","0000000d","00000000","00000000","fffc2000"],["ffffffe1","0000000e","00000000","00000000","fff84000"],["ffffffe1","0000000f","00000000","00000000","fff08000"],["ffffffe1","00000010","00000000","00000000","ffe10000"],["ffffffe1","00000011","00000000","00000000","ffc20000"],["ffffffe1","00000012","00000000","00000000","ff840000"],["ffffffe1","00000013","00000000","00000000","ff080000"],["ffffffe1","00000014","00000000","00000000","fe100000"],["ffffffe1","00000015","00000000","00000000","fc200000"],["ffffffe1","00000016","00000000","00000000","f8400000"],["ffffffe1","00000017","00000000","00000000","f0800000"],["ffffffe1","00000018","00000000","00000000","e1000000"],["ffffffe1","00000019","00000000","00000000","c2000000"],["ffffffe1","0000001a","00000000","00000000","84000000"],["ffffffe1","0000001b","00000000","00000000","08000000"],["ffffffe1","0000001c","00000000","00000000","10000000"],["ffffffe1","0000001d","00000000","00000000","20000000"],["ffffffe1","0000001e","00000000","00000000","40000000"],["ffffffe1","0000001f","00000000","00000000","80000000"],["ffffffe1","00000020","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","00000021","00000000","00000000","ffffffc2","unguarded"],["ffffffe1","00000022","00000000","00000000","ffffff84","unguarded"],["ffffffe1","00000023","00000000","00000000","ffffff08","unguarded"],["ffffffe1","00000024","00000000","00000000","fffffe10","unguarded"],["ffffffe1","00000025","00000000","00000000","fffffc20","unguarded"],["ffffffe1","00000026","00000000","00000000","fffff840","unguarded"],["ffffffe1","00000027","00000000","00000000","fffff080","unguarded"],["ffffffe1","00000028","00000000","00000000","ffffe100","unguarded"],["ffffffe1","0000003f","00000000","00000000","80000000","unguarded"],["ffffffe1","00000040","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","00000041","00000000","00000000","ffffffc2","unguarded"],["ffffffe1","00000060","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","0000007f","00000000","00000000","80000000","unguarded"],["ffffffe1","00000080","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","000000ff","00000000","00000000","80000000","unguarded"],["ffffffe1","00000100","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","7fffffff","00000000","00000000","80000000","unguarded"],["ffffffe1","80000000","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","ffffffe0","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","ffffffff","00000000","00000000","80000000","unguarded"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffff2"],["fffffff9","00000002","00000000","00000000","ffffffe4"],["fffffff9","00000003","00000000","00000000","ffffffc8"],["fffffff9","00000004","00000000","00000000","ffffff90"],["fffffff9","00000005","00000000","00000000","ffffff20"],["fffffff9","00000006","00000000","00000000","fffffe40"],["fffffff9","00000007","00000000","00000000","fffffc80"],["fffffff9","00000008","00000000","00000000","fffff900"],["fffffff9","00000009","00000000","00000000","fffff200"],["fffffff9","0000000a","00000000","00000000","ffffe400"],["fffffff9","0000000b","00000000","00000000","ffffc800"],["fffffff9","0000000c","00000000","00000000","ffff9000"],["fffffff9","0000000d","00000000","00000000","ffff2000"],["fffffff9","0000000e","00000000","00000000","fffe4000"],["fffffff9","0000000f","00000000","00000000","fffc8000"],["fffffff9","00000010","00000000","00000000","fff90000"],["fffffff9","00000011","00000000","00000000","fff20000"],["fffffff9","00000012","00000000","00000000","ffe40000"],["fffffff9","00000013","00000000","00000000","ffc80000"],["fffffff9","00000014","00000000","00000000","ff900000"],["fffffff9","00000015","00000000","00000000","ff200000"],["fffffff9","00000016","00000000","00000000","fe400000"],["fffffff9","00000017","00000000","00000000","fc800000"],["fffffff9","00000018","00000000","00000000","f9000000"],["fffffff9","00000019","00000000","00000000","f2000000"],["fffffff9","0000001a","00000000","00000000","e4000000"],["fffffff9","0000001b","00000000","00000000","c8000000"],["fffffff9","0000001c","00000000","00000000","90000000"],["fffffff9","0000001d","00000000","00000000","20000000"],["fffffff9","0000001e","00000000","00000000","40000000"],["fffffff9","0000001f","00000000","00000000","80000000"],["fffffff9","00000020","00000000","00000000","fffffff9","unguarded"],["fffffff9","00000021","00000000","00000000","fffffff2","unguarded"],["fffffff9","00000022","00000000","00000000","ffffffe4","unguarded"],["fffffff9","00000023","00000000","00000000","ffffffc8","unguarded"],["fffffff9","00000024","00000000","00000000","ffffff90","unguarded"],["fffffff9","00000025","00000000","00000000","ffffff20","unguarded"],["fffffff9","00000026","00000000","00000000","fffffe40","unguarded"],["fffffff9","00000027","00000000","00000000","fffffc80","unguarded"],["fffffff9","00000028","00000000","00000000","fffff900","unguarded"],["fffffff9","0000003f","00000000","00000000","80000000","unguarded"],["fffffff9","00000040","00000000","00000000","fffffff9","unguarded"],["fffffff9","00000041","00000000","00000000","fffffff2","unguarded"],["fffffff9","00000060","00000000","00000000","fffffff9","unguarded"],["fffffff9","0000007f","00000000","00000000","80000000","unguarded"],["fffffff9","00000080","00000000","00000000","fffffff9","unguarded"],["fffffff9","000000ff","00000000","00000000","80000000","unguarded"],["fffffff9","00000100","00000000","00000000","fffffff9","unguarded"],["fffffff9","7fffffff","00000000","00000000","80000000","unguarded"],["fffffff9","80000000","00000000","00000000","fffffff9","unguarded"],["fffffff9","ffffffe0","00000000","00000000","fffffff9","unguarded"],["fffffff9","ffffffff","00000000","00000000","80000000","unguarded"],["fffffffd","00000000","00000000","00000000","fffffffd"],["fffffffd","00000001","00000000","00000000","fffffffa"],["fffffffd","00000002","00000000","00000000","fffffff4"],["fffffffd","00000003","00000000","00000000","ffffffe8"],["fffffffd","00000004","00000000","00000000","ffffffd0"],["fffffffd","00000005","00000000","00000000","ffffffa0"],["fffffffd","00000006","00000000","00000000","ffffff40"],["fffffffd","00000007","00000000","00000000","fffffe80"],["fffffffd","00000008","00000000","00000000","fffffd00"],["fffffffd","00000009","00000000","00000000","fffffa00"],["fffffffd","0000000a","00000000","00000000","fffff400"],["fffffffd","0000000b","00000000","00000000","ffffe800"],["fffffffd","0000000c","00000000","00000000","ffffd000"],["fffffffd","0000000d","00000000","00000000","ffffa000"],["fffffffd","0000000e","00000000","00000000","ffff4000"],["fffffffd","0000000f","00000000","00000000","fffe8000"],["fffffffd","00000010","00000000","00000000","fffd0000"],["fffffffd","00000011","00000000","00000000","fffa0000"],["fffffffd","00000012","00000000","00000000","fff40000"],["fffffffd","00000013","00000000","00000000","ffe80000"],["fffffffd","00000014","00000000","00000000","ffd00000"],["fffffffd","00000015","00000000","00000000","ffa00000"],["fffffffd","00000016","00000000","00000000","ff400000"],["fffffffd","00000017","00000000","00000000","fe800000"],["fffffffd","00000018","00000000","00000000","fd000000"],["fffffffd","00000019","00000000","00000000","fa000000"],["fffffffd","0000001a","00000000","00000000","f4000000"],["fffffffd","0000001b","00000000","00000000","e8000000"],["fffffffd","0000001c","00000000","00000000","d0000000"],["fffffffd","0000001d","00000000","00000000","a0000000"],["fffffffd","0000001e","00000000","00000000","40000000"],["fffffffd","0000001f","00000000","00000000","80000000"],["fffffffd","00000020","00000000","00000000","fffffffd","unguarded"],["fffffffd","00000021","00000000","00000000","fffffffa","unguarded"],["fffffffd","00000022","00000000","00000000","fffffff4","unguarded"],["fffffffd","00000023","00000000","00000000","ffffffe8","unguarded"],["fffffffd","00000024","00000000","00000000","ffffffd0","unguarded"],["fffffffd","00000025","00000000","00000000","ffffffa0","unguarded"],["fffffffd","00000026","00000000","00000000","ffffff40","unguarded"],["fffffffd","00000027","00000000","00000000","fffffe80","unguarded"],["fffffffd","00000028","00000000","00000000","fffffd00","unguarded"],["fffffffd","0000003f","00000000","00000000","80000000","unguarded"],["fffffffd","00000040","00000000","00000000","fffffffd","unguarded"],["fffffffd","00000041","00000000","00000000","fffffffa","unguarded"],["fffffffd","00000060","00000000","00000000","fffffffd","unguarded"],["fffffffd","0000007f","00000000","00000000","80000000","unguarded"],["fffffffd","00000080","00000000","00000000","fffffffd","unguarded"],["fffffffd","000000ff","00000000","00000000","80000000","unguarded"],["fffffffd","00000100","00000000","00000000","fffffffd","unguarded"],["fffffffd","7fffffff","00000000","00000000","80000000","unguarded"],["fffffffd","80000000","00000000","00000000","fffffffd","unguarded"],["fffffffd","ffffffe0","00000000","00000000","fffffffd","unguarded"],["fffffffd","ffffffff","00000000","00000000","80000000","unguarded"],["fffffffe","00000000","00000000","00000000","fffffffe"],["fffffffe","00000001","00000000","00000000","fffffffc"],["fffffffe","00000002","00000000","00000000","fffffff8"],["fffffffe","00000003","00000000","00000000","fffffff0"],["fffffffe","00000004","00000000","00000000","ffffffe0"],["fffffffe","00000005","00000000","00000000","ffffffc0"],["fffffffe","00000006","00000000","00000000","ffffff80"],["fffffffe","00000007","00000000","00000000","ffffff00"],["fffffffe","00000008","00000000","00000000","fffffe00"],["fffffffe","00000009","00000000","00000000","fffffc00"],["fffffffe","0000000a","00000000","00000000","fffff800"],["fffffffe","0000000b","00000000","00000000","fffff000"],["fffffffe","0000000c","00000000","00000000","ffffe000"],["fffffffe","0000000d","00000000","00000000","ffffc000"],["fffffffe","0000000e","00000000","00000000","ffff8000"],["fffffffe","0000000f","00000000","00000000","ffff0000"],["fffffffe","00000010","00000000","00000000","fffe0000"],["fffffffe","00000011","00000000","00000000","fffc0000"],["fffffffe","00000012","00000000","00000000","fff80000"],["fffffffe","00000013","00000000","00000000","fff00000"],["fffffffe","00000014","00000000","00000000","ffe00000"],["fffffffe","00000015","00000000","00000000","ffc00000"],["fffffffe","00000016","00000000","00000000","ff800000"],["fffffffe","00000017","00000000","00000000","ff000000"],["fffffffe","00000018","00000000","00000000","fe000000"],["fffffffe","00000019","00000000","00000000","fc000000"],["fffffffe","0000001a","00000000","00000000","f8000000"],["fffffffe","0000001b","00000000","00000000","f0000000"],["fffffffe","0000001c","00000000","00000000","e0000000"],["fffffffe","0000001d","00000000","00000000","c0000000"],["fffffffe","0000001e","00000000","00000000","80000000"],["fffffffe","0000001f","00000000","00000000","00000000"],["fffffffe","00000020","00000000","00000000","fffffffe","unguarded"],["fffffffe","00000021","00000000","00000000","fffffffc","unguarded"],["fffffffe","00000022","00000000","00000000","fffffff8","unguarded"],["fffffffe","00000023","00000000","00000000","fffffff0","unguarded"],["fffffffe","00000024","00000000","00000000","ffffffe0","unguarded"],["fffffffe","00000025","00000000","00000000","ffffffc0","unguarded"],["fffffffe","00000026","00000000","00000000","ffffff80","unguarded"],["fffffffe","00000027","00000000","00000000","ffffff00","unguarded"],["fffffffe","00000028","00000000","00000000","fffffe00","unguarded"],["fffffffe","0000003f","00000000","00000000","00000000","unguarded"],["fffffffe","00000040","00000000","00000000","fffffffe","unguarded"],["fffffffe","00000041","00000000","00000000","fffffffc","unguarded"],["fffffffe","00000060","00000000","00000000","fffffffe","unguarded"],["fffffffe","0000007f","00000000","00000000","00000000","unguarded"],["fffffffe","00000080","00000000","00000000","fffffffe","unguarded"],["fffffffe","000000ff","00000000","00000000","00000000","unguarded"],["fffffffe","00000100","00000000","00000000","fffffffe","unguarded"],["fffffffe","7fffffff","00000000","00000000","00000000","unguarded"],["fffffffe","80000000","00000000","00000000","fffffffe","unguarded"],["fffffffe","ffffffe0","00000000","00000000","fffffffe","unguarded"],["fffffffe","ffffffff","00000000","00000000","00000000","unguarded"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","fffffffe"],["ffffffff","00000002","00000000","00000000","fffffffc"],["ffffffff","00000003","00000000","00000000","fffffff8"],["ffffffff","00000004","00000000","00000000","fffffff0"],["ffffffff","00000005","00000000","00000000","ffffffe0"],["ffffffff","00000006","00000000","00000000","ffffffc0"],["ffffffff","00000007","00000000","00000000","ffffff80"],["ffffffff","00000008","00000000","00000000","ffffff00"],["ffffffff","00000009","00000000","00000000","fffffe00"],["ffffffff","0000000a","00000000","00000000","fffffc00"],["ffffffff","0000000b","00000000","00000000","fffff800"],["ffffffff","0000000c","00000000","00000000","fffff000"],["ffffffff","0000000d","00000000","00000000","ffffe000"],["ffffffff","0000000e","00000000","00000000","ffffc000"],["ffffffff","0000000f","00000000","00000000","ffff8000"],["ffffffff","00000010","00000000","00000000","ffff0000"],["ffffffff","00000011","00000000","00000000","fffe0000"],["ffffffff","00000012","00000000","00000000","fffc0000"],["ffffffff","00000013","00000000","00000000","fff80000"],["ffffffff","00000014","00000000","00000000","fff00000"],["ffffffff","00000015","00000000","00000000","ffe00000"],["ffffffff","00000016","00000000","00000000","ffc00000"],["ffffffff","00000017","00000000","00000000","ff800000"],["ffffffff","00000018","00000000","00000000","ff000000"],["ffffffff","00000019","00000000","00000000","fe000000"],["ffffffff","0000001a","00000000","00000000","fc000000"],["ffffffff","0000001b","00000000","00000000","f8000000"],["ffffffff","0000001c","00000000","00000000","f0000000"],["ffffffff","0000001d","00000000","00000000","e0000000"],["ffffffff","0000001e","00000000","00000000","c0000000"],["ffffffff","0000001f","00000000","00000000","80000000"],["ffffffff","00000020","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000021","00000000","00000000","fffffffe","unguarded"],["ffffffff","00000022","00000000","00000000","fffffffc","unguarded"],["ffffffff","00000023","00000000","00000000","fffffff8","unguarded"],["ffffffff","00000024","00000000","00000000","fffffff0","unguarded"],["ffffffff","00000025","00000000","00000000","ffffffe0","unguarded"],["ffffffff","00000026","00000000","00000000","ffffffc0","unguarded"],["ffffffff","00000027","00000000","00000000","ffffff80","unguarded"],["ffffffff","00000028","00000000","00000000","ffffff00","unguarded"],["ffffffff","0000003f","00000000","00000000","80000000","unguarded"],["ffffffff","00000040","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000041","00000000","00000000","fffffffe","unguarded"],["ffffffff","00000060","00000000","00000000","ffffffff","unguarded"],["ffffffff","0000007f","00000000","00000000","80000000","unguarded"],["ffffffff","00000080","00000000","00000000","ffffffff","unguarded"],["ffffffff","000000ff","00000000","00000000","80000000","unguarded"],["ffffffff","00000100","00000000","00000000","ffffffff","unguarded"],["ffffffff","7fffffff","00000000","00000000","80000000","unguarded"],["ffffffff","80000000","00000000","00000000","ffffffff","unguarded"],["ffffffff","ffffffe0","00000000","00000000","ffffffff","unguarded"],["ffffffff","ffffffff","00000000","00000000","80000000","unguarded"]]} +{"op":"shr_u32","code":12,"wgsl":"a >> b","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000002","00000000","00000000","00000000"],["00000000","00000003","00000000","00000000","00000000"],["00000000","00000004","00000000","00000000","00000000"],["00000000","00000005","00000000","00000000","00000000"],["00000000","00000006","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","00000008","00000000","00000000","00000000"],["00000000","00000009","00000000","00000000","00000000"],["00000000","0000000a","00000000","00000000","00000000"],["00000000","0000000b","00000000","00000000","00000000"],["00000000","0000000c","00000000","00000000","00000000"],["00000000","0000000d","00000000","00000000","00000000"],["00000000","0000000e","00000000","00000000","00000000"],["00000000","0000000f","00000000","00000000","00000000"],["00000000","00000010","00000000","00000000","00000000"],["00000000","00000011","00000000","00000000","00000000"],["00000000","00000012","00000000","00000000","00000000"],["00000000","00000013","00000000","00000000","00000000"],["00000000","00000014","00000000","00000000","00000000"],["00000000","00000015","00000000","00000000","00000000"],["00000000","00000016","00000000","00000000","00000000"],["00000000","00000017","00000000","00000000","00000000"],["00000000","00000018","00000000","00000000","00000000"],["00000000","00000019","00000000","00000000","00000000"],["00000000","0000001a","00000000","00000000","00000000"],["00000000","0000001b","00000000","00000000","00000000"],["00000000","0000001c","00000000","00000000","00000000"],["00000000","0000001d","00000000","00000000","00000000"],["00000000","0000001e","00000000","00000000","00000000"],["00000000","0000001f","00000000","00000000","00000000"],["00000000","00000020","00000000","00000000","00000000","unguarded"],["00000000","00000021","00000000","00000000","00000000","unguarded"],["00000000","00000022","00000000","00000000","00000000","unguarded"],["00000000","00000023","00000000","00000000","00000000","unguarded"],["00000000","00000024","00000000","00000000","00000000","unguarded"],["00000000","00000025","00000000","00000000","00000000","unguarded"],["00000000","00000026","00000000","00000000","00000000","unguarded"],["00000000","00000027","00000000","00000000","00000000","unguarded"],["00000000","00000028","00000000","00000000","00000000","unguarded"],["00000000","0000003f","00000000","00000000","00000000","unguarded"],["00000000","00000040","00000000","00000000","00000000","unguarded"],["00000000","00000041","00000000","00000000","00000000","unguarded"],["00000000","00000060","00000000","00000000","00000000","unguarded"],["00000000","0000007f","00000000","00000000","00000000","unguarded"],["00000000","00000080","00000000","00000000","00000000","unguarded"],["00000000","000000ff","00000000","00000000","00000000","unguarded"],["00000000","00000100","00000000","00000000","00000000","unguarded"],["00000000","7fffffff","00000000","00000000","00000000","unguarded"],["00000000","80000000","00000000","00000000","00000000","unguarded"],["00000000","ffffffe0","00000000","00000000","00000000","unguarded"],["00000000","ffffffff","00000000","00000000","00000000","unguarded"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000002","00000000","00000000","00000000"],["00000001","00000003","00000000","00000000","00000000"],["00000001","00000004","00000000","00000000","00000000"],["00000001","00000005","00000000","00000000","00000000"],["00000001","00000006","00000000","00000000","00000000"],["00000001","00000007","00000000","00000000","00000000"],["00000001","00000008","00000000","00000000","00000000"],["00000001","00000009","00000000","00000000","00000000"],["00000001","0000000a","00000000","00000000","00000000"],["00000001","0000000b","00000000","00000000","00000000"],["00000001","0000000c","00000000","00000000","00000000"],["00000001","0000000d","00000000","00000000","00000000"],["00000001","0000000e","00000000","00000000","00000000"],["00000001","0000000f","00000000","00000000","00000000"],["00000001","00000010","00000000","00000000","00000000"],["00000001","00000011","00000000","00000000","00000000"],["00000001","00000012","00000000","00000000","00000000"],["00000001","00000013","00000000","00000000","00000000"],["00000001","00000014","00000000","00000000","00000000"],["00000001","00000015","00000000","00000000","00000000"],["00000001","00000016","00000000","00000000","00000000"],["00000001","00000017","00000000","00000000","00000000"],["00000001","00000018","00000000","00000000","00000000"],["00000001","00000019","00000000","00000000","00000000"],["00000001","0000001a","00000000","00000000","00000000"],["00000001","0000001b","00000000","00000000","00000000"],["00000001","0000001c","00000000","00000000","00000000"],["00000001","0000001d","00000000","00000000","00000000"],["00000001","0000001e","00000000","00000000","00000000"],["00000001","0000001f","00000000","00000000","00000000"],["00000001","00000020","00000000","00000000","00000001","unguarded"],["00000001","00000021","00000000","00000000","00000000","unguarded"],["00000001","00000022","00000000","00000000","00000000","unguarded"],["00000001","00000023","00000000","00000000","00000000","unguarded"],["00000001","00000024","00000000","00000000","00000000","unguarded"],["00000001","00000025","00000000","00000000","00000000","unguarded"],["00000001","00000026","00000000","00000000","00000000","unguarded"],["00000001","00000027","00000000","00000000","00000000","unguarded"],["00000001","00000028","00000000","00000000","00000000","unguarded"],["00000001","0000003f","00000000","00000000","00000000","unguarded"],["00000001","00000040","00000000","00000000","00000001","unguarded"],["00000001","00000041","00000000","00000000","00000000","unguarded"],["00000001","00000060","00000000","00000000","00000001","unguarded"],["00000001","0000007f","00000000","00000000","00000000","unguarded"],["00000001","00000080","00000000","00000000","00000001","unguarded"],["00000001","000000ff","00000000","00000000","00000000","unguarded"],["00000001","00000100","00000000","00000000","00000001","unguarded"],["00000001","7fffffff","00000000","00000000","00000000","unguarded"],["00000001","80000000","00000000","00000000","00000001","unguarded"],["00000001","ffffffe0","00000000","00000000","00000001","unguarded"],["00000001","ffffffff","00000000","00000000","00000000","unguarded"],["00000002","00000000","00000000","00000000","00000002"],["00000002","00000001","00000000","00000000","00000001"],["00000002","00000002","00000000","00000000","00000000"],["00000002","00000003","00000000","00000000","00000000"],["00000002","00000004","00000000","00000000","00000000"],["00000002","00000005","00000000","00000000","00000000"],["00000002","00000006","00000000","00000000","00000000"],["00000002","00000007","00000000","00000000","00000000"],["00000002","00000008","00000000","00000000","00000000"],["00000002","00000009","00000000","00000000","00000000"],["00000002","0000000a","00000000","00000000","00000000"],["00000002","0000000b","00000000","00000000","00000000"],["00000002","0000000c","00000000","00000000","00000000"],["00000002","0000000d","00000000","00000000","00000000"],["00000002","0000000e","00000000","00000000","00000000"],["00000002","0000000f","00000000","00000000","00000000"],["00000002","00000010","00000000","00000000","00000000"],["00000002","00000011","00000000","00000000","00000000"],["00000002","00000012","00000000","00000000","00000000"],["00000002","00000013","00000000","00000000","00000000"],["00000002","00000014","00000000","00000000","00000000"],["00000002","00000015","00000000","00000000","00000000"],["00000002","00000016","00000000","00000000","00000000"],["00000002","00000017","00000000","00000000","00000000"],["00000002","00000018","00000000","00000000","00000000"],["00000002","00000019","00000000","00000000","00000000"],["00000002","0000001a","00000000","00000000","00000000"],["00000002","0000001b","00000000","00000000","00000000"],["00000002","0000001c","00000000","00000000","00000000"],["00000002","0000001d","00000000","00000000","00000000"],["00000002","0000001e","00000000","00000000","00000000"],["00000002","0000001f","00000000","00000000","00000000"],["00000002","00000020","00000000","00000000","00000002","unguarded"],["00000002","00000021","00000000","00000000","00000001","unguarded"],["00000002","00000022","00000000","00000000","00000000","unguarded"],["00000002","00000023","00000000","00000000","00000000","unguarded"],["00000002","00000024","00000000","00000000","00000000","unguarded"],["00000002","00000025","00000000","00000000","00000000","unguarded"],["00000002","00000026","00000000","00000000","00000000","unguarded"],["00000002","00000027","00000000","00000000","00000000","unguarded"],["00000002","00000028","00000000","00000000","00000000","unguarded"],["00000002","0000003f","00000000","00000000","00000000","unguarded"],["00000002","00000040","00000000","00000000","00000002","unguarded"],["00000002","00000041","00000000","00000000","00000001","unguarded"],["00000002","00000060","00000000","00000000","00000002","unguarded"],["00000002","0000007f","00000000","00000000","00000000","unguarded"],["00000002","00000080","00000000","00000000","00000002","unguarded"],["00000002","000000ff","00000000","00000000","00000000","unguarded"],["00000002","00000100","00000000","00000000","00000002","unguarded"],["00000002","7fffffff","00000000","00000000","00000000","unguarded"],["00000002","80000000","00000000","00000000","00000002","unguarded"],["00000002","ffffffe0","00000000","00000000","00000002","unguarded"],["00000002","ffffffff","00000000","00000000","00000000","unguarded"],["00000003","00000000","00000000","00000000","00000003"],["00000003","00000001","00000000","00000000","00000001"],["00000003","00000002","00000000","00000000","00000000"],["00000003","00000003","00000000","00000000","00000000"],["00000003","00000004","00000000","00000000","00000000"],["00000003","00000005","00000000","00000000","00000000"],["00000003","00000006","00000000","00000000","00000000"],["00000003","00000007","00000000","00000000","00000000"],["00000003","00000008","00000000","00000000","00000000"],["00000003","00000009","00000000","00000000","00000000"],["00000003","0000000a","00000000","00000000","00000000"],["00000003","0000000b","00000000","00000000","00000000"],["00000003","0000000c","00000000","00000000","00000000"],["00000003","0000000d","00000000","00000000","00000000"],["00000003","0000000e","00000000","00000000","00000000"],["00000003","0000000f","00000000","00000000","00000000"],["00000003","00000010","00000000","00000000","00000000"],["00000003","00000011","00000000","00000000","00000000"],["00000003","00000012","00000000","00000000","00000000"],["00000003","00000013","00000000","00000000","00000000"],["00000003","00000014","00000000","00000000","00000000"],["00000003","00000015","00000000","00000000","00000000"],["00000003","00000016","00000000","00000000","00000000"],["00000003","00000017","00000000","00000000","00000000"],["00000003","00000018","00000000","00000000","00000000"],["00000003","00000019","00000000","00000000","00000000"],["00000003","0000001a","00000000","00000000","00000000"],["00000003","0000001b","00000000","00000000","00000000"],["00000003","0000001c","00000000","00000000","00000000"],["00000003","0000001d","00000000","00000000","00000000"],["00000003","0000001e","00000000","00000000","00000000"],["00000003","0000001f","00000000","00000000","00000000"],["00000003","00000020","00000000","00000000","00000003","unguarded"],["00000003","00000021","00000000","00000000","00000001","unguarded"],["00000003","00000022","00000000","00000000","00000000","unguarded"],["00000003","00000023","00000000","00000000","00000000","unguarded"],["00000003","00000024","00000000","00000000","00000000","unguarded"],["00000003","00000025","00000000","00000000","00000000","unguarded"],["00000003","00000026","00000000","00000000","00000000","unguarded"],["00000003","00000027","00000000","00000000","00000000","unguarded"],["00000003","00000028","00000000","00000000","00000000","unguarded"],["00000003","0000003f","00000000","00000000","00000000","unguarded"],["00000003","00000040","00000000","00000000","00000003","unguarded"],["00000003","00000041","00000000","00000000","00000001","unguarded"],["00000003","00000060","00000000","00000000","00000003","unguarded"],["00000003","0000007f","00000000","00000000","00000000","unguarded"],["00000003","00000080","00000000","00000000","00000003","unguarded"],["00000003","000000ff","00000000","00000000","00000000","unguarded"],["00000003","00000100","00000000","00000000","00000003","unguarded"],["00000003","7fffffff","00000000","00000000","00000000","unguarded"],["00000003","80000000","00000000","00000000","00000003","unguarded"],["00000003","ffffffe0","00000000","00000000","00000003","unguarded"],["00000003","ffffffff","00000000","00000000","00000000","unguarded"],["00000005","00000000","00000000","00000000","00000005"],["00000005","00000001","00000000","00000000","00000002"],["00000005","00000002","00000000","00000000","00000001"],["00000005","00000003","00000000","00000000","00000000"],["00000005","00000004","00000000","00000000","00000000"],["00000005","00000005","00000000","00000000","00000000"],["00000005","00000006","00000000","00000000","00000000"],["00000005","00000007","00000000","00000000","00000000"],["00000005","00000008","00000000","00000000","00000000"],["00000005","00000009","00000000","00000000","00000000"],["00000005","0000000a","00000000","00000000","00000000"],["00000005","0000000b","00000000","00000000","00000000"],["00000005","0000000c","00000000","00000000","00000000"],["00000005","0000000d","00000000","00000000","00000000"],["00000005","0000000e","00000000","00000000","00000000"],["00000005","0000000f","00000000","00000000","00000000"],["00000005","00000010","00000000","00000000","00000000"],["00000005","00000011","00000000","00000000","00000000"],["00000005","00000012","00000000","00000000","00000000"],["00000005","00000013","00000000","00000000","00000000"],["00000005","00000014","00000000","00000000","00000000"],["00000005","00000015","00000000","00000000","00000000"],["00000005","00000016","00000000","00000000","00000000"],["00000005","00000017","00000000","00000000","00000000"],["00000005","00000018","00000000","00000000","00000000"],["00000005","00000019","00000000","00000000","00000000"],["00000005","0000001a","00000000","00000000","00000000"],["00000005","0000001b","00000000","00000000","00000000"],["00000005","0000001c","00000000","00000000","00000000"],["00000005","0000001d","00000000","00000000","00000000"],["00000005","0000001e","00000000","00000000","00000000"],["00000005","0000001f","00000000","00000000","00000000"],["00000005","00000020","00000000","00000000","00000005","unguarded"],["00000005","00000021","00000000","00000000","00000002","unguarded"],["00000005","00000022","00000000","00000000","00000001","unguarded"],["00000005","00000023","00000000","00000000","00000000","unguarded"],["00000005","00000024","00000000","00000000","00000000","unguarded"],["00000005","00000025","00000000","00000000","00000000","unguarded"],["00000005","00000026","00000000","00000000","00000000","unguarded"],["00000005","00000027","00000000","00000000","00000000","unguarded"],["00000005","00000028","00000000","00000000","00000000","unguarded"],["00000005","0000003f","00000000","00000000","00000000","unguarded"],["00000005","00000040","00000000","00000000","00000005","unguarded"],["00000005","00000041","00000000","00000000","00000002","unguarded"],["00000005","00000060","00000000","00000000","00000005","unguarded"],["00000005","0000007f","00000000","00000000","00000000","unguarded"],["00000005","00000080","00000000","00000000","00000005","unguarded"],["00000005","000000ff","00000000","00000000","00000000","unguarded"],["00000005","00000100","00000000","00000000","00000005","unguarded"],["00000005","7fffffff","00000000","00000000","00000000","unguarded"],["00000005","80000000","00000000","00000000","00000005","unguarded"],["00000005","ffffffe0","00000000","00000000","00000005","unguarded"],["00000005","ffffffff","00000000","00000000","00000000","unguarded"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","00000003"],["00000007","00000002","00000000","00000000","00000001"],["00000007","00000003","00000000","00000000","00000000"],["00000007","00000004","00000000","00000000","00000000"],["00000007","00000005","00000000","00000000","00000000"],["00000007","00000006","00000000","00000000","00000000"],["00000007","00000007","00000000","00000000","00000000"],["00000007","00000008","00000000","00000000","00000000"],["00000007","00000009","00000000","00000000","00000000"],["00000007","0000000a","00000000","00000000","00000000"],["00000007","0000000b","00000000","00000000","00000000"],["00000007","0000000c","00000000","00000000","00000000"],["00000007","0000000d","00000000","00000000","00000000"],["00000007","0000000e","00000000","00000000","00000000"],["00000007","0000000f","00000000","00000000","00000000"],["00000007","00000010","00000000","00000000","00000000"],["00000007","00000011","00000000","00000000","00000000"],["00000007","00000012","00000000","00000000","00000000"],["00000007","00000013","00000000","00000000","00000000"],["00000007","00000014","00000000","00000000","00000000"],["00000007","00000015","00000000","00000000","00000000"],["00000007","00000016","00000000","00000000","00000000"],["00000007","00000017","00000000","00000000","00000000"],["00000007","00000018","00000000","00000000","00000000"],["00000007","00000019","00000000","00000000","00000000"],["00000007","0000001a","00000000","00000000","00000000"],["00000007","0000001b","00000000","00000000","00000000"],["00000007","0000001c","00000000","00000000","00000000"],["00000007","0000001d","00000000","00000000","00000000"],["00000007","0000001e","00000000","00000000","00000000"],["00000007","0000001f","00000000","00000000","00000000"],["00000007","00000020","00000000","00000000","00000007","unguarded"],["00000007","00000021","00000000","00000000","00000003","unguarded"],["00000007","00000022","00000000","00000000","00000001","unguarded"],["00000007","00000023","00000000","00000000","00000000","unguarded"],["00000007","00000024","00000000","00000000","00000000","unguarded"],["00000007","00000025","00000000","00000000","00000000","unguarded"],["00000007","00000026","00000000","00000000","00000000","unguarded"],["00000007","00000027","00000000","00000000","00000000","unguarded"],["00000007","00000028","00000000","00000000","00000000","unguarded"],["00000007","0000003f","00000000","00000000","00000000","unguarded"],["00000007","00000040","00000000","00000000","00000007","unguarded"],["00000007","00000041","00000000","00000000","00000003","unguarded"],["00000007","00000060","00000000","00000000","00000007","unguarded"],["00000007","0000007f","00000000","00000000","00000000","unguarded"],["00000007","00000080","00000000","00000000","00000007","unguarded"],["00000007","000000ff","00000000","00000000","00000000","unguarded"],["00000007","00000100","00000000","00000000","00000007","unguarded"],["00000007","7fffffff","00000000","00000000","00000000","unguarded"],["00000007","80000000","00000000","00000000","00000007","unguarded"],["00000007","ffffffe0","00000000","00000000","00000007","unguarded"],["00000007","ffffffff","00000000","00000000","00000000","unguarded"],["0000001f","00000000","00000000","00000000","0000001f"],["0000001f","00000001","00000000","00000000","0000000f"],["0000001f","00000002","00000000","00000000","00000007"],["0000001f","00000003","00000000","00000000","00000003"],["0000001f","00000004","00000000","00000000","00000001"],["0000001f","00000005","00000000","00000000","00000000"],["0000001f","00000006","00000000","00000000","00000000"],["0000001f","00000007","00000000","00000000","00000000"],["0000001f","00000008","00000000","00000000","00000000"],["0000001f","00000009","00000000","00000000","00000000"],["0000001f","0000000a","00000000","00000000","00000000"],["0000001f","0000000b","00000000","00000000","00000000"],["0000001f","0000000c","00000000","00000000","00000000"],["0000001f","0000000d","00000000","00000000","00000000"],["0000001f","0000000e","00000000","00000000","00000000"],["0000001f","0000000f","00000000","00000000","00000000"],["0000001f","00000010","00000000","00000000","00000000"],["0000001f","00000011","00000000","00000000","00000000"],["0000001f","00000012","00000000","00000000","00000000"],["0000001f","00000013","00000000","00000000","00000000"],["0000001f","00000014","00000000","00000000","00000000"],["0000001f","00000015","00000000","00000000","00000000"],["0000001f","00000016","00000000","00000000","00000000"],["0000001f","00000017","00000000","00000000","00000000"],["0000001f","00000018","00000000","00000000","00000000"],["0000001f","00000019","00000000","00000000","00000000"],["0000001f","0000001a","00000000","00000000","00000000"],["0000001f","0000001b","00000000","00000000","00000000"],["0000001f","0000001c","00000000","00000000","00000000"],["0000001f","0000001d","00000000","00000000","00000000"],["0000001f","0000001e","00000000","00000000","00000000"],["0000001f","0000001f","00000000","00000000","00000000"],["0000001f","00000020","00000000","00000000","0000001f","unguarded"],["0000001f","00000021","00000000","00000000","0000000f","unguarded"],["0000001f","00000022","00000000","00000000","00000007","unguarded"],["0000001f","00000023","00000000","00000000","00000003","unguarded"],["0000001f","00000024","00000000","00000000","00000001","unguarded"],["0000001f","00000025","00000000","00000000","00000000","unguarded"],["0000001f","00000026","00000000","00000000","00000000","unguarded"],["0000001f","00000027","00000000","00000000","00000000","unguarded"],["0000001f","00000028","00000000","00000000","00000000","unguarded"],["0000001f","0000003f","00000000","00000000","00000000","unguarded"],["0000001f","00000040","00000000","00000000","0000001f","unguarded"],["0000001f","00000041","00000000","00000000","0000000f","unguarded"],["0000001f","00000060","00000000","00000000","0000001f","unguarded"],["0000001f","0000007f","00000000","00000000","00000000","unguarded"],["0000001f","00000080","00000000","00000000","0000001f","unguarded"],["0000001f","000000ff","00000000","00000000","00000000","unguarded"],["0000001f","00000100","00000000","00000000","0000001f","unguarded"],["0000001f","7fffffff","00000000","00000000","00000000","unguarded"],["0000001f","80000000","00000000","00000000","0000001f","unguarded"],["0000001f","ffffffe0","00000000","00000000","0000001f","unguarded"],["0000001f","ffffffff","00000000","00000000","00000000","unguarded"],["00000020","00000000","00000000","00000000","00000020"],["00000020","00000001","00000000","00000000","00000010"],["00000020","00000002","00000000","00000000","00000008"],["00000020","00000003","00000000","00000000","00000004"],["00000020","00000004","00000000","00000000","00000002"],["00000020","00000005","00000000","00000000","00000001"],["00000020","00000006","00000000","00000000","00000000"],["00000020","00000007","00000000","00000000","00000000"],["00000020","00000008","00000000","00000000","00000000"],["00000020","00000009","00000000","00000000","00000000"],["00000020","0000000a","00000000","00000000","00000000"],["00000020","0000000b","00000000","00000000","00000000"],["00000020","0000000c","00000000","00000000","00000000"],["00000020","0000000d","00000000","00000000","00000000"],["00000020","0000000e","00000000","00000000","00000000"],["00000020","0000000f","00000000","00000000","00000000"],["00000020","00000010","00000000","00000000","00000000"],["00000020","00000011","00000000","00000000","00000000"],["00000020","00000012","00000000","00000000","00000000"],["00000020","00000013","00000000","00000000","00000000"],["00000020","00000014","00000000","00000000","00000000"],["00000020","00000015","00000000","00000000","00000000"],["00000020","00000016","00000000","00000000","00000000"],["00000020","00000017","00000000","00000000","00000000"],["00000020","00000018","00000000","00000000","00000000"],["00000020","00000019","00000000","00000000","00000000"],["00000020","0000001a","00000000","00000000","00000000"],["00000020","0000001b","00000000","00000000","00000000"],["00000020","0000001c","00000000","00000000","00000000"],["00000020","0000001d","00000000","00000000","00000000"],["00000020","0000001e","00000000","00000000","00000000"],["00000020","0000001f","00000000","00000000","00000000"],["00000020","00000020","00000000","00000000","00000020","unguarded"],["00000020","00000021","00000000","00000000","00000010","unguarded"],["00000020","00000022","00000000","00000000","00000008","unguarded"],["00000020","00000023","00000000","00000000","00000004","unguarded"],["00000020","00000024","00000000","00000000","00000002","unguarded"],["00000020","00000025","00000000","00000000","00000001","unguarded"],["00000020","00000026","00000000","00000000","00000000","unguarded"],["00000020","00000027","00000000","00000000","00000000","unguarded"],["00000020","00000028","00000000","00000000","00000000","unguarded"],["00000020","0000003f","00000000","00000000","00000000","unguarded"],["00000020","00000040","00000000","00000000","00000020","unguarded"],["00000020","00000041","00000000","00000000","00000010","unguarded"],["00000020","00000060","00000000","00000000","00000020","unguarded"],["00000020","0000007f","00000000","00000000","00000000","unguarded"],["00000020","00000080","00000000","00000000","00000020","unguarded"],["00000020","000000ff","00000000","00000000","00000000","unguarded"],["00000020","00000100","00000000","00000000","00000020","unguarded"],["00000020","7fffffff","00000000","00000000","00000000","unguarded"],["00000020","80000000","00000000","00000000","00000020","unguarded"],["00000020","ffffffe0","00000000","00000000","00000020","unguarded"],["00000020","ffffffff","00000000","00000000","00000000","unguarded"],["00000021","00000000","00000000","00000000","00000021"],["00000021","00000001","00000000","00000000","00000010"],["00000021","00000002","00000000","00000000","00000008"],["00000021","00000003","00000000","00000000","00000004"],["00000021","00000004","00000000","00000000","00000002"],["00000021","00000005","00000000","00000000","00000001"],["00000021","00000006","00000000","00000000","00000000"],["00000021","00000007","00000000","00000000","00000000"],["00000021","00000008","00000000","00000000","00000000"],["00000021","00000009","00000000","00000000","00000000"],["00000021","0000000a","00000000","00000000","00000000"],["00000021","0000000b","00000000","00000000","00000000"],["00000021","0000000c","00000000","00000000","00000000"],["00000021","0000000d","00000000","00000000","00000000"],["00000021","0000000e","00000000","00000000","00000000"],["00000021","0000000f","00000000","00000000","00000000"],["00000021","00000010","00000000","00000000","00000000"],["00000021","00000011","00000000","00000000","00000000"],["00000021","00000012","00000000","00000000","00000000"],["00000021","00000013","00000000","00000000","00000000"],["00000021","00000014","00000000","00000000","00000000"],["00000021","00000015","00000000","00000000","00000000"],["00000021","00000016","00000000","00000000","00000000"],["00000021","00000017","00000000","00000000","00000000"],["00000021","00000018","00000000","00000000","00000000"],["00000021","00000019","00000000","00000000","00000000"],["00000021","0000001a","00000000","00000000","00000000"],["00000021","0000001b","00000000","00000000","00000000"],["00000021","0000001c","00000000","00000000","00000000"],["00000021","0000001d","00000000","00000000","00000000"],["00000021","0000001e","00000000","00000000","00000000"],["00000021","0000001f","00000000","00000000","00000000"],["00000021","00000020","00000000","00000000","00000021","unguarded"],["00000021","00000021","00000000","00000000","00000010","unguarded"],["00000021","00000022","00000000","00000000","00000008","unguarded"],["00000021","00000023","00000000","00000000","00000004","unguarded"],["00000021","00000024","00000000","00000000","00000002","unguarded"],["00000021","00000025","00000000","00000000","00000001","unguarded"],["00000021","00000026","00000000","00000000","00000000","unguarded"],["00000021","00000027","00000000","00000000","00000000","unguarded"],["00000021","00000028","00000000","00000000","00000000","unguarded"],["00000021","0000003f","00000000","00000000","00000000","unguarded"],["00000021","00000040","00000000","00000000","00000021","unguarded"],["00000021","00000041","00000000","00000000","00000010","unguarded"],["00000021","00000060","00000000","00000000","00000021","unguarded"],["00000021","0000007f","00000000","00000000","00000000","unguarded"],["00000021","00000080","00000000","00000000","00000021","unguarded"],["00000021","000000ff","00000000","00000000","00000000","unguarded"],["00000021","00000100","00000000","00000000","00000021","unguarded"],["00000021","7fffffff","00000000","00000000","00000000","unguarded"],["00000021","80000000","00000000","00000000","00000021","unguarded"],["00000021","ffffffe0","00000000","00000000","00000021","unguarded"],["00000021","ffffffff","00000000","00000000","00000000","unguarded"],["0000003f","00000000","00000000","00000000","0000003f"],["0000003f","00000001","00000000","00000000","0000001f"],["0000003f","00000002","00000000","00000000","0000000f"],["0000003f","00000003","00000000","00000000","00000007"],["0000003f","00000004","00000000","00000000","00000003"],["0000003f","00000005","00000000","00000000","00000001"],["0000003f","00000006","00000000","00000000","00000000"],["0000003f","00000007","00000000","00000000","00000000"],["0000003f","00000008","00000000","00000000","00000000"],["0000003f","00000009","00000000","00000000","00000000"],["0000003f","0000000a","00000000","00000000","00000000"],["0000003f","0000000b","00000000","00000000","00000000"],["0000003f","0000000c","00000000","00000000","00000000"],["0000003f","0000000d","00000000","00000000","00000000"],["0000003f","0000000e","00000000","00000000","00000000"],["0000003f","0000000f","00000000","00000000","00000000"],["0000003f","00000010","00000000","00000000","00000000"],["0000003f","00000011","00000000","00000000","00000000"],["0000003f","00000012","00000000","00000000","00000000"],["0000003f","00000013","00000000","00000000","00000000"],["0000003f","00000014","00000000","00000000","00000000"],["0000003f","00000015","00000000","00000000","00000000"],["0000003f","00000016","00000000","00000000","00000000"],["0000003f","00000017","00000000","00000000","00000000"],["0000003f","00000018","00000000","00000000","00000000"],["0000003f","00000019","00000000","00000000","00000000"],["0000003f","0000001a","00000000","00000000","00000000"],["0000003f","0000001b","00000000","00000000","00000000"],["0000003f","0000001c","00000000","00000000","00000000"],["0000003f","0000001d","00000000","00000000","00000000"],["0000003f","0000001e","00000000","00000000","00000000"],["0000003f","0000001f","00000000","00000000","00000000"],["0000003f","00000020","00000000","00000000","0000003f","unguarded"],["0000003f","00000021","00000000","00000000","0000001f","unguarded"],["0000003f","00000022","00000000","00000000","0000000f","unguarded"],["0000003f","00000023","00000000","00000000","00000007","unguarded"],["0000003f","00000024","00000000","00000000","00000003","unguarded"],["0000003f","00000025","00000000","00000000","00000001","unguarded"],["0000003f","00000026","00000000","00000000","00000000","unguarded"],["0000003f","00000027","00000000","00000000","00000000","unguarded"],["0000003f","00000028","00000000","00000000","00000000","unguarded"],["0000003f","0000003f","00000000","00000000","00000000","unguarded"],["0000003f","00000040","00000000","00000000","0000003f","unguarded"],["0000003f","00000041","00000000","00000000","0000001f","unguarded"],["0000003f","00000060","00000000","00000000","0000003f","unguarded"],["0000003f","0000007f","00000000","00000000","00000000","unguarded"],["0000003f","00000080","00000000","00000000","0000003f","unguarded"],["0000003f","000000ff","00000000","00000000","00000000","unguarded"],["0000003f","00000100","00000000","00000000","0000003f","unguarded"],["0000003f","7fffffff","00000000","00000000","00000000","unguarded"],["0000003f","80000000","00000000","00000000","0000003f","unguarded"],["0000003f","ffffffe0","00000000","00000000","0000003f","unguarded"],["0000003f","ffffffff","00000000","00000000","00000000","unguarded"],["00000040","00000000","00000000","00000000","00000040"],["00000040","00000001","00000000","00000000","00000020"],["00000040","00000002","00000000","00000000","00000010"],["00000040","00000003","00000000","00000000","00000008"],["00000040","00000004","00000000","00000000","00000004"],["00000040","00000005","00000000","00000000","00000002"],["00000040","00000006","00000000","00000000","00000001"],["00000040","00000007","00000000","00000000","00000000"],["00000040","00000008","00000000","00000000","00000000"],["00000040","00000009","00000000","00000000","00000000"],["00000040","0000000a","00000000","00000000","00000000"],["00000040","0000000b","00000000","00000000","00000000"],["00000040","0000000c","00000000","00000000","00000000"],["00000040","0000000d","00000000","00000000","00000000"],["00000040","0000000e","00000000","00000000","00000000"],["00000040","0000000f","00000000","00000000","00000000"],["00000040","00000010","00000000","00000000","00000000"],["00000040","00000011","00000000","00000000","00000000"],["00000040","00000012","00000000","00000000","00000000"],["00000040","00000013","00000000","00000000","00000000"],["00000040","00000014","00000000","00000000","00000000"],["00000040","00000015","00000000","00000000","00000000"],["00000040","00000016","00000000","00000000","00000000"],["00000040","00000017","00000000","00000000","00000000"],["00000040","00000018","00000000","00000000","00000000"],["00000040","00000019","00000000","00000000","00000000"],["00000040","0000001a","00000000","00000000","00000000"],["00000040","0000001b","00000000","00000000","00000000"],["00000040","0000001c","00000000","00000000","00000000"],["00000040","0000001d","00000000","00000000","00000000"],["00000040","0000001e","00000000","00000000","00000000"],["00000040","0000001f","00000000","00000000","00000000"],["00000040","00000020","00000000","00000000","00000040","unguarded"],["00000040","00000021","00000000","00000000","00000020","unguarded"],["00000040","00000022","00000000","00000000","00000010","unguarded"],["00000040","00000023","00000000","00000000","00000008","unguarded"],["00000040","00000024","00000000","00000000","00000004","unguarded"],["00000040","00000025","00000000","00000000","00000002","unguarded"],["00000040","00000026","00000000","00000000","00000001","unguarded"],["00000040","00000027","00000000","00000000","00000000","unguarded"],["00000040","00000028","00000000","00000000","00000000","unguarded"],["00000040","0000003f","00000000","00000000","00000000","unguarded"],["00000040","00000040","00000000","00000000","00000040","unguarded"],["00000040","00000041","00000000","00000000","00000020","unguarded"],["00000040","00000060","00000000","00000000","00000040","unguarded"],["00000040","0000007f","00000000","00000000","00000000","unguarded"],["00000040","00000080","00000000","00000000","00000040","unguarded"],["00000040","000000ff","00000000","00000000","00000000","unguarded"],["00000040","00000100","00000000","00000000","00000040","unguarded"],["00000040","7fffffff","00000000","00000000","00000000","unguarded"],["00000040","80000000","00000000","00000000","00000040","unguarded"],["00000040","ffffffe0","00000000","00000000","00000040","unguarded"],["00000040","ffffffff","00000000","00000000","00000000","unguarded"],["000000ff","00000000","00000000","00000000","000000ff"],["000000ff","00000001","00000000","00000000","0000007f"],["000000ff","00000002","00000000","00000000","0000003f"],["000000ff","00000003","00000000","00000000","0000001f"],["000000ff","00000004","00000000","00000000","0000000f"],["000000ff","00000005","00000000","00000000","00000007"],["000000ff","00000006","00000000","00000000","00000003"],["000000ff","00000007","00000000","00000000","00000001"],["000000ff","00000008","00000000","00000000","00000000"],["000000ff","00000009","00000000","00000000","00000000"],["000000ff","0000000a","00000000","00000000","00000000"],["000000ff","0000000b","00000000","00000000","00000000"],["000000ff","0000000c","00000000","00000000","00000000"],["000000ff","0000000d","00000000","00000000","00000000"],["000000ff","0000000e","00000000","00000000","00000000"],["000000ff","0000000f","00000000","00000000","00000000"],["000000ff","00000010","00000000","00000000","00000000"],["000000ff","00000011","00000000","00000000","00000000"],["000000ff","00000012","00000000","00000000","00000000"],["000000ff","00000013","00000000","00000000","00000000"],["000000ff","00000014","00000000","00000000","00000000"],["000000ff","00000015","00000000","00000000","00000000"],["000000ff","00000016","00000000","00000000","00000000"],["000000ff","00000017","00000000","00000000","00000000"],["000000ff","00000018","00000000","00000000","00000000"],["000000ff","00000019","00000000","00000000","00000000"],["000000ff","0000001a","00000000","00000000","00000000"],["000000ff","0000001b","00000000","00000000","00000000"],["000000ff","0000001c","00000000","00000000","00000000"],["000000ff","0000001d","00000000","00000000","00000000"],["000000ff","0000001e","00000000","00000000","00000000"],["000000ff","0000001f","00000000","00000000","00000000"],["000000ff","00000020","00000000","00000000","000000ff","unguarded"],["000000ff","00000021","00000000","00000000","0000007f","unguarded"],["000000ff","00000022","00000000","00000000","0000003f","unguarded"],["000000ff","00000023","00000000","00000000","0000001f","unguarded"],["000000ff","00000024","00000000","00000000","0000000f","unguarded"],["000000ff","00000025","00000000","00000000","00000007","unguarded"],["000000ff","00000026","00000000","00000000","00000003","unguarded"],["000000ff","00000027","00000000","00000000","00000001","unguarded"],["000000ff","00000028","00000000","00000000","00000000","unguarded"],["000000ff","0000003f","00000000","00000000","00000000","unguarded"],["000000ff","00000040","00000000","00000000","000000ff","unguarded"],["000000ff","00000041","00000000","00000000","0000007f","unguarded"],["000000ff","00000060","00000000","00000000","000000ff","unguarded"],["000000ff","0000007f","00000000","00000000","00000000","unguarded"],["000000ff","00000080","00000000","00000000","000000ff","unguarded"],["000000ff","000000ff","00000000","00000000","00000000","unguarded"],["000000ff","00000100","00000000","00000000","000000ff","unguarded"],["000000ff","7fffffff","00000000","00000000","00000000","unguarded"],["000000ff","80000000","00000000","00000000","000000ff","unguarded"],["000000ff","ffffffe0","00000000","00000000","000000ff","unguarded"],["000000ff","ffffffff","00000000","00000000","00000000","unguarded"],["00007fff","00000000","00000000","00000000","00007fff"],["00007fff","00000001","00000000","00000000","00003fff"],["00007fff","00000002","00000000","00000000","00001fff"],["00007fff","00000003","00000000","00000000","00000fff"],["00007fff","00000004","00000000","00000000","000007ff"],["00007fff","00000005","00000000","00000000","000003ff"],["00007fff","00000006","00000000","00000000","000001ff"],["00007fff","00000007","00000000","00000000","000000ff"],["00007fff","00000008","00000000","00000000","0000007f"],["00007fff","00000009","00000000","00000000","0000003f"],["00007fff","0000000a","00000000","00000000","0000001f"],["00007fff","0000000b","00000000","00000000","0000000f"],["00007fff","0000000c","00000000","00000000","00000007"],["00007fff","0000000d","00000000","00000000","00000003"],["00007fff","0000000e","00000000","00000000","00000001"],["00007fff","0000000f","00000000","00000000","00000000"],["00007fff","00000010","00000000","00000000","00000000"],["00007fff","00000011","00000000","00000000","00000000"],["00007fff","00000012","00000000","00000000","00000000"],["00007fff","00000013","00000000","00000000","00000000"],["00007fff","00000014","00000000","00000000","00000000"],["00007fff","00000015","00000000","00000000","00000000"],["00007fff","00000016","00000000","00000000","00000000"],["00007fff","00000017","00000000","00000000","00000000"],["00007fff","00000018","00000000","00000000","00000000"],["00007fff","00000019","00000000","00000000","00000000"],["00007fff","0000001a","00000000","00000000","00000000"],["00007fff","0000001b","00000000","00000000","00000000"],["00007fff","0000001c","00000000","00000000","00000000"],["00007fff","0000001d","00000000","00000000","00000000"],["00007fff","0000001e","00000000","00000000","00000000"],["00007fff","0000001f","00000000","00000000","00000000"],["00007fff","00000020","00000000","00000000","00007fff","unguarded"],["00007fff","00000021","00000000","00000000","00003fff","unguarded"],["00007fff","00000022","00000000","00000000","00001fff","unguarded"],["00007fff","00000023","00000000","00000000","00000fff","unguarded"],["00007fff","00000024","00000000","00000000","000007ff","unguarded"],["00007fff","00000025","00000000","00000000","000003ff","unguarded"],["00007fff","00000026","00000000","00000000","000001ff","unguarded"],["00007fff","00000027","00000000","00000000","000000ff","unguarded"],["00007fff","00000028","00000000","00000000","0000007f","unguarded"],["00007fff","0000003f","00000000","00000000","00000000","unguarded"],["00007fff","00000040","00000000","00000000","00007fff","unguarded"],["00007fff","00000041","00000000","00000000","00003fff","unguarded"],["00007fff","00000060","00000000","00000000","00007fff","unguarded"],["00007fff","0000007f","00000000","00000000","00000000","unguarded"],["00007fff","00000080","00000000","00000000","00007fff","unguarded"],["00007fff","000000ff","00000000","00000000","00000000","unguarded"],["00007fff","00000100","00000000","00000000","00007fff","unguarded"],["00007fff","7fffffff","00000000","00000000","00000000","unguarded"],["00007fff","80000000","00000000","00000000","00007fff","unguarded"],["00007fff","ffffffe0","00000000","00000000","00007fff","unguarded"],["00007fff","ffffffff","00000000","00000000","00000000","unguarded"],["00008000","00000000","00000000","00000000","00008000"],["00008000","00000001","00000000","00000000","00004000"],["00008000","00000002","00000000","00000000","00002000"],["00008000","00000003","00000000","00000000","00001000"],["00008000","00000004","00000000","00000000","00000800"],["00008000","00000005","00000000","00000000","00000400"],["00008000","00000006","00000000","00000000","00000200"],["00008000","00000007","00000000","00000000","00000100"],["00008000","00000008","00000000","00000000","00000080"],["00008000","00000009","00000000","00000000","00000040"],["00008000","0000000a","00000000","00000000","00000020"],["00008000","0000000b","00000000","00000000","00000010"],["00008000","0000000c","00000000","00000000","00000008"],["00008000","0000000d","00000000","00000000","00000004"],["00008000","0000000e","00000000","00000000","00000002"],["00008000","0000000f","00000000","00000000","00000001"],["00008000","00000010","00000000","00000000","00000000"],["00008000","00000011","00000000","00000000","00000000"],["00008000","00000012","00000000","00000000","00000000"],["00008000","00000013","00000000","00000000","00000000"],["00008000","00000014","00000000","00000000","00000000"],["00008000","00000015","00000000","00000000","00000000"],["00008000","00000016","00000000","00000000","00000000"],["00008000","00000017","00000000","00000000","00000000"],["00008000","00000018","00000000","00000000","00000000"],["00008000","00000019","00000000","00000000","00000000"],["00008000","0000001a","00000000","00000000","00000000"],["00008000","0000001b","00000000","00000000","00000000"],["00008000","0000001c","00000000","00000000","00000000"],["00008000","0000001d","00000000","00000000","00000000"],["00008000","0000001e","00000000","00000000","00000000"],["00008000","0000001f","00000000","00000000","00000000"],["00008000","00000020","00000000","00000000","00008000","unguarded"],["00008000","00000021","00000000","00000000","00004000","unguarded"],["00008000","00000022","00000000","00000000","00002000","unguarded"],["00008000","00000023","00000000","00000000","00001000","unguarded"],["00008000","00000024","00000000","00000000","00000800","unguarded"],["00008000","00000025","00000000","00000000","00000400","unguarded"],["00008000","00000026","00000000","00000000","00000200","unguarded"],["00008000","00000027","00000000","00000000","00000100","unguarded"],["00008000","00000028","00000000","00000000","00000080","unguarded"],["00008000","0000003f","00000000","00000000","00000000","unguarded"],["00008000","00000040","00000000","00000000","00008000","unguarded"],["00008000","00000041","00000000","00000000","00004000","unguarded"],["00008000","00000060","00000000","00000000","00008000","unguarded"],["00008000","0000007f","00000000","00000000","00000000","unguarded"],["00008000","00000080","00000000","00000000","00008000","unguarded"],["00008000","000000ff","00000000","00000000","00000000","unguarded"],["00008000","00000100","00000000","00000000","00008000","unguarded"],["00008000","7fffffff","00000000","00000000","00000000","unguarded"],["00008000","80000000","00000000","00000000","00008000","unguarded"],["00008000","ffffffe0","00000000","00000000","00008000","unguarded"],["00008000","ffffffff","00000000","00000000","00000000","unguarded"],["0000ffff","00000000","00000000","00000000","0000ffff"],["0000ffff","00000001","00000000","00000000","00007fff"],["0000ffff","00000002","00000000","00000000","00003fff"],["0000ffff","00000003","00000000","00000000","00001fff"],["0000ffff","00000004","00000000","00000000","00000fff"],["0000ffff","00000005","00000000","00000000","000007ff"],["0000ffff","00000006","00000000","00000000","000003ff"],["0000ffff","00000007","00000000","00000000","000001ff"],["0000ffff","00000008","00000000","00000000","000000ff"],["0000ffff","00000009","00000000","00000000","0000007f"],["0000ffff","0000000a","00000000","00000000","0000003f"],["0000ffff","0000000b","00000000","00000000","0000001f"],["0000ffff","0000000c","00000000","00000000","0000000f"],["0000ffff","0000000d","00000000","00000000","00000007"],["0000ffff","0000000e","00000000","00000000","00000003"],["0000ffff","0000000f","00000000","00000000","00000001"],["0000ffff","00000010","00000000","00000000","00000000"],["0000ffff","00000011","00000000","00000000","00000000"],["0000ffff","00000012","00000000","00000000","00000000"],["0000ffff","00000013","00000000","00000000","00000000"],["0000ffff","00000014","00000000","00000000","00000000"],["0000ffff","00000015","00000000","00000000","00000000"],["0000ffff","00000016","00000000","00000000","00000000"],["0000ffff","00000017","00000000","00000000","00000000"],["0000ffff","00000018","00000000","00000000","00000000"],["0000ffff","00000019","00000000","00000000","00000000"],["0000ffff","0000001a","00000000","00000000","00000000"],["0000ffff","0000001b","00000000","00000000","00000000"],["0000ffff","0000001c","00000000","00000000","00000000"],["0000ffff","0000001d","00000000","00000000","00000000"],["0000ffff","0000001e","00000000","00000000","00000000"],["0000ffff","0000001f","00000000","00000000","00000000"],["0000ffff","00000020","00000000","00000000","0000ffff","unguarded"],["0000ffff","00000021","00000000","00000000","00007fff","unguarded"],["0000ffff","00000022","00000000","00000000","00003fff","unguarded"],["0000ffff","00000023","00000000","00000000","00001fff","unguarded"],["0000ffff","00000024","00000000","00000000","00000fff","unguarded"],["0000ffff","00000025","00000000","00000000","000007ff","unguarded"],["0000ffff","00000026","00000000","00000000","000003ff","unguarded"],["0000ffff","00000027","00000000","00000000","000001ff","unguarded"],["0000ffff","00000028","00000000","00000000","000000ff","unguarded"],["0000ffff","0000003f","00000000","00000000","00000000","unguarded"],["0000ffff","00000040","00000000","00000000","0000ffff","unguarded"],["0000ffff","00000041","00000000","00000000","00007fff","unguarded"],["0000ffff","00000060","00000000","00000000","0000ffff","unguarded"],["0000ffff","0000007f","00000000","00000000","00000000","unguarded"],["0000ffff","00000080","00000000","00000000","0000ffff","unguarded"],["0000ffff","000000ff","00000000","00000000","00000000","unguarded"],["0000ffff","00000100","00000000","00000000","0000ffff","unguarded"],["0000ffff","7fffffff","00000000","00000000","00000000","unguarded"],["0000ffff","80000000","00000000","00000000","0000ffff","unguarded"],["0000ffff","ffffffe0","00000000","00000000","0000ffff","unguarded"],["0000ffff","ffffffff","00000000","00000000","00000000","unguarded"],["00010000","00000000","00000000","00000000","00010000"],["00010000","00000001","00000000","00000000","00008000"],["00010000","00000002","00000000","00000000","00004000"],["00010000","00000003","00000000","00000000","00002000"],["00010000","00000004","00000000","00000000","00001000"],["00010000","00000005","00000000","00000000","00000800"],["00010000","00000006","00000000","00000000","00000400"],["00010000","00000007","00000000","00000000","00000200"],["00010000","00000008","00000000","00000000","00000100"],["00010000","00000009","00000000","00000000","00000080"],["00010000","0000000a","00000000","00000000","00000040"],["00010000","0000000b","00000000","00000000","00000020"],["00010000","0000000c","00000000","00000000","00000010"],["00010000","0000000d","00000000","00000000","00000008"],["00010000","0000000e","00000000","00000000","00000004"],["00010000","0000000f","00000000","00000000","00000002"],["00010000","00000010","00000000","00000000","00000001"],["00010000","00000011","00000000","00000000","00000000"],["00010000","00000012","00000000","00000000","00000000"],["00010000","00000013","00000000","00000000","00000000"],["00010000","00000014","00000000","00000000","00000000"],["00010000","00000015","00000000","00000000","00000000"],["00010000","00000016","00000000","00000000","00000000"],["00010000","00000017","00000000","00000000","00000000"],["00010000","00000018","00000000","00000000","00000000"],["00010000","00000019","00000000","00000000","00000000"],["00010000","0000001a","00000000","00000000","00000000"],["00010000","0000001b","00000000","00000000","00000000"],["00010000","0000001c","00000000","00000000","00000000"],["00010000","0000001d","00000000","00000000","00000000"],["00010000","0000001e","00000000","00000000","00000000"],["00010000","0000001f","00000000","00000000","00000000"],["00010000","00000020","00000000","00000000","00010000","unguarded"],["00010000","00000021","00000000","00000000","00008000","unguarded"],["00010000","00000022","00000000","00000000","00004000","unguarded"],["00010000","00000023","00000000","00000000","00002000","unguarded"],["00010000","00000024","00000000","00000000","00001000","unguarded"],["00010000","00000025","00000000","00000000","00000800","unguarded"],["00010000","00000026","00000000","00000000","00000400","unguarded"],["00010000","00000027","00000000","00000000","00000200","unguarded"],["00010000","00000028","00000000","00000000","00000100","unguarded"],["00010000","0000003f","00000000","00000000","00000000","unguarded"],["00010000","00000040","00000000","00000000","00010000","unguarded"],["00010000","00000041","00000000","00000000","00008000","unguarded"],["00010000","00000060","00000000","00000000","00010000","unguarded"],["00010000","0000007f","00000000","00000000","00000000","unguarded"],["00010000","00000080","00000000","00000000","00010000","unguarded"],["00010000","000000ff","00000000","00000000","00000000","unguarded"],["00010000","00000100","00000000","00000000","00010000","unguarded"],["00010000","7fffffff","00000000","00000000","00000000","unguarded"],["00010000","80000000","00000000","00000000","00010000","unguarded"],["00010000","ffffffe0","00000000","00000000","00010000","unguarded"],["00010000","ffffffff","00000000","00000000","00000000","unguarded"],["55555555","00000000","00000000","00000000","55555555"],["55555555","00000001","00000000","00000000","2aaaaaaa"],["55555555","00000002","00000000","00000000","15555555"],["55555555","00000003","00000000","00000000","0aaaaaaa"],["55555555","00000004","00000000","00000000","05555555"],["55555555","00000005","00000000","00000000","02aaaaaa"],["55555555","00000006","00000000","00000000","01555555"],["55555555","00000007","00000000","00000000","00aaaaaa"],["55555555","00000008","00000000","00000000","00555555"],["55555555","00000009","00000000","00000000","002aaaaa"],["55555555","0000000a","00000000","00000000","00155555"],["55555555","0000000b","00000000","00000000","000aaaaa"],["55555555","0000000c","00000000","00000000","00055555"],["55555555","0000000d","00000000","00000000","0002aaaa"],["55555555","0000000e","00000000","00000000","00015555"],["55555555","0000000f","00000000","00000000","0000aaaa"],["55555555","00000010","00000000","00000000","00005555"],["55555555","00000011","00000000","00000000","00002aaa"],["55555555","00000012","00000000","00000000","00001555"],["55555555","00000013","00000000","00000000","00000aaa"],["55555555","00000014","00000000","00000000","00000555"],["55555555","00000015","00000000","00000000","000002aa"],["55555555","00000016","00000000","00000000","00000155"],["55555555","00000017","00000000","00000000","000000aa"],["55555555","00000018","00000000","00000000","00000055"],["55555555","00000019","00000000","00000000","0000002a"],["55555555","0000001a","00000000","00000000","00000015"],["55555555","0000001b","00000000","00000000","0000000a"],["55555555","0000001c","00000000","00000000","00000005"],["55555555","0000001d","00000000","00000000","00000002"],["55555555","0000001e","00000000","00000000","00000001"],["55555555","0000001f","00000000","00000000","00000000"],["55555555","00000020","00000000","00000000","55555555","unguarded"],["55555555","00000021","00000000","00000000","2aaaaaaa","unguarded"],["55555555","00000022","00000000","00000000","15555555","unguarded"],["55555555","00000023","00000000","00000000","0aaaaaaa","unguarded"],["55555555","00000024","00000000","00000000","05555555","unguarded"],["55555555","00000025","00000000","00000000","02aaaaaa","unguarded"],["55555555","00000026","00000000","00000000","01555555","unguarded"],["55555555","00000027","00000000","00000000","00aaaaaa","unguarded"],["55555555","00000028","00000000","00000000","00555555","unguarded"],["55555555","0000003f","00000000","00000000","00000000","unguarded"],["55555555","00000040","00000000","00000000","55555555","unguarded"],["55555555","00000041","00000000","00000000","2aaaaaaa","unguarded"],["55555555","00000060","00000000","00000000","55555555","unguarded"],["55555555","0000007f","00000000","00000000","00000000","unguarded"],["55555555","00000080","00000000","00000000","55555555","unguarded"],["55555555","000000ff","00000000","00000000","00000000","unguarded"],["55555555","00000100","00000000","00000000","55555555","unguarded"],["55555555","7fffffff","00000000","00000000","00000000","unguarded"],["55555555","80000000","00000000","00000000","55555555","unguarded"],["55555555","ffffffe0","00000000","00000000","55555555","unguarded"],["55555555","ffffffff","00000000","00000000","00000000","unguarded"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7ffffffe","00000001","00000000","00000000","3fffffff"],["7ffffffe","00000002","00000000","00000000","1fffffff"],["7ffffffe","00000003","00000000","00000000","0fffffff"],["7ffffffe","00000004","00000000","00000000","07ffffff"],["7ffffffe","00000005","00000000","00000000","03ffffff"],["7ffffffe","00000006","00000000","00000000","01ffffff"],["7ffffffe","00000007","00000000","00000000","00ffffff"],["7ffffffe","00000008","00000000","00000000","007fffff"],["7ffffffe","00000009","00000000","00000000","003fffff"],["7ffffffe","0000000a","00000000","00000000","001fffff"],["7ffffffe","0000000b","00000000","00000000","000fffff"],["7ffffffe","0000000c","00000000","00000000","0007ffff"],["7ffffffe","0000000d","00000000","00000000","0003ffff"],["7ffffffe","0000000e","00000000","00000000","0001ffff"],["7ffffffe","0000000f","00000000","00000000","0000ffff"],["7ffffffe","00000010","00000000","00000000","00007fff"],["7ffffffe","00000011","00000000","00000000","00003fff"],["7ffffffe","00000012","00000000","00000000","00001fff"],["7ffffffe","00000013","00000000","00000000","00000fff"],["7ffffffe","00000014","00000000","00000000","000007ff"],["7ffffffe","00000015","00000000","00000000","000003ff"],["7ffffffe","00000016","00000000","00000000","000001ff"],["7ffffffe","00000017","00000000","00000000","000000ff"],["7ffffffe","00000018","00000000","00000000","0000007f"],["7ffffffe","00000019","00000000","00000000","0000003f"],["7ffffffe","0000001a","00000000","00000000","0000001f"],["7ffffffe","0000001b","00000000","00000000","0000000f"],["7ffffffe","0000001c","00000000","00000000","00000007"],["7ffffffe","0000001d","00000000","00000000","00000003"],["7ffffffe","0000001e","00000000","00000000","00000001"],["7ffffffe","0000001f","00000000","00000000","00000000"],["7ffffffe","00000020","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","00000021","00000000","00000000","3fffffff","unguarded"],["7ffffffe","00000022","00000000","00000000","1fffffff","unguarded"],["7ffffffe","00000023","00000000","00000000","0fffffff","unguarded"],["7ffffffe","00000024","00000000","00000000","07ffffff","unguarded"],["7ffffffe","00000025","00000000","00000000","03ffffff","unguarded"],["7ffffffe","00000026","00000000","00000000","01ffffff","unguarded"],["7ffffffe","00000027","00000000","00000000","00ffffff","unguarded"],["7ffffffe","00000028","00000000","00000000","007fffff","unguarded"],["7ffffffe","0000003f","00000000","00000000","00000000","unguarded"],["7ffffffe","00000040","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","00000041","00000000","00000000","3fffffff","unguarded"],["7ffffffe","00000060","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","0000007f","00000000","00000000","00000000","unguarded"],["7ffffffe","00000080","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","000000ff","00000000","00000000","00000000","unguarded"],["7ffffffe","00000100","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","7fffffff","00000000","00000000","00000000","unguarded"],["7ffffffe","80000000","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","ffffffe0","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","ffffffff","00000000","00000000","00000000","unguarded"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","3fffffff"],["7fffffff","00000002","00000000","00000000","1fffffff"],["7fffffff","00000003","00000000","00000000","0fffffff"],["7fffffff","00000004","00000000","00000000","07ffffff"],["7fffffff","00000005","00000000","00000000","03ffffff"],["7fffffff","00000006","00000000","00000000","01ffffff"],["7fffffff","00000007","00000000","00000000","00ffffff"],["7fffffff","00000008","00000000","00000000","007fffff"],["7fffffff","00000009","00000000","00000000","003fffff"],["7fffffff","0000000a","00000000","00000000","001fffff"],["7fffffff","0000000b","00000000","00000000","000fffff"],["7fffffff","0000000c","00000000","00000000","0007ffff"],["7fffffff","0000000d","00000000","00000000","0003ffff"],["7fffffff","0000000e","00000000","00000000","0001ffff"],["7fffffff","0000000f","00000000","00000000","0000ffff"],["7fffffff","00000010","00000000","00000000","00007fff"],["7fffffff","00000011","00000000","00000000","00003fff"],["7fffffff","00000012","00000000","00000000","00001fff"],["7fffffff","00000013","00000000","00000000","00000fff"],["7fffffff","00000014","00000000","00000000","000007ff"],["7fffffff","00000015","00000000","00000000","000003ff"],["7fffffff","00000016","00000000","00000000","000001ff"],["7fffffff","00000017","00000000","00000000","000000ff"],["7fffffff","00000018","00000000","00000000","0000007f"],["7fffffff","00000019","00000000","00000000","0000003f"],["7fffffff","0000001a","00000000","00000000","0000001f"],["7fffffff","0000001b","00000000","00000000","0000000f"],["7fffffff","0000001c","00000000","00000000","00000007"],["7fffffff","0000001d","00000000","00000000","00000003"],["7fffffff","0000001e","00000000","00000000","00000001"],["7fffffff","0000001f","00000000","00000000","00000000"],["7fffffff","00000020","00000000","00000000","7fffffff","unguarded"],["7fffffff","00000021","00000000","00000000","3fffffff","unguarded"],["7fffffff","00000022","00000000","00000000","1fffffff","unguarded"],["7fffffff","00000023","00000000","00000000","0fffffff","unguarded"],["7fffffff","00000024","00000000","00000000","07ffffff","unguarded"],["7fffffff","00000025","00000000","00000000","03ffffff","unguarded"],["7fffffff","00000026","00000000","00000000","01ffffff","unguarded"],["7fffffff","00000027","00000000","00000000","00ffffff","unguarded"],["7fffffff","00000028","00000000","00000000","007fffff","unguarded"],["7fffffff","0000003f","00000000","00000000","00000000","unguarded"],["7fffffff","00000040","00000000","00000000","7fffffff","unguarded"],["7fffffff","00000041","00000000","00000000","3fffffff","unguarded"],["7fffffff","00000060","00000000","00000000","7fffffff","unguarded"],["7fffffff","0000007f","00000000","00000000","00000000","unguarded"],["7fffffff","00000080","00000000","00000000","7fffffff","unguarded"],["7fffffff","000000ff","00000000","00000000","00000000","unguarded"],["7fffffff","00000100","00000000","00000000","7fffffff","unguarded"],["7fffffff","7fffffff","00000000","00000000","00000000","unguarded"],["7fffffff","80000000","00000000","00000000","7fffffff","unguarded"],["7fffffff","ffffffe0","00000000","00000000","7fffffff","unguarded"],["7fffffff","ffffffff","00000000","00000000","00000000","unguarded"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","40000000"],["80000000","00000002","00000000","00000000","20000000"],["80000000","00000003","00000000","00000000","10000000"],["80000000","00000004","00000000","00000000","08000000"],["80000000","00000005","00000000","00000000","04000000"],["80000000","00000006","00000000","00000000","02000000"],["80000000","00000007","00000000","00000000","01000000"],["80000000","00000008","00000000","00000000","00800000"],["80000000","00000009","00000000","00000000","00400000"],["80000000","0000000a","00000000","00000000","00200000"],["80000000","0000000b","00000000","00000000","00100000"],["80000000","0000000c","00000000","00000000","00080000"],["80000000","0000000d","00000000","00000000","00040000"],["80000000","0000000e","00000000","00000000","00020000"],["80000000","0000000f","00000000","00000000","00010000"],["80000000","00000010","00000000","00000000","00008000"],["80000000","00000011","00000000","00000000","00004000"],["80000000","00000012","00000000","00000000","00002000"],["80000000","00000013","00000000","00000000","00001000"],["80000000","00000014","00000000","00000000","00000800"],["80000000","00000015","00000000","00000000","00000400"],["80000000","00000016","00000000","00000000","00000200"],["80000000","00000017","00000000","00000000","00000100"],["80000000","00000018","00000000","00000000","00000080"],["80000000","00000019","00000000","00000000","00000040"],["80000000","0000001a","00000000","00000000","00000020"],["80000000","0000001b","00000000","00000000","00000010"],["80000000","0000001c","00000000","00000000","00000008"],["80000000","0000001d","00000000","00000000","00000004"],["80000000","0000001e","00000000","00000000","00000002"],["80000000","0000001f","00000000","00000000","00000001"],["80000000","00000020","00000000","00000000","80000000","unguarded"],["80000000","00000021","00000000","00000000","40000000","unguarded"],["80000000","00000022","00000000","00000000","20000000","unguarded"],["80000000","00000023","00000000","00000000","10000000","unguarded"],["80000000","00000024","00000000","00000000","08000000","unguarded"],["80000000","00000025","00000000","00000000","04000000","unguarded"],["80000000","00000026","00000000","00000000","02000000","unguarded"],["80000000","00000027","00000000","00000000","01000000","unguarded"],["80000000","00000028","00000000","00000000","00800000","unguarded"],["80000000","0000003f","00000000","00000000","00000001","unguarded"],["80000000","00000040","00000000","00000000","80000000","unguarded"],["80000000","00000041","00000000","00000000","40000000","unguarded"],["80000000","00000060","00000000","00000000","80000000","unguarded"],["80000000","0000007f","00000000","00000000","00000001","unguarded"],["80000000","00000080","00000000","00000000","80000000","unguarded"],["80000000","000000ff","00000000","00000000","00000001","unguarded"],["80000000","00000100","00000000","00000000","80000000","unguarded"],["80000000","7fffffff","00000000","00000000","00000001","unguarded"],["80000000","80000000","00000000","00000000","80000000","unguarded"],["80000000","ffffffe0","00000000","00000000","80000000","unguarded"],["80000000","ffffffff","00000000","00000000","00000001","unguarded"],["80000001","00000000","00000000","00000000","80000001"],["80000001","00000001","00000000","00000000","40000000"],["80000001","00000002","00000000","00000000","20000000"],["80000001","00000003","00000000","00000000","10000000"],["80000001","00000004","00000000","00000000","08000000"],["80000001","00000005","00000000","00000000","04000000"],["80000001","00000006","00000000","00000000","02000000"],["80000001","00000007","00000000","00000000","01000000"],["80000001","00000008","00000000","00000000","00800000"],["80000001","00000009","00000000","00000000","00400000"],["80000001","0000000a","00000000","00000000","00200000"],["80000001","0000000b","00000000","00000000","00100000"],["80000001","0000000c","00000000","00000000","00080000"],["80000001","0000000d","00000000","00000000","00040000"],["80000001","0000000e","00000000","00000000","00020000"],["80000001","0000000f","00000000","00000000","00010000"],["80000001","00000010","00000000","00000000","00008000"],["80000001","00000011","00000000","00000000","00004000"],["80000001","00000012","00000000","00000000","00002000"],["80000001","00000013","00000000","00000000","00001000"],["80000001","00000014","00000000","00000000","00000800"],["80000001","00000015","00000000","00000000","00000400"],["80000001","00000016","00000000","00000000","00000200"],["80000001","00000017","00000000","00000000","00000100"],["80000001","00000018","00000000","00000000","00000080"],["80000001","00000019","00000000","00000000","00000040"],["80000001","0000001a","00000000","00000000","00000020"],["80000001","0000001b","00000000","00000000","00000010"],["80000001","0000001c","00000000","00000000","00000008"],["80000001","0000001d","00000000","00000000","00000004"],["80000001","0000001e","00000000","00000000","00000002"],["80000001","0000001f","00000000","00000000","00000001"],["80000001","00000020","00000000","00000000","80000001","unguarded"],["80000001","00000021","00000000","00000000","40000000","unguarded"],["80000001","00000022","00000000","00000000","20000000","unguarded"],["80000001","00000023","00000000","00000000","10000000","unguarded"],["80000001","00000024","00000000","00000000","08000000","unguarded"],["80000001","00000025","00000000","00000000","04000000","unguarded"],["80000001","00000026","00000000","00000000","02000000","unguarded"],["80000001","00000027","00000000","00000000","01000000","unguarded"],["80000001","00000028","00000000","00000000","00800000","unguarded"],["80000001","0000003f","00000000","00000000","00000001","unguarded"],["80000001","00000040","00000000","00000000","80000001","unguarded"],["80000001","00000041","00000000","00000000","40000000","unguarded"],["80000001","00000060","00000000","00000000","80000001","unguarded"],["80000001","0000007f","00000000","00000000","00000001","unguarded"],["80000001","00000080","00000000","00000000","80000001","unguarded"],["80000001","000000ff","00000000","00000000","00000001","unguarded"],["80000001","00000100","00000000","00000000","80000001","unguarded"],["80000001","7fffffff","00000000","00000000","00000001","unguarded"],["80000001","80000000","00000000","00000000","80000001","unguarded"],["80000001","ffffffe0","00000000","00000000","80000001","unguarded"],["80000001","ffffffff","00000000","00000000","00000001","unguarded"],["aaaaaaaa","00000000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000001","00000000","00000000","55555555"],["aaaaaaaa","00000002","00000000","00000000","2aaaaaaa"],["aaaaaaaa","00000003","00000000","00000000","15555555"],["aaaaaaaa","00000004","00000000","00000000","0aaaaaaa"],["aaaaaaaa","00000005","00000000","00000000","05555555"],["aaaaaaaa","00000006","00000000","00000000","02aaaaaa"],["aaaaaaaa","00000007","00000000","00000000","01555555"],["aaaaaaaa","00000008","00000000","00000000","00aaaaaa"],["aaaaaaaa","00000009","00000000","00000000","00555555"],["aaaaaaaa","0000000a","00000000","00000000","002aaaaa"],["aaaaaaaa","0000000b","00000000","00000000","00155555"],["aaaaaaaa","0000000c","00000000","00000000","000aaaaa"],["aaaaaaaa","0000000d","00000000","00000000","00055555"],["aaaaaaaa","0000000e","00000000","00000000","0002aaaa"],["aaaaaaaa","0000000f","00000000","00000000","00015555"],["aaaaaaaa","00000010","00000000","00000000","0000aaaa"],["aaaaaaaa","00000011","00000000","00000000","00005555"],["aaaaaaaa","00000012","00000000","00000000","00002aaa"],["aaaaaaaa","00000013","00000000","00000000","00001555"],["aaaaaaaa","00000014","00000000","00000000","00000aaa"],["aaaaaaaa","00000015","00000000","00000000","00000555"],["aaaaaaaa","00000016","00000000","00000000","000002aa"],["aaaaaaaa","00000017","00000000","00000000","00000155"],["aaaaaaaa","00000018","00000000","00000000","000000aa"],["aaaaaaaa","00000019","00000000","00000000","00000055"],["aaaaaaaa","0000001a","00000000","00000000","0000002a"],["aaaaaaaa","0000001b","00000000","00000000","00000015"],["aaaaaaaa","0000001c","00000000","00000000","0000000a"],["aaaaaaaa","0000001d","00000000","00000000","00000005"],["aaaaaaaa","0000001e","00000000","00000000","00000002"],["aaaaaaaa","0000001f","00000000","00000000","00000001"],["aaaaaaaa","00000020","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","00000021","00000000","00000000","55555555","unguarded"],["aaaaaaaa","00000022","00000000","00000000","2aaaaaaa","unguarded"],["aaaaaaaa","00000023","00000000","00000000","15555555","unguarded"],["aaaaaaaa","00000024","00000000","00000000","0aaaaaaa","unguarded"],["aaaaaaaa","00000025","00000000","00000000","05555555","unguarded"],["aaaaaaaa","00000026","00000000","00000000","02aaaaaa","unguarded"],["aaaaaaaa","00000027","00000000","00000000","01555555","unguarded"],["aaaaaaaa","00000028","00000000","00000000","00aaaaaa","unguarded"],["aaaaaaaa","0000003f","00000000","00000000","00000001","unguarded"],["aaaaaaaa","00000040","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","00000041","00000000","00000000","55555555","unguarded"],["aaaaaaaa","00000060","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","0000007f","00000000","00000000","00000001","unguarded"],["aaaaaaaa","00000080","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","000000ff","00000000","00000000","00000001","unguarded"],["aaaaaaaa","00000100","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","7fffffff","00000000","00000000","00000001","unguarded"],["aaaaaaaa","80000000","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","ffffffe0","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","ffffffff","00000000","00000000","00000001","unguarded"],["deadbeef","00000000","00000000","00000000","deadbeef"],["deadbeef","00000001","00000000","00000000","6f56df77"],["deadbeef","00000002","00000000","00000000","37ab6fbb"],["deadbeef","00000003","00000000","00000000","1bd5b7dd"],["deadbeef","00000004","00000000","00000000","0deadbee"],["deadbeef","00000005","00000000","00000000","06f56df7"],["deadbeef","00000006","00000000","00000000","037ab6fb"],["deadbeef","00000007","00000000","00000000","01bd5b7d"],["deadbeef","00000008","00000000","00000000","00deadbe"],["deadbeef","00000009","00000000","00000000","006f56df"],["deadbeef","0000000a","00000000","00000000","0037ab6f"],["deadbeef","0000000b","00000000","00000000","001bd5b7"],["deadbeef","0000000c","00000000","00000000","000deadb"],["deadbeef","0000000d","00000000","00000000","0006f56d"],["deadbeef","0000000e","00000000","00000000","00037ab6"],["deadbeef","0000000f","00000000","00000000","0001bd5b"],["deadbeef","00000010","00000000","00000000","0000dead"],["deadbeef","00000011","00000000","00000000","00006f56"],["deadbeef","00000012","00000000","00000000","000037ab"],["deadbeef","00000013","00000000","00000000","00001bd5"],["deadbeef","00000014","00000000","00000000","00000dea"],["deadbeef","00000015","00000000","00000000","000006f5"],["deadbeef","00000016","00000000","00000000","0000037a"],["deadbeef","00000017","00000000","00000000","000001bd"],["deadbeef","00000018","00000000","00000000","000000de"],["deadbeef","00000019","00000000","00000000","0000006f"],["deadbeef","0000001a","00000000","00000000","00000037"],["deadbeef","0000001b","00000000","00000000","0000001b"],["deadbeef","0000001c","00000000","00000000","0000000d"],["deadbeef","0000001d","00000000","00000000","00000006"],["deadbeef","0000001e","00000000","00000000","00000003"],["deadbeef","0000001f","00000000","00000000","00000001"],["deadbeef","00000020","00000000","00000000","deadbeef","unguarded"],["deadbeef","00000021","00000000","00000000","6f56df77","unguarded"],["deadbeef","00000022","00000000","00000000","37ab6fbb","unguarded"],["deadbeef","00000023","00000000","00000000","1bd5b7dd","unguarded"],["deadbeef","00000024","00000000","00000000","0deadbee","unguarded"],["deadbeef","00000025","00000000","00000000","06f56df7","unguarded"],["deadbeef","00000026","00000000","00000000","037ab6fb","unguarded"],["deadbeef","00000027","00000000","00000000","01bd5b7d","unguarded"],["deadbeef","00000028","00000000","00000000","00deadbe","unguarded"],["deadbeef","0000003f","00000000","00000000","00000001","unguarded"],["deadbeef","00000040","00000000","00000000","deadbeef","unguarded"],["deadbeef","00000041","00000000","00000000","6f56df77","unguarded"],["deadbeef","00000060","00000000","00000000","deadbeef","unguarded"],["deadbeef","0000007f","00000000","00000000","00000001","unguarded"],["deadbeef","00000080","00000000","00000000","deadbeef","unguarded"],["deadbeef","000000ff","00000000","00000000","00000001","unguarded"],["deadbeef","00000100","00000000","00000000","deadbeef","unguarded"],["deadbeef","7fffffff","00000000","00000000","00000001","unguarded"],["deadbeef","80000000","00000000","00000000","deadbeef","unguarded"],["deadbeef","ffffffe0","00000000","00000000","deadbeef","unguarded"],["deadbeef","ffffffff","00000000","00000000","00000001","unguarded"],["ffff0000","00000000","00000000","00000000","ffff0000"],["ffff0000","00000001","00000000","00000000","7fff8000"],["ffff0000","00000002","00000000","00000000","3fffc000"],["ffff0000","00000003","00000000","00000000","1fffe000"],["ffff0000","00000004","00000000","00000000","0ffff000"],["ffff0000","00000005","00000000","00000000","07fff800"],["ffff0000","00000006","00000000","00000000","03fffc00"],["ffff0000","00000007","00000000","00000000","01fffe00"],["ffff0000","00000008","00000000","00000000","00ffff00"],["ffff0000","00000009","00000000","00000000","007fff80"],["ffff0000","0000000a","00000000","00000000","003fffc0"],["ffff0000","0000000b","00000000","00000000","001fffe0"],["ffff0000","0000000c","00000000","00000000","000ffff0"],["ffff0000","0000000d","00000000","00000000","0007fff8"],["ffff0000","0000000e","00000000","00000000","0003fffc"],["ffff0000","0000000f","00000000","00000000","0001fffe"],["ffff0000","00000010","00000000","00000000","0000ffff"],["ffff0000","00000011","00000000","00000000","00007fff"],["ffff0000","00000012","00000000","00000000","00003fff"],["ffff0000","00000013","00000000","00000000","00001fff"],["ffff0000","00000014","00000000","00000000","00000fff"],["ffff0000","00000015","00000000","00000000","000007ff"],["ffff0000","00000016","00000000","00000000","000003ff"],["ffff0000","00000017","00000000","00000000","000001ff"],["ffff0000","00000018","00000000","00000000","000000ff"],["ffff0000","00000019","00000000","00000000","0000007f"],["ffff0000","0000001a","00000000","00000000","0000003f"],["ffff0000","0000001b","00000000","00000000","0000001f"],["ffff0000","0000001c","00000000","00000000","0000000f"],["ffff0000","0000001d","00000000","00000000","00000007"],["ffff0000","0000001e","00000000","00000000","00000003"],["ffff0000","0000001f","00000000","00000000","00000001"],["ffff0000","00000020","00000000","00000000","ffff0000","unguarded"],["ffff0000","00000021","00000000","00000000","7fff8000","unguarded"],["ffff0000","00000022","00000000","00000000","3fffc000","unguarded"],["ffff0000","00000023","00000000","00000000","1fffe000","unguarded"],["ffff0000","00000024","00000000","00000000","0ffff000","unguarded"],["ffff0000","00000025","00000000","00000000","07fff800","unguarded"],["ffff0000","00000026","00000000","00000000","03fffc00","unguarded"],["ffff0000","00000027","00000000","00000000","01fffe00","unguarded"],["ffff0000","00000028","00000000","00000000","00ffff00","unguarded"],["ffff0000","0000003f","00000000","00000000","00000001","unguarded"],["ffff0000","00000040","00000000","00000000","ffff0000","unguarded"],["ffff0000","00000041","00000000","00000000","7fff8000","unguarded"],["ffff0000","00000060","00000000","00000000","ffff0000","unguarded"],["ffff0000","0000007f","00000000","00000000","00000001","unguarded"],["ffff0000","00000080","00000000","00000000","ffff0000","unguarded"],["ffff0000","000000ff","00000000","00000000","00000001","unguarded"],["ffff0000","00000100","00000000","00000000","ffff0000","unguarded"],["ffff0000","7fffffff","00000000","00000000","00000001","unguarded"],["ffff0000","80000000","00000000","00000000","ffff0000","unguarded"],["ffff0000","ffffffe0","00000000","00000000","ffff0000","unguarded"],["ffff0000","ffffffff","00000000","00000000","00000001","unguarded"],["ffff8000","00000000","00000000","00000000","ffff8000"],["ffff8000","00000001","00000000","00000000","7fffc000"],["ffff8000","00000002","00000000","00000000","3fffe000"],["ffff8000","00000003","00000000","00000000","1ffff000"],["ffff8000","00000004","00000000","00000000","0ffff800"],["ffff8000","00000005","00000000","00000000","07fffc00"],["ffff8000","00000006","00000000","00000000","03fffe00"],["ffff8000","00000007","00000000","00000000","01ffff00"],["ffff8000","00000008","00000000","00000000","00ffff80"],["ffff8000","00000009","00000000","00000000","007fffc0"],["ffff8000","0000000a","00000000","00000000","003fffe0"],["ffff8000","0000000b","00000000","00000000","001ffff0"],["ffff8000","0000000c","00000000","00000000","000ffff8"],["ffff8000","0000000d","00000000","00000000","0007fffc"],["ffff8000","0000000e","00000000","00000000","0003fffe"],["ffff8000","0000000f","00000000","00000000","0001ffff"],["ffff8000","00000010","00000000","00000000","0000ffff"],["ffff8000","00000011","00000000","00000000","00007fff"],["ffff8000","00000012","00000000","00000000","00003fff"],["ffff8000","00000013","00000000","00000000","00001fff"],["ffff8000","00000014","00000000","00000000","00000fff"],["ffff8000","00000015","00000000","00000000","000007ff"],["ffff8000","00000016","00000000","00000000","000003ff"],["ffff8000","00000017","00000000","00000000","000001ff"],["ffff8000","00000018","00000000","00000000","000000ff"],["ffff8000","00000019","00000000","00000000","0000007f"],["ffff8000","0000001a","00000000","00000000","0000003f"],["ffff8000","0000001b","00000000","00000000","0000001f"],["ffff8000","0000001c","00000000","00000000","0000000f"],["ffff8000","0000001d","00000000","00000000","00000007"],["ffff8000","0000001e","00000000","00000000","00000003"],["ffff8000","0000001f","00000000","00000000","00000001"],["ffff8000","00000020","00000000","00000000","ffff8000","unguarded"],["ffff8000","00000021","00000000","00000000","7fffc000","unguarded"],["ffff8000","00000022","00000000","00000000","3fffe000","unguarded"],["ffff8000","00000023","00000000","00000000","1ffff000","unguarded"],["ffff8000","00000024","00000000","00000000","0ffff800","unguarded"],["ffff8000","00000025","00000000","00000000","07fffc00","unguarded"],["ffff8000","00000026","00000000","00000000","03fffe00","unguarded"],["ffff8000","00000027","00000000","00000000","01ffff00","unguarded"],["ffff8000","00000028","00000000","00000000","00ffff80","unguarded"],["ffff8000","0000003f","00000000","00000000","00000001","unguarded"],["ffff8000","00000040","00000000","00000000","ffff8000","unguarded"],["ffff8000","00000041","00000000","00000000","7fffc000","unguarded"],["ffff8000","00000060","00000000","00000000","ffff8000","unguarded"],["ffff8000","0000007f","00000000","00000000","00000001","unguarded"],["ffff8000","00000080","00000000","00000000","ffff8000","unguarded"],["ffff8000","000000ff","00000000","00000000","00000001","unguarded"],["ffff8000","00000100","00000000","00000000","ffff8000","unguarded"],["ffff8000","7fffffff","00000000","00000000","00000001","unguarded"],["ffff8000","80000000","00000000","00000000","ffff8000","unguarded"],["ffff8000","ffffffe0","00000000","00000000","ffff8000","unguarded"],["ffff8000","ffffffff","00000000","00000000","00000001","unguarded"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["ffffffe0","00000001","00000000","00000000","7ffffff0"],["ffffffe0","00000002","00000000","00000000","3ffffff8"],["ffffffe0","00000003","00000000","00000000","1ffffffc"],["ffffffe0","00000004","00000000","00000000","0ffffffe"],["ffffffe0","00000005","00000000","00000000","07ffffff"],["ffffffe0","00000006","00000000","00000000","03ffffff"],["ffffffe0","00000007","00000000","00000000","01ffffff"],["ffffffe0","00000008","00000000","00000000","00ffffff"],["ffffffe0","00000009","00000000","00000000","007fffff"],["ffffffe0","0000000a","00000000","00000000","003fffff"],["ffffffe0","0000000b","00000000","00000000","001fffff"],["ffffffe0","0000000c","00000000","00000000","000fffff"],["ffffffe0","0000000d","00000000","00000000","0007ffff"],["ffffffe0","0000000e","00000000","00000000","0003ffff"],["ffffffe0","0000000f","00000000","00000000","0001ffff"],["ffffffe0","00000010","00000000","00000000","0000ffff"],["ffffffe0","00000011","00000000","00000000","00007fff"],["ffffffe0","00000012","00000000","00000000","00003fff"],["ffffffe0","00000013","00000000","00000000","00001fff"],["ffffffe0","00000014","00000000","00000000","00000fff"],["ffffffe0","00000015","00000000","00000000","000007ff"],["ffffffe0","00000016","00000000","00000000","000003ff"],["ffffffe0","00000017","00000000","00000000","000001ff"],["ffffffe0","00000018","00000000","00000000","000000ff"],["ffffffe0","00000019","00000000","00000000","0000007f"],["ffffffe0","0000001a","00000000","00000000","0000003f"],["ffffffe0","0000001b","00000000","00000000","0000001f"],["ffffffe0","0000001c","00000000","00000000","0000000f"],["ffffffe0","0000001d","00000000","00000000","00000007"],["ffffffe0","0000001e","00000000","00000000","00000003"],["ffffffe0","0000001f","00000000","00000000","00000001"],["ffffffe0","00000020","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","00000021","00000000","00000000","7ffffff0","unguarded"],["ffffffe0","00000022","00000000","00000000","3ffffff8","unguarded"],["ffffffe0","00000023","00000000","00000000","1ffffffc","unguarded"],["ffffffe0","00000024","00000000","00000000","0ffffffe","unguarded"],["ffffffe0","00000025","00000000","00000000","07ffffff","unguarded"],["ffffffe0","00000026","00000000","00000000","03ffffff","unguarded"],["ffffffe0","00000027","00000000","00000000","01ffffff","unguarded"],["ffffffe0","00000028","00000000","00000000","00ffffff","unguarded"],["ffffffe0","0000003f","00000000","00000000","00000001","unguarded"],["ffffffe0","00000040","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","00000041","00000000","00000000","7ffffff0","unguarded"],["ffffffe0","00000060","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","0000007f","00000000","00000000","00000001","unguarded"],["ffffffe0","00000080","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","000000ff","00000000","00000000","00000001","unguarded"],["ffffffe0","00000100","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","7fffffff","00000000","00000000","00000001","unguarded"],["ffffffe0","80000000","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","ffffffe0","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","ffffffff","00000000","00000000","00000001","unguarded"],["ffffffe1","00000000","00000000","00000000","ffffffe1"],["ffffffe1","00000001","00000000","00000000","7ffffff0"],["ffffffe1","00000002","00000000","00000000","3ffffff8"],["ffffffe1","00000003","00000000","00000000","1ffffffc"],["ffffffe1","00000004","00000000","00000000","0ffffffe"],["ffffffe1","00000005","00000000","00000000","07ffffff"],["ffffffe1","00000006","00000000","00000000","03ffffff"],["ffffffe1","00000007","00000000","00000000","01ffffff"],["ffffffe1","00000008","00000000","00000000","00ffffff"],["ffffffe1","00000009","00000000","00000000","007fffff"],["ffffffe1","0000000a","00000000","00000000","003fffff"],["ffffffe1","0000000b","00000000","00000000","001fffff"],["ffffffe1","0000000c","00000000","00000000","000fffff"],["ffffffe1","0000000d","00000000","00000000","0007ffff"],["ffffffe1","0000000e","00000000","00000000","0003ffff"],["ffffffe1","0000000f","00000000","00000000","0001ffff"],["ffffffe1","00000010","00000000","00000000","0000ffff"],["ffffffe1","00000011","00000000","00000000","00007fff"],["ffffffe1","00000012","00000000","00000000","00003fff"],["ffffffe1","00000013","00000000","00000000","00001fff"],["ffffffe1","00000014","00000000","00000000","00000fff"],["ffffffe1","00000015","00000000","00000000","000007ff"],["ffffffe1","00000016","00000000","00000000","000003ff"],["ffffffe1","00000017","00000000","00000000","000001ff"],["ffffffe1","00000018","00000000","00000000","000000ff"],["ffffffe1","00000019","00000000","00000000","0000007f"],["ffffffe1","0000001a","00000000","00000000","0000003f"],["ffffffe1","0000001b","00000000","00000000","0000001f"],["ffffffe1","0000001c","00000000","00000000","0000000f"],["ffffffe1","0000001d","00000000","00000000","00000007"],["ffffffe1","0000001e","00000000","00000000","00000003"],["ffffffe1","0000001f","00000000","00000000","00000001"],["ffffffe1","00000020","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","00000021","00000000","00000000","7ffffff0","unguarded"],["ffffffe1","00000022","00000000","00000000","3ffffff8","unguarded"],["ffffffe1","00000023","00000000","00000000","1ffffffc","unguarded"],["ffffffe1","00000024","00000000","00000000","0ffffffe","unguarded"],["ffffffe1","00000025","00000000","00000000","07ffffff","unguarded"],["ffffffe1","00000026","00000000","00000000","03ffffff","unguarded"],["ffffffe1","00000027","00000000","00000000","01ffffff","unguarded"],["ffffffe1","00000028","00000000","00000000","00ffffff","unguarded"],["ffffffe1","0000003f","00000000","00000000","00000001","unguarded"],["ffffffe1","00000040","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","00000041","00000000","00000000","7ffffff0","unguarded"],["ffffffe1","00000060","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","0000007f","00000000","00000000","00000001","unguarded"],["ffffffe1","00000080","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","000000ff","00000000","00000000","00000001","unguarded"],["ffffffe1","00000100","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","7fffffff","00000000","00000000","00000001","unguarded"],["ffffffe1","80000000","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","ffffffe0","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","ffffffff","00000000","00000000","00000001","unguarded"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","7ffffffc"],["fffffff9","00000002","00000000","00000000","3ffffffe"],["fffffff9","00000003","00000000","00000000","1fffffff"],["fffffff9","00000004","00000000","00000000","0fffffff"],["fffffff9","00000005","00000000","00000000","07ffffff"],["fffffff9","00000006","00000000","00000000","03ffffff"],["fffffff9","00000007","00000000","00000000","01ffffff"],["fffffff9","00000008","00000000","00000000","00ffffff"],["fffffff9","00000009","00000000","00000000","007fffff"],["fffffff9","0000000a","00000000","00000000","003fffff"],["fffffff9","0000000b","00000000","00000000","001fffff"],["fffffff9","0000000c","00000000","00000000","000fffff"],["fffffff9","0000000d","00000000","00000000","0007ffff"],["fffffff9","0000000e","00000000","00000000","0003ffff"],["fffffff9","0000000f","00000000","00000000","0001ffff"],["fffffff9","00000010","00000000","00000000","0000ffff"],["fffffff9","00000011","00000000","00000000","00007fff"],["fffffff9","00000012","00000000","00000000","00003fff"],["fffffff9","00000013","00000000","00000000","00001fff"],["fffffff9","00000014","00000000","00000000","00000fff"],["fffffff9","00000015","00000000","00000000","000007ff"],["fffffff9","00000016","00000000","00000000","000003ff"],["fffffff9","00000017","00000000","00000000","000001ff"],["fffffff9","00000018","00000000","00000000","000000ff"],["fffffff9","00000019","00000000","00000000","0000007f"],["fffffff9","0000001a","00000000","00000000","0000003f"],["fffffff9","0000001b","00000000","00000000","0000001f"],["fffffff9","0000001c","00000000","00000000","0000000f"],["fffffff9","0000001d","00000000","00000000","00000007"],["fffffff9","0000001e","00000000","00000000","00000003"],["fffffff9","0000001f","00000000","00000000","00000001"],["fffffff9","00000020","00000000","00000000","fffffff9","unguarded"],["fffffff9","00000021","00000000","00000000","7ffffffc","unguarded"],["fffffff9","00000022","00000000","00000000","3ffffffe","unguarded"],["fffffff9","00000023","00000000","00000000","1fffffff","unguarded"],["fffffff9","00000024","00000000","00000000","0fffffff","unguarded"],["fffffff9","00000025","00000000","00000000","07ffffff","unguarded"],["fffffff9","00000026","00000000","00000000","03ffffff","unguarded"],["fffffff9","00000027","00000000","00000000","01ffffff","unguarded"],["fffffff9","00000028","00000000","00000000","00ffffff","unguarded"],["fffffff9","0000003f","00000000","00000000","00000001","unguarded"],["fffffff9","00000040","00000000","00000000","fffffff9","unguarded"],["fffffff9","00000041","00000000","00000000","7ffffffc","unguarded"],["fffffff9","00000060","00000000","00000000","fffffff9","unguarded"],["fffffff9","0000007f","00000000","00000000","00000001","unguarded"],["fffffff9","00000080","00000000","00000000","fffffff9","unguarded"],["fffffff9","000000ff","00000000","00000000","00000001","unguarded"],["fffffff9","00000100","00000000","00000000","fffffff9","unguarded"],["fffffff9","7fffffff","00000000","00000000","00000001","unguarded"],["fffffff9","80000000","00000000","00000000","fffffff9","unguarded"],["fffffff9","ffffffe0","00000000","00000000","fffffff9","unguarded"],["fffffff9","ffffffff","00000000","00000000","00000001","unguarded"],["fffffffd","00000000","00000000","00000000","fffffffd"],["fffffffd","00000001","00000000","00000000","7ffffffe"],["fffffffd","00000002","00000000","00000000","3fffffff"],["fffffffd","00000003","00000000","00000000","1fffffff"],["fffffffd","00000004","00000000","00000000","0fffffff"],["fffffffd","00000005","00000000","00000000","07ffffff"],["fffffffd","00000006","00000000","00000000","03ffffff"],["fffffffd","00000007","00000000","00000000","01ffffff"],["fffffffd","00000008","00000000","00000000","00ffffff"],["fffffffd","00000009","00000000","00000000","007fffff"],["fffffffd","0000000a","00000000","00000000","003fffff"],["fffffffd","0000000b","00000000","00000000","001fffff"],["fffffffd","0000000c","00000000","00000000","000fffff"],["fffffffd","0000000d","00000000","00000000","0007ffff"],["fffffffd","0000000e","00000000","00000000","0003ffff"],["fffffffd","0000000f","00000000","00000000","0001ffff"],["fffffffd","00000010","00000000","00000000","0000ffff"],["fffffffd","00000011","00000000","00000000","00007fff"],["fffffffd","00000012","00000000","00000000","00003fff"],["fffffffd","00000013","00000000","00000000","00001fff"],["fffffffd","00000014","00000000","00000000","00000fff"],["fffffffd","00000015","00000000","00000000","000007ff"],["fffffffd","00000016","00000000","00000000","000003ff"],["fffffffd","00000017","00000000","00000000","000001ff"],["fffffffd","00000018","00000000","00000000","000000ff"],["fffffffd","00000019","00000000","00000000","0000007f"],["fffffffd","0000001a","00000000","00000000","0000003f"],["fffffffd","0000001b","00000000","00000000","0000001f"],["fffffffd","0000001c","00000000","00000000","0000000f"],["fffffffd","0000001d","00000000","00000000","00000007"],["fffffffd","0000001e","00000000","00000000","00000003"],["fffffffd","0000001f","00000000","00000000","00000001"],["fffffffd","00000020","00000000","00000000","fffffffd","unguarded"],["fffffffd","00000021","00000000","00000000","7ffffffe","unguarded"],["fffffffd","00000022","00000000","00000000","3fffffff","unguarded"],["fffffffd","00000023","00000000","00000000","1fffffff","unguarded"],["fffffffd","00000024","00000000","00000000","0fffffff","unguarded"],["fffffffd","00000025","00000000","00000000","07ffffff","unguarded"],["fffffffd","00000026","00000000","00000000","03ffffff","unguarded"],["fffffffd","00000027","00000000","00000000","01ffffff","unguarded"],["fffffffd","00000028","00000000","00000000","00ffffff","unguarded"],["fffffffd","0000003f","00000000","00000000","00000001","unguarded"],["fffffffd","00000040","00000000","00000000","fffffffd","unguarded"],["fffffffd","00000041","00000000","00000000","7ffffffe","unguarded"],["fffffffd","00000060","00000000","00000000","fffffffd","unguarded"],["fffffffd","0000007f","00000000","00000000","00000001","unguarded"],["fffffffd","00000080","00000000","00000000","fffffffd","unguarded"],["fffffffd","000000ff","00000000","00000000","00000001","unguarded"],["fffffffd","00000100","00000000","00000000","fffffffd","unguarded"],["fffffffd","7fffffff","00000000","00000000","00000001","unguarded"],["fffffffd","80000000","00000000","00000000","fffffffd","unguarded"],["fffffffd","ffffffe0","00000000","00000000","fffffffd","unguarded"],["fffffffd","ffffffff","00000000","00000000","00000001","unguarded"],["fffffffe","00000000","00000000","00000000","fffffffe"],["fffffffe","00000001","00000000","00000000","7fffffff"],["fffffffe","00000002","00000000","00000000","3fffffff"],["fffffffe","00000003","00000000","00000000","1fffffff"],["fffffffe","00000004","00000000","00000000","0fffffff"],["fffffffe","00000005","00000000","00000000","07ffffff"],["fffffffe","00000006","00000000","00000000","03ffffff"],["fffffffe","00000007","00000000","00000000","01ffffff"],["fffffffe","00000008","00000000","00000000","00ffffff"],["fffffffe","00000009","00000000","00000000","007fffff"],["fffffffe","0000000a","00000000","00000000","003fffff"],["fffffffe","0000000b","00000000","00000000","001fffff"],["fffffffe","0000000c","00000000","00000000","000fffff"],["fffffffe","0000000d","00000000","00000000","0007ffff"],["fffffffe","0000000e","00000000","00000000","0003ffff"],["fffffffe","0000000f","00000000","00000000","0001ffff"],["fffffffe","00000010","00000000","00000000","0000ffff"],["fffffffe","00000011","00000000","00000000","00007fff"],["fffffffe","00000012","00000000","00000000","00003fff"],["fffffffe","00000013","00000000","00000000","00001fff"],["fffffffe","00000014","00000000","00000000","00000fff"],["fffffffe","00000015","00000000","00000000","000007ff"],["fffffffe","00000016","00000000","00000000","000003ff"],["fffffffe","00000017","00000000","00000000","000001ff"],["fffffffe","00000018","00000000","00000000","000000ff"],["fffffffe","00000019","00000000","00000000","0000007f"],["fffffffe","0000001a","00000000","00000000","0000003f"],["fffffffe","0000001b","00000000","00000000","0000001f"],["fffffffe","0000001c","00000000","00000000","0000000f"],["fffffffe","0000001d","00000000","00000000","00000007"],["fffffffe","0000001e","00000000","00000000","00000003"],["fffffffe","0000001f","00000000","00000000","00000001"],["fffffffe","00000020","00000000","00000000","fffffffe","unguarded"],["fffffffe","00000021","00000000","00000000","7fffffff","unguarded"],["fffffffe","00000022","00000000","00000000","3fffffff","unguarded"],["fffffffe","00000023","00000000","00000000","1fffffff","unguarded"],["fffffffe","00000024","00000000","00000000","0fffffff","unguarded"],["fffffffe","00000025","00000000","00000000","07ffffff","unguarded"],["fffffffe","00000026","00000000","00000000","03ffffff","unguarded"],["fffffffe","00000027","00000000","00000000","01ffffff","unguarded"],["fffffffe","00000028","00000000","00000000","00ffffff","unguarded"],["fffffffe","0000003f","00000000","00000000","00000001","unguarded"],["fffffffe","00000040","00000000","00000000","fffffffe","unguarded"],["fffffffe","00000041","00000000","00000000","7fffffff","unguarded"],["fffffffe","00000060","00000000","00000000","fffffffe","unguarded"],["fffffffe","0000007f","00000000","00000000","00000001","unguarded"],["fffffffe","00000080","00000000","00000000","fffffffe","unguarded"],["fffffffe","000000ff","00000000","00000000","00000001","unguarded"],["fffffffe","00000100","00000000","00000000","fffffffe","unguarded"],["fffffffe","7fffffff","00000000","00000000","00000001","unguarded"],["fffffffe","80000000","00000000","00000000","fffffffe","unguarded"],["fffffffe","ffffffe0","00000000","00000000","fffffffe","unguarded"],["fffffffe","ffffffff","00000000","00000000","00000001","unguarded"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","7fffffff"],["ffffffff","00000002","00000000","00000000","3fffffff"],["ffffffff","00000003","00000000","00000000","1fffffff"],["ffffffff","00000004","00000000","00000000","0fffffff"],["ffffffff","00000005","00000000","00000000","07ffffff"],["ffffffff","00000006","00000000","00000000","03ffffff"],["ffffffff","00000007","00000000","00000000","01ffffff"],["ffffffff","00000008","00000000","00000000","00ffffff"],["ffffffff","00000009","00000000","00000000","007fffff"],["ffffffff","0000000a","00000000","00000000","003fffff"],["ffffffff","0000000b","00000000","00000000","001fffff"],["ffffffff","0000000c","00000000","00000000","000fffff"],["ffffffff","0000000d","00000000","00000000","0007ffff"],["ffffffff","0000000e","00000000","00000000","0003ffff"],["ffffffff","0000000f","00000000","00000000","0001ffff"],["ffffffff","00000010","00000000","00000000","0000ffff"],["ffffffff","00000011","00000000","00000000","00007fff"],["ffffffff","00000012","00000000","00000000","00003fff"],["ffffffff","00000013","00000000","00000000","00001fff"],["ffffffff","00000014","00000000","00000000","00000fff"],["ffffffff","00000015","00000000","00000000","000007ff"],["ffffffff","00000016","00000000","00000000","000003ff"],["ffffffff","00000017","00000000","00000000","000001ff"],["ffffffff","00000018","00000000","00000000","000000ff"],["ffffffff","00000019","00000000","00000000","0000007f"],["ffffffff","0000001a","00000000","00000000","0000003f"],["ffffffff","0000001b","00000000","00000000","0000001f"],["ffffffff","0000001c","00000000","00000000","0000000f"],["ffffffff","0000001d","00000000","00000000","00000007"],["ffffffff","0000001e","00000000","00000000","00000003"],["ffffffff","0000001f","00000000","00000000","00000001"],["ffffffff","00000020","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000021","00000000","00000000","7fffffff","unguarded"],["ffffffff","00000022","00000000","00000000","3fffffff","unguarded"],["ffffffff","00000023","00000000","00000000","1fffffff","unguarded"],["ffffffff","00000024","00000000","00000000","0fffffff","unguarded"],["ffffffff","00000025","00000000","00000000","07ffffff","unguarded"],["ffffffff","00000026","00000000","00000000","03ffffff","unguarded"],["ffffffff","00000027","00000000","00000000","01ffffff","unguarded"],["ffffffff","00000028","00000000","00000000","00ffffff","unguarded"],["ffffffff","0000003f","00000000","00000000","00000001","unguarded"],["ffffffff","00000040","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000041","00000000","00000000","7fffffff","unguarded"],["ffffffff","00000060","00000000","00000000","ffffffff","unguarded"],["ffffffff","0000007f","00000000","00000000","00000001","unguarded"],["ffffffff","00000080","00000000","00000000","ffffffff","unguarded"],["ffffffff","000000ff","00000000","00000000","00000001","unguarded"],["ffffffff","00000100","00000000","00000000","ffffffff","unguarded"],["ffffffff","7fffffff","00000000","00000000","00000001","unguarded"],["ffffffff","80000000","00000000","00000000","ffffffff","unguarded"],["ffffffff","ffffffe0","00000000","00000000","ffffffff","unguarded"],["ffffffff","ffffffff","00000000","00000000","00000001","unguarded"]]} +{"op":"shl_i32","code":13,"wgsl":"ia << b","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000002","00000000","00000000","00000000"],["00000000","00000003","00000000","00000000","00000000"],["00000000","00000004","00000000","00000000","00000000"],["00000000","00000005","00000000","00000000","00000000"],["00000000","00000006","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","00000008","00000000","00000000","00000000"],["00000000","00000009","00000000","00000000","00000000"],["00000000","0000000a","00000000","00000000","00000000"],["00000000","0000000b","00000000","00000000","00000000"],["00000000","0000000c","00000000","00000000","00000000"],["00000000","0000000d","00000000","00000000","00000000"],["00000000","0000000e","00000000","00000000","00000000"],["00000000","0000000f","00000000","00000000","00000000"],["00000000","00000010","00000000","00000000","00000000"],["00000000","00000011","00000000","00000000","00000000"],["00000000","00000012","00000000","00000000","00000000"],["00000000","00000013","00000000","00000000","00000000"],["00000000","00000014","00000000","00000000","00000000"],["00000000","00000015","00000000","00000000","00000000"],["00000000","00000016","00000000","00000000","00000000"],["00000000","00000017","00000000","00000000","00000000"],["00000000","00000018","00000000","00000000","00000000"],["00000000","00000019","00000000","00000000","00000000"],["00000000","0000001a","00000000","00000000","00000000"],["00000000","0000001b","00000000","00000000","00000000"],["00000000","0000001c","00000000","00000000","00000000"],["00000000","0000001d","00000000","00000000","00000000"],["00000000","0000001e","00000000","00000000","00000000"],["00000000","0000001f","00000000","00000000","00000000"],["00000000","00000020","00000000","00000000","00000000","unguarded"],["00000000","00000021","00000000","00000000","00000000","unguarded"],["00000000","00000022","00000000","00000000","00000000","unguarded"],["00000000","00000023","00000000","00000000","00000000","unguarded"],["00000000","00000024","00000000","00000000","00000000","unguarded"],["00000000","00000025","00000000","00000000","00000000","unguarded"],["00000000","00000026","00000000","00000000","00000000","unguarded"],["00000000","00000027","00000000","00000000","00000000","unguarded"],["00000000","00000028","00000000","00000000","00000000","unguarded"],["00000000","0000003f","00000000","00000000","00000000","unguarded"],["00000000","00000040","00000000","00000000","00000000","unguarded"],["00000000","00000041","00000000","00000000","00000000","unguarded"],["00000000","00000060","00000000","00000000","00000000","unguarded"],["00000000","0000007f","00000000","00000000","00000000","unguarded"],["00000000","00000080","00000000","00000000","00000000","unguarded"],["00000000","000000ff","00000000","00000000","00000000","unguarded"],["00000000","00000100","00000000","00000000","00000000","unguarded"],["00000000","7fffffff","00000000","00000000","00000000","unguarded"],["00000000","80000000","00000000","00000000","00000000","unguarded"],["00000000","ffffffe0","00000000","00000000","00000000","unguarded"],["00000000","ffffffff","00000000","00000000","00000000","unguarded"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000002"],["00000001","00000002","00000000","00000000","00000004"],["00000001","00000003","00000000","00000000","00000008"],["00000001","00000004","00000000","00000000","00000010"],["00000001","00000005","00000000","00000000","00000020"],["00000001","00000006","00000000","00000000","00000040"],["00000001","00000007","00000000","00000000","00000080"],["00000001","00000008","00000000","00000000","00000100"],["00000001","00000009","00000000","00000000","00000200"],["00000001","0000000a","00000000","00000000","00000400"],["00000001","0000000b","00000000","00000000","00000800"],["00000001","0000000c","00000000","00000000","00001000"],["00000001","0000000d","00000000","00000000","00002000"],["00000001","0000000e","00000000","00000000","00004000"],["00000001","0000000f","00000000","00000000","00008000"],["00000001","00000010","00000000","00000000","00010000"],["00000001","00000011","00000000","00000000","00020000"],["00000001","00000012","00000000","00000000","00040000"],["00000001","00000013","00000000","00000000","00080000"],["00000001","00000014","00000000","00000000","00100000"],["00000001","00000015","00000000","00000000","00200000"],["00000001","00000016","00000000","00000000","00400000"],["00000001","00000017","00000000","00000000","00800000"],["00000001","00000018","00000000","00000000","01000000"],["00000001","00000019","00000000","00000000","02000000"],["00000001","0000001a","00000000","00000000","04000000"],["00000001","0000001b","00000000","00000000","08000000"],["00000001","0000001c","00000000","00000000","10000000"],["00000001","0000001d","00000000","00000000","20000000"],["00000001","0000001e","00000000","00000000","40000000"],["00000001","0000001f","00000000","00000000","80000000"],["00000001","00000020","00000000","00000000","00000001","unguarded"],["00000001","00000021","00000000","00000000","00000002","unguarded"],["00000001","00000022","00000000","00000000","00000004","unguarded"],["00000001","00000023","00000000","00000000","00000008","unguarded"],["00000001","00000024","00000000","00000000","00000010","unguarded"],["00000001","00000025","00000000","00000000","00000020","unguarded"],["00000001","00000026","00000000","00000000","00000040","unguarded"],["00000001","00000027","00000000","00000000","00000080","unguarded"],["00000001","00000028","00000000","00000000","00000100","unguarded"],["00000001","0000003f","00000000","00000000","80000000","unguarded"],["00000001","00000040","00000000","00000000","00000001","unguarded"],["00000001","00000041","00000000","00000000","00000002","unguarded"],["00000001","00000060","00000000","00000000","00000001","unguarded"],["00000001","0000007f","00000000","00000000","80000000","unguarded"],["00000001","00000080","00000000","00000000","00000001","unguarded"],["00000001","000000ff","00000000","00000000","80000000","unguarded"],["00000001","00000100","00000000","00000000","00000001","unguarded"],["00000001","7fffffff","00000000","00000000","80000000","unguarded"],["00000001","80000000","00000000","00000000","00000001","unguarded"],["00000001","ffffffe0","00000000","00000000","00000001","unguarded"],["00000001","ffffffff","00000000","00000000","80000000","unguarded"],["00000002","00000000","00000000","00000000","00000002"],["00000002","00000001","00000000","00000000","00000004"],["00000002","00000002","00000000","00000000","00000008"],["00000002","00000003","00000000","00000000","00000010"],["00000002","00000004","00000000","00000000","00000020"],["00000002","00000005","00000000","00000000","00000040"],["00000002","00000006","00000000","00000000","00000080"],["00000002","00000007","00000000","00000000","00000100"],["00000002","00000008","00000000","00000000","00000200"],["00000002","00000009","00000000","00000000","00000400"],["00000002","0000000a","00000000","00000000","00000800"],["00000002","0000000b","00000000","00000000","00001000"],["00000002","0000000c","00000000","00000000","00002000"],["00000002","0000000d","00000000","00000000","00004000"],["00000002","0000000e","00000000","00000000","00008000"],["00000002","0000000f","00000000","00000000","00010000"],["00000002","00000010","00000000","00000000","00020000"],["00000002","00000011","00000000","00000000","00040000"],["00000002","00000012","00000000","00000000","00080000"],["00000002","00000013","00000000","00000000","00100000"],["00000002","00000014","00000000","00000000","00200000"],["00000002","00000015","00000000","00000000","00400000"],["00000002","00000016","00000000","00000000","00800000"],["00000002","00000017","00000000","00000000","01000000"],["00000002","00000018","00000000","00000000","02000000"],["00000002","00000019","00000000","00000000","04000000"],["00000002","0000001a","00000000","00000000","08000000"],["00000002","0000001b","00000000","00000000","10000000"],["00000002","0000001c","00000000","00000000","20000000"],["00000002","0000001d","00000000","00000000","40000000"],["00000002","0000001e","00000000","00000000","80000000"],["00000002","0000001f","00000000","00000000","00000000"],["00000002","00000020","00000000","00000000","00000002","unguarded"],["00000002","00000021","00000000","00000000","00000004","unguarded"],["00000002","00000022","00000000","00000000","00000008","unguarded"],["00000002","00000023","00000000","00000000","00000010","unguarded"],["00000002","00000024","00000000","00000000","00000020","unguarded"],["00000002","00000025","00000000","00000000","00000040","unguarded"],["00000002","00000026","00000000","00000000","00000080","unguarded"],["00000002","00000027","00000000","00000000","00000100","unguarded"],["00000002","00000028","00000000","00000000","00000200","unguarded"],["00000002","0000003f","00000000","00000000","00000000","unguarded"],["00000002","00000040","00000000","00000000","00000002","unguarded"],["00000002","00000041","00000000","00000000","00000004","unguarded"],["00000002","00000060","00000000","00000000","00000002","unguarded"],["00000002","0000007f","00000000","00000000","00000000","unguarded"],["00000002","00000080","00000000","00000000","00000002","unguarded"],["00000002","000000ff","00000000","00000000","00000000","unguarded"],["00000002","00000100","00000000","00000000","00000002","unguarded"],["00000002","7fffffff","00000000","00000000","00000000","unguarded"],["00000002","80000000","00000000","00000000","00000002","unguarded"],["00000002","ffffffe0","00000000","00000000","00000002","unguarded"],["00000002","ffffffff","00000000","00000000","00000000","unguarded"],["00000003","00000000","00000000","00000000","00000003"],["00000003","00000001","00000000","00000000","00000006"],["00000003","00000002","00000000","00000000","0000000c"],["00000003","00000003","00000000","00000000","00000018"],["00000003","00000004","00000000","00000000","00000030"],["00000003","00000005","00000000","00000000","00000060"],["00000003","00000006","00000000","00000000","000000c0"],["00000003","00000007","00000000","00000000","00000180"],["00000003","00000008","00000000","00000000","00000300"],["00000003","00000009","00000000","00000000","00000600"],["00000003","0000000a","00000000","00000000","00000c00"],["00000003","0000000b","00000000","00000000","00001800"],["00000003","0000000c","00000000","00000000","00003000"],["00000003","0000000d","00000000","00000000","00006000"],["00000003","0000000e","00000000","00000000","0000c000"],["00000003","0000000f","00000000","00000000","00018000"],["00000003","00000010","00000000","00000000","00030000"],["00000003","00000011","00000000","00000000","00060000"],["00000003","00000012","00000000","00000000","000c0000"],["00000003","00000013","00000000","00000000","00180000"],["00000003","00000014","00000000","00000000","00300000"],["00000003","00000015","00000000","00000000","00600000"],["00000003","00000016","00000000","00000000","00c00000"],["00000003","00000017","00000000","00000000","01800000"],["00000003","00000018","00000000","00000000","03000000"],["00000003","00000019","00000000","00000000","06000000"],["00000003","0000001a","00000000","00000000","0c000000"],["00000003","0000001b","00000000","00000000","18000000"],["00000003","0000001c","00000000","00000000","30000000"],["00000003","0000001d","00000000","00000000","60000000"],["00000003","0000001e","00000000","00000000","c0000000"],["00000003","0000001f","00000000","00000000","80000000"],["00000003","00000020","00000000","00000000","00000003","unguarded"],["00000003","00000021","00000000","00000000","00000006","unguarded"],["00000003","00000022","00000000","00000000","0000000c","unguarded"],["00000003","00000023","00000000","00000000","00000018","unguarded"],["00000003","00000024","00000000","00000000","00000030","unguarded"],["00000003","00000025","00000000","00000000","00000060","unguarded"],["00000003","00000026","00000000","00000000","000000c0","unguarded"],["00000003","00000027","00000000","00000000","00000180","unguarded"],["00000003","00000028","00000000","00000000","00000300","unguarded"],["00000003","0000003f","00000000","00000000","80000000","unguarded"],["00000003","00000040","00000000","00000000","00000003","unguarded"],["00000003","00000041","00000000","00000000","00000006","unguarded"],["00000003","00000060","00000000","00000000","00000003","unguarded"],["00000003","0000007f","00000000","00000000","80000000","unguarded"],["00000003","00000080","00000000","00000000","00000003","unguarded"],["00000003","000000ff","00000000","00000000","80000000","unguarded"],["00000003","00000100","00000000","00000000","00000003","unguarded"],["00000003","7fffffff","00000000","00000000","80000000","unguarded"],["00000003","80000000","00000000","00000000","00000003","unguarded"],["00000003","ffffffe0","00000000","00000000","00000003","unguarded"],["00000003","ffffffff","00000000","00000000","80000000","unguarded"],["00000005","00000000","00000000","00000000","00000005"],["00000005","00000001","00000000","00000000","0000000a"],["00000005","00000002","00000000","00000000","00000014"],["00000005","00000003","00000000","00000000","00000028"],["00000005","00000004","00000000","00000000","00000050"],["00000005","00000005","00000000","00000000","000000a0"],["00000005","00000006","00000000","00000000","00000140"],["00000005","00000007","00000000","00000000","00000280"],["00000005","00000008","00000000","00000000","00000500"],["00000005","00000009","00000000","00000000","00000a00"],["00000005","0000000a","00000000","00000000","00001400"],["00000005","0000000b","00000000","00000000","00002800"],["00000005","0000000c","00000000","00000000","00005000"],["00000005","0000000d","00000000","00000000","0000a000"],["00000005","0000000e","00000000","00000000","00014000"],["00000005","0000000f","00000000","00000000","00028000"],["00000005","00000010","00000000","00000000","00050000"],["00000005","00000011","00000000","00000000","000a0000"],["00000005","00000012","00000000","00000000","00140000"],["00000005","00000013","00000000","00000000","00280000"],["00000005","00000014","00000000","00000000","00500000"],["00000005","00000015","00000000","00000000","00a00000"],["00000005","00000016","00000000","00000000","01400000"],["00000005","00000017","00000000","00000000","02800000"],["00000005","00000018","00000000","00000000","05000000"],["00000005","00000019","00000000","00000000","0a000000"],["00000005","0000001a","00000000","00000000","14000000"],["00000005","0000001b","00000000","00000000","28000000"],["00000005","0000001c","00000000","00000000","50000000"],["00000005","0000001d","00000000","00000000","a0000000"],["00000005","0000001e","00000000","00000000","40000000"],["00000005","0000001f","00000000","00000000","80000000"],["00000005","00000020","00000000","00000000","00000005","unguarded"],["00000005","00000021","00000000","00000000","0000000a","unguarded"],["00000005","00000022","00000000","00000000","00000014","unguarded"],["00000005","00000023","00000000","00000000","00000028","unguarded"],["00000005","00000024","00000000","00000000","00000050","unguarded"],["00000005","00000025","00000000","00000000","000000a0","unguarded"],["00000005","00000026","00000000","00000000","00000140","unguarded"],["00000005","00000027","00000000","00000000","00000280","unguarded"],["00000005","00000028","00000000","00000000","00000500","unguarded"],["00000005","0000003f","00000000","00000000","80000000","unguarded"],["00000005","00000040","00000000","00000000","00000005","unguarded"],["00000005","00000041","00000000","00000000","0000000a","unguarded"],["00000005","00000060","00000000","00000000","00000005","unguarded"],["00000005","0000007f","00000000","00000000","80000000","unguarded"],["00000005","00000080","00000000","00000000","00000005","unguarded"],["00000005","000000ff","00000000","00000000","80000000","unguarded"],["00000005","00000100","00000000","00000000","00000005","unguarded"],["00000005","7fffffff","00000000","00000000","80000000","unguarded"],["00000005","80000000","00000000","00000000","00000005","unguarded"],["00000005","ffffffe0","00000000","00000000","00000005","unguarded"],["00000005","ffffffff","00000000","00000000","80000000","unguarded"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","0000000e"],["00000007","00000002","00000000","00000000","0000001c"],["00000007","00000003","00000000","00000000","00000038"],["00000007","00000004","00000000","00000000","00000070"],["00000007","00000005","00000000","00000000","000000e0"],["00000007","00000006","00000000","00000000","000001c0"],["00000007","00000007","00000000","00000000","00000380"],["00000007","00000008","00000000","00000000","00000700"],["00000007","00000009","00000000","00000000","00000e00"],["00000007","0000000a","00000000","00000000","00001c00"],["00000007","0000000b","00000000","00000000","00003800"],["00000007","0000000c","00000000","00000000","00007000"],["00000007","0000000d","00000000","00000000","0000e000"],["00000007","0000000e","00000000","00000000","0001c000"],["00000007","0000000f","00000000","00000000","00038000"],["00000007","00000010","00000000","00000000","00070000"],["00000007","00000011","00000000","00000000","000e0000"],["00000007","00000012","00000000","00000000","001c0000"],["00000007","00000013","00000000","00000000","00380000"],["00000007","00000014","00000000","00000000","00700000"],["00000007","00000015","00000000","00000000","00e00000"],["00000007","00000016","00000000","00000000","01c00000"],["00000007","00000017","00000000","00000000","03800000"],["00000007","00000018","00000000","00000000","07000000"],["00000007","00000019","00000000","00000000","0e000000"],["00000007","0000001a","00000000","00000000","1c000000"],["00000007","0000001b","00000000","00000000","38000000"],["00000007","0000001c","00000000","00000000","70000000"],["00000007","0000001d","00000000","00000000","e0000000"],["00000007","0000001e","00000000","00000000","c0000000"],["00000007","0000001f","00000000","00000000","80000000"],["00000007","00000020","00000000","00000000","00000007","unguarded"],["00000007","00000021","00000000","00000000","0000000e","unguarded"],["00000007","00000022","00000000","00000000","0000001c","unguarded"],["00000007","00000023","00000000","00000000","00000038","unguarded"],["00000007","00000024","00000000","00000000","00000070","unguarded"],["00000007","00000025","00000000","00000000","000000e0","unguarded"],["00000007","00000026","00000000","00000000","000001c0","unguarded"],["00000007","00000027","00000000","00000000","00000380","unguarded"],["00000007","00000028","00000000","00000000","00000700","unguarded"],["00000007","0000003f","00000000","00000000","80000000","unguarded"],["00000007","00000040","00000000","00000000","00000007","unguarded"],["00000007","00000041","00000000","00000000","0000000e","unguarded"],["00000007","00000060","00000000","00000000","00000007","unguarded"],["00000007","0000007f","00000000","00000000","80000000","unguarded"],["00000007","00000080","00000000","00000000","00000007","unguarded"],["00000007","000000ff","00000000","00000000","80000000","unguarded"],["00000007","00000100","00000000","00000000","00000007","unguarded"],["00000007","7fffffff","00000000","00000000","80000000","unguarded"],["00000007","80000000","00000000","00000000","00000007","unguarded"],["00000007","ffffffe0","00000000","00000000","00000007","unguarded"],["00000007","ffffffff","00000000","00000000","80000000","unguarded"],["0000001f","00000000","00000000","00000000","0000001f"],["0000001f","00000001","00000000","00000000","0000003e"],["0000001f","00000002","00000000","00000000","0000007c"],["0000001f","00000003","00000000","00000000","000000f8"],["0000001f","00000004","00000000","00000000","000001f0"],["0000001f","00000005","00000000","00000000","000003e0"],["0000001f","00000006","00000000","00000000","000007c0"],["0000001f","00000007","00000000","00000000","00000f80"],["0000001f","00000008","00000000","00000000","00001f00"],["0000001f","00000009","00000000","00000000","00003e00"],["0000001f","0000000a","00000000","00000000","00007c00"],["0000001f","0000000b","00000000","00000000","0000f800"],["0000001f","0000000c","00000000","00000000","0001f000"],["0000001f","0000000d","00000000","00000000","0003e000"],["0000001f","0000000e","00000000","00000000","0007c000"],["0000001f","0000000f","00000000","00000000","000f8000"],["0000001f","00000010","00000000","00000000","001f0000"],["0000001f","00000011","00000000","00000000","003e0000"],["0000001f","00000012","00000000","00000000","007c0000"],["0000001f","00000013","00000000","00000000","00f80000"],["0000001f","00000014","00000000","00000000","01f00000"],["0000001f","00000015","00000000","00000000","03e00000"],["0000001f","00000016","00000000","00000000","07c00000"],["0000001f","00000017","00000000","00000000","0f800000"],["0000001f","00000018","00000000","00000000","1f000000"],["0000001f","00000019","00000000","00000000","3e000000"],["0000001f","0000001a","00000000","00000000","7c000000"],["0000001f","0000001b","00000000","00000000","f8000000"],["0000001f","0000001c","00000000","00000000","f0000000"],["0000001f","0000001d","00000000","00000000","e0000000"],["0000001f","0000001e","00000000","00000000","c0000000"],["0000001f","0000001f","00000000","00000000","80000000"],["0000001f","00000020","00000000","00000000","0000001f","unguarded"],["0000001f","00000021","00000000","00000000","0000003e","unguarded"],["0000001f","00000022","00000000","00000000","0000007c","unguarded"],["0000001f","00000023","00000000","00000000","000000f8","unguarded"],["0000001f","00000024","00000000","00000000","000001f0","unguarded"],["0000001f","00000025","00000000","00000000","000003e0","unguarded"],["0000001f","00000026","00000000","00000000","000007c0","unguarded"],["0000001f","00000027","00000000","00000000","00000f80","unguarded"],["0000001f","00000028","00000000","00000000","00001f00","unguarded"],["0000001f","0000003f","00000000","00000000","80000000","unguarded"],["0000001f","00000040","00000000","00000000","0000001f","unguarded"],["0000001f","00000041","00000000","00000000","0000003e","unguarded"],["0000001f","00000060","00000000","00000000","0000001f","unguarded"],["0000001f","0000007f","00000000","00000000","80000000","unguarded"],["0000001f","00000080","00000000","00000000","0000001f","unguarded"],["0000001f","000000ff","00000000","00000000","80000000","unguarded"],["0000001f","00000100","00000000","00000000","0000001f","unguarded"],["0000001f","7fffffff","00000000","00000000","80000000","unguarded"],["0000001f","80000000","00000000","00000000","0000001f","unguarded"],["0000001f","ffffffe0","00000000","00000000","0000001f","unguarded"],["0000001f","ffffffff","00000000","00000000","80000000","unguarded"],["00000020","00000000","00000000","00000000","00000020"],["00000020","00000001","00000000","00000000","00000040"],["00000020","00000002","00000000","00000000","00000080"],["00000020","00000003","00000000","00000000","00000100"],["00000020","00000004","00000000","00000000","00000200"],["00000020","00000005","00000000","00000000","00000400"],["00000020","00000006","00000000","00000000","00000800"],["00000020","00000007","00000000","00000000","00001000"],["00000020","00000008","00000000","00000000","00002000"],["00000020","00000009","00000000","00000000","00004000"],["00000020","0000000a","00000000","00000000","00008000"],["00000020","0000000b","00000000","00000000","00010000"],["00000020","0000000c","00000000","00000000","00020000"],["00000020","0000000d","00000000","00000000","00040000"],["00000020","0000000e","00000000","00000000","00080000"],["00000020","0000000f","00000000","00000000","00100000"],["00000020","00000010","00000000","00000000","00200000"],["00000020","00000011","00000000","00000000","00400000"],["00000020","00000012","00000000","00000000","00800000"],["00000020","00000013","00000000","00000000","01000000"],["00000020","00000014","00000000","00000000","02000000"],["00000020","00000015","00000000","00000000","04000000"],["00000020","00000016","00000000","00000000","08000000"],["00000020","00000017","00000000","00000000","10000000"],["00000020","00000018","00000000","00000000","20000000"],["00000020","00000019","00000000","00000000","40000000"],["00000020","0000001a","00000000","00000000","80000000"],["00000020","0000001b","00000000","00000000","00000000"],["00000020","0000001c","00000000","00000000","00000000"],["00000020","0000001d","00000000","00000000","00000000"],["00000020","0000001e","00000000","00000000","00000000"],["00000020","0000001f","00000000","00000000","00000000"],["00000020","00000020","00000000","00000000","00000020","unguarded"],["00000020","00000021","00000000","00000000","00000040","unguarded"],["00000020","00000022","00000000","00000000","00000080","unguarded"],["00000020","00000023","00000000","00000000","00000100","unguarded"],["00000020","00000024","00000000","00000000","00000200","unguarded"],["00000020","00000025","00000000","00000000","00000400","unguarded"],["00000020","00000026","00000000","00000000","00000800","unguarded"],["00000020","00000027","00000000","00000000","00001000","unguarded"],["00000020","00000028","00000000","00000000","00002000","unguarded"],["00000020","0000003f","00000000","00000000","00000000","unguarded"],["00000020","00000040","00000000","00000000","00000020","unguarded"],["00000020","00000041","00000000","00000000","00000040","unguarded"],["00000020","00000060","00000000","00000000","00000020","unguarded"],["00000020","0000007f","00000000","00000000","00000000","unguarded"],["00000020","00000080","00000000","00000000","00000020","unguarded"],["00000020","000000ff","00000000","00000000","00000000","unguarded"],["00000020","00000100","00000000","00000000","00000020","unguarded"],["00000020","7fffffff","00000000","00000000","00000000","unguarded"],["00000020","80000000","00000000","00000000","00000020","unguarded"],["00000020","ffffffe0","00000000","00000000","00000020","unguarded"],["00000020","ffffffff","00000000","00000000","00000000","unguarded"],["00000021","00000000","00000000","00000000","00000021"],["00000021","00000001","00000000","00000000","00000042"],["00000021","00000002","00000000","00000000","00000084"],["00000021","00000003","00000000","00000000","00000108"],["00000021","00000004","00000000","00000000","00000210"],["00000021","00000005","00000000","00000000","00000420"],["00000021","00000006","00000000","00000000","00000840"],["00000021","00000007","00000000","00000000","00001080"],["00000021","00000008","00000000","00000000","00002100"],["00000021","00000009","00000000","00000000","00004200"],["00000021","0000000a","00000000","00000000","00008400"],["00000021","0000000b","00000000","00000000","00010800"],["00000021","0000000c","00000000","00000000","00021000"],["00000021","0000000d","00000000","00000000","00042000"],["00000021","0000000e","00000000","00000000","00084000"],["00000021","0000000f","00000000","00000000","00108000"],["00000021","00000010","00000000","00000000","00210000"],["00000021","00000011","00000000","00000000","00420000"],["00000021","00000012","00000000","00000000","00840000"],["00000021","00000013","00000000","00000000","01080000"],["00000021","00000014","00000000","00000000","02100000"],["00000021","00000015","00000000","00000000","04200000"],["00000021","00000016","00000000","00000000","08400000"],["00000021","00000017","00000000","00000000","10800000"],["00000021","00000018","00000000","00000000","21000000"],["00000021","00000019","00000000","00000000","42000000"],["00000021","0000001a","00000000","00000000","84000000"],["00000021","0000001b","00000000","00000000","08000000"],["00000021","0000001c","00000000","00000000","10000000"],["00000021","0000001d","00000000","00000000","20000000"],["00000021","0000001e","00000000","00000000","40000000"],["00000021","0000001f","00000000","00000000","80000000"],["00000021","00000020","00000000","00000000","00000021","unguarded"],["00000021","00000021","00000000","00000000","00000042","unguarded"],["00000021","00000022","00000000","00000000","00000084","unguarded"],["00000021","00000023","00000000","00000000","00000108","unguarded"],["00000021","00000024","00000000","00000000","00000210","unguarded"],["00000021","00000025","00000000","00000000","00000420","unguarded"],["00000021","00000026","00000000","00000000","00000840","unguarded"],["00000021","00000027","00000000","00000000","00001080","unguarded"],["00000021","00000028","00000000","00000000","00002100","unguarded"],["00000021","0000003f","00000000","00000000","80000000","unguarded"],["00000021","00000040","00000000","00000000","00000021","unguarded"],["00000021","00000041","00000000","00000000","00000042","unguarded"],["00000021","00000060","00000000","00000000","00000021","unguarded"],["00000021","0000007f","00000000","00000000","80000000","unguarded"],["00000021","00000080","00000000","00000000","00000021","unguarded"],["00000021","000000ff","00000000","00000000","80000000","unguarded"],["00000021","00000100","00000000","00000000","00000021","unguarded"],["00000021","7fffffff","00000000","00000000","80000000","unguarded"],["00000021","80000000","00000000","00000000","00000021","unguarded"],["00000021","ffffffe0","00000000","00000000","00000021","unguarded"],["00000021","ffffffff","00000000","00000000","80000000","unguarded"],["0000003f","00000000","00000000","00000000","0000003f"],["0000003f","00000001","00000000","00000000","0000007e"],["0000003f","00000002","00000000","00000000","000000fc"],["0000003f","00000003","00000000","00000000","000001f8"],["0000003f","00000004","00000000","00000000","000003f0"],["0000003f","00000005","00000000","00000000","000007e0"],["0000003f","00000006","00000000","00000000","00000fc0"],["0000003f","00000007","00000000","00000000","00001f80"],["0000003f","00000008","00000000","00000000","00003f00"],["0000003f","00000009","00000000","00000000","00007e00"],["0000003f","0000000a","00000000","00000000","0000fc00"],["0000003f","0000000b","00000000","00000000","0001f800"],["0000003f","0000000c","00000000","00000000","0003f000"],["0000003f","0000000d","00000000","00000000","0007e000"],["0000003f","0000000e","00000000","00000000","000fc000"],["0000003f","0000000f","00000000","00000000","001f8000"],["0000003f","00000010","00000000","00000000","003f0000"],["0000003f","00000011","00000000","00000000","007e0000"],["0000003f","00000012","00000000","00000000","00fc0000"],["0000003f","00000013","00000000","00000000","01f80000"],["0000003f","00000014","00000000","00000000","03f00000"],["0000003f","00000015","00000000","00000000","07e00000"],["0000003f","00000016","00000000","00000000","0fc00000"],["0000003f","00000017","00000000","00000000","1f800000"],["0000003f","00000018","00000000","00000000","3f000000"],["0000003f","00000019","00000000","00000000","7e000000"],["0000003f","0000001a","00000000","00000000","fc000000"],["0000003f","0000001b","00000000","00000000","f8000000"],["0000003f","0000001c","00000000","00000000","f0000000"],["0000003f","0000001d","00000000","00000000","e0000000"],["0000003f","0000001e","00000000","00000000","c0000000"],["0000003f","0000001f","00000000","00000000","80000000"],["0000003f","00000020","00000000","00000000","0000003f","unguarded"],["0000003f","00000021","00000000","00000000","0000007e","unguarded"],["0000003f","00000022","00000000","00000000","000000fc","unguarded"],["0000003f","00000023","00000000","00000000","000001f8","unguarded"],["0000003f","00000024","00000000","00000000","000003f0","unguarded"],["0000003f","00000025","00000000","00000000","000007e0","unguarded"],["0000003f","00000026","00000000","00000000","00000fc0","unguarded"],["0000003f","00000027","00000000","00000000","00001f80","unguarded"],["0000003f","00000028","00000000","00000000","00003f00","unguarded"],["0000003f","0000003f","00000000","00000000","80000000","unguarded"],["0000003f","00000040","00000000","00000000","0000003f","unguarded"],["0000003f","00000041","00000000","00000000","0000007e","unguarded"],["0000003f","00000060","00000000","00000000","0000003f","unguarded"],["0000003f","0000007f","00000000","00000000","80000000","unguarded"],["0000003f","00000080","00000000","00000000","0000003f","unguarded"],["0000003f","000000ff","00000000","00000000","80000000","unguarded"],["0000003f","00000100","00000000","00000000","0000003f","unguarded"],["0000003f","7fffffff","00000000","00000000","80000000","unguarded"],["0000003f","80000000","00000000","00000000","0000003f","unguarded"],["0000003f","ffffffe0","00000000","00000000","0000003f","unguarded"],["0000003f","ffffffff","00000000","00000000","80000000","unguarded"],["00000040","00000000","00000000","00000000","00000040"],["00000040","00000001","00000000","00000000","00000080"],["00000040","00000002","00000000","00000000","00000100"],["00000040","00000003","00000000","00000000","00000200"],["00000040","00000004","00000000","00000000","00000400"],["00000040","00000005","00000000","00000000","00000800"],["00000040","00000006","00000000","00000000","00001000"],["00000040","00000007","00000000","00000000","00002000"],["00000040","00000008","00000000","00000000","00004000"],["00000040","00000009","00000000","00000000","00008000"],["00000040","0000000a","00000000","00000000","00010000"],["00000040","0000000b","00000000","00000000","00020000"],["00000040","0000000c","00000000","00000000","00040000"],["00000040","0000000d","00000000","00000000","00080000"],["00000040","0000000e","00000000","00000000","00100000"],["00000040","0000000f","00000000","00000000","00200000"],["00000040","00000010","00000000","00000000","00400000"],["00000040","00000011","00000000","00000000","00800000"],["00000040","00000012","00000000","00000000","01000000"],["00000040","00000013","00000000","00000000","02000000"],["00000040","00000014","00000000","00000000","04000000"],["00000040","00000015","00000000","00000000","08000000"],["00000040","00000016","00000000","00000000","10000000"],["00000040","00000017","00000000","00000000","20000000"],["00000040","00000018","00000000","00000000","40000000"],["00000040","00000019","00000000","00000000","80000000"],["00000040","0000001a","00000000","00000000","00000000"],["00000040","0000001b","00000000","00000000","00000000"],["00000040","0000001c","00000000","00000000","00000000"],["00000040","0000001d","00000000","00000000","00000000"],["00000040","0000001e","00000000","00000000","00000000"],["00000040","0000001f","00000000","00000000","00000000"],["00000040","00000020","00000000","00000000","00000040","unguarded"],["00000040","00000021","00000000","00000000","00000080","unguarded"],["00000040","00000022","00000000","00000000","00000100","unguarded"],["00000040","00000023","00000000","00000000","00000200","unguarded"],["00000040","00000024","00000000","00000000","00000400","unguarded"],["00000040","00000025","00000000","00000000","00000800","unguarded"],["00000040","00000026","00000000","00000000","00001000","unguarded"],["00000040","00000027","00000000","00000000","00002000","unguarded"],["00000040","00000028","00000000","00000000","00004000","unguarded"],["00000040","0000003f","00000000","00000000","00000000","unguarded"],["00000040","00000040","00000000","00000000","00000040","unguarded"],["00000040","00000041","00000000","00000000","00000080","unguarded"],["00000040","00000060","00000000","00000000","00000040","unguarded"],["00000040","0000007f","00000000","00000000","00000000","unguarded"],["00000040","00000080","00000000","00000000","00000040","unguarded"],["00000040","000000ff","00000000","00000000","00000000","unguarded"],["00000040","00000100","00000000","00000000","00000040","unguarded"],["00000040","7fffffff","00000000","00000000","00000000","unguarded"],["00000040","80000000","00000000","00000000","00000040","unguarded"],["00000040","ffffffe0","00000000","00000000","00000040","unguarded"],["00000040","ffffffff","00000000","00000000","00000000","unguarded"],["000000ff","00000000","00000000","00000000","000000ff"],["000000ff","00000001","00000000","00000000","000001fe"],["000000ff","00000002","00000000","00000000","000003fc"],["000000ff","00000003","00000000","00000000","000007f8"],["000000ff","00000004","00000000","00000000","00000ff0"],["000000ff","00000005","00000000","00000000","00001fe0"],["000000ff","00000006","00000000","00000000","00003fc0"],["000000ff","00000007","00000000","00000000","00007f80"],["000000ff","00000008","00000000","00000000","0000ff00"],["000000ff","00000009","00000000","00000000","0001fe00"],["000000ff","0000000a","00000000","00000000","0003fc00"],["000000ff","0000000b","00000000","00000000","0007f800"],["000000ff","0000000c","00000000","00000000","000ff000"],["000000ff","0000000d","00000000","00000000","001fe000"],["000000ff","0000000e","00000000","00000000","003fc000"],["000000ff","0000000f","00000000","00000000","007f8000"],["000000ff","00000010","00000000","00000000","00ff0000"],["000000ff","00000011","00000000","00000000","01fe0000"],["000000ff","00000012","00000000","00000000","03fc0000"],["000000ff","00000013","00000000","00000000","07f80000"],["000000ff","00000014","00000000","00000000","0ff00000"],["000000ff","00000015","00000000","00000000","1fe00000"],["000000ff","00000016","00000000","00000000","3fc00000"],["000000ff","00000017","00000000","00000000","7f800000"],["000000ff","00000018","00000000","00000000","ff000000"],["000000ff","00000019","00000000","00000000","fe000000"],["000000ff","0000001a","00000000","00000000","fc000000"],["000000ff","0000001b","00000000","00000000","f8000000"],["000000ff","0000001c","00000000","00000000","f0000000"],["000000ff","0000001d","00000000","00000000","e0000000"],["000000ff","0000001e","00000000","00000000","c0000000"],["000000ff","0000001f","00000000","00000000","80000000"],["000000ff","00000020","00000000","00000000","000000ff","unguarded"],["000000ff","00000021","00000000","00000000","000001fe","unguarded"],["000000ff","00000022","00000000","00000000","000003fc","unguarded"],["000000ff","00000023","00000000","00000000","000007f8","unguarded"],["000000ff","00000024","00000000","00000000","00000ff0","unguarded"],["000000ff","00000025","00000000","00000000","00001fe0","unguarded"],["000000ff","00000026","00000000","00000000","00003fc0","unguarded"],["000000ff","00000027","00000000","00000000","00007f80","unguarded"],["000000ff","00000028","00000000","00000000","0000ff00","unguarded"],["000000ff","0000003f","00000000","00000000","80000000","unguarded"],["000000ff","00000040","00000000","00000000","000000ff","unguarded"],["000000ff","00000041","00000000","00000000","000001fe","unguarded"],["000000ff","00000060","00000000","00000000","000000ff","unguarded"],["000000ff","0000007f","00000000","00000000","80000000","unguarded"],["000000ff","00000080","00000000","00000000","000000ff","unguarded"],["000000ff","000000ff","00000000","00000000","80000000","unguarded"],["000000ff","00000100","00000000","00000000","000000ff","unguarded"],["000000ff","7fffffff","00000000","00000000","80000000","unguarded"],["000000ff","80000000","00000000","00000000","000000ff","unguarded"],["000000ff","ffffffe0","00000000","00000000","000000ff","unguarded"],["000000ff","ffffffff","00000000","00000000","80000000","unguarded"],["00007fff","00000000","00000000","00000000","00007fff"],["00007fff","00000001","00000000","00000000","0000fffe"],["00007fff","00000002","00000000","00000000","0001fffc"],["00007fff","00000003","00000000","00000000","0003fff8"],["00007fff","00000004","00000000","00000000","0007fff0"],["00007fff","00000005","00000000","00000000","000fffe0"],["00007fff","00000006","00000000","00000000","001fffc0"],["00007fff","00000007","00000000","00000000","003fff80"],["00007fff","00000008","00000000","00000000","007fff00"],["00007fff","00000009","00000000","00000000","00fffe00"],["00007fff","0000000a","00000000","00000000","01fffc00"],["00007fff","0000000b","00000000","00000000","03fff800"],["00007fff","0000000c","00000000","00000000","07fff000"],["00007fff","0000000d","00000000","00000000","0fffe000"],["00007fff","0000000e","00000000","00000000","1fffc000"],["00007fff","0000000f","00000000","00000000","3fff8000"],["00007fff","00000010","00000000","00000000","7fff0000"],["00007fff","00000011","00000000","00000000","fffe0000"],["00007fff","00000012","00000000","00000000","fffc0000"],["00007fff","00000013","00000000","00000000","fff80000"],["00007fff","00000014","00000000","00000000","fff00000"],["00007fff","00000015","00000000","00000000","ffe00000"],["00007fff","00000016","00000000","00000000","ffc00000"],["00007fff","00000017","00000000","00000000","ff800000"],["00007fff","00000018","00000000","00000000","ff000000"],["00007fff","00000019","00000000","00000000","fe000000"],["00007fff","0000001a","00000000","00000000","fc000000"],["00007fff","0000001b","00000000","00000000","f8000000"],["00007fff","0000001c","00000000","00000000","f0000000"],["00007fff","0000001d","00000000","00000000","e0000000"],["00007fff","0000001e","00000000","00000000","c0000000"],["00007fff","0000001f","00000000","00000000","80000000"],["00007fff","00000020","00000000","00000000","00007fff","unguarded"],["00007fff","00000021","00000000","00000000","0000fffe","unguarded"],["00007fff","00000022","00000000","00000000","0001fffc","unguarded"],["00007fff","00000023","00000000","00000000","0003fff8","unguarded"],["00007fff","00000024","00000000","00000000","0007fff0","unguarded"],["00007fff","00000025","00000000","00000000","000fffe0","unguarded"],["00007fff","00000026","00000000","00000000","001fffc0","unguarded"],["00007fff","00000027","00000000","00000000","003fff80","unguarded"],["00007fff","00000028","00000000","00000000","007fff00","unguarded"],["00007fff","0000003f","00000000","00000000","80000000","unguarded"],["00007fff","00000040","00000000","00000000","00007fff","unguarded"],["00007fff","00000041","00000000","00000000","0000fffe","unguarded"],["00007fff","00000060","00000000","00000000","00007fff","unguarded"],["00007fff","0000007f","00000000","00000000","80000000","unguarded"],["00007fff","00000080","00000000","00000000","00007fff","unguarded"],["00007fff","000000ff","00000000","00000000","80000000","unguarded"],["00007fff","00000100","00000000","00000000","00007fff","unguarded"],["00007fff","7fffffff","00000000","00000000","80000000","unguarded"],["00007fff","80000000","00000000","00000000","00007fff","unguarded"],["00007fff","ffffffe0","00000000","00000000","00007fff","unguarded"],["00007fff","ffffffff","00000000","00000000","80000000","unguarded"],["00008000","00000000","00000000","00000000","00008000"],["00008000","00000001","00000000","00000000","00010000"],["00008000","00000002","00000000","00000000","00020000"],["00008000","00000003","00000000","00000000","00040000"],["00008000","00000004","00000000","00000000","00080000"],["00008000","00000005","00000000","00000000","00100000"],["00008000","00000006","00000000","00000000","00200000"],["00008000","00000007","00000000","00000000","00400000"],["00008000","00000008","00000000","00000000","00800000"],["00008000","00000009","00000000","00000000","01000000"],["00008000","0000000a","00000000","00000000","02000000"],["00008000","0000000b","00000000","00000000","04000000"],["00008000","0000000c","00000000","00000000","08000000"],["00008000","0000000d","00000000","00000000","10000000"],["00008000","0000000e","00000000","00000000","20000000"],["00008000","0000000f","00000000","00000000","40000000"],["00008000","00000010","00000000","00000000","80000000"],["00008000","00000011","00000000","00000000","00000000"],["00008000","00000012","00000000","00000000","00000000"],["00008000","00000013","00000000","00000000","00000000"],["00008000","00000014","00000000","00000000","00000000"],["00008000","00000015","00000000","00000000","00000000"],["00008000","00000016","00000000","00000000","00000000"],["00008000","00000017","00000000","00000000","00000000"],["00008000","00000018","00000000","00000000","00000000"],["00008000","00000019","00000000","00000000","00000000"],["00008000","0000001a","00000000","00000000","00000000"],["00008000","0000001b","00000000","00000000","00000000"],["00008000","0000001c","00000000","00000000","00000000"],["00008000","0000001d","00000000","00000000","00000000"],["00008000","0000001e","00000000","00000000","00000000"],["00008000","0000001f","00000000","00000000","00000000"],["00008000","00000020","00000000","00000000","00008000","unguarded"],["00008000","00000021","00000000","00000000","00010000","unguarded"],["00008000","00000022","00000000","00000000","00020000","unguarded"],["00008000","00000023","00000000","00000000","00040000","unguarded"],["00008000","00000024","00000000","00000000","00080000","unguarded"],["00008000","00000025","00000000","00000000","00100000","unguarded"],["00008000","00000026","00000000","00000000","00200000","unguarded"],["00008000","00000027","00000000","00000000","00400000","unguarded"],["00008000","00000028","00000000","00000000","00800000","unguarded"],["00008000","0000003f","00000000","00000000","00000000","unguarded"],["00008000","00000040","00000000","00000000","00008000","unguarded"],["00008000","00000041","00000000","00000000","00010000","unguarded"],["00008000","00000060","00000000","00000000","00008000","unguarded"],["00008000","0000007f","00000000","00000000","00000000","unguarded"],["00008000","00000080","00000000","00000000","00008000","unguarded"],["00008000","000000ff","00000000","00000000","00000000","unguarded"],["00008000","00000100","00000000","00000000","00008000","unguarded"],["00008000","7fffffff","00000000","00000000","00000000","unguarded"],["00008000","80000000","00000000","00000000","00008000","unguarded"],["00008000","ffffffe0","00000000","00000000","00008000","unguarded"],["00008000","ffffffff","00000000","00000000","00000000","unguarded"],["0000ffff","00000000","00000000","00000000","0000ffff"],["0000ffff","00000001","00000000","00000000","0001fffe"],["0000ffff","00000002","00000000","00000000","0003fffc"],["0000ffff","00000003","00000000","00000000","0007fff8"],["0000ffff","00000004","00000000","00000000","000ffff0"],["0000ffff","00000005","00000000","00000000","001fffe0"],["0000ffff","00000006","00000000","00000000","003fffc0"],["0000ffff","00000007","00000000","00000000","007fff80"],["0000ffff","00000008","00000000","00000000","00ffff00"],["0000ffff","00000009","00000000","00000000","01fffe00"],["0000ffff","0000000a","00000000","00000000","03fffc00"],["0000ffff","0000000b","00000000","00000000","07fff800"],["0000ffff","0000000c","00000000","00000000","0ffff000"],["0000ffff","0000000d","00000000","00000000","1fffe000"],["0000ffff","0000000e","00000000","00000000","3fffc000"],["0000ffff","0000000f","00000000","00000000","7fff8000"],["0000ffff","00000010","00000000","00000000","ffff0000"],["0000ffff","00000011","00000000","00000000","fffe0000"],["0000ffff","00000012","00000000","00000000","fffc0000"],["0000ffff","00000013","00000000","00000000","fff80000"],["0000ffff","00000014","00000000","00000000","fff00000"],["0000ffff","00000015","00000000","00000000","ffe00000"],["0000ffff","00000016","00000000","00000000","ffc00000"],["0000ffff","00000017","00000000","00000000","ff800000"],["0000ffff","00000018","00000000","00000000","ff000000"],["0000ffff","00000019","00000000","00000000","fe000000"],["0000ffff","0000001a","00000000","00000000","fc000000"],["0000ffff","0000001b","00000000","00000000","f8000000"],["0000ffff","0000001c","00000000","00000000","f0000000"],["0000ffff","0000001d","00000000","00000000","e0000000"],["0000ffff","0000001e","00000000","00000000","c0000000"],["0000ffff","0000001f","00000000","00000000","80000000"],["0000ffff","00000020","00000000","00000000","0000ffff","unguarded"],["0000ffff","00000021","00000000","00000000","0001fffe","unguarded"],["0000ffff","00000022","00000000","00000000","0003fffc","unguarded"],["0000ffff","00000023","00000000","00000000","0007fff8","unguarded"],["0000ffff","00000024","00000000","00000000","000ffff0","unguarded"],["0000ffff","00000025","00000000","00000000","001fffe0","unguarded"],["0000ffff","00000026","00000000","00000000","003fffc0","unguarded"],["0000ffff","00000027","00000000","00000000","007fff80","unguarded"],["0000ffff","00000028","00000000","00000000","00ffff00","unguarded"],["0000ffff","0000003f","00000000","00000000","80000000","unguarded"],["0000ffff","00000040","00000000","00000000","0000ffff","unguarded"],["0000ffff","00000041","00000000","00000000","0001fffe","unguarded"],["0000ffff","00000060","00000000","00000000","0000ffff","unguarded"],["0000ffff","0000007f","00000000","00000000","80000000","unguarded"],["0000ffff","00000080","00000000","00000000","0000ffff","unguarded"],["0000ffff","000000ff","00000000","00000000","80000000","unguarded"],["0000ffff","00000100","00000000","00000000","0000ffff","unguarded"],["0000ffff","7fffffff","00000000","00000000","80000000","unguarded"],["0000ffff","80000000","00000000","00000000","0000ffff","unguarded"],["0000ffff","ffffffe0","00000000","00000000","0000ffff","unguarded"],["0000ffff","ffffffff","00000000","00000000","80000000","unguarded"],["00010000","00000000","00000000","00000000","00010000"],["00010000","00000001","00000000","00000000","00020000"],["00010000","00000002","00000000","00000000","00040000"],["00010000","00000003","00000000","00000000","00080000"],["00010000","00000004","00000000","00000000","00100000"],["00010000","00000005","00000000","00000000","00200000"],["00010000","00000006","00000000","00000000","00400000"],["00010000","00000007","00000000","00000000","00800000"],["00010000","00000008","00000000","00000000","01000000"],["00010000","00000009","00000000","00000000","02000000"],["00010000","0000000a","00000000","00000000","04000000"],["00010000","0000000b","00000000","00000000","08000000"],["00010000","0000000c","00000000","00000000","10000000"],["00010000","0000000d","00000000","00000000","20000000"],["00010000","0000000e","00000000","00000000","40000000"],["00010000","0000000f","00000000","00000000","80000000"],["00010000","00000010","00000000","00000000","00000000"],["00010000","00000011","00000000","00000000","00000000"],["00010000","00000012","00000000","00000000","00000000"],["00010000","00000013","00000000","00000000","00000000"],["00010000","00000014","00000000","00000000","00000000"],["00010000","00000015","00000000","00000000","00000000"],["00010000","00000016","00000000","00000000","00000000"],["00010000","00000017","00000000","00000000","00000000"],["00010000","00000018","00000000","00000000","00000000"],["00010000","00000019","00000000","00000000","00000000"],["00010000","0000001a","00000000","00000000","00000000"],["00010000","0000001b","00000000","00000000","00000000"],["00010000","0000001c","00000000","00000000","00000000"],["00010000","0000001d","00000000","00000000","00000000"],["00010000","0000001e","00000000","00000000","00000000"],["00010000","0000001f","00000000","00000000","00000000"],["00010000","00000020","00000000","00000000","00010000","unguarded"],["00010000","00000021","00000000","00000000","00020000","unguarded"],["00010000","00000022","00000000","00000000","00040000","unguarded"],["00010000","00000023","00000000","00000000","00080000","unguarded"],["00010000","00000024","00000000","00000000","00100000","unguarded"],["00010000","00000025","00000000","00000000","00200000","unguarded"],["00010000","00000026","00000000","00000000","00400000","unguarded"],["00010000","00000027","00000000","00000000","00800000","unguarded"],["00010000","00000028","00000000","00000000","01000000","unguarded"],["00010000","0000003f","00000000","00000000","00000000","unguarded"],["00010000","00000040","00000000","00000000","00010000","unguarded"],["00010000","00000041","00000000","00000000","00020000","unguarded"],["00010000","00000060","00000000","00000000","00010000","unguarded"],["00010000","0000007f","00000000","00000000","00000000","unguarded"],["00010000","00000080","00000000","00000000","00010000","unguarded"],["00010000","000000ff","00000000","00000000","00000000","unguarded"],["00010000","00000100","00000000","00000000","00010000","unguarded"],["00010000","7fffffff","00000000","00000000","00000000","unguarded"],["00010000","80000000","00000000","00000000","00010000","unguarded"],["00010000","ffffffe0","00000000","00000000","00010000","unguarded"],["00010000","ffffffff","00000000","00000000","00000000","unguarded"],["55555555","00000000","00000000","00000000","55555555"],["55555555","00000001","00000000","00000000","aaaaaaaa"],["55555555","00000002","00000000","00000000","55555554"],["55555555","00000003","00000000","00000000","aaaaaaa8"],["55555555","00000004","00000000","00000000","55555550"],["55555555","00000005","00000000","00000000","aaaaaaa0"],["55555555","00000006","00000000","00000000","55555540"],["55555555","00000007","00000000","00000000","aaaaaa80"],["55555555","00000008","00000000","00000000","55555500"],["55555555","00000009","00000000","00000000","aaaaaa00"],["55555555","0000000a","00000000","00000000","55555400"],["55555555","0000000b","00000000","00000000","aaaaa800"],["55555555","0000000c","00000000","00000000","55555000"],["55555555","0000000d","00000000","00000000","aaaaa000"],["55555555","0000000e","00000000","00000000","55554000"],["55555555","0000000f","00000000","00000000","aaaa8000"],["55555555","00000010","00000000","00000000","55550000"],["55555555","00000011","00000000","00000000","aaaa0000"],["55555555","00000012","00000000","00000000","55540000"],["55555555","00000013","00000000","00000000","aaa80000"],["55555555","00000014","00000000","00000000","55500000"],["55555555","00000015","00000000","00000000","aaa00000"],["55555555","00000016","00000000","00000000","55400000"],["55555555","00000017","00000000","00000000","aa800000"],["55555555","00000018","00000000","00000000","55000000"],["55555555","00000019","00000000","00000000","aa000000"],["55555555","0000001a","00000000","00000000","54000000"],["55555555","0000001b","00000000","00000000","a8000000"],["55555555","0000001c","00000000","00000000","50000000"],["55555555","0000001d","00000000","00000000","a0000000"],["55555555","0000001e","00000000","00000000","40000000"],["55555555","0000001f","00000000","00000000","80000000"],["55555555","00000020","00000000","00000000","55555555","unguarded"],["55555555","00000021","00000000","00000000","aaaaaaaa","unguarded"],["55555555","00000022","00000000","00000000","55555554","unguarded"],["55555555","00000023","00000000","00000000","aaaaaaa8","unguarded"],["55555555","00000024","00000000","00000000","55555550","unguarded"],["55555555","00000025","00000000","00000000","aaaaaaa0","unguarded"],["55555555","00000026","00000000","00000000","55555540","unguarded"],["55555555","00000027","00000000","00000000","aaaaaa80","unguarded"],["55555555","00000028","00000000","00000000","55555500","unguarded"],["55555555","0000003f","00000000","00000000","80000000","unguarded"],["55555555","00000040","00000000","00000000","55555555","unguarded"],["55555555","00000041","00000000","00000000","aaaaaaaa","unguarded"],["55555555","00000060","00000000","00000000","55555555","unguarded"],["55555555","0000007f","00000000","00000000","80000000","unguarded"],["55555555","00000080","00000000","00000000","55555555","unguarded"],["55555555","000000ff","00000000","00000000","80000000","unguarded"],["55555555","00000100","00000000","00000000","55555555","unguarded"],["55555555","7fffffff","00000000","00000000","80000000","unguarded"],["55555555","80000000","00000000","00000000","55555555","unguarded"],["55555555","ffffffe0","00000000","00000000","55555555","unguarded"],["55555555","ffffffff","00000000","00000000","80000000","unguarded"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7ffffffe","00000001","00000000","00000000","fffffffc"],["7ffffffe","00000002","00000000","00000000","fffffff8"],["7ffffffe","00000003","00000000","00000000","fffffff0"],["7ffffffe","00000004","00000000","00000000","ffffffe0"],["7ffffffe","00000005","00000000","00000000","ffffffc0"],["7ffffffe","00000006","00000000","00000000","ffffff80"],["7ffffffe","00000007","00000000","00000000","ffffff00"],["7ffffffe","00000008","00000000","00000000","fffffe00"],["7ffffffe","00000009","00000000","00000000","fffffc00"],["7ffffffe","0000000a","00000000","00000000","fffff800"],["7ffffffe","0000000b","00000000","00000000","fffff000"],["7ffffffe","0000000c","00000000","00000000","ffffe000"],["7ffffffe","0000000d","00000000","00000000","ffffc000"],["7ffffffe","0000000e","00000000","00000000","ffff8000"],["7ffffffe","0000000f","00000000","00000000","ffff0000"],["7ffffffe","00000010","00000000","00000000","fffe0000"],["7ffffffe","00000011","00000000","00000000","fffc0000"],["7ffffffe","00000012","00000000","00000000","fff80000"],["7ffffffe","00000013","00000000","00000000","fff00000"],["7ffffffe","00000014","00000000","00000000","ffe00000"],["7ffffffe","00000015","00000000","00000000","ffc00000"],["7ffffffe","00000016","00000000","00000000","ff800000"],["7ffffffe","00000017","00000000","00000000","ff000000"],["7ffffffe","00000018","00000000","00000000","fe000000"],["7ffffffe","00000019","00000000","00000000","fc000000"],["7ffffffe","0000001a","00000000","00000000","f8000000"],["7ffffffe","0000001b","00000000","00000000","f0000000"],["7ffffffe","0000001c","00000000","00000000","e0000000"],["7ffffffe","0000001d","00000000","00000000","c0000000"],["7ffffffe","0000001e","00000000","00000000","80000000"],["7ffffffe","0000001f","00000000","00000000","00000000"],["7ffffffe","00000020","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","00000021","00000000","00000000","fffffffc","unguarded"],["7ffffffe","00000022","00000000","00000000","fffffff8","unguarded"],["7ffffffe","00000023","00000000","00000000","fffffff0","unguarded"],["7ffffffe","00000024","00000000","00000000","ffffffe0","unguarded"],["7ffffffe","00000025","00000000","00000000","ffffffc0","unguarded"],["7ffffffe","00000026","00000000","00000000","ffffff80","unguarded"],["7ffffffe","00000027","00000000","00000000","ffffff00","unguarded"],["7ffffffe","00000028","00000000","00000000","fffffe00","unguarded"],["7ffffffe","0000003f","00000000","00000000","00000000","unguarded"],["7ffffffe","00000040","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","00000041","00000000","00000000","fffffffc","unguarded"],["7ffffffe","00000060","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","0000007f","00000000","00000000","00000000","unguarded"],["7ffffffe","00000080","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","000000ff","00000000","00000000","00000000","unguarded"],["7ffffffe","00000100","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","7fffffff","00000000","00000000","00000000","unguarded"],["7ffffffe","80000000","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","ffffffe0","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","ffffffff","00000000","00000000","00000000","unguarded"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","fffffffe"],["7fffffff","00000002","00000000","00000000","fffffffc"],["7fffffff","00000003","00000000","00000000","fffffff8"],["7fffffff","00000004","00000000","00000000","fffffff0"],["7fffffff","00000005","00000000","00000000","ffffffe0"],["7fffffff","00000006","00000000","00000000","ffffffc0"],["7fffffff","00000007","00000000","00000000","ffffff80"],["7fffffff","00000008","00000000","00000000","ffffff00"],["7fffffff","00000009","00000000","00000000","fffffe00"],["7fffffff","0000000a","00000000","00000000","fffffc00"],["7fffffff","0000000b","00000000","00000000","fffff800"],["7fffffff","0000000c","00000000","00000000","fffff000"],["7fffffff","0000000d","00000000","00000000","ffffe000"],["7fffffff","0000000e","00000000","00000000","ffffc000"],["7fffffff","0000000f","00000000","00000000","ffff8000"],["7fffffff","00000010","00000000","00000000","ffff0000"],["7fffffff","00000011","00000000","00000000","fffe0000"],["7fffffff","00000012","00000000","00000000","fffc0000"],["7fffffff","00000013","00000000","00000000","fff80000"],["7fffffff","00000014","00000000","00000000","fff00000"],["7fffffff","00000015","00000000","00000000","ffe00000"],["7fffffff","00000016","00000000","00000000","ffc00000"],["7fffffff","00000017","00000000","00000000","ff800000"],["7fffffff","00000018","00000000","00000000","ff000000"],["7fffffff","00000019","00000000","00000000","fe000000"],["7fffffff","0000001a","00000000","00000000","fc000000"],["7fffffff","0000001b","00000000","00000000","f8000000"],["7fffffff","0000001c","00000000","00000000","f0000000"],["7fffffff","0000001d","00000000","00000000","e0000000"],["7fffffff","0000001e","00000000","00000000","c0000000"],["7fffffff","0000001f","00000000","00000000","80000000"],["7fffffff","00000020","00000000","00000000","7fffffff","unguarded"],["7fffffff","00000021","00000000","00000000","fffffffe","unguarded"],["7fffffff","00000022","00000000","00000000","fffffffc","unguarded"],["7fffffff","00000023","00000000","00000000","fffffff8","unguarded"],["7fffffff","00000024","00000000","00000000","fffffff0","unguarded"],["7fffffff","00000025","00000000","00000000","ffffffe0","unguarded"],["7fffffff","00000026","00000000","00000000","ffffffc0","unguarded"],["7fffffff","00000027","00000000","00000000","ffffff80","unguarded"],["7fffffff","00000028","00000000","00000000","ffffff00","unguarded"],["7fffffff","0000003f","00000000","00000000","80000000","unguarded"],["7fffffff","00000040","00000000","00000000","7fffffff","unguarded"],["7fffffff","00000041","00000000","00000000","fffffffe","unguarded"],["7fffffff","00000060","00000000","00000000","7fffffff","unguarded"],["7fffffff","0000007f","00000000","00000000","80000000","unguarded"],["7fffffff","00000080","00000000","00000000","7fffffff","unguarded"],["7fffffff","000000ff","00000000","00000000","80000000","unguarded"],["7fffffff","00000100","00000000","00000000","7fffffff","unguarded"],["7fffffff","7fffffff","00000000","00000000","80000000","unguarded"],["7fffffff","80000000","00000000","00000000","7fffffff","unguarded"],["7fffffff","ffffffe0","00000000","00000000","7fffffff","unguarded"],["7fffffff","ffffffff","00000000","00000000","80000000","unguarded"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","00000000"],["80000000","00000002","00000000","00000000","00000000"],["80000000","00000003","00000000","00000000","00000000"],["80000000","00000004","00000000","00000000","00000000"],["80000000","00000005","00000000","00000000","00000000"],["80000000","00000006","00000000","00000000","00000000"],["80000000","00000007","00000000","00000000","00000000"],["80000000","00000008","00000000","00000000","00000000"],["80000000","00000009","00000000","00000000","00000000"],["80000000","0000000a","00000000","00000000","00000000"],["80000000","0000000b","00000000","00000000","00000000"],["80000000","0000000c","00000000","00000000","00000000"],["80000000","0000000d","00000000","00000000","00000000"],["80000000","0000000e","00000000","00000000","00000000"],["80000000","0000000f","00000000","00000000","00000000"],["80000000","00000010","00000000","00000000","00000000"],["80000000","00000011","00000000","00000000","00000000"],["80000000","00000012","00000000","00000000","00000000"],["80000000","00000013","00000000","00000000","00000000"],["80000000","00000014","00000000","00000000","00000000"],["80000000","00000015","00000000","00000000","00000000"],["80000000","00000016","00000000","00000000","00000000"],["80000000","00000017","00000000","00000000","00000000"],["80000000","00000018","00000000","00000000","00000000"],["80000000","00000019","00000000","00000000","00000000"],["80000000","0000001a","00000000","00000000","00000000"],["80000000","0000001b","00000000","00000000","00000000"],["80000000","0000001c","00000000","00000000","00000000"],["80000000","0000001d","00000000","00000000","00000000"],["80000000","0000001e","00000000","00000000","00000000"],["80000000","0000001f","00000000","00000000","00000000"],["80000000","00000020","00000000","00000000","80000000","unguarded"],["80000000","00000021","00000000","00000000","00000000","unguarded"],["80000000","00000022","00000000","00000000","00000000","unguarded"],["80000000","00000023","00000000","00000000","00000000","unguarded"],["80000000","00000024","00000000","00000000","00000000","unguarded"],["80000000","00000025","00000000","00000000","00000000","unguarded"],["80000000","00000026","00000000","00000000","00000000","unguarded"],["80000000","00000027","00000000","00000000","00000000","unguarded"],["80000000","00000028","00000000","00000000","00000000","unguarded"],["80000000","0000003f","00000000","00000000","00000000","unguarded"],["80000000","00000040","00000000","00000000","80000000","unguarded"],["80000000","00000041","00000000","00000000","00000000","unguarded"],["80000000","00000060","00000000","00000000","80000000","unguarded"],["80000000","0000007f","00000000","00000000","00000000","unguarded"],["80000000","00000080","00000000","00000000","80000000","unguarded"],["80000000","000000ff","00000000","00000000","00000000","unguarded"],["80000000","00000100","00000000","00000000","80000000","unguarded"],["80000000","7fffffff","00000000","00000000","00000000","unguarded"],["80000000","80000000","00000000","00000000","80000000","unguarded"],["80000000","ffffffe0","00000000","00000000","80000000","unguarded"],["80000000","ffffffff","00000000","00000000","00000000","unguarded"],["80000001","00000000","00000000","00000000","80000001"],["80000001","00000001","00000000","00000000","00000002"],["80000001","00000002","00000000","00000000","00000004"],["80000001","00000003","00000000","00000000","00000008"],["80000001","00000004","00000000","00000000","00000010"],["80000001","00000005","00000000","00000000","00000020"],["80000001","00000006","00000000","00000000","00000040"],["80000001","00000007","00000000","00000000","00000080"],["80000001","00000008","00000000","00000000","00000100"],["80000001","00000009","00000000","00000000","00000200"],["80000001","0000000a","00000000","00000000","00000400"],["80000001","0000000b","00000000","00000000","00000800"],["80000001","0000000c","00000000","00000000","00001000"],["80000001","0000000d","00000000","00000000","00002000"],["80000001","0000000e","00000000","00000000","00004000"],["80000001","0000000f","00000000","00000000","00008000"],["80000001","00000010","00000000","00000000","00010000"],["80000001","00000011","00000000","00000000","00020000"],["80000001","00000012","00000000","00000000","00040000"],["80000001","00000013","00000000","00000000","00080000"],["80000001","00000014","00000000","00000000","00100000"],["80000001","00000015","00000000","00000000","00200000"],["80000001","00000016","00000000","00000000","00400000"],["80000001","00000017","00000000","00000000","00800000"],["80000001","00000018","00000000","00000000","01000000"],["80000001","00000019","00000000","00000000","02000000"],["80000001","0000001a","00000000","00000000","04000000"],["80000001","0000001b","00000000","00000000","08000000"],["80000001","0000001c","00000000","00000000","10000000"],["80000001","0000001d","00000000","00000000","20000000"],["80000001","0000001e","00000000","00000000","40000000"],["80000001","0000001f","00000000","00000000","80000000"],["80000001","00000020","00000000","00000000","80000001","unguarded"],["80000001","00000021","00000000","00000000","00000002","unguarded"],["80000001","00000022","00000000","00000000","00000004","unguarded"],["80000001","00000023","00000000","00000000","00000008","unguarded"],["80000001","00000024","00000000","00000000","00000010","unguarded"],["80000001","00000025","00000000","00000000","00000020","unguarded"],["80000001","00000026","00000000","00000000","00000040","unguarded"],["80000001","00000027","00000000","00000000","00000080","unguarded"],["80000001","00000028","00000000","00000000","00000100","unguarded"],["80000001","0000003f","00000000","00000000","80000000","unguarded"],["80000001","00000040","00000000","00000000","80000001","unguarded"],["80000001","00000041","00000000","00000000","00000002","unguarded"],["80000001","00000060","00000000","00000000","80000001","unguarded"],["80000001","0000007f","00000000","00000000","80000000","unguarded"],["80000001","00000080","00000000","00000000","80000001","unguarded"],["80000001","000000ff","00000000","00000000","80000000","unguarded"],["80000001","00000100","00000000","00000000","80000001","unguarded"],["80000001","7fffffff","00000000","00000000","80000000","unguarded"],["80000001","80000000","00000000","00000000","80000001","unguarded"],["80000001","ffffffe0","00000000","00000000","80000001","unguarded"],["80000001","ffffffff","00000000","00000000","80000000","unguarded"],["aaaaaaaa","00000000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000001","00000000","00000000","55555554"],["aaaaaaaa","00000002","00000000","00000000","aaaaaaa8"],["aaaaaaaa","00000003","00000000","00000000","55555550"],["aaaaaaaa","00000004","00000000","00000000","aaaaaaa0"],["aaaaaaaa","00000005","00000000","00000000","55555540"],["aaaaaaaa","00000006","00000000","00000000","aaaaaa80"],["aaaaaaaa","00000007","00000000","00000000","55555500"],["aaaaaaaa","00000008","00000000","00000000","aaaaaa00"],["aaaaaaaa","00000009","00000000","00000000","55555400"],["aaaaaaaa","0000000a","00000000","00000000","aaaaa800"],["aaaaaaaa","0000000b","00000000","00000000","55555000"],["aaaaaaaa","0000000c","00000000","00000000","aaaaa000"],["aaaaaaaa","0000000d","00000000","00000000","55554000"],["aaaaaaaa","0000000e","00000000","00000000","aaaa8000"],["aaaaaaaa","0000000f","00000000","00000000","55550000"],["aaaaaaaa","00000010","00000000","00000000","aaaa0000"],["aaaaaaaa","00000011","00000000","00000000","55540000"],["aaaaaaaa","00000012","00000000","00000000","aaa80000"],["aaaaaaaa","00000013","00000000","00000000","55500000"],["aaaaaaaa","00000014","00000000","00000000","aaa00000"],["aaaaaaaa","00000015","00000000","00000000","55400000"],["aaaaaaaa","00000016","00000000","00000000","aa800000"],["aaaaaaaa","00000017","00000000","00000000","55000000"],["aaaaaaaa","00000018","00000000","00000000","aa000000"],["aaaaaaaa","00000019","00000000","00000000","54000000"],["aaaaaaaa","0000001a","00000000","00000000","a8000000"],["aaaaaaaa","0000001b","00000000","00000000","50000000"],["aaaaaaaa","0000001c","00000000","00000000","a0000000"],["aaaaaaaa","0000001d","00000000","00000000","40000000"],["aaaaaaaa","0000001e","00000000","00000000","80000000"],["aaaaaaaa","0000001f","00000000","00000000","00000000"],["aaaaaaaa","00000020","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","00000021","00000000","00000000","55555554","unguarded"],["aaaaaaaa","00000022","00000000","00000000","aaaaaaa8","unguarded"],["aaaaaaaa","00000023","00000000","00000000","55555550","unguarded"],["aaaaaaaa","00000024","00000000","00000000","aaaaaaa0","unguarded"],["aaaaaaaa","00000025","00000000","00000000","55555540","unguarded"],["aaaaaaaa","00000026","00000000","00000000","aaaaaa80","unguarded"],["aaaaaaaa","00000027","00000000","00000000","55555500","unguarded"],["aaaaaaaa","00000028","00000000","00000000","aaaaaa00","unguarded"],["aaaaaaaa","0000003f","00000000","00000000","00000000","unguarded"],["aaaaaaaa","00000040","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","00000041","00000000","00000000","55555554","unguarded"],["aaaaaaaa","00000060","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","0000007f","00000000","00000000","00000000","unguarded"],["aaaaaaaa","00000080","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","000000ff","00000000","00000000","00000000","unguarded"],["aaaaaaaa","00000100","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","7fffffff","00000000","00000000","00000000","unguarded"],["aaaaaaaa","80000000","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","ffffffe0","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","ffffffff","00000000","00000000","00000000","unguarded"],["deadbeef","00000000","00000000","00000000","deadbeef"],["deadbeef","00000001","00000000","00000000","bd5b7dde"],["deadbeef","00000002","00000000","00000000","7ab6fbbc"],["deadbeef","00000003","00000000","00000000","f56df778"],["deadbeef","00000004","00000000","00000000","eadbeef0"],["deadbeef","00000005","00000000","00000000","d5b7dde0"],["deadbeef","00000006","00000000","00000000","ab6fbbc0"],["deadbeef","00000007","00000000","00000000","56df7780"],["deadbeef","00000008","00000000","00000000","adbeef00"],["deadbeef","00000009","00000000","00000000","5b7dde00"],["deadbeef","0000000a","00000000","00000000","b6fbbc00"],["deadbeef","0000000b","00000000","00000000","6df77800"],["deadbeef","0000000c","00000000","00000000","dbeef000"],["deadbeef","0000000d","00000000","00000000","b7dde000"],["deadbeef","0000000e","00000000","00000000","6fbbc000"],["deadbeef","0000000f","00000000","00000000","df778000"],["deadbeef","00000010","00000000","00000000","beef0000"],["deadbeef","00000011","00000000","00000000","7dde0000"],["deadbeef","00000012","00000000","00000000","fbbc0000"],["deadbeef","00000013","00000000","00000000","f7780000"],["deadbeef","00000014","00000000","00000000","eef00000"],["deadbeef","00000015","00000000","00000000","dde00000"],["deadbeef","00000016","00000000","00000000","bbc00000"],["deadbeef","00000017","00000000","00000000","77800000"],["deadbeef","00000018","00000000","00000000","ef000000"],["deadbeef","00000019","00000000","00000000","de000000"],["deadbeef","0000001a","00000000","00000000","bc000000"],["deadbeef","0000001b","00000000","00000000","78000000"],["deadbeef","0000001c","00000000","00000000","f0000000"],["deadbeef","0000001d","00000000","00000000","e0000000"],["deadbeef","0000001e","00000000","00000000","c0000000"],["deadbeef","0000001f","00000000","00000000","80000000"],["deadbeef","00000020","00000000","00000000","deadbeef","unguarded"],["deadbeef","00000021","00000000","00000000","bd5b7dde","unguarded"],["deadbeef","00000022","00000000","00000000","7ab6fbbc","unguarded"],["deadbeef","00000023","00000000","00000000","f56df778","unguarded"],["deadbeef","00000024","00000000","00000000","eadbeef0","unguarded"],["deadbeef","00000025","00000000","00000000","d5b7dde0","unguarded"],["deadbeef","00000026","00000000","00000000","ab6fbbc0","unguarded"],["deadbeef","00000027","00000000","00000000","56df7780","unguarded"],["deadbeef","00000028","00000000","00000000","adbeef00","unguarded"],["deadbeef","0000003f","00000000","00000000","80000000","unguarded"],["deadbeef","00000040","00000000","00000000","deadbeef","unguarded"],["deadbeef","00000041","00000000","00000000","bd5b7dde","unguarded"],["deadbeef","00000060","00000000","00000000","deadbeef","unguarded"],["deadbeef","0000007f","00000000","00000000","80000000","unguarded"],["deadbeef","00000080","00000000","00000000","deadbeef","unguarded"],["deadbeef","000000ff","00000000","00000000","80000000","unguarded"],["deadbeef","00000100","00000000","00000000","deadbeef","unguarded"],["deadbeef","7fffffff","00000000","00000000","80000000","unguarded"],["deadbeef","80000000","00000000","00000000","deadbeef","unguarded"],["deadbeef","ffffffe0","00000000","00000000","deadbeef","unguarded"],["deadbeef","ffffffff","00000000","00000000","80000000","unguarded"],["ffff0000","00000000","00000000","00000000","ffff0000"],["ffff0000","00000001","00000000","00000000","fffe0000"],["ffff0000","00000002","00000000","00000000","fffc0000"],["ffff0000","00000003","00000000","00000000","fff80000"],["ffff0000","00000004","00000000","00000000","fff00000"],["ffff0000","00000005","00000000","00000000","ffe00000"],["ffff0000","00000006","00000000","00000000","ffc00000"],["ffff0000","00000007","00000000","00000000","ff800000"],["ffff0000","00000008","00000000","00000000","ff000000"],["ffff0000","00000009","00000000","00000000","fe000000"],["ffff0000","0000000a","00000000","00000000","fc000000"],["ffff0000","0000000b","00000000","00000000","f8000000"],["ffff0000","0000000c","00000000","00000000","f0000000"],["ffff0000","0000000d","00000000","00000000","e0000000"],["ffff0000","0000000e","00000000","00000000","c0000000"],["ffff0000","0000000f","00000000","00000000","80000000"],["ffff0000","00000010","00000000","00000000","00000000"],["ffff0000","00000011","00000000","00000000","00000000"],["ffff0000","00000012","00000000","00000000","00000000"],["ffff0000","00000013","00000000","00000000","00000000"],["ffff0000","00000014","00000000","00000000","00000000"],["ffff0000","00000015","00000000","00000000","00000000"],["ffff0000","00000016","00000000","00000000","00000000"],["ffff0000","00000017","00000000","00000000","00000000"],["ffff0000","00000018","00000000","00000000","00000000"],["ffff0000","00000019","00000000","00000000","00000000"],["ffff0000","0000001a","00000000","00000000","00000000"],["ffff0000","0000001b","00000000","00000000","00000000"],["ffff0000","0000001c","00000000","00000000","00000000"],["ffff0000","0000001d","00000000","00000000","00000000"],["ffff0000","0000001e","00000000","00000000","00000000"],["ffff0000","0000001f","00000000","00000000","00000000"],["ffff0000","00000020","00000000","00000000","ffff0000","unguarded"],["ffff0000","00000021","00000000","00000000","fffe0000","unguarded"],["ffff0000","00000022","00000000","00000000","fffc0000","unguarded"],["ffff0000","00000023","00000000","00000000","fff80000","unguarded"],["ffff0000","00000024","00000000","00000000","fff00000","unguarded"],["ffff0000","00000025","00000000","00000000","ffe00000","unguarded"],["ffff0000","00000026","00000000","00000000","ffc00000","unguarded"],["ffff0000","00000027","00000000","00000000","ff800000","unguarded"],["ffff0000","00000028","00000000","00000000","ff000000","unguarded"],["ffff0000","0000003f","00000000","00000000","00000000","unguarded"],["ffff0000","00000040","00000000","00000000","ffff0000","unguarded"],["ffff0000","00000041","00000000","00000000","fffe0000","unguarded"],["ffff0000","00000060","00000000","00000000","ffff0000","unguarded"],["ffff0000","0000007f","00000000","00000000","00000000","unguarded"],["ffff0000","00000080","00000000","00000000","ffff0000","unguarded"],["ffff0000","000000ff","00000000","00000000","00000000","unguarded"],["ffff0000","00000100","00000000","00000000","ffff0000","unguarded"],["ffff0000","7fffffff","00000000","00000000","00000000","unguarded"],["ffff0000","80000000","00000000","00000000","ffff0000","unguarded"],["ffff0000","ffffffe0","00000000","00000000","ffff0000","unguarded"],["ffff0000","ffffffff","00000000","00000000","00000000","unguarded"],["ffff8000","00000000","00000000","00000000","ffff8000"],["ffff8000","00000001","00000000","00000000","ffff0000"],["ffff8000","00000002","00000000","00000000","fffe0000"],["ffff8000","00000003","00000000","00000000","fffc0000"],["ffff8000","00000004","00000000","00000000","fff80000"],["ffff8000","00000005","00000000","00000000","fff00000"],["ffff8000","00000006","00000000","00000000","ffe00000"],["ffff8000","00000007","00000000","00000000","ffc00000"],["ffff8000","00000008","00000000","00000000","ff800000"],["ffff8000","00000009","00000000","00000000","ff000000"],["ffff8000","0000000a","00000000","00000000","fe000000"],["ffff8000","0000000b","00000000","00000000","fc000000"],["ffff8000","0000000c","00000000","00000000","f8000000"],["ffff8000","0000000d","00000000","00000000","f0000000"],["ffff8000","0000000e","00000000","00000000","e0000000"],["ffff8000","0000000f","00000000","00000000","c0000000"],["ffff8000","00000010","00000000","00000000","80000000"],["ffff8000","00000011","00000000","00000000","00000000"],["ffff8000","00000012","00000000","00000000","00000000"],["ffff8000","00000013","00000000","00000000","00000000"],["ffff8000","00000014","00000000","00000000","00000000"],["ffff8000","00000015","00000000","00000000","00000000"],["ffff8000","00000016","00000000","00000000","00000000"],["ffff8000","00000017","00000000","00000000","00000000"],["ffff8000","00000018","00000000","00000000","00000000"],["ffff8000","00000019","00000000","00000000","00000000"],["ffff8000","0000001a","00000000","00000000","00000000"],["ffff8000","0000001b","00000000","00000000","00000000"],["ffff8000","0000001c","00000000","00000000","00000000"],["ffff8000","0000001d","00000000","00000000","00000000"],["ffff8000","0000001e","00000000","00000000","00000000"],["ffff8000","0000001f","00000000","00000000","00000000"],["ffff8000","00000020","00000000","00000000","ffff8000","unguarded"],["ffff8000","00000021","00000000","00000000","ffff0000","unguarded"],["ffff8000","00000022","00000000","00000000","fffe0000","unguarded"],["ffff8000","00000023","00000000","00000000","fffc0000","unguarded"],["ffff8000","00000024","00000000","00000000","fff80000","unguarded"],["ffff8000","00000025","00000000","00000000","fff00000","unguarded"],["ffff8000","00000026","00000000","00000000","ffe00000","unguarded"],["ffff8000","00000027","00000000","00000000","ffc00000","unguarded"],["ffff8000","00000028","00000000","00000000","ff800000","unguarded"],["ffff8000","0000003f","00000000","00000000","00000000","unguarded"],["ffff8000","00000040","00000000","00000000","ffff8000","unguarded"],["ffff8000","00000041","00000000","00000000","ffff0000","unguarded"],["ffff8000","00000060","00000000","00000000","ffff8000","unguarded"],["ffff8000","0000007f","00000000","00000000","00000000","unguarded"],["ffff8000","00000080","00000000","00000000","ffff8000","unguarded"],["ffff8000","000000ff","00000000","00000000","00000000","unguarded"],["ffff8000","00000100","00000000","00000000","ffff8000","unguarded"],["ffff8000","7fffffff","00000000","00000000","00000000","unguarded"],["ffff8000","80000000","00000000","00000000","ffff8000","unguarded"],["ffff8000","ffffffe0","00000000","00000000","ffff8000","unguarded"],["ffff8000","ffffffff","00000000","00000000","00000000","unguarded"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["ffffffe0","00000001","00000000","00000000","ffffffc0"],["ffffffe0","00000002","00000000","00000000","ffffff80"],["ffffffe0","00000003","00000000","00000000","ffffff00"],["ffffffe0","00000004","00000000","00000000","fffffe00"],["ffffffe0","00000005","00000000","00000000","fffffc00"],["ffffffe0","00000006","00000000","00000000","fffff800"],["ffffffe0","00000007","00000000","00000000","fffff000"],["ffffffe0","00000008","00000000","00000000","ffffe000"],["ffffffe0","00000009","00000000","00000000","ffffc000"],["ffffffe0","0000000a","00000000","00000000","ffff8000"],["ffffffe0","0000000b","00000000","00000000","ffff0000"],["ffffffe0","0000000c","00000000","00000000","fffe0000"],["ffffffe0","0000000d","00000000","00000000","fffc0000"],["ffffffe0","0000000e","00000000","00000000","fff80000"],["ffffffe0","0000000f","00000000","00000000","fff00000"],["ffffffe0","00000010","00000000","00000000","ffe00000"],["ffffffe0","00000011","00000000","00000000","ffc00000"],["ffffffe0","00000012","00000000","00000000","ff800000"],["ffffffe0","00000013","00000000","00000000","ff000000"],["ffffffe0","00000014","00000000","00000000","fe000000"],["ffffffe0","00000015","00000000","00000000","fc000000"],["ffffffe0","00000016","00000000","00000000","f8000000"],["ffffffe0","00000017","00000000","00000000","f0000000"],["ffffffe0","00000018","00000000","00000000","e0000000"],["ffffffe0","00000019","00000000","00000000","c0000000"],["ffffffe0","0000001a","00000000","00000000","80000000"],["ffffffe0","0000001b","00000000","00000000","00000000"],["ffffffe0","0000001c","00000000","00000000","00000000"],["ffffffe0","0000001d","00000000","00000000","00000000"],["ffffffe0","0000001e","00000000","00000000","00000000"],["ffffffe0","0000001f","00000000","00000000","00000000"],["ffffffe0","00000020","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","00000021","00000000","00000000","ffffffc0","unguarded"],["ffffffe0","00000022","00000000","00000000","ffffff80","unguarded"],["ffffffe0","00000023","00000000","00000000","ffffff00","unguarded"],["ffffffe0","00000024","00000000","00000000","fffffe00","unguarded"],["ffffffe0","00000025","00000000","00000000","fffffc00","unguarded"],["ffffffe0","00000026","00000000","00000000","fffff800","unguarded"],["ffffffe0","00000027","00000000","00000000","fffff000","unguarded"],["ffffffe0","00000028","00000000","00000000","ffffe000","unguarded"],["ffffffe0","0000003f","00000000","00000000","00000000","unguarded"],["ffffffe0","00000040","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","00000041","00000000","00000000","ffffffc0","unguarded"],["ffffffe0","00000060","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","0000007f","00000000","00000000","00000000","unguarded"],["ffffffe0","00000080","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","000000ff","00000000","00000000","00000000","unguarded"],["ffffffe0","00000100","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","7fffffff","00000000","00000000","00000000","unguarded"],["ffffffe0","80000000","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","ffffffe0","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","ffffffff","00000000","00000000","00000000","unguarded"],["ffffffe1","00000000","00000000","00000000","ffffffe1"],["ffffffe1","00000001","00000000","00000000","ffffffc2"],["ffffffe1","00000002","00000000","00000000","ffffff84"],["ffffffe1","00000003","00000000","00000000","ffffff08"],["ffffffe1","00000004","00000000","00000000","fffffe10"],["ffffffe1","00000005","00000000","00000000","fffffc20"],["ffffffe1","00000006","00000000","00000000","fffff840"],["ffffffe1","00000007","00000000","00000000","fffff080"],["ffffffe1","00000008","00000000","00000000","ffffe100"],["ffffffe1","00000009","00000000","00000000","ffffc200"],["ffffffe1","0000000a","00000000","00000000","ffff8400"],["ffffffe1","0000000b","00000000","00000000","ffff0800"],["ffffffe1","0000000c","00000000","00000000","fffe1000"],["ffffffe1","0000000d","00000000","00000000","fffc2000"],["ffffffe1","0000000e","00000000","00000000","fff84000"],["ffffffe1","0000000f","00000000","00000000","fff08000"],["ffffffe1","00000010","00000000","00000000","ffe10000"],["ffffffe1","00000011","00000000","00000000","ffc20000"],["ffffffe1","00000012","00000000","00000000","ff840000"],["ffffffe1","00000013","00000000","00000000","ff080000"],["ffffffe1","00000014","00000000","00000000","fe100000"],["ffffffe1","00000015","00000000","00000000","fc200000"],["ffffffe1","00000016","00000000","00000000","f8400000"],["ffffffe1","00000017","00000000","00000000","f0800000"],["ffffffe1","00000018","00000000","00000000","e1000000"],["ffffffe1","00000019","00000000","00000000","c2000000"],["ffffffe1","0000001a","00000000","00000000","84000000"],["ffffffe1","0000001b","00000000","00000000","08000000"],["ffffffe1","0000001c","00000000","00000000","10000000"],["ffffffe1","0000001d","00000000","00000000","20000000"],["ffffffe1","0000001e","00000000","00000000","40000000"],["ffffffe1","0000001f","00000000","00000000","80000000"],["ffffffe1","00000020","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","00000021","00000000","00000000","ffffffc2","unguarded"],["ffffffe1","00000022","00000000","00000000","ffffff84","unguarded"],["ffffffe1","00000023","00000000","00000000","ffffff08","unguarded"],["ffffffe1","00000024","00000000","00000000","fffffe10","unguarded"],["ffffffe1","00000025","00000000","00000000","fffffc20","unguarded"],["ffffffe1","00000026","00000000","00000000","fffff840","unguarded"],["ffffffe1","00000027","00000000","00000000","fffff080","unguarded"],["ffffffe1","00000028","00000000","00000000","ffffe100","unguarded"],["ffffffe1","0000003f","00000000","00000000","80000000","unguarded"],["ffffffe1","00000040","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","00000041","00000000","00000000","ffffffc2","unguarded"],["ffffffe1","00000060","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","0000007f","00000000","00000000","80000000","unguarded"],["ffffffe1","00000080","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","000000ff","00000000","00000000","80000000","unguarded"],["ffffffe1","00000100","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","7fffffff","00000000","00000000","80000000","unguarded"],["ffffffe1","80000000","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","ffffffe0","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","ffffffff","00000000","00000000","80000000","unguarded"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffff2"],["fffffff9","00000002","00000000","00000000","ffffffe4"],["fffffff9","00000003","00000000","00000000","ffffffc8"],["fffffff9","00000004","00000000","00000000","ffffff90"],["fffffff9","00000005","00000000","00000000","ffffff20"],["fffffff9","00000006","00000000","00000000","fffffe40"],["fffffff9","00000007","00000000","00000000","fffffc80"],["fffffff9","00000008","00000000","00000000","fffff900"],["fffffff9","00000009","00000000","00000000","fffff200"],["fffffff9","0000000a","00000000","00000000","ffffe400"],["fffffff9","0000000b","00000000","00000000","ffffc800"],["fffffff9","0000000c","00000000","00000000","ffff9000"],["fffffff9","0000000d","00000000","00000000","ffff2000"],["fffffff9","0000000e","00000000","00000000","fffe4000"],["fffffff9","0000000f","00000000","00000000","fffc8000"],["fffffff9","00000010","00000000","00000000","fff90000"],["fffffff9","00000011","00000000","00000000","fff20000"],["fffffff9","00000012","00000000","00000000","ffe40000"],["fffffff9","00000013","00000000","00000000","ffc80000"],["fffffff9","00000014","00000000","00000000","ff900000"],["fffffff9","00000015","00000000","00000000","ff200000"],["fffffff9","00000016","00000000","00000000","fe400000"],["fffffff9","00000017","00000000","00000000","fc800000"],["fffffff9","00000018","00000000","00000000","f9000000"],["fffffff9","00000019","00000000","00000000","f2000000"],["fffffff9","0000001a","00000000","00000000","e4000000"],["fffffff9","0000001b","00000000","00000000","c8000000"],["fffffff9","0000001c","00000000","00000000","90000000"],["fffffff9","0000001d","00000000","00000000","20000000"],["fffffff9","0000001e","00000000","00000000","40000000"],["fffffff9","0000001f","00000000","00000000","80000000"],["fffffff9","00000020","00000000","00000000","fffffff9","unguarded"],["fffffff9","00000021","00000000","00000000","fffffff2","unguarded"],["fffffff9","00000022","00000000","00000000","ffffffe4","unguarded"],["fffffff9","00000023","00000000","00000000","ffffffc8","unguarded"],["fffffff9","00000024","00000000","00000000","ffffff90","unguarded"],["fffffff9","00000025","00000000","00000000","ffffff20","unguarded"],["fffffff9","00000026","00000000","00000000","fffffe40","unguarded"],["fffffff9","00000027","00000000","00000000","fffffc80","unguarded"],["fffffff9","00000028","00000000","00000000","fffff900","unguarded"],["fffffff9","0000003f","00000000","00000000","80000000","unguarded"],["fffffff9","00000040","00000000","00000000","fffffff9","unguarded"],["fffffff9","00000041","00000000","00000000","fffffff2","unguarded"],["fffffff9","00000060","00000000","00000000","fffffff9","unguarded"],["fffffff9","0000007f","00000000","00000000","80000000","unguarded"],["fffffff9","00000080","00000000","00000000","fffffff9","unguarded"],["fffffff9","000000ff","00000000","00000000","80000000","unguarded"],["fffffff9","00000100","00000000","00000000","fffffff9","unguarded"],["fffffff9","7fffffff","00000000","00000000","80000000","unguarded"],["fffffff9","80000000","00000000","00000000","fffffff9","unguarded"],["fffffff9","ffffffe0","00000000","00000000","fffffff9","unguarded"],["fffffff9","ffffffff","00000000","00000000","80000000","unguarded"],["fffffffd","00000000","00000000","00000000","fffffffd"],["fffffffd","00000001","00000000","00000000","fffffffa"],["fffffffd","00000002","00000000","00000000","fffffff4"],["fffffffd","00000003","00000000","00000000","ffffffe8"],["fffffffd","00000004","00000000","00000000","ffffffd0"],["fffffffd","00000005","00000000","00000000","ffffffa0"],["fffffffd","00000006","00000000","00000000","ffffff40"],["fffffffd","00000007","00000000","00000000","fffffe80"],["fffffffd","00000008","00000000","00000000","fffffd00"],["fffffffd","00000009","00000000","00000000","fffffa00"],["fffffffd","0000000a","00000000","00000000","fffff400"],["fffffffd","0000000b","00000000","00000000","ffffe800"],["fffffffd","0000000c","00000000","00000000","ffffd000"],["fffffffd","0000000d","00000000","00000000","ffffa000"],["fffffffd","0000000e","00000000","00000000","ffff4000"],["fffffffd","0000000f","00000000","00000000","fffe8000"],["fffffffd","00000010","00000000","00000000","fffd0000"],["fffffffd","00000011","00000000","00000000","fffa0000"],["fffffffd","00000012","00000000","00000000","fff40000"],["fffffffd","00000013","00000000","00000000","ffe80000"],["fffffffd","00000014","00000000","00000000","ffd00000"],["fffffffd","00000015","00000000","00000000","ffa00000"],["fffffffd","00000016","00000000","00000000","ff400000"],["fffffffd","00000017","00000000","00000000","fe800000"],["fffffffd","00000018","00000000","00000000","fd000000"],["fffffffd","00000019","00000000","00000000","fa000000"],["fffffffd","0000001a","00000000","00000000","f4000000"],["fffffffd","0000001b","00000000","00000000","e8000000"],["fffffffd","0000001c","00000000","00000000","d0000000"],["fffffffd","0000001d","00000000","00000000","a0000000"],["fffffffd","0000001e","00000000","00000000","40000000"],["fffffffd","0000001f","00000000","00000000","80000000"],["fffffffd","00000020","00000000","00000000","fffffffd","unguarded"],["fffffffd","00000021","00000000","00000000","fffffffa","unguarded"],["fffffffd","00000022","00000000","00000000","fffffff4","unguarded"],["fffffffd","00000023","00000000","00000000","ffffffe8","unguarded"],["fffffffd","00000024","00000000","00000000","ffffffd0","unguarded"],["fffffffd","00000025","00000000","00000000","ffffffa0","unguarded"],["fffffffd","00000026","00000000","00000000","ffffff40","unguarded"],["fffffffd","00000027","00000000","00000000","fffffe80","unguarded"],["fffffffd","00000028","00000000","00000000","fffffd00","unguarded"],["fffffffd","0000003f","00000000","00000000","80000000","unguarded"],["fffffffd","00000040","00000000","00000000","fffffffd","unguarded"],["fffffffd","00000041","00000000","00000000","fffffffa","unguarded"],["fffffffd","00000060","00000000","00000000","fffffffd","unguarded"],["fffffffd","0000007f","00000000","00000000","80000000","unguarded"],["fffffffd","00000080","00000000","00000000","fffffffd","unguarded"],["fffffffd","000000ff","00000000","00000000","80000000","unguarded"],["fffffffd","00000100","00000000","00000000","fffffffd","unguarded"],["fffffffd","7fffffff","00000000","00000000","80000000","unguarded"],["fffffffd","80000000","00000000","00000000","fffffffd","unguarded"],["fffffffd","ffffffe0","00000000","00000000","fffffffd","unguarded"],["fffffffd","ffffffff","00000000","00000000","80000000","unguarded"],["fffffffe","00000000","00000000","00000000","fffffffe"],["fffffffe","00000001","00000000","00000000","fffffffc"],["fffffffe","00000002","00000000","00000000","fffffff8"],["fffffffe","00000003","00000000","00000000","fffffff0"],["fffffffe","00000004","00000000","00000000","ffffffe0"],["fffffffe","00000005","00000000","00000000","ffffffc0"],["fffffffe","00000006","00000000","00000000","ffffff80"],["fffffffe","00000007","00000000","00000000","ffffff00"],["fffffffe","00000008","00000000","00000000","fffffe00"],["fffffffe","00000009","00000000","00000000","fffffc00"],["fffffffe","0000000a","00000000","00000000","fffff800"],["fffffffe","0000000b","00000000","00000000","fffff000"],["fffffffe","0000000c","00000000","00000000","ffffe000"],["fffffffe","0000000d","00000000","00000000","ffffc000"],["fffffffe","0000000e","00000000","00000000","ffff8000"],["fffffffe","0000000f","00000000","00000000","ffff0000"],["fffffffe","00000010","00000000","00000000","fffe0000"],["fffffffe","00000011","00000000","00000000","fffc0000"],["fffffffe","00000012","00000000","00000000","fff80000"],["fffffffe","00000013","00000000","00000000","fff00000"],["fffffffe","00000014","00000000","00000000","ffe00000"],["fffffffe","00000015","00000000","00000000","ffc00000"],["fffffffe","00000016","00000000","00000000","ff800000"],["fffffffe","00000017","00000000","00000000","ff000000"],["fffffffe","00000018","00000000","00000000","fe000000"],["fffffffe","00000019","00000000","00000000","fc000000"],["fffffffe","0000001a","00000000","00000000","f8000000"],["fffffffe","0000001b","00000000","00000000","f0000000"],["fffffffe","0000001c","00000000","00000000","e0000000"],["fffffffe","0000001d","00000000","00000000","c0000000"],["fffffffe","0000001e","00000000","00000000","80000000"],["fffffffe","0000001f","00000000","00000000","00000000"],["fffffffe","00000020","00000000","00000000","fffffffe","unguarded"],["fffffffe","00000021","00000000","00000000","fffffffc","unguarded"],["fffffffe","00000022","00000000","00000000","fffffff8","unguarded"],["fffffffe","00000023","00000000","00000000","fffffff0","unguarded"],["fffffffe","00000024","00000000","00000000","ffffffe0","unguarded"],["fffffffe","00000025","00000000","00000000","ffffffc0","unguarded"],["fffffffe","00000026","00000000","00000000","ffffff80","unguarded"],["fffffffe","00000027","00000000","00000000","ffffff00","unguarded"],["fffffffe","00000028","00000000","00000000","fffffe00","unguarded"],["fffffffe","0000003f","00000000","00000000","00000000","unguarded"],["fffffffe","00000040","00000000","00000000","fffffffe","unguarded"],["fffffffe","00000041","00000000","00000000","fffffffc","unguarded"],["fffffffe","00000060","00000000","00000000","fffffffe","unguarded"],["fffffffe","0000007f","00000000","00000000","00000000","unguarded"],["fffffffe","00000080","00000000","00000000","fffffffe","unguarded"],["fffffffe","000000ff","00000000","00000000","00000000","unguarded"],["fffffffe","00000100","00000000","00000000","fffffffe","unguarded"],["fffffffe","7fffffff","00000000","00000000","00000000","unguarded"],["fffffffe","80000000","00000000","00000000","fffffffe","unguarded"],["fffffffe","ffffffe0","00000000","00000000","fffffffe","unguarded"],["fffffffe","ffffffff","00000000","00000000","00000000","unguarded"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","fffffffe"],["ffffffff","00000002","00000000","00000000","fffffffc"],["ffffffff","00000003","00000000","00000000","fffffff8"],["ffffffff","00000004","00000000","00000000","fffffff0"],["ffffffff","00000005","00000000","00000000","ffffffe0"],["ffffffff","00000006","00000000","00000000","ffffffc0"],["ffffffff","00000007","00000000","00000000","ffffff80"],["ffffffff","00000008","00000000","00000000","ffffff00"],["ffffffff","00000009","00000000","00000000","fffffe00"],["ffffffff","0000000a","00000000","00000000","fffffc00"],["ffffffff","0000000b","00000000","00000000","fffff800"],["ffffffff","0000000c","00000000","00000000","fffff000"],["ffffffff","0000000d","00000000","00000000","ffffe000"],["ffffffff","0000000e","00000000","00000000","ffffc000"],["ffffffff","0000000f","00000000","00000000","ffff8000"],["ffffffff","00000010","00000000","00000000","ffff0000"],["ffffffff","00000011","00000000","00000000","fffe0000"],["ffffffff","00000012","00000000","00000000","fffc0000"],["ffffffff","00000013","00000000","00000000","fff80000"],["ffffffff","00000014","00000000","00000000","fff00000"],["ffffffff","00000015","00000000","00000000","ffe00000"],["ffffffff","00000016","00000000","00000000","ffc00000"],["ffffffff","00000017","00000000","00000000","ff800000"],["ffffffff","00000018","00000000","00000000","ff000000"],["ffffffff","00000019","00000000","00000000","fe000000"],["ffffffff","0000001a","00000000","00000000","fc000000"],["ffffffff","0000001b","00000000","00000000","f8000000"],["ffffffff","0000001c","00000000","00000000","f0000000"],["ffffffff","0000001d","00000000","00000000","e0000000"],["ffffffff","0000001e","00000000","00000000","c0000000"],["ffffffff","0000001f","00000000","00000000","80000000"],["ffffffff","00000020","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000021","00000000","00000000","fffffffe","unguarded"],["ffffffff","00000022","00000000","00000000","fffffffc","unguarded"],["ffffffff","00000023","00000000","00000000","fffffff8","unguarded"],["ffffffff","00000024","00000000","00000000","fffffff0","unguarded"],["ffffffff","00000025","00000000","00000000","ffffffe0","unguarded"],["ffffffff","00000026","00000000","00000000","ffffffc0","unguarded"],["ffffffff","00000027","00000000","00000000","ffffff80","unguarded"],["ffffffff","00000028","00000000","00000000","ffffff00","unguarded"],["ffffffff","0000003f","00000000","00000000","80000000","unguarded"],["ffffffff","00000040","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000041","00000000","00000000","fffffffe","unguarded"],["ffffffff","00000060","00000000","00000000","ffffffff","unguarded"],["ffffffff","0000007f","00000000","00000000","80000000","unguarded"],["ffffffff","00000080","00000000","00000000","ffffffff","unguarded"],["ffffffff","000000ff","00000000","00000000","80000000","unguarded"],["ffffffff","00000100","00000000","00000000","ffffffff","unguarded"],["ffffffff","7fffffff","00000000","00000000","80000000","unguarded"],["ffffffff","80000000","00000000","00000000","ffffffff","unguarded"],["ffffffff","ffffffe0","00000000","00000000","ffffffff","unguarded"],["ffffffff","ffffffff","00000000","00000000","80000000","unguarded"]]} +{"op":"shr_i32","code":14,"wgsl":"ia >> b","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000002","00000000","00000000","00000000"],["00000000","00000003","00000000","00000000","00000000"],["00000000","00000004","00000000","00000000","00000000"],["00000000","00000005","00000000","00000000","00000000"],["00000000","00000006","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","00000008","00000000","00000000","00000000"],["00000000","00000009","00000000","00000000","00000000"],["00000000","0000000a","00000000","00000000","00000000"],["00000000","0000000b","00000000","00000000","00000000"],["00000000","0000000c","00000000","00000000","00000000"],["00000000","0000000d","00000000","00000000","00000000"],["00000000","0000000e","00000000","00000000","00000000"],["00000000","0000000f","00000000","00000000","00000000"],["00000000","00000010","00000000","00000000","00000000"],["00000000","00000011","00000000","00000000","00000000"],["00000000","00000012","00000000","00000000","00000000"],["00000000","00000013","00000000","00000000","00000000"],["00000000","00000014","00000000","00000000","00000000"],["00000000","00000015","00000000","00000000","00000000"],["00000000","00000016","00000000","00000000","00000000"],["00000000","00000017","00000000","00000000","00000000"],["00000000","00000018","00000000","00000000","00000000"],["00000000","00000019","00000000","00000000","00000000"],["00000000","0000001a","00000000","00000000","00000000"],["00000000","0000001b","00000000","00000000","00000000"],["00000000","0000001c","00000000","00000000","00000000"],["00000000","0000001d","00000000","00000000","00000000"],["00000000","0000001e","00000000","00000000","00000000"],["00000000","0000001f","00000000","00000000","00000000"],["00000000","00000020","00000000","00000000","00000000","unguarded"],["00000000","00000021","00000000","00000000","00000000","unguarded"],["00000000","00000022","00000000","00000000","00000000","unguarded"],["00000000","00000023","00000000","00000000","00000000","unguarded"],["00000000","00000024","00000000","00000000","00000000","unguarded"],["00000000","00000025","00000000","00000000","00000000","unguarded"],["00000000","00000026","00000000","00000000","00000000","unguarded"],["00000000","00000027","00000000","00000000","00000000","unguarded"],["00000000","00000028","00000000","00000000","00000000","unguarded"],["00000000","0000003f","00000000","00000000","00000000","unguarded"],["00000000","00000040","00000000","00000000","00000000","unguarded"],["00000000","00000041","00000000","00000000","00000000","unguarded"],["00000000","00000060","00000000","00000000","00000000","unguarded"],["00000000","0000007f","00000000","00000000","00000000","unguarded"],["00000000","00000080","00000000","00000000","00000000","unguarded"],["00000000","000000ff","00000000","00000000","00000000","unguarded"],["00000000","00000100","00000000","00000000","00000000","unguarded"],["00000000","7fffffff","00000000","00000000","00000000","unguarded"],["00000000","80000000","00000000","00000000","00000000","unguarded"],["00000000","ffffffe0","00000000","00000000","00000000","unguarded"],["00000000","ffffffff","00000000","00000000","00000000","unguarded"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000002","00000000","00000000","00000000"],["00000001","00000003","00000000","00000000","00000000"],["00000001","00000004","00000000","00000000","00000000"],["00000001","00000005","00000000","00000000","00000000"],["00000001","00000006","00000000","00000000","00000000"],["00000001","00000007","00000000","00000000","00000000"],["00000001","00000008","00000000","00000000","00000000"],["00000001","00000009","00000000","00000000","00000000"],["00000001","0000000a","00000000","00000000","00000000"],["00000001","0000000b","00000000","00000000","00000000"],["00000001","0000000c","00000000","00000000","00000000"],["00000001","0000000d","00000000","00000000","00000000"],["00000001","0000000e","00000000","00000000","00000000"],["00000001","0000000f","00000000","00000000","00000000"],["00000001","00000010","00000000","00000000","00000000"],["00000001","00000011","00000000","00000000","00000000"],["00000001","00000012","00000000","00000000","00000000"],["00000001","00000013","00000000","00000000","00000000"],["00000001","00000014","00000000","00000000","00000000"],["00000001","00000015","00000000","00000000","00000000"],["00000001","00000016","00000000","00000000","00000000"],["00000001","00000017","00000000","00000000","00000000"],["00000001","00000018","00000000","00000000","00000000"],["00000001","00000019","00000000","00000000","00000000"],["00000001","0000001a","00000000","00000000","00000000"],["00000001","0000001b","00000000","00000000","00000000"],["00000001","0000001c","00000000","00000000","00000000"],["00000001","0000001d","00000000","00000000","00000000"],["00000001","0000001e","00000000","00000000","00000000"],["00000001","0000001f","00000000","00000000","00000000"],["00000001","00000020","00000000","00000000","00000001","unguarded"],["00000001","00000021","00000000","00000000","00000000","unguarded"],["00000001","00000022","00000000","00000000","00000000","unguarded"],["00000001","00000023","00000000","00000000","00000000","unguarded"],["00000001","00000024","00000000","00000000","00000000","unguarded"],["00000001","00000025","00000000","00000000","00000000","unguarded"],["00000001","00000026","00000000","00000000","00000000","unguarded"],["00000001","00000027","00000000","00000000","00000000","unguarded"],["00000001","00000028","00000000","00000000","00000000","unguarded"],["00000001","0000003f","00000000","00000000","00000000","unguarded"],["00000001","00000040","00000000","00000000","00000001","unguarded"],["00000001","00000041","00000000","00000000","00000000","unguarded"],["00000001","00000060","00000000","00000000","00000001","unguarded"],["00000001","0000007f","00000000","00000000","00000000","unguarded"],["00000001","00000080","00000000","00000000","00000001","unguarded"],["00000001","000000ff","00000000","00000000","00000000","unguarded"],["00000001","00000100","00000000","00000000","00000001","unguarded"],["00000001","7fffffff","00000000","00000000","00000000","unguarded"],["00000001","80000000","00000000","00000000","00000001","unguarded"],["00000001","ffffffe0","00000000","00000000","00000001","unguarded"],["00000001","ffffffff","00000000","00000000","00000000","unguarded"],["00000002","00000000","00000000","00000000","00000002"],["00000002","00000001","00000000","00000000","00000001"],["00000002","00000002","00000000","00000000","00000000"],["00000002","00000003","00000000","00000000","00000000"],["00000002","00000004","00000000","00000000","00000000"],["00000002","00000005","00000000","00000000","00000000"],["00000002","00000006","00000000","00000000","00000000"],["00000002","00000007","00000000","00000000","00000000"],["00000002","00000008","00000000","00000000","00000000"],["00000002","00000009","00000000","00000000","00000000"],["00000002","0000000a","00000000","00000000","00000000"],["00000002","0000000b","00000000","00000000","00000000"],["00000002","0000000c","00000000","00000000","00000000"],["00000002","0000000d","00000000","00000000","00000000"],["00000002","0000000e","00000000","00000000","00000000"],["00000002","0000000f","00000000","00000000","00000000"],["00000002","00000010","00000000","00000000","00000000"],["00000002","00000011","00000000","00000000","00000000"],["00000002","00000012","00000000","00000000","00000000"],["00000002","00000013","00000000","00000000","00000000"],["00000002","00000014","00000000","00000000","00000000"],["00000002","00000015","00000000","00000000","00000000"],["00000002","00000016","00000000","00000000","00000000"],["00000002","00000017","00000000","00000000","00000000"],["00000002","00000018","00000000","00000000","00000000"],["00000002","00000019","00000000","00000000","00000000"],["00000002","0000001a","00000000","00000000","00000000"],["00000002","0000001b","00000000","00000000","00000000"],["00000002","0000001c","00000000","00000000","00000000"],["00000002","0000001d","00000000","00000000","00000000"],["00000002","0000001e","00000000","00000000","00000000"],["00000002","0000001f","00000000","00000000","00000000"],["00000002","00000020","00000000","00000000","00000002","unguarded"],["00000002","00000021","00000000","00000000","00000001","unguarded"],["00000002","00000022","00000000","00000000","00000000","unguarded"],["00000002","00000023","00000000","00000000","00000000","unguarded"],["00000002","00000024","00000000","00000000","00000000","unguarded"],["00000002","00000025","00000000","00000000","00000000","unguarded"],["00000002","00000026","00000000","00000000","00000000","unguarded"],["00000002","00000027","00000000","00000000","00000000","unguarded"],["00000002","00000028","00000000","00000000","00000000","unguarded"],["00000002","0000003f","00000000","00000000","00000000","unguarded"],["00000002","00000040","00000000","00000000","00000002","unguarded"],["00000002","00000041","00000000","00000000","00000001","unguarded"],["00000002","00000060","00000000","00000000","00000002","unguarded"],["00000002","0000007f","00000000","00000000","00000000","unguarded"],["00000002","00000080","00000000","00000000","00000002","unguarded"],["00000002","000000ff","00000000","00000000","00000000","unguarded"],["00000002","00000100","00000000","00000000","00000002","unguarded"],["00000002","7fffffff","00000000","00000000","00000000","unguarded"],["00000002","80000000","00000000","00000000","00000002","unguarded"],["00000002","ffffffe0","00000000","00000000","00000002","unguarded"],["00000002","ffffffff","00000000","00000000","00000000","unguarded"],["00000003","00000000","00000000","00000000","00000003"],["00000003","00000001","00000000","00000000","00000001"],["00000003","00000002","00000000","00000000","00000000"],["00000003","00000003","00000000","00000000","00000000"],["00000003","00000004","00000000","00000000","00000000"],["00000003","00000005","00000000","00000000","00000000"],["00000003","00000006","00000000","00000000","00000000"],["00000003","00000007","00000000","00000000","00000000"],["00000003","00000008","00000000","00000000","00000000"],["00000003","00000009","00000000","00000000","00000000"],["00000003","0000000a","00000000","00000000","00000000"],["00000003","0000000b","00000000","00000000","00000000"],["00000003","0000000c","00000000","00000000","00000000"],["00000003","0000000d","00000000","00000000","00000000"],["00000003","0000000e","00000000","00000000","00000000"],["00000003","0000000f","00000000","00000000","00000000"],["00000003","00000010","00000000","00000000","00000000"],["00000003","00000011","00000000","00000000","00000000"],["00000003","00000012","00000000","00000000","00000000"],["00000003","00000013","00000000","00000000","00000000"],["00000003","00000014","00000000","00000000","00000000"],["00000003","00000015","00000000","00000000","00000000"],["00000003","00000016","00000000","00000000","00000000"],["00000003","00000017","00000000","00000000","00000000"],["00000003","00000018","00000000","00000000","00000000"],["00000003","00000019","00000000","00000000","00000000"],["00000003","0000001a","00000000","00000000","00000000"],["00000003","0000001b","00000000","00000000","00000000"],["00000003","0000001c","00000000","00000000","00000000"],["00000003","0000001d","00000000","00000000","00000000"],["00000003","0000001e","00000000","00000000","00000000"],["00000003","0000001f","00000000","00000000","00000000"],["00000003","00000020","00000000","00000000","00000003","unguarded"],["00000003","00000021","00000000","00000000","00000001","unguarded"],["00000003","00000022","00000000","00000000","00000000","unguarded"],["00000003","00000023","00000000","00000000","00000000","unguarded"],["00000003","00000024","00000000","00000000","00000000","unguarded"],["00000003","00000025","00000000","00000000","00000000","unguarded"],["00000003","00000026","00000000","00000000","00000000","unguarded"],["00000003","00000027","00000000","00000000","00000000","unguarded"],["00000003","00000028","00000000","00000000","00000000","unguarded"],["00000003","0000003f","00000000","00000000","00000000","unguarded"],["00000003","00000040","00000000","00000000","00000003","unguarded"],["00000003","00000041","00000000","00000000","00000001","unguarded"],["00000003","00000060","00000000","00000000","00000003","unguarded"],["00000003","0000007f","00000000","00000000","00000000","unguarded"],["00000003","00000080","00000000","00000000","00000003","unguarded"],["00000003","000000ff","00000000","00000000","00000000","unguarded"],["00000003","00000100","00000000","00000000","00000003","unguarded"],["00000003","7fffffff","00000000","00000000","00000000","unguarded"],["00000003","80000000","00000000","00000000","00000003","unguarded"],["00000003","ffffffe0","00000000","00000000","00000003","unguarded"],["00000003","ffffffff","00000000","00000000","00000000","unguarded"],["00000005","00000000","00000000","00000000","00000005"],["00000005","00000001","00000000","00000000","00000002"],["00000005","00000002","00000000","00000000","00000001"],["00000005","00000003","00000000","00000000","00000000"],["00000005","00000004","00000000","00000000","00000000"],["00000005","00000005","00000000","00000000","00000000"],["00000005","00000006","00000000","00000000","00000000"],["00000005","00000007","00000000","00000000","00000000"],["00000005","00000008","00000000","00000000","00000000"],["00000005","00000009","00000000","00000000","00000000"],["00000005","0000000a","00000000","00000000","00000000"],["00000005","0000000b","00000000","00000000","00000000"],["00000005","0000000c","00000000","00000000","00000000"],["00000005","0000000d","00000000","00000000","00000000"],["00000005","0000000e","00000000","00000000","00000000"],["00000005","0000000f","00000000","00000000","00000000"],["00000005","00000010","00000000","00000000","00000000"],["00000005","00000011","00000000","00000000","00000000"],["00000005","00000012","00000000","00000000","00000000"],["00000005","00000013","00000000","00000000","00000000"],["00000005","00000014","00000000","00000000","00000000"],["00000005","00000015","00000000","00000000","00000000"],["00000005","00000016","00000000","00000000","00000000"],["00000005","00000017","00000000","00000000","00000000"],["00000005","00000018","00000000","00000000","00000000"],["00000005","00000019","00000000","00000000","00000000"],["00000005","0000001a","00000000","00000000","00000000"],["00000005","0000001b","00000000","00000000","00000000"],["00000005","0000001c","00000000","00000000","00000000"],["00000005","0000001d","00000000","00000000","00000000"],["00000005","0000001e","00000000","00000000","00000000"],["00000005","0000001f","00000000","00000000","00000000"],["00000005","00000020","00000000","00000000","00000005","unguarded"],["00000005","00000021","00000000","00000000","00000002","unguarded"],["00000005","00000022","00000000","00000000","00000001","unguarded"],["00000005","00000023","00000000","00000000","00000000","unguarded"],["00000005","00000024","00000000","00000000","00000000","unguarded"],["00000005","00000025","00000000","00000000","00000000","unguarded"],["00000005","00000026","00000000","00000000","00000000","unguarded"],["00000005","00000027","00000000","00000000","00000000","unguarded"],["00000005","00000028","00000000","00000000","00000000","unguarded"],["00000005","0000003f","00000000","00000000","00000000","unguarded"],["00000005","00000040","00000000","00000000","00000005","unguarded"],["00000005","00000041","00000000","00000000","00000002","unguarded"],["00000005","00000060","00000000","00000000","00000005","unguarded"],["00000005","0000007f","00000000","00000000","00000000","unguarded"],["00000005","00000080","00000000","00000000","00000005","unguarded"],["00000005","000000ff","00000000","00000000","00000000","unguarded"],["00000005","00000100","00000000","00000000","00000005","unguarded"],["00000005","7fffffff","00000000","00000000","00000000","unguarded"],["00000005","80000000","00000000","00000000","00000005","unguarded"],["00000005","ffffffe0","00000000","00000000","00000005","unguarded"],["00000005","ffffffff","00000000","00000000","00000000","unguarded"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","00000003"],["00000007","00000002","00000000","00000000","00000001"],["00000007","00000003","00000000","00000000","00000000"],["00000007","00000004","00000000","00000000","00000000"],["00000007","00000005","00000000","00000000","00000000"],["00000007","00000006","00000000","00000000","00000000"],["00000007","00000007","00000000","00000000","00000000"],["00000007","00000008","00000000","00000000","00000000"],["00000007","00000009","00000000","00000000","00000000"],["00000007","0000000a","00000000","00000000","00000000"],["00000007","0000000b","00000000","00000000","00000000"],["00000007","0000000c","00000000","00000000","00000000"],["00000007","0000000d","00000000","00000000","00000000"],["00000007","0000000e","00000000","00000000","00000000"],["00000007","0000000f","00000000","00000000","00000000"],["00000007","00000010","00000000","00000000","00000000"],["00000007","00000011","00000000","00000000","00000000"],["00000007","00000012","00000000","00000000","00000000"],["00000007","00000013","00000000","00000000","00000000"],["00000007","00000014","00000000","00000000","00000000"],["00000007","00000015","00000000","00000000","00000000"],["00000007","00000016","00000000","00000000","00000000"],["00000007","00000017","00000000","00000000","00000000"],["00000007","00000018","00000000","00000000","00000000"],["00000007","00000019","00000000","00000000","00000000"],["00000007","0000001a","00000000","00000000","00000000"],["00000007","0000001b","00000000","00000000","00000000"],["00000007","0000001c","00000000","00000000","00000000"],["00000007","0000001d","00000000","00000000","00000000"],["00000007","0000001e","00000000","00000000","00000000"],["00000007","0000001f","00000000","00000000","00000000"],["00000007","00000020","00000000","00000000","00000007","unguarded"],["00000007","00000021","00000000","00000000","00000003","unguarded"],["00000007","00000022","00000000","00000000","00000001","unguarded"],["00000007","00000023","00000000","00000000","00000000","unguarded"],["00000007","00000024","00000000","00000000","00000000","unguarded"],["00000007","00000025","00000000","00000000","00000000","unguarded"],["00000007","00000026","00000000","00000000","00000000","unguarded"],["00000007","00000027","00000000","00000000","00000000","unguarded"],["00000007","00000028","00000000","00000000","00000000","unguarded"],["00000007","0000003f","00000000","00000000","00000000","unguarded"],["00000007","00000040","00000000","00000000","00000007","unguarded"],["00000007","00000041","00000000","00000000","00000003","unguarded"],["00000007","00000060","00000000","00000000","00000007","unguarded"],["00000007","0000007f","00000000","00000000","00000000","unguarded"],["00000007","00000080","00000000","00000000","00000007","unguarded"],["00000007","000000ff","00000000","00000000","00000000","unguarded"],["00000007","00000100","00000000","00000000","00000007","unguarded"],["00000007","7fffffff","00000000","00000000","00000000","unguarded"],["00000007","80000000","00000000","00000000","00000007","unguarded"],["00000007","ffffffe0","00000000","00000000","00000007","unguarded"],["00000007","ffffffff","00000000","00000000","00000000","unguarded"],["0000001f","00000000","00000000","00000000","0000001f"],["0000001f","00000001","00000000","00000000","0000000f"],["0000001f","00000002","00000000","00000000","00000007"],["0000001f","00000003","00000000","00000000","00000003"],["0000001f","00000004","00000000","00000000","00000001"],["0000001f","00000005","00000000","00000000","00000000"],["0000001f","00000006","00000000","00000000","00000000"],["0000001f","00000007","00000000","00000000","00000000"],["0000001f","00000008","00000000","00000000","00000000"],["0000001f","00000009","00000000","00000000","00000000"],["0000001f","0000000a","00000000","00000000","00000000"],["0000001f","0000000b","00000000","00000000","00000000"],["0000001f","0000000c","00000000","00000000","00000000"],["0000001f","0000000d","00000000","00000000","00000000"],["0000001f","0000000e","00000000","00000000","00000000"],["0000001f","0000000f","00000000","00000000","00000000"],["0000001f","00000010","00000000","00000000","00000000"],["0000001f","00000011","00000000","00000000","00000000"],["0000001f","00000012","00000000","00000000","00000000"],["0000001f","00000013","00000000","00000000","00000000"],["0000001f","00000014","00000000","00000000","00000000"],["0000001f","00000015","00000000","00000000","00000000"],["0000001f","00000016","00000000","00000000","00000000"],["0000001f","00000017","00000000","00000000","00000000"],["0000001f","00000018","00000000","00000000","00000000"],["0000001f","00000019","00000000","00000000","00000000"],["0000001f","0000001a","00000000","00000000","00000000"],["0000001f","0000001b","00000000","00000000","00000000"],["0000001f","0000001c","00000000","00000000","00000000"],["0000001f","0000001d","00000000","00000000","00000000"],["0000001f","0000001e","00000000","00000000","00000000"],["0000001f","0000001f","00000000","00000000","00000000"],["0000001f","00000020","00000000","00000000","0000001f","unguarded"],["0000001f","00000021","00000000","00000000","0000000f","unguarded"],["0000001f","00000022","00000000","00000000","00000007","unguarded"],["0000001f","00000023","00000000","00000000","00000003","unguarded"],["0000001f","00000024","00000000","00000000","00000001","unguarded"],["0000001f","00000025","00000000","00000000","00000000","unguarded"],["0000001f","00000026","00000000","00000000","00000000","unguarded"],["0000001f","00000027","00000000","00000000","00000000","unguarded"],["0000001f","00000028","00000000","00000000","00000000","unguarded"],["0000001f","0000003f","00000000","00000000","00000000","unguarded"],["0000001f","00000040","00000000","00000000","0000001f","unguarded"],["0000001f","00000041","00000000","00000000","0000000f","unguarded"],["0000001f","00000060","00000000","00000000","0000001f","unguarded"],["0000001f","0000007f","00000000","00000000","00000000","unguarded"],["0000001f","00000080","00000000","00000000","0000001f","unguarded"],["0000001f","000000ff","00000000","00000000","00000000","unguarded"],["0000001f","00000100","00000000","00000000","0000001f","unguarded"],["0000001f","7fffffff","00000000","00000000","00000000","unguarded"],["0000001f","80000000","00000000","00000000","0000001f","unguarded"],["0000001f","ffffffe0","00000000","00000000","0000001f","unguarded"],["0000001f","ffffffff","00000000","00000000","00000000","unguarded"],["00000020","00000000","00000000","00000000","00000020"],["00000020","00000001","00000000","00000000","00000010"],["00000020","00000002","00000000","00000000","00000008"],["00000020","00000003","00000000","00000000","00000004"],["00000020","00000004","00000000","00000000","00000002"],["00000020","00000005","00000000","00000000","00000001"],["00000020","00000006","00000000","00000000","00000000"],["00000020","00000007","00000000","00000000","00000000"],["00000020","00000008","00000000","00000000","00000000"],["00000020","00000009","00000000","00000000","00000000"],["00000020","0000000a","00000000","00000000","00000000"],["00000020","0000000b","00000000","00000000","00000000"],["00000020","0000000c","00000000","00000000","00000000"],["00000020","0000000d","00000000","00000000","00000000"],["00000020","0000000e","00000000","00000000","00000000"],["00000020","0000000f","00000000","00000000","00000000"],["00000020","00000010","00000000","00000000","00000000"],["00000020","00000011","00000000","00000000","00000000"],["00000020","00000012","00000000","00000000","00000000"],["00000020","00000013","00000000","00000000","00000000"],["00000020","00000014","00000000","00000000","00000000"],["00000020","00000015","00000000","00000000","00000000"],["00000020","00000016","00000000","00000000","00000000"],["00000020","00000017","00000000","00000000","00000000"],["00000020","00000018","00000000","00000000","00000000"],["00000020","00000019","00000000","00000000","00000000"],["00000020","0000001a","00000000","00000000","00000000"],["00000020","0000001b","00000000","00000000","00000000"],["00000020","0000001c","00000000","00000000","00000000"],["00000020","0000001d","00000000","00000000","00000000"],["00000020","0000001e","00000000","00000000","00000000"],["00000020","0000001f","00000000","00000000","00000000"],["00000020","00000020","00000000","00000000","00000020","unguarded"],["00000020","00000021","00000000","00000000","00000010","unguarded"],["00000020","00000022","00000000","00000000","00000008","unguarded"],["00000020","00000023","00000000","00000000","00000004","unguarded"],["00000020","00000024","00000000","00000000","00000002","unguarded"],["00000020","00000025","00000000","00000000","00000001","unguarded"],["00000020","00000026","00000000","00000000","00000000","unguarded"],["00000020","00000027","00000000","00000000","00000000","unguarded"],["00000020","00000028","00000000","00000000","00000000","unguarded"],["00000020","0000003f","00000000","00000000","00000000","unguarded"],["00000020","00000040","00000000","00000000","00000020","unguarded"],["00000020","00000041","00000000","00000000","00000010","unguarded"],["00000020","00000060","00000000","00000000","00000020","unguarded"],["00000020","0000007f","00000000","00000000","00000000","unguarded"],["00000020","00000080","00000000","00000000","00000020","unguarded"],["00000020","000000ff","00000000","00000000","00000000","unguarded"],["00000020","00000100","00000000","00000000","00000020","unguarded"],["00000020","7fffffff","00000000","00000000","00000000","unguarded"],["00000020","80000000","00000000","00000000","00000020","unguarded"],["00000020","ffffffe0","00000000","00000000","00000020","unguarded"],["00000020","ffffffff","00000000","00000000","00000000","unguarded"],["00000021","00000000","00000000","00000000","00000021"],["00000021","00000001","00000000","00000000","00000010"],["00000021","00000002","00000000","00000000","00000008"],["00000021","00000003","00000000","00000000","00000004"],["00000021","00000004","00000000","00000000","00000002"],["00000021","00000005","00000000","00000000","00000001"],["00000021","00000006","00000000","00000000","00000000"],["00000021","00000007","00000000","00000000","00000000"],["00000021","00000008","00000000","00000000","00000000"],["00000021","00000009","00000000","00000000","00000000"],["00000021","0000000a","00000000","00000000","00000000"],["00000021","0000000b","00000000","00000000","00000000"],["00000021","0000000c","00000000","00000000","00000000"],["00000021","0000000d","00000000","00000000","00000000"],["00000021","0000000e","00000000","00000000","00000000"],["00000021","0000000f","00000000","00000000","00000000"],["00000021","00000010","00000000","00000000","00000000"],["00000021","00000011","00000000","00000000","00000000"],["00000021","00000012","00000000","00000000","00000000"],["00000021","00000013","00000000","00000000","00000000"],["00000021","00000014","00000000","00000000","00000000"],["00000021","00000015","00000000","00000000","00000000"],["00000021","00000016","00000000","00000000","00000000"],["00000021","00000017","00000000","00000000","00000000"],["00000021","00000018","00000000","00000000","00000000"],["00000021","00000019","00000000","00000000","00000000"],["00000021","0000001a","00000000","00000000","00000000"],["00000021","0000001b","00000000","00000000","00000000"],["00000021","0000001c","00000000","00000000","00000000"],["00000021","0000001d","00000000","00000000","00000000"],["00000021","0000001e","00000000","00000000","00000000"],["00000021","0000001f","00000000","00000000","00000000"],["00000021","00000020","00000000","00000000","00000021","unguarded"],["00000021","00000021","00000000","00000000","00000010","unguarded"],["00000021","00000022","00000000","00000000","00000008","unguarded"],["00000021","00000023","00000000","00000000","00000004","unguarded"],["00000021","00000024","00000000","00000000","00000002","unguarded"],["00000021","00000025","00000000","00000000","00000001","unguarded"],["00000021","00000026","00000000","00000000","00000000","unguarded"],["00000021","00000027","00000000","00000000","00000000","unguarded"],["00000021","00000028","00000000","00000000","00000000","unguarded"],["00000021","0000003f","00000000","00000000","00000000","unguarded"],["00000021","00000040","00000000","00000000","00000021","unguarded"],["00000021","00000041","00000000","00000000","00000010","unguarded"],["00000021","00000060","00000000","00000000","00000021","unguarded"],["00000021","0000007f","00000000","00000000","00000000","unguarded"],["00000021","00000080","00000000","00000000","00000021","unguarded"],["00000021","000000ff","00000000","00000000","00000000","unguarded"],["00000021","00000100","00000000","00000000","00000021","unguarded"],["00000021","7fffffff","00000000","00000000","00000000","unguarded"],["00000021","80000000","00000000","00000000","00000021","unguarded"],["00000021","ffffffe0","00000000","00000000","00000021","unguarded"],["00000021","ffffffff","00000000","00000000","00000000","unguarded"],["0000003f","00000000","00000000","00000000","0000003f"],["0000003f","00000001","00000000","00000000","0000001f"],["0000003f","00000002","00000000","00000000","0000000f"],["0000003f","00000003","00000000","00000000","00000007"],["0000003f","00000004","00000000","00000000","00000003"],["0000003f","00000005","00000000","00000000","00000001"],["0000003f","00000006","00000000","00000000","00000000"],["0000003f","00000007","00000000","00000000","00000000"],["0000003f","00000008","00000000","00000000","00000000"],["0000003f","00000009","00000000","00000000","00000000"],["0000003f","0000000a","00000000","00000000","00000000"],["0000003f","0000000b","00000000","00000000","00000000"],["0000003f","0000000c","00000000","00000000","00000000"],["0000003f","0000000d","00000000","00000000","00000000"],["0000003f","0000000e","00000000","00000000","00000000"],["0000003f","0000000f","00000000","00000000","00000000"],["0000003f","00000010","00000000","00000000","00000000"],["0000003f","00000011","00000000","00000000","00000000"],["0000003f","00000012","00000000","00000000","00000000"],["0000003f","00000013","00000000","00000000","00000000"],["0000003f","00000014","00000000","00000000","00000000"],["0000003f","00000015","00000000","00000000","00000000"],["0000003f","00000016","00000000","00000000","00000000"],["0000003f","00000017","00000000","00000000","00000000"],["0000003f","00000018","00000000","00000000","00000000"],["0000003f","00000019","00000000","00000000","00000000"],["0000003f","0000001a","00000000","00000000","00000000"],["0000003f","0000001b","00000000","00000000","00000000"],["0000003f","0000001c","00000000","00000000","00000000"],["0000003f","0000001d","00000000","00000000","00000000"],["0000003f","0000001e","00000000","00000000","00000000"],["0000003f","0000001f","00000000","00000000","00000000"],["0000003f","00000020","00000000","00000000","0000003f","unguarded"],["0000003f","00000021","00000000","00000000","0000001f","unguarded"],["0000003f","00000022","00000000","00000000","0000000f","unguarded"],["0000003f","00000023","00000000","00000000","00000007","unguarded"],["0000003f","00000024","00000000","00000000","00000003","unguarded"],["0000003f","00000025","00000000","00000000","00000001","unguarded"],["0000003f","00000026","00000000","00000000","00000000","unguarded"],["0000003f","00000027","00000000","00000000","00000000","unguarded"],["0000003f","00000028","00000000","00000000","00000000","unguarded"],["0000003f","0000003f","00000000","00000000","00000000","unguarded"],["0000003f","00000040","00000000","00000000","0000003f","unguarded"],["0000003f","00000041","00000000","00000000","0000001f","unguarded"],["0000003f","00000060","00000000","00000000","0000003f","unguarded"],["0000003f","0000007f","00000000","00000000","00000000","unguarded"],["0000003f","00000080","00000000","00000000","0000003f","unguarded"],["0000003f","000000ff","00000000","00000000","00000000","unguarded"],["0000003f","00000100","00000000","00000000","0000003f","unguarded"],["0000003f","7fffffff","00000000","00000000","00000000","unguarded"],["0000003f","80000000","00000000","00000000","0000003f","unguarded"],["0000003f","ffffffe0","00000000","00000000","0000003f","unguarded"],["0000003f","ffffffff","00000000","00000000","00000000","unguarded"],["00000040","00000000","00000000","00000000","00000040"],["00000040","00000001","00000000","00000000","00000020"],["00000040","00000002","00000000","00000000","00000010"],["00000040","00000003","00000000","00000000","00000008"],["00000040","00000004","00000000","00000000","00000004"],["00000040","00000005","00000000","00000000","00000002"],["00000040","00000006","00000000","00000000","00000001"],["00000040","00000007","00000000","00000000","00000000"],["00000040","00000008","00000000","00000000","00000000"],["00000040","00000009","00000000","00000000","00000000"],["00000040","0000000a","00000000","00000000","00000000"],["00000040","0000000b","00000000","00000000","00000000"],["00000040","0000000c","00000000","00000000","00000000"],["00000040","0000000d","00000000","00000000","00000000"],["00000040","0000000e","00000000","00000000","00000000"],["00000040","0000000f","00000000","00000000","00000000"],["00000040","00000010","00000000","00000000","00000000"],["00000040","00000011","00000000","00000000","00000000"],["00000040","00000012","00000000","00000000","00000000"],["00000040","00000013","00000000","00000000","00000000"],["00000040","00000014","00000000","00000000","00000000"],["00000040","00000015","00000000","00000000","00000000"],["00000040","00000016","00000000","00000000","00000000"],["00000040","00000017","00000000","00000000","00000000"],["00000040","00000018","00000000","00000000","00000000"],["00000040","00000019","00000000","00000000","00000000"],["00000040","0000001a","00000000","00000000","00000000"],["00000040","0000001b","00000000","00000000","00000000"],["00000040","0000001c","00000000","00000000","00000000"],["00000040","0000001d","00000000","00000000","00000000"],["00000040","0000001e","00000000","00000000","00000000"],["00000040","0000001f","00000000","00000000","00000000"],["00000040","00000020","00000000","00000000","00000040","unguarded"],["00000040","00000021","00000000","00000000","00000020","unguarded"],["00000040","00000022","00000000","00000000","00000010","unguarded"],["00000040","00000023","00000000","00000000","00000008","unguarded"],["00000040","00000024","00000000","00000000","00000004","unguarded"],["00000040","00000025","00000000","00000000","00000002","unguarded"],["00000040","00000026","00000000","00000000","00000001","unguarded"],["00000040","00000027","00000000","00000000","00000000","unguarded"],["00000040","00000028","00000000","00000000","00000000","unguarded"],["00000040","0000003f","00000000","00000000","00000000","unguarded"],["00000040","00000040","00000000","00000000","00000040","unguarded"],["00000040","00000041","00000000","00000000","00000020","unguarded"],["00000040","00000060","00000000","00000000","00000040","unguarded"],["00000040","0000007f","00000000","00000000","00000000","unguarded"],["00000040","00000080","00000000","00000000","00000040","unguarded"],["00000040","000000ff","00000000","00000000","00000000","unguarded"],["00000040","00000100","00000000","00000000","00000040","unguarded"],["00000040","7fffffff","00000000","00000000","00000000","unguarded"],["00000040","80000000","00000000","00000000","00000040","unguarded"],["00000040","ffffffe0","00000000","00000000","00000040","unguarded"],["00000040","ffffffff","00000000","00000000","00000000","unguarded"],["000000ff","00000000","00000000","00000000","000000ff"],["000000ff","00000001","00000000","00000000","0000007f"],["000000ff","00000002","00000000","00000000","0000003f"],["000000ff","00000003","00000000","00000000","0000001f"],["000000ff","00000004","00000000","00000000","0000000f"],["000000ff","00000005","00000000","00000000","00000007"],["000000ff","00000006","00000000","00000000","00000003"],["000000ff","00000007","00000000","00000000","00000001"],["000000ff","00000008","00000000","00000000","00000000"],["000000ff","00000009","00000000","00000000","00000000"],["000000ff","0000000a","00000000","00000000","00000000"],["000000ff","0000000b","00000000","00000000","00000000"],["000000ff","0000000c","00000000","00000000","00000000"],["000000ff","0000000d","00000000","00000000","00000000"],["000000ff","0000000e","00000000","00000000","00000000"],["000000ff","0000000f","00000000","00000000","00000000"],["000000ff","00000010","00000000","00000000","00000000"],["000000ff","00000011","00000000","00000000","00000000"],["000000ff","00000012","00000000","00000000","00000000"],["000000ff","00000013","00000000","00000000","00000000"],["000000ff","00000014","00000000","00000000","00000000"],["000000ff","00000015","00000000","00000000","00000000"],["000000ff","00000016","00000000","00000000","00000000"],["000000ff","00000017","00000000","00000000","00000000"],["000000ff","00000018","00000000","00000000","00000000"],["000000ff","00000019","00000000","00000000","00000000"],["000000ff","0000001a","00000000","00000000","00000000"],["000000ff","0000001b","00000000","00000000","00000000"],["000000ff","0000001c","00000000","00000000","00000000"],["000000ff","0000001d","00000000","00000000","00000000"],["000000ff","0000001e","00000000","00000000","00000000"],["000000ff","0000001f","00000000","00000000","00000000"],["000000ff","00000020","00000000","00000000","000000ff","unguarded"],["000000ff","00000021","00000000","00000000","0000007f","unguarded"],["000000ff","00000022","00000000","00000000","0000003f","unguarded"],["000000ff","00000023","00000000","00000000","0000001f","unguarded"],["000000ff","00000024","00000000","00000000","0000000f","unguarded"],["000000ff","00000025","00000000","00000000","00000007","unguarded"],["000000ff","00000026","00000000","00000000","00000003","unguarded"],["000000ff","00000027","00000000","00000000","00000001","unguarded"],["000000ff","00000028","00000000","00000000","00000000","unguarded"],["000000ff","0000003f","00000000","00000000","00000000","unguarded"],["000000ff","00000040","00000000","00000000","000000ff","unguarded"],["000000ff","00000041","00000000","00000000","0000007f","unguarded"],["000000ff","00000060","00000000","00000000","000000ff","unguarded"],["000000ff","0000007f","00000000","00000000","00000000","unguarded"],["000000ff","00000080","00000000","00000000","000000ff","unguarded"],["000000ff","000000ff","00000000","00000000","00000000","unguarded"],["000000ff","00000100","00000000","00000000","000000ff","unguarded"],["000000ff","7fffffff","00000000","00000000","00000000","unguarded"],["000000ff","80000000","00000000","00000000","000000ff","unguarded"],["000000ff","ffffffe0","00000000","00000000","000000ff","unguarded"],["000000ff","ffffffff","00000000","00000000","00000000","unguarded"],["00007fff","00000000","00000000","00000000","00007fff"],["00007fff","00000001","00000000","00000000","00003fff"],["00007fff","00000002","00000000","00000000","00001fff"],["00007fff","00000003","00000000","00000000","00000fff"],["00007fff","00000004","00000000","00000000","000007ff"],["00007fff","00000005","00000000","00000000","000003ff"],["00007fff","00000006","00000000","00000000","000001ff"],["00007fff","00000007","00000000","00000000","000000ff"],["00007fff","00000008","00000000","00000000","0000007f"],["00007fff","00000009","00000000","00000000","0000003f"],["00007fff","0000000a","00000000","00000000","0000001f"],["00007fff","0000000b","00000000","00000000","0000000f"],["00007fff","0000000c","00000000","00000000","00000007"],["00007fff","0000000d","00000000","00000000","00000003"],["00007fff","0000000e","00000000","00000000","00000001"],["00007fff","0000000f","00000000","00000000","00000000"],["00007fff","00000010","00000000","00000000","00000000"],["00007fff","00000011","00000000","00000000","00000000"],["00007fff","00000012","00000000","00000000","00000000"],["00007fff","00000013","00000000","00000000","00000000"],["00007fff","00000014","00000000","00000000","00000000"],["00007fff","00000015","00000000","00000000","00000000"],["00007fff","00000016","00000000","00000000","00000000"],["00007fff","00000017","00000000","00000000","00000000"],["00007fff","00000018","00000000","00000000","00000000"],["00007fff","00000019","00000000","00000000","00000000"],["00007fff","0000001a","00000000","00000000","00000000"],["00007fff","0000001b","00000000","00000000","00000000"],["00007fff","0000001c","00000000","00000000","00000000"],["00007fff","0000001d","00000000","00000000","00000000"],["00007fff","0000001e","00000000","00000000","00000000"],["00007fff","0000001f","00000000","00000000","00000000"],["00007fff","00000020","00000000","00000000","00007fff","unguarded"],["00007fff","00000021","00000000","00000000","00003fff","unguarded"],["00007fff","00000022","00000000","00000000","00001fff","unguarded"],["00007fff","00000023","00000000","00000000","00000fff","unguarded"],["00007fff","00000024","00000000","00000000","000007ff","unguarded"],["00007fff","00000025","00000000","00000000","000003ff","unguarded"],["00007fff","00000026","00000000","00000000","000001ff","unguarded"],["00007fff","00000027","00000000","00000000","000000ff","unguarded"],["00007fff","00000028","00000000","00000000","0000007f","unguarded"],["00007fff","0000003f","00000000","00000000","00000000","unguarded"],["00007fff","00000040","00000000","00000000","00007fff","unguarded"],["00007fff","00000041","00000000","00000000","00003fff","unguarded"],["00007fff","00000060","00000000","00000000","00007fff","unguarded"],["00007fff","0000007f","00000000","00000000","00000000","unguarded"],["00007fff","00000080","00000000","00000000","00007fff","unguarded"],["00007fff","000000ff","00000000","00000000","00000000","unguarded"],["00007fff","00000100","00000000","00000000","00007fff","unguarded"],["00007fff","7fffffff","00000000","00000000","00000000","unguarded"],["00007fff","80000000","00000000","00000000","00007fff","unguarded"],["00007fff","ffffffe0","00000000","00000000","00007fff","unguarded"],["00007fff","ffffffff","00000000","00000000","00000000","unguarded"],["00008000","00000000","00000000","00000000","00008000"],["00008000","00000001","00000000","00000000","00004000"],["00008000","00000002","00000000","00000000","00002000"],["00008000","00000003","00000000","00000000","00001000"],["00008000","00000004","00000000","00000000","00000800"],["00008000","00000005","00000000","00000000","00000400"],["00008000","00000006","00000000","00000000","00000200"],["00008000","00000007","00000000","00000000","00000100"],["00008000","00000008","00000000","00000000","00000080"],["00008000","00000009","00000000","00000000","00000040"],["00008000","0000000a","00000000","00000000","00000020"],["00008000","0000000b","00000000","00000000","00000010"],["00008000","0000000c","00000000","00000000","00000008"],["00008000","0000000d","00000000","00000000","00000004"],["00008000","0000000e","00000000","00000000","00000002"],["00008000","0000000f","00000000","00000000","00000001"],["00008000","00000010","00000000","00000000","00000000"],["00008000","00000011","00000000","00000000","00000000"],["00008000","00000012","00000000","00000000","00000000"],["00008000","00000013","00000000","00000000","00000000"],["00008000","00000014","00000000","00000000","00000000"],["00008000","00000015","00000000","00000000","00000000"],["00008000","00000016","00000000","00000000","00000000"],["00008000","00000017","00000000","00000000","00000000"],["00008000","00000018","00000000","00000000","00000000"],["00008000","00000019","00000000","00000000","00000000"],["00008000","0000001a","00000000","00000000","00000000"],["00008000","0000001b","00000000","00000000","00000000"],["00008000","0000001c","00000000","00000000","00000000"],["00008000","0000001d","00000000","00000000","00000000"],["00008000","0000001e","00000000","00000000","00000000"],["00008000","0000001f","00000000","00000000","00000000"],["00008000","00000020","00000000","00000000","00008000","unguarded"],["00008000","00000021","00000000","00000000","00004000","unguarded"],["00008000","00000022","00000000","00000000","00002000","unguarded"],["00008000","00000023","00000000","00000000","00001000","unguarded"],["00008000","00000024","00000000","00000000","00000800","unguarded"],["00008000","00000025","00000000","00000000","00000400","unguarded"],["00008000","00000026","00000000","00000000","00000200","unguarded"],["00008000","00000027","00000000","00000000","00000100","unguarded"],["00008000","00000028","00000000","00000000","00000080","unguarded"],["00008000","0000003f","00000000","00000000","00000000","unguarded"],["00008000","00000040","00000000","00000000","00008000","unguarded"],["00008000","00000041","00000000","00000000","00004000","unguarded"],["00008000","00000060","00000000","00000000","00008000","unguarded"],["00008000","0000007f","00000000","00000000","00000000","unguarded"],["00008000","00000080","00000000","00000000","00008000","unguarded"],["00008000","000000ff","00000000","00000000","00000000","unguarded"],["00008000","00000100","00000000","00000000","00008000","unguarded"],["00008000","7fffffff","00000000","00000000","00000000","unguarded"],["00008000","80000000","00000000","00000000","00008000","unguarded"],["00008000","ffffffe0","00000000","00000000","00008000","unguarded"],["00008000","ffffffff","00000000","00000000","00000000","unguarded"],["0000ffff","00000000","00000000","00000000","0000ffff"],["0000ffff","00000001","00000000","00000000","00007fff"],["0000ffff","00000002","00000000","00000000","00003fff"],["0000ffff","00000003","00000000","00000000","00001fff"],["0000ffff","00000004","00000000","00000000","00000fff"],["0000ffff","00000005","00000000","00000000","000007ff"],["0000ffff","00000006","00000000","00000000","000003ff"],["0000ffff","00000007","00000000","00000000","000001ff"],["0000ffff","00000008","00000000","00000000","000000ff"],["0000ffff","00000009","00000000","00000000","0000007f"],["0000ffff","0000000a","00000000","00000000","0000003f"],["0000ffff","0000000b","00000000","00000000","0000001f"],["0000ffff","0000000c","00000000","00000000","0000000f"],["0000ffff","0000000d","00000000","00000000","00000007"],["0000ffff","0000000e","00000000","00000000","00000003"],["0000ffff","0000000f","00000000","00000000","00000001"],["0000ffff","00000010","00000000","00000000","00000000"],["0000ffff","00000011","00000000","00000000","00000000"],["0000ffff","00000012","00000000","00000000","00000000"],["0000ffff","00000013","00000000","00000000","00000000"],["0000ffff","00000014","00000000","00000000","00000000"],["0000ffff","00000015","00000000","00000000","00000000"],["0000ffff","00000016","00000000","00000000","00000000"],["0000ffff","00000017","00000000","00000000","00000000"],["0000ffff","00000018","00000000","00000000","00000000"],["0000ffff","00000019","00000000","00000000","00000000"],["0000ffff","0000001a","00000000","00000000","00000000"],["0000ffff","0000001b","00000000","00000000","00000000"],["0000ffff","0000001c","00000000","00000000","00000000"],["0000ffff","0000001d","00000000","00000000","00000000"],["0000ffff","0000001e","00000000","00000000","00000000"],["0000ffff","0000001f","00000000","00000000","00000000"],["0000ffff","00000020","00000000","00000000","0000ffff","unguarded"],["0000ffff","00000021","00000000","00000000","00007fff","unguarded"],["0000ffff","00000022","00000000","00000000","00003fff","unguarded"],["0000ffff","00000023","00000000","00000000","00001fff","unguarded"],["0000ffff","00000024","00000000","00000000","00000fff","unguarded"],["0000ffff","00000025","00000000","00000000","000007ff","unguarded"],["0000ffff","00000026","00000000","00000000","000003ff","unguarded"],["0000ffff","00000027","00000000","00000000","000001ff","unguarded"],["0000ffff","00000028","00000000","00000000","000000ff","unguarded"],["0000ffff","0000003f","00000000","00000000","00000000","unguarded"],["0000ffff","00000040","00000000","00000000","0000ffff","unguarded"],["0000ffff","00000041","00000000","00000000","00007fff","unguarded"],["0000ffff","00000060","00000000","00000000","0000ffff","unguarded"],["0000ffff","0000007f","00000000","00000000","00000000","unguarded"],["0000ffff","00000080","00000000","00000000","0000ffff","unguarded"],["0000ffff","000000ff","00000000","00000000","00000000","unguarded"],["0000ffff","00000100","00000000","00000000","0000ffff","unguarded"],["0000ffff","7fffffff","00000000","00000000","00000000","unguarded"],["0000ffff","80000000","00000000","00000000","0000ffff","unguarded"],["0000ffff","ffffffe0","00000000","00000000","0000ffff","unguarded"],["0000ffff","ffffffff","00000000","00000000","00000000","unguarded"],["00010000","00000000","00000000","00000000","00010000"],["00010000","00000001","00000000","00000000","00008000"],["00010000","00000002","00000000","00000000","00004000"],["00010000","00000003","00000000","00000000","00002000"],["00010000","00000004","00000000","00000000","00001000"],["00010000","00000005","00000000","00000000","00000800"],["00010000","00000006","00000000","00000000","00000400"],["00010000","00000007","00000000","00000000","00000200"],["00010000","00000008","00000000","00000000","00000100"],["00010000","00000009","00000000","00000000","00000080"],["00010000","0000000a","00000000","00000000","00000040"],["00010000","0000000b","00000000","00000000","00000020"],["00010000","0000000c","00000000","00000000","00000010"],["00010000","0000000d","00000000","00000000","00000008"],["00010000","0000000e","00000000","00000000","00000004"],["00010000","0000000f","00000000","00000000","00000002"],["00010000","00000010","00000000","00000000","00000001"],["00010000","00000011","00000000","00000000","00000000"],["00010000","00000012","00000000","00000000","00000000"],["00010000","00000013","00000000","00000000","00000000"],["00010000","00000014","00000000","00000000","00000000"],["00010000","00000015","00000000","00000000","00000000"],["00010000","00000016","00000000","00000000","00000000"],["00010000","00000017","00000000","00000000","00000000"],["00010000","00000018","00000000","00000000","00000000"],["00010000","00000019","00000000","00000000","00000000"],["00010000","0000001a","00000000","00000000","00000000"],["00010000","0000001b","00000000","00000000","00000000"],["00010000","0000001c","00000000","00000000","00000000"],["00010000","0000001d","00000000","00000000","00000000"],["00010000","0000001e","00000000","00000000","00000000"],["00010000","0000001f","00000000","00000000","00000000"],["00010000","00000020","00000000","00000000","00010000","unguarded"],["00010000","00000021","00000000","00000000","00008000","unguarded"],["00010000","00000022","00000000","00000000","00004000","unguarded"],["00010000","00000023","00000000","00000000","00002000","unguarded"],["00010000","00000024","00000000","00000000","00001000","unguarded"],["00010000","00000025","00000000","00000000","00000800","unguarded"],["00010000","00000026","00000000","00000000","00000400","unguarded"],["00010000","00000027","00000000","00000000","00000200","unguarded"],["00010000","00000028","00000000","00000000","00000100","unguarded"],["00010000","0000003f","00000000","00000000","00000000","unguarded"],["00010000","00000040","00000000","00000000","00010000","unguarded"],["00010000","00000041","00000000","00000000","00008000","unguarded"],["00010000","00000060","00000000","00000000","00010000","unguarded"],["00010000","0000007f","00000000","00000000","00000000","unguarded"],["00010000","00000080","00000000","00000000","00010000","unguarded"],["00010000","000000ff","00000000","00000000","00000000","unguarded"],["00010000","00000100","00000000","00000000","00010000","unguarded"],["00010000","7fffffff","00000000","00000000","00000000","unguarded"],["00010000","80000000","00000000","00000000","00010000","unguarded"],["00010000","ffffffe0","00000000","00000000","00010000","unguarded"],["00010000","ffffffff","00000000","00000000","00000000","unguarded"],["55555555","00000000","00000000","00000000","55555555"],["55555555","00000001","00000000","00000000","2aaaaaaa"],["55555555","00000002","00000000","00000000","15555555"],["55555555","00000003","00000000","00000000","0aaaaaaa"],["55555555","00000004","00000000","00000000","05555555"],["55555555","00000005","00000000","00000000","02aaaaaa"],["55555555","00000006","00000000","00000000","01555555"],["55555555","00000007","00000000","00000000","00aaaaaa"],["55555555","00000008","00000000","00000000","00555555"],["55555555","00000009","00000000","00000000","002aaaaa"],["55555555","0000000a","00000000","00000000","00155555"],["55555555","0000000b","00000000","00000000","000aaaaa"],["55555555","0000000c","00000000","00000000","00055555"],["55555555","0000000d","00000000","00000000","0002aaaa"],["55555555","0000000e","00000000","00000000","00015555"],["55555555","0000000f","00000000","00000000","0000aaaa"],["55555555","00000010","00000000","00000000","00005555"],["55555555","00000011","00000000","00000000","00002aaa"],["55555555","00000012","00000000","00000000","00001555"],["55555555","00000013","00000000","00000000","00000aaa"],["55555555","00000014","00000000","00000000","00000555"],["55555555","00000015","00000000","00000000","000002aa"],["55555555","00000016","00000000","00000000","00000155"],["55555555","00000017","00000000","00000000","000000aa"],["55555555","00000018","00000000","00000000","00000055"],["55555555","00000019","00000000","00000000","0000002a"],["55555555","0000001a","00000000","00000000","00000015"],["55555555","0000001b","00000000","00000000","0000000a"],["55555555","0000001c","00000000","00000000","00000005"],["55555555","0000001d","00000000","00000000","00000002"],["55555555","0000001e","00000000","00000000","00000001"],["55555555","0000001f","00000000","00000000","00000000"],["55555555","00000020","00000000","00000000","55555555","unguarded"],["55555555","00000021","00000000","00000000","2aaaaaaa","unguarded"],["55555555","00000022","00000000","00000000","15555555","unguarded"],["55555555","00000023","00000000","00000000","0aaaaaaa","unguarded"],["55555555","00000024","00000000","00000000","05555555","unguarded"],["55555555","00000025","00000000","00000000","02aaaaaa","unguarded"],["55555555","00000026","00000000","00000000","01555555","unguarded"],["55555555","00000027","00000000","00000000","00aaaaaa","unguarded"],["55555555","00000028","00000000","00000000","00555555","unguarded"],["55555555","0000003f","00000000","00000000","00000000","unguarded"],["55555555","00000040","00000000","00000000","55555555","unguarded"],["55555555","00000041","00000000","00000000","2aaaaaaa","unguarded"],["55555555","00000060","00000000","00000000","55555555","unguarded"],["55555555","0000007f","00000000","00000000","00000000","unguarded"],["55555555","00000080","00000000","00000000","55555555","unguarded"],["55555555","000000ff","00000000","00000000","00000000","unguarded"],["55555555","00000100","00000000","00000000","55555555","unguarded"],["55555555","7fffffff","00000000","00000000","00000000","unguarded"],["55555555","80000000","00000000","00000000","55555555","unguarded"],["55555555","ffffffe0","00000000","00000000","55555555","unguarded"],["55555555","ffffffff","00000000","00000000","00000000","unguarded"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7ffffffe","00000001","00000000","00000000","3fffffff"],["7ffffffe","00000002","00000000","00000000","1fffffff"],["7ffffffe","00000003","00000000","00000000","0fffffff"],["7ffffffe","00000004","00000000","00000000","07ffffff"],["7ffffffe","00000005","00000000","00000000","03ffffff"],["7ffffffe","00000006","00000000","00000000","01ffffff"],["7ffffffe","00000007","00000000","00000000","00ffffff"],["7ffffffe","00000008","00000000","00000000","007fffff"],["7ffffffe","00000009","00000000","00000000","003fffff"],["7ffffffe","0000000a","00000000","00000000","001fffff"],["7ffffffe","0000000b","00000000","00000000","000fffff"],["7ffffffe","0000000c","00000000","00000000","0007ffff"],["7ffffffe","0000000d","00000000","00000000","0003ffff"],["7ffffffe","0000000e","00000000","00000000","0001ffff"],["7ffffffe","0000000f","00000000","00000000","0000ffff"],["7ffffffe","00000010","00000000","00000000","00007fff"],["7ffffffe","00000011","00000000","00000000","00003fff"],["7ffffffe","00000012","00000000","00000000","00001fff"],["7ffffffe","00000013","00000000","00000000","00000fff"],["7ffffffe","00000014","00000000","00000000","000007ff"],["7ffffffe","00000015","00000000","00000000","000003ff"],["7ffffffe","00000016","00000000","00000000","000001ff"],["7ffffffe","00000017","00000000","00000000","000000ff"],["7ffffffe","00000018","00000000","00000000","0000007f"],["7ffffffe","00000019","00000000","00000000","0000003f"],["7ffffffe","0000001a","00000000","00000000","0000001f"],["7ffffffe","0000001b","00000000","00000000","0000000f"],["7ffffffe","0000001c","00000000","00000000","00000007"],["7ffffffe","0000001d","00000000","00000000","00000003"],["7ffffffe","0000001e","00000000","00000000","00000001"],["7ffffffe","0000001f","00000000","00000000","00000000"],["7ffffffe","00000020","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","00000021","00000000","00000000","3fffffff","unguarded"],["7ffffffe","00000022","00000000","00000000","1fffffff","unguarded"],["7ffffffe","00000023","00000000","00000000","0fffffff","unguarded"],["7ffffffe","00000024","00000000","00000000","07ffffff","unguarded"],["7ffffffe","00000025","00000000","00000000","03ffffff","unguarded"],["7ffffffe","00000026","00000000","00000000","01ffffff","unguarded"],["7ffffffe","00000027","00000000","00000000","00ffffff","unguarded"],["7ffffffe","00000028","00000000","00000000","007fffff","unguarded"],["7ffffffe","0000003f","00000000","00000000","00000000","unguarded"],["7ffffffe","00000040","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","00000041","00000000","00000000","3fffffff","unguarded"],["7ffffffe","00000060","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","0000007f","00000000","00000000","00000000","unguarded"],["7ffffffe","00000080","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","000000ff","00000000","00000000","00000000","unguarded"],["7ffffffe","00000100","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","7fffffff","00000000","00000000","00000000","unguarded"],["7ffffffe","80000000","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","ffffffe0","00000000","00000000","7ffffffe","unguarded"],["7ffffffe","ffffffff","00000000","00000000","00000000","unguarded"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","3fffffff"],["7fffffff","00000002","00000000","00000000","1fffffff"],["7fffffff","00000003","00000000","00000000","0fffffff"],["7fffffff","00000004","00000000","00000000","07ffffff"],["7fffffff","00000005","00000000","00000000","03ffffff"],["7fffffff","00000006","00000000","00000000","01ffffff"],["7fffffff","00000007","00000000","00000000","00ffffff"],["7fffffff","00000008","00000000","00000000","007fffff"],["7fffffff","00000009","00000000","00000000","003fffff"],["7fffffff","0000000a","00000000","00000000","001fffff"],["7fffffff","0000000b","00000000","00000000","000fffff"],["7fffffff","0000000c","00000000","00000000","0007ffff"],["7fffffff","0000000d","00000000","00000000","0003ffff"],["7fffffff","0000000e","00000000","00000000","0001ffff"],["7fffffff","0000000f","00000000","00000000","0000ffff"],["7fffffff","00000010","00000000","00000000","00007fff"],["7fffffff","00000011","00000000","00000000","00003fff"],["7fffffff","00000012","00000000","00000000","00001fff"],["7fffffff","00000013","00000000","00000000","00000fff"],["7fffffff","00000014","00000000","00000000","000007ff"],["7fffffff","00000015","00000000","00000000","000003ff"],["7fffffff","00000016","00000000","00000000","000001ff"],["7fffffff","00000017","00000000","00000000","000000ff"],["7fffffff","00000018","00000000","00000000","0000007f"],["7fffffff","00000019","00000000","00000000","0000003f"],["7fffffff","0000001a","00000000","00000000","0000001f"],["7fffffff","0000001b","00000000","00000000","0000000f"],["7fffffff","0000001c","00000000","00000000","00000007"],["7fffffff","0000001d","00000000","00000000","00000003"],["7fffffff","0000001e","00000000","00000000","00000001"],["7fffffff","0000001f","00000000","00000000","00000000"],["7fffffff","00000020","00000000","00000000","7fffffff","unguarded"],["7fffffff","00000021","00000000","00000000","3fffffff","unguarded"],["7fffffff","00000022","00000000","00000000","1fffffff","unguarded"],["7fffffff","00000023","00000000","00000000","0fffffff","unguarded"],["7fffffff","00000024","00000000","00000000","07ffffff","unguarded"],["7fffffff","00000025","00000000","00000000","03ffffff","unguarded"],["7fffffff","00000026","00000000","00000000","01ffffff","unguarded"],["7fffffff","00000027","00000000","00000000","00ffffff","unguarded"],["7fffffff","00000028","00000000","00000000","007fffff","unguarded"],["7fffffff","0000003f","00000000","00000000","00000000","unguarded"],["7fffffff","00000040","00000000","00000000","7fffffff","unguarded"],["7fffffff","00000041","00000000","00000000","3fffffff","unguarded"],["7fffffff","00000060","00000000","00000000","7fffffff","unguarded"],["7fffffff","0000007f","00000000","00000000","00000000","unguarded"],["7fffffff","00000080","00000000","00000000","7fffffff","unguarded"],["7fffffff","000000ff","00000000","00000000","00000000","unguarded"],["7fffffff","00000100","00000000","00000000","7fffffff","unguarded"],["7fffffff","7fffffff","00000000","00000000","00000000","unguarded"],["7fffffff","80000000","00000000","00000000","7fffffff","unguarded"],["7fffffff","ffffffe0","00000000","00000000","7fffffff","unguarded"],["7fffffff","ffffffff","00000000","00000000","00000000","unguarded"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","c0000000"],["80000000","00000002","00000000","00000000","e0000000"],["80000000","00000003","00000000","00000000","f0000000"],["80000000","00000004","00000000","00000000","f8000000"],["80000000","00000005","00000000","00000000","fc000000"],["80000000","00000006","00000000","00000000","fe000000"],["80000000","00000007","00000000","00000000","ff000000"],["80000000","00000008","00000000","00000000","ff800000"],["80000000","00000009","00000000","00000000","ffc00000"],["80000000","0000000a","00000000","00000000","ffe00000"],["80000000","0000000b","00000000","00000000","fff00000"],["80000000","0000000c","00000000","00000000","fff80000"],["80000000","0000000d","00000000","00000000","fffc0000"],["80000000","0000000e","00000000","00000000","fffe0000"],["80000000","0000000f","00000000","00000000","ffff0000"],["80000000","00000010","00000000","00000000","ffff8000"],["80000000","00000011","00000000","00000000","ffffc000"],["80000000","00000012","00000000","00000000","ffffe000"],["80000000","00000013","00000000","00000000","fffff000"],["80000000","00000014","00000000","00000000","fffff800"],["80000000","00000015","00000000","00000000","fffffc00"],["80000000","00000016","00000000","00000000","fffffe00"],["80000000","00000017","00000000","00000000","ffffff00"],["80000000","00000018","00000000","00000000","ffffff80"],["80000000","00000019","00000000","00000000","ffffffc0"],["80000000","0000001a","00000000","00000000","ffffffe0"],["80000000","0000001b","00000000","00000000","fffffff0"],["80000000","0000001c","00000000","00000000","fffffff8"],["80000000","0000001d","00000000","00000000","fffffffc"],["80000000","0000001e","00000000","00000000","fffffffe"],["80000000","0000001f","00000000","00000000","ffffffff"],["80000000","00000020","00000000","00000000","80000000","unguarded"],["80000000","00000021","00000000","00000000","c0000000","unguarded"],["80000000","00000022","00000000","00000000","e0000000","unguarded"],["80000000","00000023","00000000","00000000","f0000000","unguarded"],["80000000","00000024","00000000","00000000","f8000000","unguarded"],["80000000","00000025","00000000","00000000","fc000000","unguarded"],["80000000","00000026","00000000","00000000","fe000000","unguarded"],["80000000","00000027","00000000","00000000","ff000000","unguarded"],["80000000","00000028","00000000","00000000","ff800000","unguarded"],["80000000","0000003f","00000000","00000000","ffffffff","unguarded"],["80000000","00000040","00000000","00000000","80000000","unguarded"],["80000000","00000041","00000000","00000000","c0000000","unguarded"],["80000000","00000060","00000000","00000000","80000000","unguarded"],["80000000","0000007f","00000000","00000000","ffffffff","unguarded"],["80000000","00000080","00000000","00000000","80000000","unguarded"],["80000000","000000ff","00000000","00000000","ffffffff","unguarded"],["80000000","00000100","00000000","00000000","80000000","unguarded"],["80000000","7fffffff","00000000","00000000","ffffffff","unguarded"],["80000000","80000000","00000000","00000000","80000000","unguarded"],["80000000","ffffffe0","00000000","00000000","80000000","unguarded"],["80000000","ffffffff","00000000","00000000","ffffffff","unguarded"],["80000001","00000000","00000000","00000000","80000001"],["80000001","00000001","00000000","00000000","c0000000"],["80000001","00000002","00000000","00000000","e0000000"],["80000001","00000003","00000000","00000000","f0000000"],["80000001","00000004","00000000","00000000","f8000000"],["80000001","00000005","00000000","00000000","fc000000"],["80000001","00000006","00000000","00000000","fe000000"],["80000001","00000007","00000000","00000000","ff000000"],["80000001","00000008","00000000","00000000","ff800000"],["80000001","00000009","00000000","00000000","ffc00000"],["80000001","0000000a","00000000","00000000","ffe00000"],["80000001","0000000b","00000000","00000000","fff00000"],["80000001","0000000c","00000000","00000000","fff80000"],["80000001","0000000d","00000000","00000000","fffc0000"],["80000001","0000000e","00000000","00000000","fffe0000"],["80000001","0000000f","00000000","00000000","ffff0000"],["80000001","00000010","00000000","00000000","ffff8000"],["80000001","00000011","00000000","00000000","ffffc000"],["80000001","00000012","00000000","00000000","ffffe000"],["80000001","00000013","00000000","00000000","fffff000"],["80000001","00000014","00000000","00000000","fffff800"],["80000001","00000015","00000000","00000000","fffffc00"],["80000001","00000016","00000000","00000000","fffffe00"],["80000001","00000017","00000000","00000000","ffffff00"],["80000001","00000018","00000000","00000000","ffffff80"],["80000001","00000019","00000000","00000000","ffffffc0"],["80000001","0000001a","00000000","00000000","ffffffe0"],["80000001","0000001b","00000000","00000000","fffffff0"],["80000001","0000001c","00000000","00000000","fffffff8"],["80000001","0000001d","00000000","00000000","fffffffc"],["80000001","0000001e","00000000","00000000","fffffffe"],["80000001","0000001f","00000000","00000000","ffffffff"],["80000001","00000020","00000000","00000000","80000001","unguarded"],["80000001","00000021","00000000","00000000","c0000000","unguarded"],["80000001","00000022","00000000","00000000","e0000000","unguarded"],["80000001","00000023","00000000","00000000","f0000000","unguarded"],["80000001","00000024","00000000","00000000","f8000000","unguarded"],["80000001","00000025","00000000","00000000","fc000000","unguarded"],["80000001","00000026","00000000","00000000","fe000000","unguarded"],["80000001","00000027","00000000","00000000","ff000000","unguarded"],["80000001","00000028","00000000","00000000","ff800000","unguarded"],["80000001","0000003f","00000000","00000000","ffffffff","unguarded"],["80000001","00000040","00000000","00000000","80000001","unguarded"],["80000001","00000041","00000000","00000000","c0000000","unguarded"],["80000001","00000060","00000000","00000000","80000001","unguarded"],["80000001","0000007f","00000000","00000000","ffffffff","unguarded"],["80000001","00000080","00000000","00000000","80000001","unguarded"],["80000001","000000ff","00000000","00000000","ffffffff","unguarded"],["80000001","00000100","00000000","00000000","80000001","unguarded"],["80000001","7fffffff","00000000","00000000","ffffffff","unguarded"],["80000001","80000000","00000000","00000000","80000001","unguarded"],["80000001","ffffffe0","00000000","00000000","80000001","unguarded"],["80000001","ffffffff","00000000","00000000","ffffffff","unguarded"],["aaaaaaaa","00000000","00000000","00000000","aaaaaaaa"],["aaaaaaaa","00000001","00000000","00000000","d5555555"],["aaaaaaaa","00000002","00000000","00000000","eaaaaaaa"],["aaaaaaaa","00000003","00000000","00000000","f5555555"],["aaaaaaaa","00000004","00000000","00000000","faaaaaaa"],["aaaaaaaa","00000005","00000000","00000000","fd555555"],["aaaaaaaa","00000006","00000000","00000000","feaaaaaa"],["aaaaaaaa","00000007","00000000","00000000","ff555555"],["aaaaaaaa","00000008","00000000","00000000","ffaaaaaa"],["aaaaaaaa","00000009","00000000","00000000","ffd55555"],["aaaaaaaa","0000000a","00000000","00000000","ffeaaaaa"],["aaaaaaaa","0000000b","00000000","00000000","fff55555"],["aaaaaaaa","0000000c","00000000","00000000","fffaaaaa"],["aaaaaaaa","0000000d","00000000","00000000","fffd5555"],["aaaaaaaa","0000000e","00000000","00000000","fffeaaaa"],["aaaaaaaa","0000000f","00000000","00000000","ffff5555"],["aaaaaaaa","00000010","00000000","00000000","ffffaaaa"],["aaaaaaaa","00000011","00000000","00000000","ffffd555"],["aaaaaaaa","00000012","00000000","00000000","ffffeaaa"],["aaaaaaaa","00000013","00000000","00000000","fffff555"],["aaaaaaaa","00000014","00000000","00000000","fffffaaa"],["aaaaaaaa","00000015","00000000","00000000","fffffd55"],["aaaaaaaa","00000016","00000000","00000000","fffffeaa"],["aaaaaaaa","00000017","00000000","00000000","ffffff55"],["aaaaaaaa","00000018","00000000","00000000","ffffffaa"],["aaaaaaaa","00000019","00000000","00000000","ffffffd5"],["aaaaaaaa","0000001a","00000000","00000000","ffffffea"],["aaaaaaaa","0000001b","00000000","00000000","fffffff5"],["aaaaaaaa","0000001c","00000000","00000000","fffffffa"],["aaaaaaaa","0000001d","00000000","00000000","fffffffd"],["aaaaaaaa","0000001e","00000000","00000000","fffffffe"],["aaaaaaaa","0000001f","00000000","00000000","ffffffff"],["aaaaaaaa","00000020","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","00000021","00000000","00000000","d5555555","unguarded"],["aaaaaaaa","00000022","00000000","00000000","eaaaaaaa","unguarded"],["aaaaaaaa","00000023","00000000","00000000","f5555555","unguarded"],["aaaaaaaa","00000024","00000000","00000000","faaaaaaa","unguarded"],["aaaaaaaa","00000025","00000000","00000000","fd555555","unguarded"],["aaaaaaaa","00000026","00000000","00000000","feaaaaaa","unguarded"],["aaaaaaaa","00000027","00000000","00000000","ff555555","unguarded"],["aaaaaaaa","00000028","00000000","00000000","ffaaaaaa","unguarded"],["aaaaaaaa","0000003f","00000000","00000000","ffffffff","unguarded"],["aaaaaaaa","00000040","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","00000041","00000000","00000000","d5555555","unguarded"],["aaaaaaaa","00000060","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","0000007f","00000000","00000000","ffffffff","unguarded"],["aaaaaaaa","00000080","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","000000ff","00000000","00000000","ffffffff","unguarded"],["aaaaaaaa","00000100","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","7fffffff","00000000","00000000","ffffffff","unguarded"],["aaaaaaaa","80000000","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","ffffffe0","00000000","00000000","aaaaaaaa","unguarded"],["aaaaaaaa","ffffffff","00000000","00000000","ffffffff","unguarded"],["deadbeef","00000000","00000000","00000000","deadbeef"],["deadbeef","00000001","00000000","00000000","ef56df77"],["deadbeef","00000002","00000000","00000000","f7ab6fbb"],["deadbeef","00000003","00000000","00000000","fbd5b7dd"],["deadbeef","00000004","00000000","00000000","fdeadbee"],["deadbeef","00000005","00000000","00000000","fef56df7"],["deadbeef","00000006","00000000","00000000","ff7ab6fb"],["deadbeef","00000007","00000000","00000000","ffbd5b7d"],["deadbeef","00000008","00000000","00000000","ffdeadbe"],["deadbeef","00000009","00000000","00000000","ffef56df"],["deadbeef","0000000a","00000000","00000000","fff7ab6f"],["deadbeef","0000000b","00000000","00000000","fffbd5b7"],["deadbeef","0000000c","00000000","00000000","fffdeadb"],["deadbeef","0000000d","00000000","00000000","fffef56d"],["deadbeef","0000000e","00000000","00000000","ffff7ab6"],["deadbeef","0000000f","00000000","00000000","ffffbd5b"],["deadbeef","00000010","00000000","00000000","ffffdead"],["deadbeef","00000011","00000000","00000000","ffffef56"],["deadbeef","00000012","00000000","00000000","fffff7ab"],["deadbeef","00000013","00000000","00000000","fffffbd5"],["deadbeef","00000014","00000000","00000000","fffffdea"],["deadbeef","00000015","00000000","00000000","fffffef5"],["deadbeef","00000016","00000000","00000000","ffffff7a"],["deadbeef","00000017","00000000","00000000","ffffffbd"],["deadbeef","00000018","00000000","00000000","ffffffde"],["deadbeef","00000019","00000000","00000000","ffffffef"],["deadbeef","0000001a","00000000","00000000","fffffff7"],["deadbeef","0000001b","00000000","00000000","fffffffb"],["deadbeef","0000001c","00000000","00000000","fffffffd"],["deadbeef","0000001d","00000000","00000000","fffffffe"],["deadbeef","0000001e","00000000","00000000","ffffffff"],["deadbeef","0000001f","00000000","00000000","ffffffff"],["deadbeef","00000020","00000000","00000000","deadbeef","unguarded"],["deadbeef","00000021","00000000","00000000","ef56df77","unguarded"],["deadbeef","00000022","00000000","00000000","f7ab6fbb","unguarded"],["deadbeef","00000023","00000000","00000000","fbd5b7dd","unguarded"],["deadbeef","00000024","00000000","00000000","fdeadbee","unguarded"],["deadbeef","00000025","00000000","00000000","fef56df7","unguarded"],["deadbeef","00000026","00000000","00000000","ff7ab6fb","unguarded"],["deadbeef","00000027","00000000","00000000","ffbd5b7d","unguarded"],["deadbeef","00000028","00000000","00000000","ffdeadbe","unguarded"],["deadbeef","0000003f","00000000","00000000","ffffffff","unguarded"],["deadbeef","00000040","00000000","00000000","deadbeef","unguarded"],["deadbeef","00000041","00000000","00000000","ef56df77","unguarded"],["deadbeef","00000060","00000000","00000000","deadbeef","unguarded"],["deadbeef","0000007f","00000000","00000000","ffffffff","unguarded"],["deadbeef","00000080","00000000","00000000","deadbeef","unguarded"],["deadbeef","000000ff","00000000","00000000","ffffffff","unguarded"],["deadbeef","00000100","00000000","00000000","deadbeef","unguarded"],["deadbeef","7fffffff","00000000","00000000","ffffffff","unguarded"],["deadbeef","80000000","00000000","00000000","deadbeef","unguarded"],["deadbeef","ffffffe0","00000000","00000000","deadbeef","unguarded"],["deadbeef","ffffffff","00000000","00000000","ffffffff","unguarded"],["ffff0000","00000000","00000000","00000000","ffff0000"],["ffff0000","00000001","00000000","00000000","ffff8000"],["ffff0000","00000002","00000000","00000000","ffffc000"],["ffff0000","00000003","00000000","00000000","ffffe000"],["ffff0000","00000004","00000000","00000000","fffff000"],["ffff0000","00000005","00000000","00000000","fffff800"],["ffff0000","00000006","00000000","00000000","fffffc00"],["ffff0000","00000007","00000000","00000000","fffffe00"],["ffff0000","00000008","00000000","00000000","ffffff00"],["ffff0000","00000009","00000000","00000000","ffffff80"],["ffff0000","0000000a","00000000","00000000","ffffffc0"],["ffff0000","0000000b","00000000","00000000","ffffffe0"],["ffff0000","0000000c","00000000","00000000","fffffff0"],["ffff0000","0000000d","00000000","00000000","fffffff8"],["ffff0000","0000000e","00000000","00000000","fffffffc"],["ffff0000","0000000f","00000000","00000000","fffffffe"],["ffff0000","00000010","00000000","00000000","ffffffff"],["ffff0000","00000011","00000000","00000000","ffffffff"],["ffff0000","00000012","00000000","00000000","ffffffff"],["ffff0000","00000013","00000000","00000000","ffffffff"],["ffff0000","00000014","00000000","00000000","ffffffff"],["ffff0000","00000015","00000000","00000000","ffffffff"],["ffff0000","00000016","00000000","00000000","ffffffff"],["ffff0000","00000017","00000000","00000000","ffffffff"],["ffff0000","00000018","00000000","00000000","ffffffff"],["ffff0000","00000019","00000000","00000000","ffffffff"],["ffff0000","0000001a","00000000","00000000","ffffffff"],["ffff0000","0000001b","00000000","00000000","ffffffff"],["ffff0000","0000001c","00000000","00000000","ffffffff"],["ffff0000","0000001d","00000000","00000000","ffffffff"],["ffff0000","0000001e","00000000","00000000","ffffffff"],["ffff0000","0000001f","00000000","00000000","ffffffff"],["ffff0000","00000020","00000000","00000000","ffff0000","unguarded"],["ffff0000","00000021","00000000","00000000","ffff8000","unguarded"],["ffff0000","00000022","00000000","00000000","ffffc000","unguarded"],["ffff0000","00000023","00000000","00000000","ffffe000","unguarded"],["ffff0000","00000024","00000000","00000000","fffff000","unguarded"],["ffff0000","00000025","00000000","00000000","fffff800","unguarded"],["ffff0000","00000026","00000000","00000000","fffffc00","unguarded"],["ffff0000","00000027","00000000","00000000","fffffe00","unguarded"],["ffff0000","00000028","00000000","00000000","ffffff00","unguarded"],["ffff0000","0000003f","00000000","00000000","ffffffff","unguarded"],["ffff0000","00000040","00000000","00000000","ffff0000","unguarded"],["ffff0000","00000041","00000000","00000000","ffff8000","unguarded"],["ffff0000","00000060","00000000","00000000","ffff0000","unguarded"],["ffff0000","0000007f","00000000","00000000","ffffffff","unguarded"],["ffff0000","00000080","00000000","00000000","ffff0000","unguarded"],["ffff0000","000000ff","00000000","00000000","ffffffff","unguarded"],["ffff0000","00000100","00000000","00000000","ffff0000","unguarded"],["ffff0000","7fffffff","00000000","00000000","ffffffff","unguarded"],["ffff0000","80000000","00000000","00000000","ffff0000","unguarded"],["ffff0000","ffffffe0","00000000","00000000","ffff0000","unguarded"],["ffff0000","ffffffff","00000000","00000000","ffffffff","unguarded"],["ffff8000","00000000","00000000","00000000","ffff8000"],["ffff8000","00000001","00000000","00000000","ffffc000"],["ffff8000","00000002","00000000","00000000","ffffe000"],["ffff8000","00000003","00000000","00000000","fffff000"],["ffff8000","00000004","00000000","00000000","fffff800"],["ffff8000","00000005","00000000","00000000","fffffc00"],["ffff8000","00000006","00000000","00000000","fffffe00"],["ffff8000","00000007","00000000","00000000","ffffff00"],["ffff8000","00000008","00000000","00000000","ffffff80"],["ffff8000","00000009","00000000","00000000","ffffffc0"],["ffff8000","0000000a","00000000","00000000","ffffffe0"],["ffff8000","0000000b","00000000","00000000","fffffff0"],["ffff8000","0000000c","00000000","00000000","fffffff8"],["ffff8000","0000000d","00000000","00000000","fffffffc"],["ffff8000","0000000e","00000000","00000000","fffffffe"],["ffff8000","0000000f","00000000","00000000","ffffffff"],["ffff8000","00000010","00000000","00000000","ffffffff"],["ffff8000","00000011","00000000","00000000","ffffffff"],["ffff8000","00000012","00000000","00000000","ffffffff"],["ffff8000","00000013","00000000","00000000","ffffffff"],["ffff8000","00000014","00000000","00000000","ffffffff"],["ffff8000","00000015","00000000","00000000","ffffffff"],["ffff8000","00000016","00000000","00000000","ffffffff"],["ffff8000","00000017","00000000","00000000","ffffffff"],["ffff8000","00000018","00000000","00000000","ffffffff"],["ffff8000","00000019","00000000","00000000","ffffffff"],["ffff8000","0000001a","00000000","00000000","ffffffff"],["ffff8000","0000001b","00000000","00000000","ffffffff"],["ffff8000","0000001c","00000000","00000000","ffffffff"],["ffff8000","0000001d","00000000","00000000","ffffffff"],["ffff8000","0000001e","00000000","00000000","ffffffff"],["ffff8000","0000001f","00000000","00000000","ffffffff"],["ffff8000","00000020","00000000","00000000","ffff8000","unguarded"],["ffff8000","00000021","00000000","00000000","ffffc000","unguarded"],["ffff8000","00000022","00000000","00000000","ffffe000","unguarded"],["ffff8000","00000023","00000000","00000000","fffff000","unguarded"],["ffff8000","00000024","00000000","00000000","fffff800","unguarded"],["ffff8000","00000025","00000000","00000000","fffffc00","unguarded"],["ffff8000","00000026","00000000","00000000","fffffe00","unguarded"],["ffff8000","00000027","00000000","00000000","ffffff00","unguarded"],["ffff8000","00000028","00000000","00000000","ffffff80","unguarded"],["ffff8000","0000003f","00000000","00000000","ffffffff","unguarded"],["ffff8000","00000040","00000000","00000000","ffff8000","unguarded"],["ffff8000","00000041","00000000","00000000","ffffc000","unguarded"],["ffff8000","00000060","00000000","00000000","ffff8000","unguarded"],["ffff8000","0000007f","00000000","00000000","ffffffff","unguarded"],["ffff8000","00000080","00000000","00000000","ffff8000","unguarded"],["ffff8000","000000ff","00000000","00000000","ffffffff","unguarded"],["ffff8000","00000100","00000000","00000000","ffff8000","unguarded"],["ffff8000","7fffffff","00000000","00000000","ffffffff","unguarded"],["ffff8000","80000000","00000000","00000000","ffff8000","unguarded"],["ffff8000","ffffffe0","00000000","00000000","ffff8000","unguarded"],["ffff8000","ffffffff","00000000","00000000","ffffffff","unguarded"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["ffffffe0","00000001","00000000","00000000","fffffff0"],["ffffffe0","00000002","00000000","00000000","fffffff8"],["ffffffe0","00000003","00000000","00000000","fffffffc"],["ffffffe0","00000004","00000000","00000000","fffffffe"],["ffffffe0","00000005","00000000","00000000","ffffffff"],["ffffffe0","00000006","00000000","00000000","ffffffff"],["ffffffe0","00000007","00000000","00000000","ffffffff"],["ffffffe0","00000008","00000000","00000000","ffffffff"],["ffffffe0","00000009","00000000","00000000","ffffffff"],["ffffffe0","0000000a","00000000","00000000","ffffffff"],["ffffffe0","0000000b","00000000","00000000","ffffffff"],["ffffffe0","0000000c","00000000","00000000","ffffffff"],["ffffffe0","0000000d","00000000","00000000","ffffffff"],["ffffffe0","0000000e","00000000","00000000","ffffffff"],["ffffffe0","0000000f","00000000","00000000","ffffffff"],["ffffffe0","00000010","00000000","00000000","ffffffff"],["ffffffe0","00000011","00000000","00000000","ffffffff"],["ffffffe0","00000012","00000000","00000000","ffffffff"],["ffffffe0","00000013","00000000","00000000","ffffffff"],["ffffffe0","00000014","00000000","00000000","ffffffff"],["ffffffe0","00000015","00000000","00000000","ffffffff"],["ffffffe0","00000016","00000000","00000000","ffffffff"],["ffffffe0","00000017","00000000","00000000","ffffffff"],["ffffffe0","00000018","00000000","00000000","ffffffff"],["ffffffe0","00000019","00000000","00000000","ffffffff"],["ffffffe0","0000001a","00000000","00000000","ffffffff"],["ffffffe0","0000001b","00000000","00000000","ffffffff"],["ffffffe0","0000001c","00000000","00000000","ffffffff"],["ffffffe0","0000001d","00000000","00000000","ffffffff"],["ffffffe0","0000001e","00000000","00000000","ffffffff"],["ffffffe0","0000001f","00000000","00000000","ffffffff"],["ffffffe0","00000020","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","00000021","00000000","00000000","fffffff0","unguarded"],["ffffffe0","00000022","00000000","00000000","fffffff8","unguarded"],["ffffffe0","00000023","00000000","00000000","fffffffc","unguarded"],["ffffffe0","00000024","00000000","00000000","fffffffe","unguarded"],["ffffffe0","00000025","00000000","00000000","ffffffff","unguarded"],["ffffffe0","00000026","00000000","00000000","ffffffff","unguarded"],["ffffffe0","00000027","00000000","00000000","ffffffff","unguarded"],["ffffffe0","00000028","00000000","00000000","ffffffff","unguarded"],["ffffffe0","0000003f","00000000","00000000","ffffffff","unguarded"],["ffffffe0","00000040","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","00000041","00000000","00000000","fffffff0","unguarded"],["ffffffe0","00000060","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","0000007f","00000000","00000000","ffffffff","unguarded"],["ffffffe0","00000080","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","000000ff","00000000","00000000","ffffffff","unguarded"],["ffffffe0","00000100","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","7fffffff","00000000","00000000","ffffffff","unguarded"],["ffffffe0","80000000","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","ffffffe0","00000000","00000000","ffffffe0","unguarded"],["ffffffe0","ffffffff","00000000","00000000","ffffffff","unguarded"],["ffffffe1","00000000","00000000","00000000","ffffffe1"],["ffffffe1","00000001","00000000","00000000","fffffff0"],["ffffffe1","00000002","00000000","00000000","fffffff8"],["ffffffe1","00000003","00000000","00000000","fffffffc"],["ffffffe1","00000004","00000000","00000000","fffffffe"],["ffffffe1","00000005","00000000","00000000","ffffffff"],["ffffffe1","00000006","00000000","00000000","ffffffff"],["ffffffe1","00000007","00000000","00000000","ffffffff"],["ffffffe1","00000008","00000000","00000000","ffffffff"],["ffffffe1","00000009","00000000","00000000","ffffffff"],["ffffffe1","0000000a","00000000","00000000","ffffffff"],["ffffffe1","0000000b","00000000","00000000","ffffffff"],["ffffffe1","0000000c","00000000","00000000","ffffffff"],["ffffffe1","0000000d","00000000","00000000","ffffffff"],["ffffffe1","0000000e","00000000","00000000","ffffffff"],["ffffffe1","0000000f","00000000","00000000","ffffffff"],["ffffffe1","00000010","00000000","00000000","ffffffff"],["ffffffe1","00000011","00000000","00000000","ffffffff"],["ffffffe1","00000012","00000000","00000000","ffffffff"],["ffffffe1","00000013","00000000","00000000","ffffffff"],["ffffffe1","00000014","00000000","00000000","ffffffff"],["ffffffe1","00000015","00000000","00000000","ffffffff"],["ffffffe1","00000016","00000000","00000000","ffffffff"],["ffffffe1","00000017","00000000","00000000","ffffffff"],["ffffffe1","00000018","00000000","00000000","ffffffff"],["ffffffe1","00000019","00000000","00000000","ffffffff"],["ffffffe1","0000001a","00000000","00000000","ffffffff"],["ffffffe1","0000001b","00000000","00000000","ffffffff"],["ffffffe1","0000001c","00000000","00000000","ffffffff"],["ffffffe1","0000001d","00000000","00000000","ffffffff"],["ffffffe1","0000001e","00000000","00000000","ffffffff"],["ffffffe1","0000001f","00000000","00000000","ffffffff"],["ffffffe1","00000020","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","00000021","00000000","00000000","fffffff0","unguarded"],["ffffffe1","00000022","00000000","00000000","fffffff8","unguarded"],["ffffffe1","00000023","00000000","00000000","fffffffc","unguarded"],["ffffffe1","00000024","00000000","00000000","fffffffe","unguarded"],["ffffffe1","00000025","00000000","00000000","ffffffff","unguarded"],["ffffffe1","00000026","00000000","00000000","ffffffff","unguarded"],["ffffffe1","00000027","00000000","00000000","ffffffff","unguarded"],["ffffffe1","00000028","00000000","00000000","ffffffff","unguarded"],["ffffffe1","0000003f","00000000","00000000","ffffffff","unguarded"],["ffffffe1","00000040","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","00000041","00000000","00000000","fffffff0","unguarded"],["ffffffe1","00000060","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","0000007f","00000000","00000000","ffffffff","unguarded"],["ffffffe1","00000080","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","000000ff","00000000","00000000","ffffffff","unguarded"],["ffffffe1","00000100","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","7fffffff","00000000","00000000","ffffffff","unguarded"],["ffffffe1","80000000","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","ffffffe0","00000000","00000000","ffffffe1","unguarded"],["ffffffe1","ffffffff","00000000","00000000","ffffffff","unguarded"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffffc"],["fffffff9","00000002","00000000","00000000","fffffffe"],["fffffff9","00000003","00000000","00000000","ffffffff"],["fffffff9","00000004","00000000","00000000","ffffffff"],["fffffff9","00000005","00000000","00000000","ffffffff"],["fffffff9","00000006","00000000","00000000","ffffffff"],["fffffff9","00000007","00000000","00000000","ffffffff"],["fffffff9","00000008","00000000","00000000","ffffffff"],["fffffff9","00000009","00000000","00000000","ffffffff"],["fffffff9","0000000a","00000000","00000000","ffffffff"],["fffffff9","0000000b","00000000","00000000","ffffffff"],["fffffff9","0000000c","00000000","00000000","ffffffff"],["fffffff9","0000000d","00000000","00000000","ffffffff"],["fffffff9","0000000e","00000000","00000000","ffffffff"],["fffffff9","0000000f","00000000","00000000","ffffffff"],["fffffff9","00000010","00000000","00000000","ffffffff"],["fffffff9","00000011","00000000","00000000","ffffffff"],["fffffff9","00000012","00000000","00000000","ffffffff"],["fffffff9","00000013","00000000","00000000","ffffffff"],["fffffff9","00000014","00000000","00000000","ffffffff"],["fffffff9","00000015","00000000","00000000","ffffffff"],["fffffff9","00000016","00000000","00000000","ffffffff"],["fffffff9","00000017","00000000","00000000","ffffffff"],["fffffff9","00000018","00000000","00000000","ffffffff"],["fffffff9","00000019","00000000","00000000","ffffffff"],["fffffff9","0000001a","00000000","00000000","ffffffff"],["fffffff9","0000001b","00000000","00000000","ffffffff"],["fffffff9","0000001c","00000000","00000000","ffffffff"],["fffffff9","0000001d","00000000","00000000","ffffffff"],["fffffff9","0000001e","00000000","00000000","ffffffff"],["fffffff9","0000001f","00000000","00000000","ffffffff"],["fffffff9","00000020","00000000","00000000","fffffff9","unguarded"],["fffffff9","00000021","00000000","00000000","fffffffc","unguarded"],["fffffff9","00000022","00000000","00000000","fffffffe","unguarded"],["fffffff9","00000023","00000000","00000000","ffffffff","unguarded"],["fffffff9","00000024","00000000","00000000","ffffffff","unguarded"],["fffffff9","00000025","00000000","00000000","ffffffff","unguarded"],["fffffff9","00000026","00000000","00000000","ffffffff","unguarded"],["fffffff9","00000027","00000000","00000000","ffffffff","unguarded"],["fffffff9","00000028","00000000","00000000","ffffffff","unguarded"],["fffffff9","0000003f","00000000","00000000","ffffffff","unguarded"],["fffffff9","00000040","00000000","00000000","fffffff9","unguarded"],["fffffff9","00000041","00000000","00000000","fffffffc","unguarded"],["fffffff9","00000060","00000000","00000000","fffffff9","unguarded"],["fffffff9","0000007f","00000000","00000000","ffffffff","unguarded"],["fffffff9","00000080","00000000","00000000","fffffff9","unguarded"],["fffffff9","000000ff","00000000","00000000","ffffffff","unguarded"],["fffffff9","00000100","00000000","00000000","fffffff9","unguarded"],["fffffff9","7fffffff","00000000","00000000","ffffffff","unguarded"],["fffffff9","80000000","00000000","00000000","fffffff9","unguarded"],["fffffff9","ffffffe0","00000000","00000000","fffffff9","unguarded"],["fffffff9","ffffffff","00000000","00000000","ffffffff","unguarded"],["fffffffd","00000000","00000000","00000000","fffffffd"],["fffffffd","00000001","00000000","00000000","fffffffe"],["fffffffd","00000002","00000000","00000000","ffffffff"],["fffffffd","00000003","00000000","00000000","ffffffff"],["fffffffd","00000004","00000000","00000000","ffffffff"],["fffffffd","00000005","00000000","00000000","ffffffff"],["fffffffd","00000006","00000000","00000000","ffffffff"],["fffffffd","00000007","00000000","00000000","ffffffff"],["fffffffd","00000008","00000000","00000000","ffffffff"],["fffffffd","00000009","00000000","00000000","ffffffff"],["fffffffd","0000000a","00000000","00000000","ffffffff"],["fffffffd","0000000b","00000000","00000000","ffffffff"],["fffffffd","0000000c","00000000","00000000","ffffffff"],["fffffffd","0000000d","00000000","00000000","ffffffff"],["fffffffd","0000000e","00000000","00000000","ffffffff"],["fffffffd","0000000f","00000000","00000000","ffffffff"],["fffffffd","00000010","00000000","00000000","ffffffff"],["fffffffd","00000011","00000000","00000000","ffffffff"],["fffffffd","00000012","00000000","00000000","ffffffff"],["fffffffd","00000013","00000000","00000000","ffffffff"],["fffffffd","00000014","00000000","00000000","ffffffff"],["fffffffd","00000015","00000000","00000000","ffffffff"],["fffffffd","00000016","00000000","00000000","ffffffff"],["fffffffd","00000017","00000000","00000000","ffffffff"],["fffffffd","00000018","00000000","00000000","ffffffff"],["fffffffd","00000019","00000000","00000000","ffffffff"],["fffffffd","0000001a","00000000","00000000","ffffffff"],["fffffffd","0000001b","00000000","00000000","ffffffff"],["fffffffd","0000001c","00000000","00000000","ffffffff"],["fffffffd","0000001d","00000000","00000000","ffffffff"],["fffffffd","0000001e","00000000","00000000","ffffffff"],["fffffffd","0000001f","00000000","00000000","ffffffff"],["fffffffd","00000020","00000000","00000000","fffffffd","unguarded"],["fffffffd","00000021","00000000","00000000","fffffffe","unguarded"],["fffffffd","00000022","00000000","00000000","ffffffff","unguarded"],["fffffffd","00000023","00000000","00000000","ffffffff","unguarded"],["fffffffd","00000024","00000000","00000000","ffffffff","unguarded"],["fffffffd","00000025","00000000","00000000","ffffffff","unguarded"],["fffffffd","00000026","00000000","00000000","ffffffff","unguarded"],["fffffffd","00000027","00000000","00000000","ffffffff","unguarded"],["fffffffd","00000028","00000000","00000000","ffffffff","unguarded"],["fffffffd","0000003f","00000000","00000000","ffffffff","unguarded"],["fffffffd","00000040","00000000","00000000","fffffffd","unguarded"],["fffffffd","00000041","00000000","00000000","fffffffe","unguarded"],["fffffffd","00000060","00000000","00000000","fffffffd","unguarded"],["fffffffd","0000007f","00000000","00000000","ffffffff","unguarded"],["fffffffd","00000080","00000000","00000000","fffffffd","unguarded"],["fffffffd","000000ff","00000000","00000000","ffffffff","unguarded"],["fffffffd","00000100","00000000","00000000","fffffffd","unguarded"],["fffffffd","7fffffff","00000000","00000000","ffffffff","unguarded"],["fffffffd","80000000","00000000","00000000","fffffffd","unguarded"],["fffffffd","ffffffe0","00000000","00000000","fffffffd","unguarded"],["fffffffd","ffffffff","00000000","00000000","ffffffff","unguarded"],["fffffffe","00000000","00000000","00000000","fffffffe"],["fffffffe","00000001","00000000","00000000","ffffffff"],["fffffffe","00000002","00000000","00000000","ffffffff"],["fffffffe","00000003","00000000","00000000","ffffffff"],["fffffffe","00000004","00000000","00000000","ffffffff"],["fffffffe","00000005","00000000","00000000","ffffffff"],["fffffffe","00000006","00000000","00000000","ffffffff"],["fffffffe","00000007","00000000","00000000","ffffffff"],["fffffffe","00000008","00000000","00000000","ffffffff"],["fffffffe","00000009","00000000","00000000","ffffffff"],["fffffffe","0000000a","00000000","00000000","ffffffff"],["fffffffe","0000000b","00000000","00000000","ffffffff"],["fffffffe","0000000c","00000000","00000000","ffffffff"],["fffffffe","0000000d","00000000","00000000","ffffffff"],["fffffffe","0000000e","00000000","00000000","ffffffff"],["fffffffe","0000000f","00000000","00000000","ffffffff"],["fffffffe","00000010","00000000","00000000","ffffffff"],["fffffffe","00000011","00000000","00000000","ffffffff"],["fffffffe","00000012","00000000","00000000","ffffffff"],["fffffffe","00000013","00000000","00000000","ffffffff"],["fffffffe","00000014","00000000","00000000","ffffffff"],["fffffffe","00000015","00000000","00000000","ffffffff"],["fffffffe","00000016","00000000","00000000","ffffffff"],["fffffffe","00000017","00000000","00000000","ffffffff"],["fffffffe","00000018","00000000","00000000","ffffffff"],["fffffffe","00000019","00000000","00000000","ffffffff"],["fffffffe","0000001a","00000000","00000000","ffffffff"],["fffffffe","0000001b","00000000","00000000","ffffffff"],["fffffffe","0000001c","00000000","00000000","ffffffff"],["fffffffe","0000001d","00000000","00000000","ffffffff"],["fffffffe","0000001e","00000000","00000000","ffffffff"],["fffffffe","0000001f","00000000","00000000","ffffffff"],["fffffffe","00000020","00000000","00000000","fffffffe","unguarded"],["fffffffe","00000021","00000000","00000000","ffffffff","unguarded"],["fffffffe","00000022","00000000","00000000","ffffffff","unguarded"],["fffffffe","00000023","00000000","00000000","ffffffff","unguarded"],["fffffffe","00000024","00000000","00000000","ffffffff","unguarded"],["fffffffe","00000025","00000000","00000000","ffffffff","unguarded"],["fffffffe","00000026","00000000","00000000","ffffffff","unguarded"],["fffffffe","00000027","00000000","00000000","ffffffff","unguarded"],["fffffffe","00000028","00000000","00000000","ffffffff","unguarded"],["fffffffe","0000003f","00000000","00000000","ffffffff","unguarded"],["fffffffe","00000040","00000000","00000000","fffffffe","unguarded"],["fffffffe","00000041","00000000","00000000","ffffffff","unguarded"],["fffffffe","00000060","00000000","00000000","fffffffe","unguarded"],["fffffffe","0000007f","00000000","00000000","ffffffff","unguarded"],["fffffffe","00000080","00000000","00000000","fffffffe","unguarded"],["fffffffe","000000ff","00000000","00000000","ffffffff","unguarded"],["fffffffe","00000100","00000000","00000000","fffffffe","unguarded"],["fffffffe","7fffffff","00000000","00000000","ffffffff","unguarded"],["fffffffe","80000000","00000000","00000000","fffffffe","unguarded"],["fffffffe","ffffffe0","00000000","00000000","fffffffe","unguarded"],["fffffffe","ffffffff","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","ffffffff"],["ffffffff","00000002","00000000","00000000","ffffffff"],["ffffffff","00000003","00000000","00000000","ffffffff"],["ffffffff","00000004","00000000","00000000","ffffffff"],["ffffffff","00000005","00000000","00000000","ffffffff"],["ffffffff","00000006","00000000","00000000","ffffffff"],["ffffffff","00000007","00000000","00000000","ffffffff"],["ffffffff","00000008","00000000","00000000","ffffffff"],["ffffffff","00000009","00000000","00000000","ffffffff"],["ffffffff","0000000a","00000000","00000000","ffffffff"],["ffffffff","0000000b","00000000","00000000","ffffffff"],["ffffffff","0000000c","00000000","00000000","ffffffff"],["ffffffff","0000000d","00000000","00000000","ffffffff"],["ffffffff","0000000e","00000000","00000000","ffffffff"],["ffffffff","0000000f","00000000","00000000","ffffffff"],["ffffffff","00000010","00000000","00000000","ffffffff"],["ffffffff","00000011","00000000","00000000","ffffffff"],["ffffffff","00000012","00000000","00000000","ffffffff"],["ffffffff","00000013","00000000","00000000","ffffffff"],["ffffffff","00000014","00000000","00000000","ffffffff"],["ffffffff","00000015","00000000","00000000","ffffffff"],["ffffffff","00000016","00000000","00000000","ffffffff"],["ffffffff","00000017","00000000","00000000","ffffffff"],["ffffffff","00000018","00000000","00000000","ffffffff"],["ffffffff","00000019","00000000","00000000","ffffffff"],["ffffffff","0000001a","00000000","00000000","ffffffff"],["ffffffff","0000001b","00000000","00000000","ffffffff"],["ffffffff","0000001c","00000000","00000000","ffffffff"],["ffffffff","0000001d","00000000","00000000","ffffffff"],["ffffffff","0000001e","00000000","00000000","ffffffff"],["ffffffff","0000001f","00000000","00000000","ffffffff"],["ffffffff","00000020","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000021","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000022","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000023","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000024","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000025","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000026","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000027","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000028","00000000","00000000","ffffffff","unguarded"],["ffffffff","0000003f","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000040","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000041","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000060","00000000","00000000","ffffffff","unguarded"],["ffffffff","0000007f","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000080","00000000","00000000","ffffffff","unguarded"],["ffffffff","000000ff","00000000","00000000","ffffffff","unguarded"],["ffffffff","00000100","00000000","00000000","ffffffff","unguarded"],["ffffffff","7fffffff","00000000","00000000","ffffffff","unguarded"],["ffffffff","80000000","00000000","00000000","ffffffff","unguarded"],["ffffffff","ffffffe0","00000000","00000000","ffffffff","unguarded"],["ffffffff","ffffffff","00000000","00000000","ffffffff","unguarded"]]} +{"op":"and","code":15,"wgsl":"a & b","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","7fffffff","00000000","00000000","00000000"],["00000000","80000000","00000000","00000000","00000000"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000007","00000000","00000000","00000001"],["00000001","7fffffff","00000000","00000000","00000001"],["00000001","80000000","00000000","00000000","00000000"],["00000001","fffffff9","00000000","00000000","00000001"],["00000001","ffffffff","00000000","00000000","00000001"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000001"],["00000007","00000007","00000000","00000000","00000007"],["00000007","7fffffff","00000000","00000000","00000007"],["00000007","80000000","00000000","00000000","00000000"],["00000007","fffffff9","00000000","00000000","00000001"],["00000007","ffffffff","00000000","00000000","00000007"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","00000001"],["7fffffff","00000007","00000000","00000000","00000007"],["7fffffff","7fffffff","00000000","00000000","7fffffff"],["7fffffff","80000000","00000000","00000000","00000000"],["7fffffff","fffffff9","00000000","00000000","7ffffff9"],["7fffffff","ffffffff","00000000","00000000","7fffffff"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000001","00000000","00000000","00000000"],["80000000","00000007","00000000","00000000","00000000"],["80000000","7fffffff","00000000","00000000","00000000"],["80000000","80000000","00000000","00000000","80000000"],["80000000","fffffff9","00000000","00000000","80000000"],["80000000","ffffffff","00000000","00000000","80000000"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000001","00000000","00000000","00000001"],["fffffff9","00000007","00000000","00000000","00000001"],["fffffff9","7fffffff","00000000","00000000","7ffffff9"],["fffffff9","80000000","00000000","00000000","80000000"],["fffffff9","fffffff9","00000000","00000000","fffffff9"],["fffffff9","ffffffff","00000000","00000000","fffffff9"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000001","00000000","00000000","00000001"],["ffffffff","00000007","00000000","00000000","00000007"],["ffffffff","7fffffff","00000000","00000000","7fffffff"],["ffffffff","80000000","00000000","00000000","80000000"],["ffffffff","fffffff9","00000000","00000000","fffffff9"],["ffffffff","ffffffff","00000000","00000000","ffffffff"]]} +{"op":"or","code":16,"wgsl":"a | b","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000007","00000000","00000000","00000007"],["00000000","7fffffff","00000000","00000000","7fffffff"],["00000000","80000000","00000000","00000000","80000000"],["00000000","fffffff9","00000000","00000000","fffffff9"],["00000000","ffffffff","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000007","00000000","00000000","00000007"],["00000001","7fffffff","00000000","00000000","7fffffff"],["00000001","80000000","00000000","00000000","80000001"],["00000001","fffffff9","00000000","00000000","fffffff9"],["00000001","ffffffff","00000000","00000000","ffffffff"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","00000007"],["00000007","00000007","00000000","00000000","00000007"],["00000007","7fffffff","00000000","00000000","7fffffff"],["00000007","80000000","00000000","00000000","80000007"],["00000007","fffffff9","00000000","00000000","ffffffff"],["00000007","ffffffff","00000000","00000000","ffffffff"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","7fffffff"],["7fffffff","00000007","00000000","00000000","7fffffff"],["7fffffff","7fffffff","00000000","00000000","7fffffff"],["7fffffff","80000000","00000000","00000000","ffffffff"],["7fffffff","fffffff9","00000000","00000000","ffffffff"],["7fffffff","ffffffff","00000000","00000000","ffffffff"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","80000001"],["80000000","00000007","00000000","00000000","80000007"],["80000000","7fffffff","00000000","00000000","ffffffff"],["80000000","80000000","00000000","00000000","80000000"],["80000000","fffffff9","00000000","00000000","fffffff9"],["80000000","ffffffff","00000000","00000000","ffffffff"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffff9"],["fffffff9","00000007","00000000","00000000","ffffffff"],["fffffff9","7fffffff","00000000","00000000","ffffffff"],["fffffff9","80000000","00000000","00000000","fffffff9"],["fffffff9","fffffff9","00000000","00000000","fffffff9"],["fffffff9","ffffffff","00000000","00000000","ffffffff"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","ffffffff"],["ffffffff","00000007","00000000","00000000","ffffffff"],["ffffffff","7fffffff","00000000","00000000","ffffffff"],["ffffffff","80000000","00000000","00000000","ffffffff"],["ffffffff","fffffff9","00000000","00000000","ffffffff"],["ffffffff","ffffffff","00000000","00000000","ffffffff"]]} +{"op":"xor","code":17,"wgsl":"a ^ b","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000007","00000000","00000000","00000007"],["00000000","7fffffff","00000000","00000000","7fffffff"],["00000000","80000000","00000000","00000000","80000000"],["00000000","fffffff9","00000000","00000000","fffffff9"],["00000000","ffffffff","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000007","00000000","00000000","00000006"],["00000001","7fffffff","00000000","00000000","7ffffffe"],["00000001","80000000","00000000","00000000","80000001"],["00000001","fffffff9","00000000","00000000","fffffff8"],["00000001","ffffffff","00000000","00000000","fffffffe"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","00000006"],["00000007","00000007","00000000","00000000","00000000"],["00000007","7fffffff","00000000","00000000","7ffffff8"],["00000007","80000000","00000000","00000000","80000007"],["00000007","fffffff9","00000000","00000000","fffffffe"],["00000007","ffffffff","00000000","00000000","fffffff8"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","7ffffffe"],["7fffffff","00000007","00000000","00000000","7ffffff8"],["7fffffff","7fffffff","00000000","00000000","00000000"],["7fffffff","80000000","00000000","00000000","ffffffff"],["7fffffff","fffffff9","00000000","00000000","80000006"],["7fffffff","ffffffff","00000000","00000000","80000000"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","80000001"],["80000000","00000007","00000000","00000000","80000007"],["80000000","7fffffff","00000000","00000000","ffffffff"],["80000000","80000000","00000000","00000000","00000000"],["80000000","fffffff9","00000000","00000000","7ffffff9"],["80000000","ffffffff","00000000","00000000","7fffffff"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffff8"],["fffffff9","00000007","00000000","00000000","fffffffe"],["fffffff9","7fffffff","00000000","00000000","80000006"],["fffffff9","80000000","00000000","00000000","7ffffff9"],["fffffff9","fffffff9","00000000","00000000","00000000"],["fffffff9","ffffffff","00000000","00000000","00000006"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","fffffffe"],["ffffffff","00000007","00000000","00000000","fffffff8"],["ffffffff","7fffffff","00000000","00000000","80000000"],["ffffffff","80000000","00000000","00000000","7fffffff"],["ffffffff","fffffff9","00000000","00000000","00000006"],["ffffffff","ffffffff","00000000","00000000","00000000"]]} +{"op":"not","code":18,"wgsl":"~a","cases":[["00000000","00000000","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","fffffffe"],["00000002","00000000","00000000","00000000","fffffffd"],["00000003","00000000","00000000","00000000","fffffffc"],["00000005","00000000","00000000","00000000","fffffffa"],["00000007","00000000","00000000","00000000","fffffff8"],["0000001f","00000000","00000000","00000000","ffffffe0"],["00000020","00000000","00000000","00000000","ffffffdf"],["00000021","00000000","00000000","00000000","ffffffde"],["0000003f","00000000","00000000","00000000","ffffffc0"],["00000040","00000000","00000000","00000000","ffffffbf"],["000000ff","00000000","00000000","00000000","ffffff00"],["00007fff","00000000","00000000","00000000","ffff8000"],["00008000","00000000","00000000","00000000","ffff7fff"],["0000ffff","00000000","00000000","00000000","ffff0000"],["00010000","00000000","00000000","00000000","fffeffff"],["55555555","00000000","00000000","00000000","aaaaaaaa"],["7ffffffe","00000000","00000000","00000000","80000001"],["7fffffff","00000000","00000000","00000000","80000000"],["80000000","00000000","00000000","00000000","7fffffff"],["80000001","00000000","00000000","00000000","7ffffffe"],["aaaaaaaa","00000000","00000000","00000000","55555555"],["deadbeef","00000000","00000000","00000000","21524110"],["ffff0000","00000000","00000000","00000000","0000ffff"],["ffff8000","00000000","00000000","00000000","00007fff"],["ffffffe0","00000000","00000000","00000000","0000001f"],["ffffffe1","00000000","00000000","00000000","0000001e"],["fffffff9","00000000","00000000","00000000","00000006"],["fffffffd","00000000","00000000","00000000","00000002"],["fffffffe","00000000","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","fffffffe"],["00000001","00000000","00000000","00000000","fffffffe"],["ffffffff","00000000","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","fffffffd"],["00000003","00000000","00000000","00000000","fffffffc"],["fffffffe","00000000","00000000","00000000","00000001"],["00000004","00000000","00000000","00000000","fffffffb"],["00000007","00000000","00000000","00000000","fffffff8"],["fffffffc","00000000","00000000","00000000","00000003"],["00000008","00000000","00000000","00000000","fffffff7"],["0000000f","00000000","00000000","00000000","fffffff0"],["fffffff8","00000000","00000000","00000000","00000007"],["00000010","00000000","00000000","00000000","ffffffef"],["0000001f","00000000","00000000","00000000","ffffffe0"],["fffffff0","00000000","00000000","00000000","0000000f"],["00000020","00000000","00000000","00000000","ffffffdf"],["0000003f","00000000","00000000","00000000","ffffffc0"],["ffffffe0","00000000","00000000","00000000","0000001f"],["00000040","00000000","00000000","00000000","ffffffbf"],["0000007f","00000000","00000000","00000000","ffffff80"],["ffffffc0","00000000","00000000","00000000","0000003f"],["00000080","00000000","00000000","00000000","ffffff7f"],["000000ff","00000000","00000000","00000000","ffffff00"],["ffffff80","00000000","00000000","00000000","0000007f"],["00000100","00000000","00000000","00000000","fffffeff"],["000001ff","00000000","00000000","00000000","fffffe00"],["ffffff00","00000000","00000000","00000000","000000ff"],["00000200","00000000","00000000","00000000","fffffdff"],["000003ff","00000000","00000000","00000000","fffffc00"],["fffffe00","00000000","00000000","00000000","000001ff"],["00000400","00000000","00000000","00000000","fffffbff"],["000007ff","00000000","00000000","00000000","fffff800"],["fffffc00","00000000","00000000","00000000","000003ff"],["00000800","00000000","00000000","00000000","fffff7ff"],["00000fff","00000000","00000000","00000000","fffff000"],["fffff800","00000000","00000000","00000000","000007ff"],["00001000","00000000","00000000","00000000","ffffefff"],["00001fff","00000000","00000000","00000000","ffffe000"],["fffff000","00000000","00000000","00000000","00000fff"],["00002000","00000000","00000000","00000000","ffffdfff"],["00003fff","00000000","00000000","00000000","ffffc000"],["ffffe000","00000000","00000000","00000000","00001fff"],["00004000","00000000","00000000","00000000","ffffbfff"],["00007fff","00000000","00000000","00000000","ffff8000"],["ffffc000","00000000","00000000","00000000","00003fff"],["00008000","00000000","00000000","00000000","ffff7fff"],["0000ffff","00000000","00000000","00000000","ffff0000"],["ffff8000","00000000","00000000","00000000","00007fff"],["00010000","00000000","00000000","00000000","fffeffff"],["0001ffff","00000000","00000000","00000000","fffe0000"],["ffff0000","00000000","00000000","00000000","0000ffff"],["00020000","00000000","00000000","00000000","fffdffff"],["0003ffff","00000000","00000000","00000000","fffc0000"],["fffe0000","00000000","00000000","00000000","0001ffff"],["00040000","00000000","00000000","00000000","fffbffff"],["0007ffff","00000000","00000000","00000000","fff80000"],["fffc0000","00000000","00000000","00000000","0003ffff"],["00080000","00000000","00000000","00000000","fff7ffff"],["000fffff","00000000","00000000","00000000","fff00000"],["fff80000","00000000","00000000","00000000","0007ffff"],["00100000","00000000","00000000","00000000","ffefffff"],["001fffff","00000000","00000000","00000000","ffe00000"],["fff00000","00000000","00000000","00000000","000fffff"],["00200000","00000000","00000000","00000000","ffdfffff"],["003fffff","00000000","00000000","00000000","ffc00000"],["ffe00000","00000000","00000000","00000000","001fffff"],["00400000","00000000","00000000","00000000","ffbfffff"],["007fffff","00000000","00000000","00000000","ff800000"],["ffc00000","00000000","00000000","00000000","003fffff"],["00800000","00000000","00000000","00000000","ff7fffff"],["00ffffff","00000000","00000000","00000000","ff000000"],["ff800000","00000000","00000000","00000000","007fffff"],["01000000","00000000","00000000","00000000","feffffff"],["01ffffff","00000000","00000000","00000000","fe000000"],["ff000000","00000000","00000000","00000000","00ffffff"],["02000000","00000000","00000000","00000000","fdffffff"],["03ffffff","00000000","00000000","00000000","fc000000"],["fe000000","00000000","00000000","00000000","01ffffff"],["04000000","00000000","00000000","00000000","fbffffff"],["07ffffff","00000000","00000000","00000000","f8000000"],["fc000000","00000000","00000000","00000000","03ffffff"],["08000000","00000000","00000000","00000000","f7ffffff"],["0fffffff","00000000","00000000","00000000","f0000000"],["f8000000","00000000","00000000","00000000","07ffffff"],["10000000","00000000","00000000","00000000","efffffff"],["1fffffff","00000000","00000000","00000000","e0000000"],["f0000000","00000000","00000000","00000000","0fffffff"],["20000000","00000000","00000000","00000000","dfffffff"],["3fffffff","00000000","00000000","00000000","c0000000"],["e0000000","00000000","00000000","00000000","1fffffff"],["40000000","00000000","00000000","00000000","bfffffff"],["7fffffff","00000000","00000000","00000000","80000000"],["c0000000","00000000","00000000","00000000","3fffffff"],["80000000","00000000","00000000","00000000","7fffffff"],["ffffffff","00000000","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","7fffffff"]]} +{"op":"lt_i32","code":19,"wgsl":"u32(ia < ib)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000007","00000000","00000000","00000001"],["00000000","7fffffff","00000000","00000000","00000001"],["00000000","80000000","00000000","00000000","00000000"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000007","00000000","00000000","00000001"],["00000001","7fffffff","00000000","00000000","00000001"],["00000001","80000000","00000000","00000000","00000000"],["00000001","fffffff9","00000000","00000000","00000000"],["00000001","ffffffff","00000000","00000000","00000000"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000000"],["00000007","00000007","00000000","00000000","00000000"],["00000007","7fffffff","00000000","00000000","00000001"],["00000007","80000000","00000000","00000000","00000000"],["00000007","fffffff9","00000000","00000000","00000000"],["00000007","ffffffff","00000000","00000000","00000000"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","00000000"],["7fffffff","00000007","00000000","00000000","00000000"],["7fffffff","7fffffff","00000000","00000000","00000000"],["7fffffff","80000000","00000000","00000000","00000000"],["7fffffff","fffffff9","00000000","00000000","00000000"],["7fffffff","ffffffff","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","00000001"],["80000000","00000001","00000000","00000000","00000001"],["80000000","00000007","00000000","00000000","00000001"],["80000000","7fffffff","00000000","00000000","00000001"],["80000000","80000000","00000000","00000000","00000000"],["80000000","fffffff9","00000000","00000000","00000001"],["80000000","ffffffff","00000000","00000000","00000001"],["fffffff9","00000000","00000000","00000000","00000001"],["fffffff9","00000001","00000000","00000000","00000001"],["fffffff9","00000007","00000000","00000000","00000001"],["fffffff9","7fffffff","00000000","00000000","00000001"],["fffffff9","80000000","00000000","00000000","00000000"],["fffffff9","fffffff9","00000000","00000000","00000000"],["fffffff9","ffffffff","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","00000001"],["ffffffff","00000001","00000000","00000000","00000001"],["ffffffff","00000007","00000000","00000000","00000001"],["ffffffff","7fffffff","00000000","00000000","00000001"],["ffffffff","80000000","00000000","00000000","00000000"],["ffffffff","fffffff9","00000000","00000000","00000000"],["ffffffff","ffffffff","00000000","00000000","00000000"]]} +{"op":"lt_u32","code":20,"wgsl":"u32(a < b)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000007","00000000","00000000","00000001"],["00000000","7fffffff","00000000","00000000","00000001"],["00000000","80000000","00000000","00000000","00000001"],["00000000","fffffff9","00000000","00000000","00000001"],["00000000","ffffffff","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000007","00000000","00000000","00000001"],["00000001","7fffffff","00000000","00000000","00000001"],["00000001","80000000","00000000","00000000","00000001"],["00000001","fffffff9","00000000","00000000","00000001"],["00000001","ffffffff","00000000","00000000","00000001"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000000"],["00000007","00000007","00000000","00000000","00000000"],["00000007","7fffffff","00000000","00000000","00000001"],["00000007","80000000","00000000","00000000","00000001"],["00000007","fffffff9","00000000","00000000","00000001"],["00000007","ffffffff","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","00000000"],["7fffffff","00000007","00000000","00000000","00000000"],["7fffffff","7fffffff","00000000","00000000","00000000"],["7fffffff","80000000","00000000","00000000","00000001"],["7fffffff","fffffff9","00000000","00000000","00000001"],["7fffffff","ffffffff","00000000","00000000","00000001"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000001","00000000","00000000","00000000"],["80000000","00000007","00000000","00000000","00000000"],["80000000","7fffffff","00000000","00000000","00000000"],["80000000","80000000","00000000","00000000","00000000"],["80000000","fffffff9","00000000","00000000","00000001"],["80000000","ffffffff","00000000","00000000","00000001"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000001","00000000","00000000","00000000"],["fffffff9","00000007","00000000","00000000","00000000"],["fffffff9","7fffffff","00000000","00000000","00000000"],["fffffff9","80000000","00000000","00000000","00000000"],["fffffff9","fffffff9","00000000","00000000","00000000"],["fffffff9","ffffffff","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000001","00000000","00000000","00000000"],["ffffffff","00000007","00000000","00000000","00000000"],["ffffffff","7fffffff","00000000","00000000","00000000"],["ffffffff","80000000","00000000","00000000","00000000"],["ffffffff","fffffff9","00000000","00000000","00000000"],["ffffffff","ffffffff","00000000","00000000","00000000"]]} +{"op":"le_i32","code":21,"wgsl":"u32(ia <= ib)","cases":[["00000000","00000000","00000000","00000000","00000001"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000007","00000000","00000000","00000001"],["00000000","7fffffff","00000000","00000000","00000001"],["00000000","80000000","00000000","00000000","00000000"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000007","00000000","00000000","00000001"],["00000001","7fffffff","00000000","00000000","00000001"],["00000001","80000000","00000000","00000000","00000000"],["00000001","fffffff9","00000000","00000000","00000000"],["00000001","ffffffff","00000000","00000000","00000000"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000000"],["00000007","00000007","00000000","00000000","00000001"],["00000007","7fffffff","00000000","00000000","00000001"],["00000007","80000000","00000000","00000000","00000000"],["00000007","fffffff9","00000000","00000000","00000000"],["00000007","ffffffff","00000000","00000000","00000000"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","00000000"],["7fffffff","00000007","00000000","00000000","00000000"],["7fffffff","7fffffff","00000000","00000000","00000001"],["7fffffff","80000000","00000000","00000000","00000000"],["7fffffff","fffffff9","00000000","00000000","00000000"],["7fffffff","ffffffff","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","00000001"],["80000000","00000001","00000000","00000000","00000001"],["80000000","00000007","00000000","00000000","00000001"],["80000000","7fffffff","00000000","00000000","00000001"],["80000000","80000000","00000000","00000000","00000001"],["80000000","fffffff9","00000000","00000000","00000001"],["80000000","ffffffff","00000000","00000000","00000001"],["fffffff9","00000000","00000000","00000000","00000001"],["fffffff9","00000001","00000000","00000000","00000001"],["fffffff9","00000007","00000000","00000000","00000001"],["fffffff9","7fffffff","00000000","00000000","00000001"],["fffffff9","80000000","00000000","00000000","00000000"],["fffffff9","fffffff9","00000000","00000000","00000001"],["fffffff9","ffffffff","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","00000001"],["ffffffff","00000001","00000000","00000000","00000001"],["ffffffff","00000007","00000000","00000000","00000001"],["ffffffff","7fffffff","00000000","00000000","00000001"],["ffffffff","80000000","00000000","00000000","00000000"],["ffffffff","fffffff9","00000000","00000000","00000000"],["ffffffff","ffffffff","00000000","00000000","00000001"]]} +{"op":"le_u32","code":22,"wgsl":"u32(a <= b)","cases":[["00000000","00000000","00000000","00000000","00000001"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000007","00000000","00000000","00000001"],["00000000","7fffffff","00000000","00000000","00000001"],["00000000","80000000","00000000","00000000","00000001"],["00000000","fffffff9","00000000","00000000","00000001"],["00000000","ffffffff","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000007","00000000","00000000","00000001"],["00000001","7fffffff","00000000","00000000","00000001"],["00000001","80000000","00000000","00000000","00000001"],["00000001","fffffff9","00000000","00000000","00000001"],["00000001","ffffffff","00000000","00000000","00000001"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000000"],["00000007","00000007","00000000","00000000","00000001"],["00000007","7fffffff","00000000","00000000","00000001"],["00000007","80000000","00000000","00000000","00000001"],["00000007","fffffff9","00000000","00000000","00000001"],["00000007","ffffffff","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","00000000"],["7fffffff","00000007","00000000","00000000","00000000"],["7fffffff","7fffffff","00000000","00000000","00000001"],["7fffffff","80000000","00000000","00000000","00000001"],["7fffffff","fffffff9","00000000","00000000","00000001"],["7fffffff","ffffffff","00000000","00000000","00000001"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000001","00000000","00000000","00000000"],["80000000","00000007","00000000","00000000","00000000"],["80000000","7fffffff","00000000","00000000","00000000"],["80000000","80000000","00000000","00000000","00000001"],["80000000","fffffff9","00000000","00000000","00000001"],["80000000","ffffffff","00000000","00000000","00000001"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000001","00000000","00000000","00000000"],["fffffff9","00000007","00000000","00000000","00000000"],["fffffff9","7fffffff","00000000","00000000","00000000"],["fffffff9","80000000","00000000","00000000","00000000"],["fffffff9","fffffff9","00000000","00000000","00000001"],["fffffff9","ffffffff","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000001","00000000","00000000","00000000"],["ffffffff","00000007","00000000","00000000","00000000"],["ffffffff","7fffffff","00000000","00000000","00000000"],["ffffffff","80000000","00000000","00000000","00000000"],["ffffffff","fffffff9","00000000","00000000","00000000"],["ffffffff","ffffffff","00000000","00000000","00000001"]]} +{"op":"eq","code":23,"wgsl":"u32(a == b)","cases":[["00000000","00000000","00000000","00000000","00000001"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","7fffffff","00000000","00000000","00000000"],["00000000","80000000","00000000","00000000","00000000"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000007","00000000","00000000","00000000"],["00000001","7fffffff","00000000","00000000","00000000"],["00000001","80000000","00000000","00000000","00000000"],["00000001","fffffff9","00000000","00000000","00000000"],["00000001","ffffffff","00000000","00000000","00000000"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000000"],["00000007","00000007","00000000","00000000","00000001"],["00000007","7fffffff","00000000","00000000","00000000"],["00000007","80000000","00000000","00000000","00000000"],["00000007","fffffff9","00000000","00000000","00000000"],["00000007","ffffffff","00000000","00000000","00000000"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","00000000"],["7fffffff","00000007","00000000","00000000","00000000"],["7fffffff","7fffffff","00000000","00000000","00000001"],["7fffffff","80000000","00000000","00000000","00000000"],["7fffffff","fffffff9","00000000","00000000","00000000"],["7fffffff","ffffffff","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000001","00000000","00000000","00000000"],["80000000","00000007","00000000","00000000","00000000"],["80000000","7fffffff","00000000","00000000","00000000"],["80000000","80000000","00000000","00000000","00000001"],["80000000","fffffff9","00000000","00000000","00000000"],["80000000","ffffffff","00000000","00000000","00000000"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000001","00000000","00000000","00000000"],["fffffff9","00000007","00000000","00000000","00000000"],["fffffff9","7fffffff","00000000","00000000","00000000"],["fffffff9","80000000","00000000","00000000","00000000"],["fffffff9","fffffff9","00000000","00000000","00000001"],["fffffff9","ffffffff","00000000","00000000","00000000"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000001","00000000","00000000","00000000"],["ffffffff","00000007","00000000","00000000","00000000"],["ffffffff","7fffffff","00000000","00000000","00000000"],["ffffffff","80000000","00000000","00000000","00000000"],["ffffffff","fffffff9","00000000","00000000","00000000"],["ffffffff","ffffffff","00000000","00000000","00000001"]]} +{"op":"ne","code":24,"wgsl":"u32(a != b)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000007","00000000","00000000","00000001"],["00000000","7fffffff","00000000","00000000","00000001"],["00000000","80000000","00000000","00000000","00000001"],["00000000","fffffff9","00000000","00000000","00000001"],["00000000","ffffffff","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000007","00000000","00000000","00000001"],["00000001","7fffffff","00000000","00000000","00000001"],["00000001","80000000","00000000","00000000","00000001"],["00000001","fffffff9","00000000","00000000","00000001"],["00000001","ffffffff","00000000","00000000","00000001"],["00000007","00000000","00000000","00000000","00000001"],["00000007","00000001","00000000","00000000","00000001"],["00000007","00000007","00000000","00000000","00000000"],["00000007","7fffffff","00000000","00000000","00000001"],["00000007","80000000","00000000","00000000","00000001"],["00000007","fffffff9","00000000","00000000","00000001"],["00000007","ffffffff","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","00000001"],["7fffffff","00000001","00000000","00000000","00000001"],["7fffffff","00000007","00000000","00000000","00000001"],["7fffffff","7fffffff","00000000","00000000","00000000"],["7fffffff","80000000","00000000","00000000","00000001"],["7fffffff","fffffff9","00000000","00000000","00000001"],["7fffffff","ffffffff","00000000","00000000","00000001"],["80000000","00000000","00000000","00000000","00000001"],["80000000","00000001","00000000","00000000","00000001"],["80000000","00000007","00000000","00000000","00000001"],["80000000","7fffffff","00000000","00000000","00000001"],["80000000","80000000","00000000","00000000","00000000"],["80000000","fffffff9","00000000","00000000","00000001"],["80000000","ffffffff","00000000","00000000","00000001"],["fffffff9","00000000","00000000","00000000","00000001"],["fffffff9","00000001","00000000","00000000","00000001"],["fffffff9","00000007","00000000","00000000","00000001"],["fffffff9","7fffffff","00000000","00000000","00000001"],["fffffff9","80000000","00000000","00000000","00000001"],["fffffff9","fffffff9","00000000","00000000","00000000"],["fffffff9","ffffffff","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","00000001"],["ffffffff","00000001","00000000","00000000","00000001"],["ffffffff","00000007","00000000","00000000","00000001"],["ffffffff","7fffffff","00000000","00000000","00000001"],["ffffffff","80000000","00000000","00000000","00000001"],["ffffffff","fffffff9","00000000","00000000","00000001"],["ffffffff","ffffffff","00000000","00000000","00000000"]]} +{"op":"select_u32","code":25,"wgsl":"select(b, a, c != 0u)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000000","00000001","00000000","00000000"],["00000000","00000000","00000007","00000000","00000000"],["00000000","00000000","7fffffff","00000000","00000000"],["00000000","00000000","80000000","00000000","00000000"],["00000000","00000000","fffffff9","00000000","00000000"],["00000000","00000000","ffffffff","00000000","00000000"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000001","00000001","00000000","00000000"],["00000000","00000001","00000007","00000000","00000000"],["00000000","00000001","7fffffff","00000000","00000000"],["00000000","00000001","80000000","00000000","00000000"],["00000000","00000001","fffffff9","00000000","00000000"],["00000000","00000001","ffffffff","00000000","00000000"],["00000000","00000007","00000000","00000000","00000007"],["00000000","00000007","00000001","00000000","00000000"],["00000000","00000007","00000007","00000000","00000000"],["00000000","00000007","7fffffff","00000000","00000000"],["00000000","00000007","80000000","00000000","00000000"],["00000000","00000007","fffffff9","00000000","00000000"],["00000000","00000007","ffffffff","00000000","00000000"],["00000000","7fffffff","00000000","00000000","7fffffff"],["00000000","7fffffff","00000001","00000000","00000000"],["00000000","7fffffff","00000007","00000000","00000000"],["00000000","7fffffff","7fffffff","00000000","00000000"],["00000000","7fffffff","80000000","00000000","00000000"],["00000000","7fffffff","fffffff9","00000000","00000000"],["00000000","7fffffff","ffffffff","00000000","00000000"],["00000000","80000000","00000000","00000000","80000000"],["00000000","80000000","00000001","00000000","00000000"],["00000000","80000000","00000007","00000000","00000000"],["00000000","80000000","7fffffff","00000000","00000000"],["00000000","80000000","80000000","00000000","00000000"],["00000000","80000000","fffffff9","00000000","00000000"],["00000000","80000000","ffffffff","00000000","00000000"],["00000000","fffffff9","00000000","00000000","fffffff9"],["00000000","fffffff9","00000001","00000000","00000000"],["00000000","fffffff9","00000007","00000000","00000000"],["00000000","fffffff9","7fffffff","00000000","00000000"],["00000000","fffffff9","80000000","00000000","00000000"],["00000000","fffffff9","fffffff9","00000000","00000000"],["00000000","fffffff9","ffffffff","00000000","00000000"],["00000000","ffffffff","00000000","00000000","ffffffff"],["00000000","ffffffff","00000001","00000000","00000000"],["00000000","ffffffff","00000007","00000000","00000000"],["00000000","ffffffff","7fffffff","00000000","00000000"],["00000000","ffffffff","80000000","00000000","00000000"],["00000000","ffffffff","fffffff9","00000000","00000000"],["00000000","ffffffff","ffffffff","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000000","00000001","00000000","00000001"],["00000001","00000000","00000007","00000000","00000001"],["00000001","00000000","7fffffff","00000000","00000001"],["00000001","00000000","80000000","00000000","00000001"],["00000001","00000000","fffffff9","00000000","00000001"],["00000001","00000000","ffffffff","00000000","00000001"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000001","00000001","00000000","00000001"],["00000001","00000001","00000007","00000000","00000001"],["00000001","00000001","7fffffff","00000000","00000001"],["00000001","00000001","80000000","00000000","00000001"],["00000001","00000001","fffffff9","00000000","00000001"],["00000001","00000001","ffffffff","00000000","00000001"],["00000001","00000007","00000000","00000000","00000007"],["00000001","00000007","00000001","00000000","00000001"],["00000001","00000007","00000007","00000000","00000001"],["00000001","00000007","7fffffff","00000000","00000001"],["00000001","00000007","80000000","00000000","00000001"],["00000001","00000007","fffffff9","00000000","00000001"],["00000001","00000007","ffffffff","00000000","00000001"],["00000001","7fffffff","00000000","00000000","7fffffff"],["00000001","7fffffff","00000001","00000000","00000001"],["00000001","7fffffff","00000007","00000000","00000001"],["00000001","7fffffff","7fffffff","00000000","00000001"],["00000001","7fffffff","80000000","00000000","00000001"],["00000001","7fffffff","fffffff9","00000000","00000001"],["00000001","7fffffff","ffffffff","00000000","00000001"],["00000001","80000000","00000000","00000000","80000000"],["00000001","80000000","00000001","00000000","00000001"],["00000001","80000000","00000007","00000000","00000001"],["00000001","80000000","7fffffff","00000000","00000001"],["00000001","80000000","80000000","00000000","00000001"],["00000001","80000000","fffffff9","00000000","00000001"],["00000001","80000000","ffffffff","00000000","00000001"],["00000001","fffffff9","00000000","00000000","fffffff9"],["00000001","fffffff9","00000001","00000000","00000001"],["00000001","fffffff9","00000007","00000000","00000001"],["00000001","fffffff9","7fffffff","00000000","00000001"],["00000001","fffffff9","80000000","00000000","00000001"],["00000001","fffffff9","fffffff9","00000000","00000001"],["00000001","fffffff9","ffffffff","00000000","00000001"],["00000001","ffffffff","00000000","00000000","ffffffff"],["00000001","ffffffff","00000001","00000000","00000001"],["00000001","ffffffff","00000007","00000000","00000001"],["00000001","ffffffff","7fffffff","00000000","00000001"],["00000001","ffffffff","80000000","00000000","00000001"],["00000001","ffffffff","fffffff9","00000000","00000001"],["00000001","ffffffff","ffffffff","00000000","00000001"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000000","00000001","00000000","00000007"],["00000007","00000000","00000007","00000000","00000007"],["00000007","00000000","7fffffff","00000000","00000007"],["00000007","00000000","80000000","00000000","00000007"],["00000007","00000000","fffffff9","00000000","00000007"],["00000007","00000000","ffffffff","00000000","00000007"],["00000007","00000001","00000000","00000000","00000001"],["00000007","00000001","00000001","00000000","00000007"],["00000007","00000001","00000007","00000000","00000007"],["00000007","00000001","7fffffff","00000000","00000007"],["00000007","00000001","80000000","00000000","00000007"],["00000007","00000001","fffffff9","00000000","00000007"],["00000007","00000001","ffffffff","00000000","00000007"],["00000007","00000007","00000000","00000000","00000007"],["00000007","00000007","00000001","00000000","00000007"],["00000007","00000007","00000007","00000000","00000007"],["00000007","00000007","7fffffff","00000000","00000007"],["00000007","00000007","80000000","00000000","00000007"],["00000007","00000007","fffffff9","00000000","00000007"],["00000007","00000007","ffffffff","00000000","00000007"],["00000007","7fffffff","00000000","00000000","7fffffff"],["00000007","7fffffff","00000001","00000000","00000007"],["00000007","7fffffff","00000007","00000000","00000007"],["00000007","7fffffff","7fffffff","00000000","00000007"],["00000007","7fffffff","80000000","00000000","00000007"],["00000007","7fffffff","fffffff9","00000000","00000007"],["00000007","7fffffff","ffffffff","00000000","00000007"],["00000007","80000000","00000000","00000000","80000000"],["00000007","80000000","00000001","00000000","00000007"],["00000007","80000000","00000007","00000000","00000007"],["00000007","80000000","7fffffff","00000000","00000007"],["00000007","80000000","80000000","00000000","00000007"],["00000007","80000000","fffffff9","00000000","00000007"],["00000007","80000000","ffffffff","00000000","00000007"],["00000007","fffffff9","00000000","00000000","fffffff9"],["00000007","fffffff9","00000001","00000000","00000007"],["00000007","fffffff9","00000007","00000000","00000007"],["00000007","fffffff9","7fffffff","00000000","00000007"],["00000007","fffffff9","80000000","00000000","00000007"],["00000007","fffffff9","fffffff9","00000000","00000007"],["00000007","fffffff9","ffffffff","00000000","00000007"],["00000007","ffffffff","00000000","00000000","ffffffff"],["00000007","ffffffff","00000001","00000000","00000007"],["00000007","ffffffff","00000007","00000000","00000007"],["00000007","ffffffff","7fffffff","00000000","00000007"],["00000007","ffffffff","80000000","00000000","00000007"],["00000007","ffffffff","fffffff9","00000000","00000007"],["00000007","ffffffff","ffffffff","00000000","00000007"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000000","00000001","00000000","7fffffff"],["7fffffff","00000000","00000007","00000000","7fffffff"],["7fffffff","00000000","7fffffff","00000000","7fffffff"],["7fffffff","00000000","80000000","00000000","7fffffff"],["7fffffff","00000000","fffffff9","00000000","7fffffff"],["7fffffff","00000000","ffffffff","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","00000001"],["7fffffff","00000001","00000001","00000000","7fffffff"],["7fffffff","00000001","00000007","00000000","7fffffff"],["7fffffff","00000001","7fffffff","00000000","7fffffff"],["7fffffff","00000001","80000000","00000000","7fffffff"],["7fffffff","00000001","fffffff9","00000000","7fffffff"],["7fffffff","00000001","ffffffff","00000000","7fffffff"],["7fffffff","00000007","00000000","00000000","00000007"],["7fffffff","00000007","00000001","00000000","7fffffff"],["7fffffff","00000007","00000007","00000000","7fffffff"],["7fffffff","00000007","7fffffff","00000000","7fffffff"],["7fffffff","00000007","80000000","00000000","7fffffff"],["7fffffff","00000007","fffffff9","00000000","7fffffff"],["7fffffff","00000007","ffffffff","00000000","7fffffff"],["7fffffff","7fffffff","00000000","00000000","7fffffff"],["7fffffff","7fffffff","00000001","00000000","7fffffff"],["7fffffff","7fffffff","00000007","00000000","7fffffff"],["7fffffff","7fffffff","7fffffff","00000000","7fffffff"],["7fffffff","7fffffff","80000000","00000000","7fffffff"],["7fffffff","7fffffff","fffffff9","00000000","7fffffff"],["7fffffff","7fffffff","ffffffff","00000000","7fffffff"],["7fffffff","80000000","00000000","00000000","80000000"],["7fffffff","80000000","00000001","00000000","7fffffff"],["7fffffff","80000000","00000007","00000000","7fffffff"],["7fffffff","80000000","7fffffff","00000000","7fffffff"],["7fffffff","80000000","80000000","00000000","7fffffff"],["7fffffff","80000000","fffffff9","00000000","7fffffff"],["7fffffff","80000000","ffffffff","00000000","7fffffff"],["7fffffff","fffffff9","00000000","00000000","fffffff9"],["7fffffff","fffffff9","00000001","00000000","7fffffff"],["7fffffff","fffffff9","00000007","00000000","7fffffff"],["7fffffff","fffffff9","7fffffff","00000000","7fffffff"],["7fffffff","fffffff9","80000000","00000000","7fffffff"],["7fffffff","fffffff9","fffffff9","00000000","7fffffff"],["7fffffff","fffffff9","ffffffff","00000000","7fffffff"],["7fffffff","ffffffff","00000000","00000000","ffffffff"],["7fffffff","ffffffff","00000001","00000000","7fffffff"],["7fffffff","ffffffff","00000007","00000000","7fffffff"],["7fffffff","ffffffff","7fffffff","00000000","7fffffff"],["7fffffff","ffffffff","80000000","00000000","7fffffff"],["7fffffff","ffffffff","fffffff9","00000000","7fffffff"],["7fffffff","ffffffff","ffffffff","00000000","7fffffff"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000000","00000001","00000000","80000000"],["80000000","00000000","00000007","00000000","80000000"],["80000000","00000000","7fffffff","00000000","80000000"],["80000000","00000000","80000000","00000000","80000000"],["80000000","00000000","fffffff9","00000000","80000000"],["80000000","00000000","ffffffff","00000000","80000000"],["80000000","00000001","00000000","00000000","00000001"],["80000000","00000001","00000001","00000000","80000000"],["80000000","00000001","00000007","00000000","80000000"],["80000000","00000001","7fffffff","00000000","80000000"],["80000000","00000001","80000000","00000000","80000000"],["80000000","00000001","fffffff9","00000000","80000000"],["80000000","00000001","ffffffff","00000000","80000000"],["80000000","00000007","00000000","00000000","00000007"],["80000000","00000007","00000001","00000000","80000000"],["80000000","00000007","00000007","00000000","80000000"],["80000000","00000007","7fffffff","00000000","80000000"],["80000000","00000007","80000000","00000000","80000000"],["80000000","00000007","fffffff9","00000000","80000000"],["80000000","00000007","ffffffff","00000000","80000000"],["80000000","7fffffff","00000000","00000000","7fffffff"],["80000000","7fffffff","00000001","00000000","80000000"],["80000000","7fffffff","00000007","00000000","80000000"],["80000000","7fffffff","7fffffff","00000000","80000000"],["80000000","7fffffff","80000000","00000000","80000000"],["80000000","7fffffff","fffffff9","00000000","80000000"],["80000000","7fffffff","ffffffff","00000000","80000000"],["80000000","80000000","00000000","00000000","80000000"],["80000000","80000000","00000001","00000000","80000000"],["80000000","80000000","00000007","00000000","80000000"],["80000000","80000000","7fffffff","00000000","80000000"],["80000000","80000000","80000000","00000000","80000000"],["80000000","80000000","fffffff9","00000000","80000000"],["80000000","80000000","ffffffff","00000000","80000000"],["80000000","fffffff9","00000000","00000000","fffffff9"],["80000000","fffffff9","00000001","00000000","80000000"],["80000000","fffffff9","00000007","00000000","80000000"],["80000000","fffffff9","7fffffff","00000000","80000000"],["80000000","fffffff9","80000000","00000000","80000000"],["80000000","fffffff9","fffffff9","00000000","80000000"],["80000000","fffffff9","ffffffff","00000000","80000000"],["80000000","ffffffff","00000000","00000000","ffffffff"],["80000000","ffffffff","00000001","00000000","80000000"],["80000000","ffffffff","00000007","00000000","80000000"],["80000000","ffffffff","7fffffff","00000000","80000000"],["80000000","ffffffff","80000000","00000000","80000000"],["80000000","ffffffff","fffffff9","00000000","80000000"],["80000000","ffffffff","ffffffff","00000000","80000000"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000000","00000001","00000000","fffffff9"],["fffffff9","00000000","00000007","00000000","fffffff9"],["fffffff9","00000000","7fffffff","00000000","fffffff9"],["fffffff9","00000000","80000000","00000000","fffffff9"],["fffffff9","00000000","fffffff9","00000000","fffffff9"],["fffffff9","00000000","ffffffff","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","00000001"],["fffffff9","00000001","00000001","00000000","fffffff9"],["fffffff9","00000001","00000007","00000000","fffffff9"],["fffffff9","00000001","7fffffff","00000000","fffffff9"],["fffffff9","00000001","80000000","00000000","fffffff9"],["fffffff9","00000001","fffffff9","00000000","fffffff9"],["fffffff9","00000001","ffffffff","00000000","fffffff9"],["fffffff9","00000007","00000000","00000000","00000007"],["fffffff9","00000007","00000001","00000000","fffffff9"],["fffffff9","00000007","00000007","00000000","fffffff9"],["fffffff9","00000007","7fffffff","00000000","fffffff9"],["fffffff9","00000007","80000000","00000000","fffffff9"],["fffffff9","00000007","fffffff9","00000000","fffffff9"],["fffffff9","00000007","ffffffff","00000000","fffffff9"],["fffffff9","7fffffff","00000000","00000000","7fffffff"],["fffffff9","7fffffff","00000001","00000000","fffffff9"],["fffffff9","7fffffff","00000007","00000000","fffffff9"],["fffffff9","7fffffff","7fffffff","00000000","fffffff9"],["fffffff9","7fffffff","80000000","00000000","fffffff9"],["fffffff9","7fffffff","fffffff9","00000000","fffffff9"],["fffffff9","7fffffff","ffffffff","00000000","fffffff9"],["fffffff9","80000000","00000000","00000000","80000000"],["fffffff9","80000000","00000001","00000000","fffffff9"],["fffffff9","80000000","00000007","00000000","fffffff9"],["fffffff9","80000000","7fffffff","00000000","fffffff9"],["fffffff9","80000000","80000000","00000000","fffffff9"],["fffffff9","80000000","fffffff9","00000000","fffffff9"],["fffffff9","80000000","ffffffff","00000000","fffffff9"],["fffffff9","fffffff9","00000000","00000000","fffffff9"],["fffffff9","fffffff9","00000001","00000000","fffffff9"],["fffffff9","fffffff9","00000007","00000000","fffffff9"],["fffffff9","fffffff9","7fffffff","00000000","fffffff9"],["fffffff9","fffffff9","80000000","00000000","fffffff9"],["fffffff9","fffffff9","fffffff9","00000000","fffffff9"],["fffffff9","fffffff9","ffffffff","00000000","fffffff9"],["fffffff9","ffffffff","00000000","00000000","ffffffff"],["fffffff9","ffffffff","00000001","00000000","fffffff9"],["fffffff9","ffffffff","00000007","00000000","fffffff9"],["fffffff9","ffffffff","7fffffff","00000000","fffffff9"],["fffffff9","ffffffff","80000000","00000000","fffffff9"],["fffffff9","ffffffff","fffffff9","00000000","fffffff9"],["fffffff9","ffffffff","ffffffff","00000000","fffffff9"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000001","00000000","ffffffff"],["ffffffff","00000000","00000007","00000000","ffffffff"],["ffffffff","00000000","7fffffff","00000000","ffffffff"],["ffffffff","00000000","80000000","00000000","ffffffff"],["ffffffff","00000000","fffffff9","00000000","ffffffff"],["ffffffff","00000000","ffffffff","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","00000001"],["ffffffff","00000001","00000001","00000000","ffffffff"],["ffffffff","00000001","00000007","00000000","ffffffff"],["ffffffff","00000001","7fffffff","00000000","ffffffff"],["ffffffff","00000001","80000000","00000000","ffffffff"],["ffffffff","00000001","fffffff9","00000000","ffffffff"],["ffffffff","00000001","ffffffff","00000000","ffffffff"],["ffffffff","00000007","00000000","00000000","00000007"],["ffffffff","00000007","00000001","00000000","ffffffff"],["ffffffff","00000007","00000007","00000000","ffffffff"],["ffffffff","00000007","7fffffff","00000000","ffffffff"],["ffffffff","00000007","80000000","00000000","ffffffff"],["ffffffff","00000007","fffffff9","00000000","ffffffff"],["ffffffff","00000007","ffffffff","00000000","ffffffff"],["ffffffff","7fffffff","00000000","00000000","7fffffff"],["ffffffff","7fffffff","00000001","00000000","ffffffff"],["ffffffff","7fffffff","00000007","00000000","ffffffff"],["ffffffff","7fffffff","7fffffff","00000000","ffffffff"],["ffffffff","7fffffff","80000000","00000000","ffffffff"],["ffffffff","7fffffff","fffffff9","00000000","ffffffff"],["ffffffff","7fffffff","ffffffff","00000000","ffffffff"],["ffffffff","80000000","00000000","00000000","80000000"],["ffffffff","80000000","00000001","00000000","ffffffff"],["ffffffff","80000000","00000007","00000000","ffffffff"],["ffffffff","80000000","7fffffff","00000000","ffffffff"],["ffffffff","80000000","80000000","00000000","ffffffff"],["ffffffff","80000000","fffffff9","00000000","ffffffff"],["ffffffff","80000000","ffffffff","00000000","ffffffff"],["ffffffff","fffffff9","00000000","00000000","fffffff9"],["ffffffff","fffffff9","00000001","00000000","ffffffff"],["ffffffff","fffffff9","00000007","00000000","ffffffff"],["ffffffff","fffffff9","7fffffff","00000000","ffffffff"],["ffffffff","fffffff9","80000000","00000000","ffffffff"],["ffffffff","fffffff9","fffffff9","00000000","ffffffff"],["ffffffff","fffffff9","ffffffff","00000000","ffffffff"],["ffffffff","ffffffff","00000000","00000000","ffffffff"],["ffffffff","ffffffff","00000001","00000000","ffffffff"],["ffffffff","ffffffff","00000007","00000000","ffffffff"],["ffffffff","ffffffff","7fffffff","00000000","ffffffff"],["ffffffff","ffffffff","80000000","00000000","ffffffff"],["ffffffff","ffffffff","fffffff9","00000000","ffffffff"],["ffffffff","ffffffff","ffffffff","00000000","ffffffff"]]} +{"op":"select_i32","code":26,"wgsl":"select(ib, ia, c != 0u)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000000","00000001","00000000","00000000"],["00000000","00000000","00000007","00000000","00000000"],["00000000","00000000","7fffffff","00000000","00000000"],["00000000","00000000","80000000","00000000","00000000"],["00000000","00000000","fffffff9","00000000","00000000"],["00000000","00000000","ffffffff","00000000","00000000"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000001","00000001","00000000","00000000"],["00000000","00000001","00000007","00000000","00000000"],["00000000","00000001","7fffffff","00000000","00000000"],["00000000","00000001","80000000","00000000","00000000"],["00000000","00000001","fffffff9","00000000","00000000"],["00000000","00000001","ffffffff","00000000","00000000"],["00000000","00000007","00000000","00000000","00000007"],["00000000","00000007","00000001","00000000","00000000"],["00000000","00000007","00000007","00000000","00000000"],["00000000","00000007","7fffffff","00000000","00000000"],["00000000","00000007","80000000","00000000","00000000"],["00000000","00000007","fffffff9","00000000","00000000"],["00000000","00000007","ffffffff","00000000","00000000"],["00000000","7fffffff","00000000","00000000","7fffffff"],["00000000","7fffffff","00000001","00000000","00000000"],["00000000","7fffffff","00000007","00000000","00000000"],["00000000","7fffffff","7fffffff","00000000","00000000"],["00000000","7fffffff","80000000","00000000","00000000"],["00000000","7fffffff","fffffff9","00000000","00000000"],["00000000","7fffffff","ffffffff","00000000","00000000"],["00000000","80000000","00000000","00000000","80000000"],["00000000","80000000","00000001","00000000","00000000"],["00000000","80000000","00000007","00000000","00000000"],["00000000","80000000","7fffffff","00000000","00000000"],["00000000","80000000","80000000","00000000","00000000"],["00000000","80000000","fffffff9","00000000","00000000"],["00000000","80000000","ffffffff","00000000","00000000"],["00000000","fffffff9","00000000","00000000","fffffff9"],["00000000","fffffff9","00000001","00000000","00000000"],["00000000","fffffff9","00000007","00000000","00000000"],["00000000","fffffff9","7fffffff","00000000","00000000"],["00000000","fffffff9","80000000","00000000","00000000"],["00000000","fffffff9","fffffff9","00000000","00000000"],["00000000","fffffff9","ffffffff","00000000","00000000"],["00000000","ffffffff","00000000","00000000","ffffffff"],["00000000","ffffffff","00000001","00000000","00000000"],["00000000","ffffffff","00000007","00000000","00000000"],["00000000","ffffffff","7fffffff","00000000","00000000"],["00000000","ffffffff","80000000","00000000","00000000"],["00000000","ffffffff","fffffff9","00000000","00000000"],["00000000","ffffffff","ffffffff","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000000","00000001","00000000","00000001"],["00000001","00000000","00000007","00000000","00000001"],["00000001","00000000","7fffffff","00000000","00000001"],["00000001","00000000","80000000","00000000","00000001"],["00000001","00000000","fffffff9","00000000","00000001"],["00000001","00000000","ffffffff","00000000","00000001"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000001","00000001","00000000","00000001"],["00000001","00000001","00000007","00000000","00000001"],["00000001","00000001","7fffffff","00000000","00000001"],["00000001","00000001","80000000","00000000","00000001"],["00000001","00000001","fffffff9","00000000","00000001"],["00000001","00000001","ffffffff","00000000","00000001"],["00000001","00000007","00000000","00000000","00000007"],["00000001","00000007","00000001","00000000","00000001"],["00000001","00000007","00000007","00000000","00000001"],["00000001","00000007","7fffffff","00000000","00000001"],["00000001","00000007","80000000","00000000","00000001"],["00000001","00000007","fffffff9","00000000","00000001"],["00000001","00000007","ffffffff","00000000","00000001"],["00000001","7fffffff","00000000","00000000","7fffffff"],["00000001","7fffffff","00000001","00000000","00000001"],["00000001","7fffffff","00000007","00000000","00000001"],["00000001","7fffffff","7fffffff","00000000","00000001"],["00000001","7fffffff","80000000","00000000","00000001"],["00000001","7fffffff","fffffff9","00000000","00000001"],["00000001","7fffffff","ffffffff","00000000","00000001"],["00000001","80000000","00000000","00000000","80000000"],["00000001","80000000","00000001","00000000","00000001"],["00000001","80000000","00000007","00000000","00000001"],["00000001","80000000","7fffffff","00000000","00000001"],["00000001","80000000","80000000","00000000","00000001"],["00000001","80000000","fffffff9","00000000","00000001"],["00000001","80000000","ffffffff","00000000","00000001"],["00000001","fffffff9","00000000","00000000","fffffff9"],["00000001","fffffff9","00000001","00000000","00000001"],["00000001","fffffff9","00000007","00000000","00000001"],["00000001","fffffff9","7fffffff","00000000","00000001"],["00000001","fffffff9","80000000","00000000","00000001"],["00000001","fffffff9","fffffff9","00000000","00000001"],["00000001","fffffff9","ffffffff","00000000","00000001"],["00000001","ffffffff","00000000","00000000","ffffffff"],["00000001","ffffffff","00000001","00000000","00000001"],["00000001","ffffffff","00000007","00000000","00000001"],["00000001","ffffffff","7fffffff","00000000","00000001"],["00000001","ffffffff","80000000","00000000","00000001"],["00000001","ffffffff","fffffff9","00000000","00000001"],["00000001","ffffffff","ffffffff","00000000","00000001"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000000","00000001","00000000","00000007"],["00000007","00000000","00000007","00000000","00000007"],["00000007","00000000","7fffffff","00000000","00000007"],["00000007","00000000","80000000","00000000","00000007"],["00000007","00000000","fffffff9","00000000","00000007"],["00000007","00000000","ffffffff","00000000","00000007"],["00000007","00000001","00000000","00000000","00000001"],["00000007","00000001","00000001","00000000","00000007"],["00000007","00000001","00000007","00000000","00000007"],["00000007","00000001","7fffffff","00000000","00000007"],["00000007","00000001","80000000","00000000","00000007"],["00000007","00000001","fffffff9","00000000","00000007"],["00000007","00000001","ffffffff","00000000","00000007"],["00000007","00000007","00000000","00000000","00000007"],["00000007","00000007","00000001","00000000","00000007"],["00000007","00000007","00000007","00000000","00000007"],["00000007","00000007","7fffffff","00000000","00000007"],["00000007","00000007","80000000","00000000","00000007"],["00000007","00000007","fffffff9","00000000","00000007"],["00000007","00000007","ffffffff","00000000","00000007"],["00000007","7fffffff","00000000","00000000","7fffffff"],["00000007","7fffffff","00000001","00000000","00000007"],["00000007","7fffffff","00000007","00000000","00000007"],["00000007","7fffffff","7fffffff","00000000","00000007"],["00000007","7fffffff","80000000","00000000","00000007"],["00000007","7fffffff","fffffff9","00000000","00000007"],["00000007","7fffffff","ffffffff","00000000","00000007"],["00000007","80000000","00000000","00000000","80000000"],["00000007","80000000","00000001","00000000","00000007"],["00000007","80000000","00000007","00000000","00000007"],["00000007","80000000","7fffffff","00000000","00000007"],["00000007","80000000","80000000","00000000","00000007"],["00000007","80000000","fffffff9","00000000","00000007"],["00000007","80000000","ffffffff","00000000","00000007"],["00000007","fffffff9","00000000","00000000","fffffff9"],["00000007","fffffff9","00000001","00000000","00000007"],["00000007","fffffff9","00000007","00000000","00000007"],["00000007","fffffff9","7fffffff","00000000","00000007"],["00000007","fffffff9","80000000","00000000","00000007"],["00000007","fffffff9","fffffff9","00000000","00000007"],["00000007","fffffff9","ffffffff","00000000","00000007"],["00000007","ffffffff","00000000","00000000","ffffffff"],["00000007","ffffffff","00000001","00000000","00000007"],["00000007","ffffffff","00000007","00000000","00000007"],["00000007","ffffffff","7fffffff","00000000","00000007"],["00000007","ffffffff","80000000","00000000","00000007"],["00000007","ffffffff","fffffff9","00000000","00000007"],["00000007","ffffffff","ffffffff","00000000","00000007"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000000","00000001","00000000","7fffffff"],["7fffffff","00000000","00000007","00000000","7fffffff"],["7fffffff","00000000","7fffffff","00000000","7fffffff"],["7fffffff","00000000","80000000","00000000","7fffffff"],["7fffffff","00000000","fffffff9","00000000","7fffffff"],["7fffffff","00000000","ffffffff","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","00000001"],["7fffffff","00000001","00000001","00000000","7fffffff"],["7fffffff","00000001","00000007","00000000","7fffffff"],["7fffffff","00000001","7fffffff","00000000","7fffffff"],["7fffffff","00000001","80000000","00000000","7fffffff"],["7fffffff","00000001","fffffff9","00000000","7fffffff"],["7fffffff","00000001","ffffffff","00000000","7fffffff"],["7fffffff","00000007","00000000","00000000","00000007"],["7fffffff","00000007","00000001","00000000","7fffffff"],["7fffffff","00000007","00000007","00000000","7fffffff"],["7fffffff","00000007","7fffffff","00000000","7fffffff"],["7fffffff","00000007","80000000","00000000","7fffffff"],["7fffffff","00000007","fffffff9","00000000","7fffffff"],["7fffffff","00000007","ffffffff","00000000","7fffffff"],["7fffffff","7fffffff","00000000","00000000","7fffffff"],["7fffffff","7fffffff","00000001","00000000","7fffffff"],["7fffffff","7fffffff","00000007","00000000","7fffffff"],["7fffffff","7fffffff","7fffffff","00000000","7fffffff"],["7fffffff","7fffffff","80000000","00000000","7fffffff"],["7fffffff","7fffffff","fffffff9","00000000","7fffffff"],["7fffffff","7fffffff","ffffffff","00000000","7fffffff"],["7fffffff","80000000","00000000","00000000","80000000"],["7fffffff","80000000","00000001","00000000","7fffffff"],["7fffffff","80000000","00000007","00000000","7fffffff"],["7fffffff","80000000","7fffffff","00000000","7fffffff"],["7fffffff","80000000","80000000","00000000","7fffffff"],["7fffffff","80000000","fffffff9","00000000","7fffffff"],["7fffffff","80000000","ffffffff","00000000","7fffffff"],["7fffffff","fffffff9","00000000","00000000","fffffff9"],["7fffffff","fffffff9","00000001","00000000","7fffffff"],["7fffffff","fffffff9","00000007","00000000","7fffffff"],["7fffffff","fffffff9","7fffffff","00000000","7fffffff"],["7fffffff","fffffff9","80000000","00000000","7fffffff"],["7fffffff","fffffff9","fffffff9","00000000","7fffffff"],["7fffffff","fffffff9","ffffffff","00000000","7fffffff"],["7fffffff","ffffffff","00000000","00000000","ffffffff"],["7fffffff","ffffffff","00000001","00000000","7fffffff"],["7fffffff","ffffffff","00000007","00000000","7fffffff"],["7fffffff","ffffffff","7fffffff","00000000","7fffffff"],["7fffffff","ffffffff","80000000","00000000","7fffffff"],["7fffffff","ffffffff","fffffff9","00000000","7fffffff"],["7fffffff","ffffffff","ffffffff","00000000","7fffffff"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000000","00000001","00000000","80000000"],["80000000","00000000","00000007","00000000","80000000"],["80000000","00000000","7fffffff","00000000","80000000"],["80000000","00000000","80000000","00000000","80000000"],["80000000","00000000","fffffff9","00000000","80000000"],["80000000","00000000","ffffffff","00000000","80000000"],["80000000","00000001","00000000","00000000","00000001"],["80000000","00000001","00000001","00000000","80000000"],["80000000","00000001","00000007","00000000","80000000"],["80000000","00000001","7fffffff","00000000","80000000"],["80000000","00000001","80000000","00000000","80000000"],["80000000","00000001","fffffff9","00000000","80000000"],["80000000","00000001","ffffffff","00000000","80000000"],["80000000","00000007","00000000","00000000","00000007"],["80000000","00000007","00000001","00000000","80000000"],["80000000","00000007","00000007","00000000","80000000"],["80000000","00000007","7fffffff","00000000","80000000"],["80000000","00000007","80000000","00000000","80000000"],["80000000","00000007","fffffff9","00000000","80000000"],["80000000","00000007","ffffffff","00000000","80000000"],["80000000","7fffffff","00000000","00000000","7fffffff"],["80000000","7fffffff","00000001","00000000","80000000"],["80000000","7fffffff","00000007","00000000","80000000"],["80000000","7fffffff","7fffffff","00000000","80000000"],["80000000","7fffffff","80000000","00000000","80000000"],["80000000","7fffffff","fffffff9","00000000","80000000"],["80000000","7fffffff","ffffffff","00000000","80000000"],["80000000","80000000","00000000","00000000","80000000"],["80000000","80000000","00000001","00000000","80000000"],["80000000","80000000","00000007","00000000","80000000"],["80000000","80000000","7fffffff","00000000","80000000"],["80000000","80000000","80000000","00000000","80000000"],["80000000","80000000","fffffff9","00000000","80000000"],["80000000","80000000","ffffffff","00000000","80000000"],["80000000","fffffff9","00000000","00000000","fffffff9"],["80000000","fffffff9","00000001","00000000","80000000"],["80000000","fffffff9","00000007","00000000","80000000"],["80000000","fffffff9","7fffffff","00000000","80000000"],["80000000","fffffff9","80000000","00000000","80000000"],["80000000","fffffff9","fffffff9","00000000","80000000"],["80000000","fffffff9","ffffffff","00000000","80000000"],["80000000","ffffffff","00000000","00000000","ffffffff"],["80000000","ffffffff","00000001","00000000","80000000"],["80000000","ffffffff","00000007","00000000","80000000"],["80000000","ffffffff","7fffffff","00000000","80000000"],["80000000","ffffffff","80000000","00000000","80000000"],["80000000","ffffffff","fffffff9","00000000","80000000"],["80000000","ffffffff","ffffffff","00000000","80000000"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000000","00000001","00000000","fffffff9"],["fffffff9","00000000","00000007","00000000","fffffff9"],["fffffff9","00000000","7fffffff","00000000","fffffff9"],["fffffff9","00000000","80000000","00000000","fffffff9"],["fffffff9","00000000","fffffff9","00000000","fffffff9"],["fffffff9","00000000","ffffffff","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","00000001"],["fffffff9","00000001","00000001","00000000","fffffff9"],["fffffff9","00000001","00000007","00000000","fffffff9"],["fffffff9","00000001","7fffffff","00000000","fffffff9"],["fffffff9","00000001","80000000","00000000","fffffff9"],["fffffff9","00000001","fffffff9","00000000","fffffff9"],["fffffff9","00000001","ffffffff","00000000","fffffff9"],["fffffff9","00000007","00000000","00000000","00000007"],["fffffff9","00000007","00000001","00000000","fffffff9"],["fffffff9","00000007","00000007","00000000","fffffff9"],["fffffff9","00000007","7fffffff","00000000","fffffff9"],["fffffff9","00000007","80000000","00000000","fffffff9"],["fffffff9","00000007","fffffff9","00000000","fffffff9"],["fffffff9","00000007","ffffffff","00000000","fffffff9"],["fffffff9","7fffffff","00000000","00000000","7fffffff"],["fffffff9","7fffffff","00000001","00000000","fffffff9"],["fffffff9","7fffffff","00000007","00000000","fffffff9"],["fffffff9","7fffffff","7fffffff","00000000","fffffff9"],["fffffff9","7fffffff","80000000","00000000","fffffff9"],["fffffff9","7fffffff","fffffff9","00000000","fffffff9"],["fffffff9","7fffffff","ffffffff","00000000","fffffff9"],["fffffff9","80000000","00000000","00000000","80000000"],["fffffff9","80000000","00000001","00000000","fffffff9"],["fffffff9","80000000","00000007","00000000","fffffff9"],["fffffff9","80000000","7fffffff","00000000","fffffff9"],["fffffff9","80000000","80000000","00000000","fffffff9"],["fffffff9","80000000","fffffff9","00000000","fffffff9"],["fffffff9","80000000","ffffffff","00000000","fffffff9"],["fffffff9","fffffff9","00000000","00000000","fffffff9"],["fffffff9","fffffff9","00000001","00000000","fffffff9"],["fffffff9","fffffff9","00000007","00000000","fffffff9"],["fffffff9","fffffff9","7fffffff","00000000","fffffff9"],["fffffff9","fffffff9","80000000","00000000","fffffff9"],["fffffff9","fffffff9","fffffff9","00000000","fffffff9"],["fffffff9","fffffff9","ffffffff","00000000","fffffff9"],["fffffff9","ffffffff","00000000","00000000","ffffffff"],["fffffff9","ffffffff","00000001","00000000","fffffff9"],["fffffff9","ffffffff","00000007","00000000","fffffff9"],["fffffff9","ffffffff","7fffffff","00000000","fffffff9"],["fffffff9","ffffffff","80000000","00000000","fffffff9"],["fffffff9","ffffffff","fffffff9","00000000","fffffff9"],["fffffff9","ffffffff","ffffffff","00000000","fffffff9"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000001","00000000","ffffffff"],["ffffffff","00000000","00000007","00000000","ffffffff"],["ffffffff","00000000","7fffffff","00000000","ffffffff"],["ffffffff","00000000","80000000","00000000","ffffffff"],["ffffffff","00000000","fffffff9","00000000","ffffffff"],["ffffffff","00000000","ffffffff","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","00000001"],["ffffffff","00000001","00000001","00000000","ffffffff"],["ffffffff","00000001","00000007","00000000","ffffffff"],["ffffffff","00000001","7fffffff","00000000","ffffffff"],["ffffffff","00000001","80000000","00000000","ffffffff"],["ffffffff","00000001","fffffff9","00000000","ffffffff"],["ffffffff","00000001","ffffffff","00000000","ffffffff"],["ffffffff","00000007","00000000","00000000","00000007"],["ffffffff","00000007","00000001","00000000","ffffffff"],["ffffffff","00000007","00000007","00000000","ffffffff"],["ffffffff","00000007","7fffffff","00000000","ffffffff"],["ffffffff","00000007","80000000","00000000","ffffffff"],["ffffffff","00000007","fffffff9","00000000","ffffffff"],["ffffffff","00000007","ffffffff","00000000","ffffffff"],["ffffffff","7fffffff","00000000","00000000","7fffffff"],["ffffffff","7fffffff","00000001","00000000","ffffffff"],["ffffffff","7fffffff","00000007","00000000","ffffffff"],["ffffffff","7fffffff","7fffffff","00000000","ffffffff"],["ffffffff","7fffffff","80000000","00000000","ffffffff"],["ffffffff","7fffffff","fffffff9","00000000","ffffffff"],["ffffffff","7fffffff","ffffffff","00000000","ffffffff"],["ffffffff","80000000","00000000","00000000","80000000"],["ffffffff","80000000","00000001","00000000","ffffffff"],["ffffffff","80000000","00000007","00000000","ffffffff"],["ffffffff","80000000","7fffffff","00000000","ffffffff"],["ffffffff","80000000","80000000","00000000","ffffffff"],["ffffffff","80000000","fffffff9","00000000","ffffffff"],["ffffffff","80000000","ffffffff","00000000","ffffffff"],["ffffffff","fffffff9","00000000","00000000","fffffff9"],["ffffffff","fffffff9","00000001","00000000","ffffffff"],["ffffffff","fffffff9","00000007","00000000","ffffffff"],["ffffffff","fffffff9","7fffffff","00000000","ffffffff"],["ffffffff","fffffff9","80000000","00000000","ffffffff"],["ffffffff","fffffff9","fffffff9","00000000","ffffffff"],["ffffffff","fffffff9","ffffffff","00000000","ffffffff"],["ffffffff","ffffffff","00000000","00000000","ffffffff"],["ffffffff","ffffffff","00000001","00000000","ffffffff"],["ffffffff","ffffffff","00000007","00000000","ffffffff"],["ffffffff","ffffffff","7fffffff","00000000","ffffffff"],["ffffffff","ffffffff","80000000","00000000","ffffffff"],["ffffffff","ffffffff","fffffff9","00000000","ffffffff"],["ffffffff","ffffffff","ffffffff","00000000","ffffffff"]]} +{"op":"min_i32","code":27,"wgsl":"min(ia, ib)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","7fffffff","00000000","00000000","00000000"],["00000000","80000000","00000000","00000000","80000000"],["00000000","fffffff9","00000000","00000000","fffffff9"],["00000000","ffffffff","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000007","00000000","00000000","00000001"],["00000001","7fffffff","00000000","00000000","00000001"],["00000001","80000000","00000000","00000000","80000000"],["00000001","fffffff9","00000000","00000000","fffffff9"],["00000001","ffffffff","00000000","00000000","ffffffff"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000001"],["00000007","00000007","00000000","00000000","00000007"],["00000007","7fffffff","00000000","00000000","00000007"],["00000007","80000000","00000000","00000000","80000000"],["00000007","fffffff9","00000000","00000000","fffffff9"],["00000007","ffffffff","00000000","00000000","ffffffff"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","00000001"],["7fffffff","00000007","00000000","00000000","00000007"],["7fffffff","7fffffff","00000000","00000000","7fffffff"],["7fffffff","80000000","00000000","00000000","80000000"],["7fffffff","fffffff9","00000000","00000000","fffffff9"],["7fffffff","ffffffff","00000000","00000000","ffffffff"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","80000000"],["80000000","00000007","00000000","00000000","80000000"],["80000000","7fffffff","00000000","00000000","80000000"],["80000000","80000000","00000000","00000000","80000000"],["80000000","fffffff9","00000000","00000000","80000000"],["80000000","ffffffff","00000000","00000000","80000000"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffff9"],["fffffff9","00000007","00000000","00000000","fffffff9"],["fffffff9","7fffffff","00000000","00000000","fffffff9"],["fffffff9","80000000","00000000","00000000","80000000"],["fffffff9","fffffff9","00000000","00000000","fffffff9"],["fffffff9","ffffffff","00000000","00000000","fffffff9"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","ffffffff"],["ffffffff","00000007","00000000","00000000","ffffffff"],["ffffffff","7fffffff","00000000","00000000","ffffffff"],["ffffffff","80000000","00000000","00000000","80000000"],["ffffffff","fffffff9","00000000","00000000","fffffff9"],["ffffffff","ffffffff","00000000","00000000","ffffffff"]]} +{"op":"max_i32","code":28,"wgsl":"max(ia, ib)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000007","00000000","00000000","00000007"],["00000000","7fffffff","00000000","00000000","7fffffff"],["00000000","80000000","00000000","00000000","00000000"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000007","00000000","00000000","00000007"],["00000001","7fffffff","00000000","00000000","7fffffff"],["00000001","80000000","00000000","00000000","00000001"],["00000001","fffffff9","00000000","00000000","00000001"],["00000001","ffffffff","00000000","00000000","00000001"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","00000007"],["00000007","00000007","00000000","00000000","00000007"],["00000007","7fffffff","00000000","00000000","7fffffff"],["00000007","80000000","00000000","00000000","00000007"],["00000007","fffffff9","00000000","00000000","00000007"],["00000007","ffffffff","00000000","00000000","00000007"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","7fffffff"],["7fffffff","00000007","00000000","00000000","7fffffff"],["7fffffff","7fffffff","00000000","00000000","7fffffff"],["7fffffff","80000000","00000000","00000000","7fffffff"],["7fffffff","fffffff9","00000000","00000000","7fffffff"],["7fffffff","ffffffff","00000000","00000000","7fffffff"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000001","00000000","00000000","00000001"],["80000000","00000007","00000000","00000000","00000007"],["80000000","7fffffff","00000000","00000000","7fffffff"],["80000000","80000000","00000000","00000000","80000000"],["80000000","fffffff9","00000000","00000000","fffffff9"],["80000000","ffffffff","00000000","00000000","ffffffff"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000001","00000000","00000000","00000001"],["fffffff9","00000007","00000000","00000000","00000007"],["fffffff9","7fffffff","00000000","00000000","7fffffff"],["fffffff9","80000000","00000000","00000000","fffffff9"],["fffffff9","fffffff9","00000000","00000000","fffffff9"],["fffffff9","ffffffff","00000000","00000000","ffffffff"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000001","00000000","00000000","00000001"],["ffffffff","00000007","00000000","00000000","00000007"],["ffffffff","7fffffff","00000000","00000000","7fffffff"],["ffffffff","80000000","00000000","00000000","ffffffff"],["ffffffff","fffffff9","00000000","00000000","ffffffff"],["ffffffff","ffffffff","00000000","00000000","ffffffff"]]} +{"op":"min_u32","code":29,"wgsl":"min(a, b)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000007","00000000","00000000","00000000"],["00000000","7fffffff","00000000","00000000","00000000"],["00000000","80000000","00000000","00000000","00000000"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000007","00000000","00000000","00000001"],["00000001","7fffffff","00000000","00000000","00000001"],["00000001","80000000","00000000","00000000","00000001"],["00000001","fffffff9","00000000","00000000","00000001"],["00000001","ffffffff","00000000","00000000","00000001"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000001"],["00000007","00000007","00000000","00000000","00000007"],["00000007","7fffffff","00000000","00000000","00000007"],["00000007","80000000","00000000","00000000","00000007"],["00000007","fffffff9","00000000","00000000","00000007"],["00000007","ffffffff","00000000","00000000","00000007"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","00000001"],["7fffffff","00000007","00000000","00000000","00000007"],["7fffffff","7fffffff","00000000","00000000","7fffffff"],["7fffffff","80000000","00000000","00000000","7fffffff"],["7fffffff","fffffff9","00000000","00000000","7fffffff"],["7fffffff","ffffffff","00000000","00000000","7fffffff"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000001","00000000","00000000","00000001"],["80000000","00000007","00000000","00000000","00000007"],["80000000","7fffffff","00000000","00000000","7fffffff"],["80000000","80000000","00000000","00000000","80000000"],["80000000","fffffff9","00000000","00000000","80000000"],["80000000","ffffffff","00000000","00000000","80000000"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000001","00000000","00000000","00000001"],["fffffff9","00000007","00000000","00000000","00000007"],["fffffff9","7fffffff","00000000","00000000","7fffffff"],["fffffff9","80000000","00000000","00000000","80000000"],["fffffff9","fffffff9","00000000","00000000","fffffff9"],["fffffff9","ffffffff","00000000","00000000","fffffff9"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000001","00000000","00000000","00000001"],["ffffffff","00000007","00000000","00000000","00000007"],["ffffffff","7fffffff","00000000","00000000","7fffffff"],["ffffffff","80000000","00000000","00000000","80000000"],["ffffffff","fffffff9","00000000","00000000","fffffff9"],["ffffffff","ffffffff","00000000","00000000","ffffffff"]]} +{"op":"max_u32","code":30,"wgsl":"max(a, b)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000007","00000000","00000000","00000007"],["00000000","7fffffff","00000000","00000000","7fffffff"],["00000000","80000000","00000000","00000000","80000000"],["00000000","fffffff9","00000000","00000000","fffffff9"],["00000000","ffffffff","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000001","00000000","00000000","00000001"],["00000001","00000007","00000000","00000000","00000007"],["00000001","7fffffff","00000000","00000000","7fffffff"],["00000001","80000000","00000000","00000000","80000000"],["00000001","fffffff9","00000000","00000000","fffffff9"],["00000001","ffffffff","00000000","00000000","ffffffff"],["00000007","00000000","00000000","00000000","00000007"],["00000007","00000001","00000000","00000000","00000007"],["00000007","00000007","00000000","00000000","00000007"],["00000007","7fffffff","00000000","00000000","7fffffff"],["00000007","80000000","00000000","00000000","80000000"],["00000007","fffffff9","00000000","00000000","fffffff9"],["00000007","ffffffff","00000000","00000000","ffffffff"],["7fffffff","00000000","00000000","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","7fffffff"],["7fffffff","00000007","00000000","00000000","7fffffff"],["7fffffff","7fffffff","00000000","00000000","7fffffff"],["7fffffff","80000000","00000000","00000000","80000000"],["7fffffff","fffffff9","00000000","00000000","fffffff9"],["7fffffff","ffffffff","00000000","00000000","ffffffff"],["80000000","00000000","00000000","00000000","80000000"],["80000000","00000001","00000000","00000000","80000000"],["80000000","00000007","00000000","00000000","80000000"],["80000000","7fffffff","00000000","00000000","80000000"],["80000000","80000000","00000000","00000000","80000000"],["80000000","fffffff9","00000000","00000000","fffffff9"],["80000000","ffffffff","00000000","00000000","ffffffff"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","fffffff9"],["fffffff9","00000007","00000000","00000000","fffffff9"],["fffffff9","7fffffff","00000000","00000000","fffffff9"],["fffffff9","80000000","00000000","00000000","fffffff9"],["fffffff9","fffffff9","00000000","00000000","fffffff9"],["fffffff9","ffffffff","00000000","00000000","ffffffff"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","ffffffff"],["ffffffff","00000007","00000000","00000000","ffffffff"],["ffffffff","7fffffff","00000000","00000000","ffffffff"],["ffffffff","80000000","00000000","00000000","ffffffff"],["ffffffff","fffffff9","00000000","00000000","ffffffff"],["ffffffff","ffffffff","00000000","00000000","ffffffff"]]} +{"op":"clamp_i32","code":31,"wgsl":"clamp(ia, ib, ic)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000000","00000001","00000000","00000000"],["00000000","00000000","00000007","00000000","00000000"],["00000000","00000000","7fffffff","00000000","00000000"],["00000000","00000000","80000000","00000000","80000000","unguarded"],["00000000","00000000","fffffff9","00000000","fffffff9","unguarded"],["00000000","00000000","ffffffff","00000000","ffffffff","unguarded"],["00000000","00000001","00000000","00000000","00000000","unguarded"],["00000000","00000001","00000001","00000000","00000001"],["00000000","00000001","00000007","00000000","00000001"],["00000000","00000001","7fffffff","00000000","00000001"],["00000000","00000001","80000000","00000000","80000000","unguarded"],["00000000","00000001","fffffff9","00000000","fffffff9","unguarded"],["00000000","00000001","ffffffff","00000000","ffffffff","unguarded"],["00000000","00000007","00000000","00000000","00000000","unguarded"],["00000000","00000007","00000001","00000000","00000001","unguarded"],["00000000","00000007","00000007","00000000","00000007"],["00000000","00000007","7fffffff","00000000","00000007"],["00000000","00000007","80000000","00000000","80000000","unguarded"],["00000000","00000007","fffffff9","00000000","fffffff9","unguarded"],["00000000","00000007","ffffffff","00000000","ffffffff","unguarded"],["00000000","7fffffff","00000000","00000000","00000000","unguarded"],["00000000","7fffffff","00000001","00000000","00000001","unguarded"],["00000000","7fffffff","00000007","00000000","00000007","unguarded"],["00000000","7fffffff","7fffffff","00000000","7fffffff"],["00000000","7fffffff","80000000","00000000","80000000","unguarded"],["00000000","7fffffff","fffffff9","00000000","fffffff9","unguarded"],["00000000","7fffffff","ffffffff","00000000","ffffffff","unguarded"],["00000000","80000000","00000000","00000000","00000000"],["00000000","80000000","00000001","00000000","00000000"],["00000000","80000000","00000007","00000000","00000000"],["00000000","80000000","7fffffff","00000000","00000000"],["00000000","80000000","80000000","00000000","80000000"],["00000000","80000000","fffffff9","00000000","fffffff9"],["00000000","80000000","ffffffff","00000000","ffffffff"],["00000000","fffffff9","00000000","00000000","00000000"],["00000000","fffffff9","00000001","00000000","00000000"],["00000000","fffffff9","00000007","00000000","00000000"],["00000000","fffffff9","7fffffff","00000000","00000000"],["00000000","fffffff9","80000000","00000000","80000000","unguarded"],["00000000","fffffff9","fffffff9","00000000","fffffff9"],["00000000","fffffff9","ffffffff","00000000","ffffffff"],["00000000","ffffffff","00000000","00000000","00000000"],["00000000","ffffffff","00000001","00000000","00000000"],["00000000","ffffffff","00000007","00000000","00000000"],["00000000","ffffffff","7fffffff","00000000","00000000"],["00000000","ffffffff","80000000","00000000","80000000","unguarded"],["00000000","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["00000000","ffffffff","ffffffff","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000000","00000001","00000000","00000001"],["00000001","00000000","00000007","00000000","00000001"],["00000001","00000000","7fffffff","00000000","00000001"],["00000001","00000000","80000000","00000000","80000000","unguarded"],["00000001","00000000","fffffff9","00000000","fffffff9","unguarded"],["00000001","00000000","ffffffff","00000000","ffffffff","unguarded"],["00000001","00000001","00000000","00000000","00000000","unguarded"],["00000001","00000001","00000001","00000000","00000001"],["00000001","00000001","00000007","00000000","00000001"],["00000001","00000001","7fffffff","00000000","00000001"],["00000001","00000001","80000000","00000000","80000000","unguarded"],["00000001","00000001","fffffff9","00000000","fffffff9","unguarded"],["00000001","00000001","ffffffff","00000000","ffffffff","unguarded"],["00000001","00000007","00000000","00000000","00000000","unguarded"],["00000001","00000007","00000001","00000000","00000001","unguarded"],["00000001","00000007","00000007","00000000","00000007"],["00000001","00000007","7fffffff","00000000","00000007"],["00000001","00000007","80000000","00000000","80000000","unguarded"],["00000001","00000007","fffffff9","00000000","fffffff9","unguarded"],["00000001","00000007","ffffffff","00000000","ffffffff","unguarded"],["00000001","7fffffff","00000000","00000000","00000000","unguarded"],["00000001","7fffffff","00000001","00000000","00000001","unguarded"],["00000001","7fffffff","00000007","00000000","00000007","unguarded"],["00000001","7fffffff","7fffffff","00000000","7fffffff"],["00000001","7fffffff","80000000","00000000","80000000","unguarded"],["00000001","7fffffff","fffffff9","00000000","fffffff9","unguarded"],["00000001","7fffffff","ffffffff","00000000","ffffffff","unguarded"],["00000001","80000000","00000000","00000000","00000000"],["00000001","80000000","00000001","00000000","00000001"],["00000001","80000000","00000007","00000000","00000001"],["00000001","80000000","7fffffff","00000000","00000001"],["00000001","80000000","80000000","00000000","80000000"],["00000001","80000000","fffffff9","00000000","fffffff9"],["00000001","80000000","ffffffff","00000000","ffffffff"],["00000001","fffffff9","00000000","00000000","00000000"],["00000001","fffffff9","00000001","00000000","00000001"],["00000001","fffffff9","00000007","00000000","00000001"],["00000001","fffffff9","7fffffff","00000000","00000001"],["00000001","fffffff9","80000000","00000000","80000000","unguarded"],["00000001","fffffff9","fffffff9","00000000","fffffff9"],["00000001","fffffff9","ffffffff","00000000","ffffffff"],["00000001","ffffffff","00000000","00000000","00000000"],["00000001","ffffffff","00000001","00000000","00000001"],["00000001","ffffffff","00000007","00000000","00000001"],["00000001","ffffffff","7fffffff","00000000","00000001"],["00000001","ffffffff","80000000","00000000","80000000","unguarded"],["00000001","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["00000001","ffffffff","ffffffff","00000000","ffffffff"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000000","00000001","00000000","00000001"],["00000007","00000000","00000007","00000000","00000007"],["00000007","00000000","7fffffff","00000000","00000007"],["00000007","00000000","80000000","00000000","80000000","unguarded"],["00000007","00000000","fffffff9","00000000","fffffff9","unguarded"],["00000007","00000000","ffffffff","00000000","ffffffff","unguarded"],["00000007","00000001","00000000","00000000","00000000","unguarded"],["00000007","00000001","00000001","00000000","00000001"],["00000007","00000001","00000007","00000000","00000007"],["00000007","00000001","7fffffff","00000000","00000007"],["00000007","00000001","80000000","00000000","80000000","unguarded"],["00000007","00000001","fffffff9","00000000","fffffff9","unguarded"],["00000007","00000001","ffffffff","00000000","ffffffff","unguarded"],["00000007","00000007","00000000","00000000","00000000","unguarded"],["00000007","00000007","00000001","00000000","00000001","unguarded"],["00000007","00000007","00000007","00000000","00000007"],["00000007","00000007","7fffffff","00000000","00000007"],["00000007","00000007","80000000","00000000","80000000","unguarded"],["00000007","00000007","fffffff9","00000000","fffffff9","unguarded"],["00000007","00000007","ffffffff","00000000","ffffffff","unguarded"],["00000007","7fffffff","00000000","00000000","00000000","unguarded"],["00000007","7fffffff","00000001","00000000","00000001","unguarded"],["00000007","7fffffff","00000007","00000000","00000007","unguarded"],["00000007","7fffffff","7fffffff","00000000","7fffffff"],["00000007","7fffffff","80000000","00000000","80000000","unguarded"],["00000007","7fffffff","fffffff9","00000000","fffffff9","unguarded"],["00000007","7fffffff","ffffffff","00000000","ffffffff","unguarded"],["00000007","80000000","00000000","00000000","00000000"],["00000007","80000000","00000001","00000000","00000001"],["00000007","80000000","00000007","00000000","00000007"],["00000007","80000000","7fffffff","00000000","00000007"],["00000007","80000000","80000000","00000000","80000000"],["00000007","80000000","fffffff9","00000000","fffffff9"],["00000007","80000000","ffffffff","00000000","ffffffff"],["00000007","fffffff9","00000000","00000000","00000000"],["00000007","fffffff9","00000001","00000000","00000001"],["00000007","fffffff9","00000007","00000000","00000007"],["00000007","fffffff9","7fffffff","00000000","00000007"],["00000007","fffffff9","80000000","00000000","80000000","unguarded"],["00000007","fffffff9","fffffff9","00000000","fffffff9"],["00000007","fffffff9","ffffffff","00000000","ffffffff"],["00000007","ffffffff","00000000","00000000","00000000"],["00000007","ffffffff","00000001","00000000","00000001"],["00000007","ffffffff","00000007","00000000","00000007"],["00000007","ffffffff","7fffffff","00000000","00000007"],["00000007","ffffffff","80000000","00000000","80000000","unguarded"],["00000007","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["00000007","ffffffff","ffffffff","00000000","ffffffff"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000000","00000001","00000000","00000001"],["7fffffff","00000000","00000007","00000000","00000007"],["7fffffff","00000000","7fffffff","00000000","7fffffff"],["7fffffff","00000000","80000000","00000000","80000000","unguarded"],["7fffffff","00000000","fffffff9","00000000","fffffff9","unguarded"],["7fffffff","00000000","ffffffff","00000000","ffffffff","unguarded"],["7fffffff","00000001","00000000","00000000","00000000","unguarded"],["7fffffff","00000001","00000001","00000000","00000001"],["7fffffff","00000001","00000007","00000000","00000007"],["7fffffff","00000001","7fffffff","00000000","7fffffff"],["7fffffff","00000001","80000000","00000000","80000000","unguarded"],["7fffffff","00000001","fffffff9","00000000","fffffff9","unguarded"],["7fffffff","00000001","ffffffff","00000000","ffffffff","unguarded"],["7fffffff","00000007","00000000","00000000","00000000","unguarded"],["7fffffff","00000007","00000001","00000000","00000001","unguarded"],["7fffffff","00000007","00000007","00000000","00000007"],["7fffffff","00000007","7fffffff","00000000","7fffffff"],["7fffffff","00000007","80000000","00000000","80000000","unguarded"],["7fffffff","00000007","fffffff9","00000000","fffffff9","unguarded"],["7fffffff","00000007","ffffffff","00000000","ffffffff","unguarded"],["7fffffff","7fffffff","00000000","00000000","00000000","unguarded"],["7fffffff","7fffffff","00000001","00000000","00000001","unguarded"],["7fffffff","7fffffff","00000007","00000000","00000007","unguarded"],["7fffffff","7fffffff","7fffffff","00000000","7fffffff"],["7fffffff","7fffffff","80000000","00000000","80000000","unguarded"],["7fffffff","7fffffff","fffffff9","00000000","fffffff9","unguarded"],["7fffffff","7fffffff","ffffffff","00000000","ffffffff","unguarded"],["7fffffff","80000000","00000000","00000000","00000000"],["7fffffff","80000000","00000001","00000000","00000001"],["7fffffff","80000000","00000007","00000000","00000007"],["7fffffff","80000000","7fffffff","00000000","7fffffff"],["7fffffff","80000000","80000000","00000000","80000000"],["7fffffff","80000000","fffffff9","00000000","fffffff9"],["7fffffff","80000000","ffffffff","00000000","ffffffff"],["7fffffff","fffffff9","00000000","00000000","00000000"],["7fffffff","fffffff9","00000001","00000000","00000001"],["7fffffff","fffffff9","00000007","00000000","00000007"],["7fffffff","fffffff9","7fffffff","00000000","7fffffff"],["7fffffff","fffffff9","80000000","00000000","80000000","unguarded"],["7fffffff","fffffff9","fffffff9","00000000","fffffff9"],["7fffffff","fffffff9","ffffffff","00000000","ffffffff"],["7fffffff","ffffffff","00000000","00000000","00000000"],["7fffffff","ffffffff","00000001","00000000","00000001"],["7fffffff","ffffffff","00000007","00000000","00000007"],["7fffffff","ffffffff","7fffffff","00000000","7fffffff"],["7fffffff","ffffffff","80000000","00000000","80000000","unguarded"],["7fffffff","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["7fffffff","ffffffff","ffffffff","00000000","ffffffff"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000000","00000001","00000000","00000000"],["80000000","00000000","00000007","00000000","00000000"],["80000000","00000000","7fffffff","00000000","00000000"],["80000000","00000000","80000000","00000000","80000000","unguarded"],["80000000","00000000","fffffff9","00000000","fffffff9","unguarded"],["80000000","00000000","ffffffff","00000000","ffffffff","unguarded"],["80000000","00000001","00000000","00000000","00000000","unguarded"],["80000000","00000001","00000001","00000000","00000001"],["80000000","00000001","00000007","00000000","00000001"],["80000000","00000001","7fffffff","00000000","00000001"],["80000000","00000001","80000000","00000000","80000000","unguarded"],["80000000","00000001","fffffff9","00000000","fffffff9","unguarded"],["80000000","00000001","ffffffff","00000000","ffffffff","unguarded"],["80000000","00000007","00000000","00000000","00000000","unguarded"],["80000000","00000007","00000001","00000000","00000001","unguarded"],["80000000","00000007","00000007","00000000","00000007"],["80000000","00000007","7fffffff","00000000","00000007"],["80000000","00000007","80000000","00000000","80000000","unguarded"],["80000000","00000007","fffffff9","00000000","fffffff9","unguarded"],["80000000","00000007","ffffffff","00000000","ffffffff","unguarded"],["80000000","7fffffff","00000000","00000000","00000000","unguarded"],["80000000","7fffffff","00000001","00000000","00000001","unguarded"],["80000000","7fffffff","00000007","00000000","00000007","unguarded"],["80000000","7fffffff","7fffffff","00000000","7fffffff"],["80000000","7fffffff","80000000","00000000","80000000","unguarded"],["80000000","7fffffff","fffffff9","00000000","fffffff9","unguarded"],["80000000","7fffffff","ffffffff","00000000","ffffffff","unguarded"],["80000000","80000000","00000000","00000000","80000000"],["80000000","80000000","00000001","00000000","80000000"],["80000000","80000000","00000007","00000000","80000000"],["80000000","80000000","7fffffff","00000000","80000000"],["80000000","80000000","80000000","00000000","80000000"],["80000000","80000000","fffffff9","00000000","80000000"],["80000000","80000000","ffffffff","00000000","80000000"],["80000000","fffffff9","00000000","00000000","fffffff9"],["80000000","fffffff9","00000001","00000000","fffffff9"],["80000000","fffffff9","00000007","00000000","fffffff9"],["80000000","fffffff9","7fffffff","00000000","fffffff9"],["80000000","fffffff9","80000000","00000000","80000000","unguarded"],["80000000","fffffff9","fffffff9","00000000","fffffff9"],["80000000","fffffff9","ffffffff","00000000","fffffff9"],["80000000","ffffffff","00000000","00000000","ffffffff"],["80000000","ffffffff","00000001","00000000","ffffffff"],["80000000","ffffffff","00000007","00000000","ffffffff"],["80000000","ffffffff","7fffffff","00000000","ffffffff"],["80000000","ffffffff","80000000","00000000","80000000","unguarded"],["80000000","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["80000000","ffffffff","ffffffff","00000000","ffffffff"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000000","00000001","00000000","00000000"],["fffffff9","00000000","00000007","00000000","00000000"],["fffffff9","00000000","7fffffff","00000000","00000000"],["fffffff9","00000000","80000000","00000000","80000000","unguarded"],["fffffff9","00000000","fffffff9","00000000","fffffff9","unguarded"],["fffffff9","00000000","ffffffff","00000000","ffffffff","unguarded"],["fffffff9","00000001","00000000","00000000","00000000","unguarded"],["fffffff9","00000001","00000001","00000000","00000001"],["fffffff9","00000001","00000007","00000000","00000001"],["fffffff9","00000001","7fffffff","00000000","00000001"],["fffffff9","00000001","80000000","00000000","80000000","unguarded"],["fffffff9","00000001","fffffff9","00000000","fffffff9","unguarded"],["fffffff9","00000001","ffffffff","00000000","ffffffff","unguarded"],["fffffff9","00000007","00000000","00000000","00000000","unguarded"],["fffffff9","00000007","00000001","00000000","00000001","unguarded"],["fffffff9","00000007","00000007","00000000","00000007"],["fffffff9","00000007","7fffffff","00000000","00000007"],["fffffff9","00000007","80000000","00000000","80000000","unguarded"],["fffffff9","00000007","fffffff9","00000000","fffffff9","unguarded"],["fffffff9","00000007","ffffffff","00000000","ffffffff","unguarded"],["fffffff9","7fffffff","00000000","00000000","00000000","unguarded"],["fffffff9","7fffffff","00000001","00000000","00000001","unguarded"],["fffffff9","7fffffff","00000007","00000000","00000007","unguarded"],["fffffff9","7fffffff","7fffffff","00000000","7fffffff"],["fffffff9","7fffffff","80000000","00000000","80000000","unguarded"],["fffffff9","7fffffff","fffffff9","00000000","fffffff9","unguarded"],["fffffff9","7fffffff","ffffffff","00000000","ffffffff","unguarded"],["fffffff9","80000000","00000000","00000000","fffffff9"],["fffffff9","80000000","00000001","00000000","fffffff9"],["fffffff9","80000000","00000007","00000000","fffffff9"],["fffffff9","80000000","7fffffff","00000000","fffffff9"],["fffffff9","80000000","80000000","00000000","80000000"],["fffffff9","80000000","fffffff9","00000000","fffffff9"],["fffffff9","80000000","ffffffff","00000000","fffffff9"],["fffffff9","fffffff9","00000000","00000000","fffffff9"],["fffffff9","fffffff9","00000001","00000000","fffffff9"],["fffffff9","fffffff9","00000007","00000000","fffffff9"],["fffffff9","fffffff9","7fffffff","00000000","fffffff9"],["fffffff9","fffffff9","80000000","00000000","80000000","unguarded"],["fffffff9","fffffff9","fffffff9","00000000","fffffff9"],["fffffff9","fffffff9","ffffffff","00000000","fffffff9"],["fffffff9","ffffffff","00000000","00000000","ffffffff"],["fffffff9","ffffffff","00000001","00000000","ffffffff"],["fffffff9","ffffffff","00000007","00000000","ffffffff"],["fffffff9","ffffffff","7fffffff","00000000","ffffffff"],["fffffff9","ffffffff","80000000","00000000","80000000","unguarded"],["fffffff9","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["fffffff9","ffffffff","ffffffff","00000000","ffffffff"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000001","00000000","00000000"],["ffffffff","00000000","00000007","00000000","00000000"],["ffffffff","00000000","7fffffff","00000000","00000000"],["ffffffff","00000000","80000000","00000000","80000000","unguarded"],["ffffffff","00000000","fffffff9","00000000","fffffff9","unguarded"],["ffffffff","00000000","ffffffff","00000000","ffffffff","unguarded"],["ffffffff","00000001","00000000","00000000","00000000","unguarded"],["ffffffff","00000001","00000001","00000000","00000001"],["ffffffff","00000001","00000007","00000000","00000001"],["ffffffff","00000001","7fffffff","00000000","00000001"],["ffffffff","00000001","80000000","00000000","80000000","unguarded"],["ffffffff","00000001","fffffff9","00000000","fffffff9","unguarded"],["ffffffff","00000001","ffffffff","00000000","ffffffff","unguarded"],["ffffffff","00000007","00000000","00000000","00000000","unguarded"],["ffffffff","00000007","00000001","00000000","00000001","unguarded"],["ffffffff","00000007","00000007","00000000","00000007"],["ffffffff","00000007","7fffffff","00000000","00000007"],["ffffffff","00000007","80000000","00000000","80000000","unguarded"],["ffffffff","00000007","fffffff9","00000000","fffffff9","unguarded"],["ffffffff","00000007","ffffffff","00000000","ffffffff","unguarded"],["ffffffff","7fffffff","00000000","00000000","00000000","unguarded"],["ffffffff","7fffffff","00000001","00000000","00000001","unguarded"],["ffffffff","7fffffff","00000007","00000000","00000007","unguarded"],["ffffffff","7fffffff","7fffffff","00000000","7fffffff"],["ffffffff","7fffffff","80000000","00000000","80000000","unguarded"],["ffffffff","7fffffff","fffffff9","00000000","fffffff9","unguarded"],["ffffffff","7fffffff","ffffffff","00000000","ffffffff","unguarded"],["ffffffff","80000000","00000000","00000000","ffffffff"],["ffffffff","80000000","00000001","00000000","ffffffff"],["ffffffff","80000000","00000007","00000000","ffffffff"],["ffffffff","80000000","7fffffff","00000000","ffffffff"],["ffffffff","80000000","80000000","00000000","80000000"],["ffffffff","80000000","fffffff9","00000000","fffffff9"],["ffffffff","80000000","ffffffff","00000000","ffffffff"],["ffffffff","fffffff9","00000000","00000000","ffffffff"],["ffffffff","fffffff9","00000001","00000000","ffffffff"],["ffffffff","fffffff9","00000007","00000000","ffffffff"],["ffffffff","fffffff9","7fffffff","00000000","ffffffff"],["ffffffff","fffffff9","80000000","00000000","80000000","unguarded"],["ffffffff","fffffff9","fffffff9","00000000","fffffff9"],["ffffffff","fffffff9","ffffffff","00000000","ffffffff"],["ffffffff","ffffffff","00000000","00000000","ffffffff"],["ffffffff","ffffffff","00000001","00000000","ffffffff"],["ffffffff","ffffffff","00000007","00000000","ffffffff"],["ffffffff","ffffffff","7fffffff","00000000","ffffffff"],["ffffffff","ffffffff","80000000","00000000","80000000","unguarded"],["ffffffff","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["ffffffff","ffffffff","ffffffff","00000000","ffffffff"]]} +{"op":"clamp_u32","code":32,"wgsl":"clamp(a, b, c)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000000","00000001","00000000","00000000"],["00000000","00000000","00000007","00000000","00000000"],["00000000","00000000","7fffffff","00000000","00000000"],["00000000","00000000","80000000","00000000","00000000"],["00000000","00000000","fffffff9","00000000","00000000"],["00000000","00000000","ffffffff","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000","unguarded"],["00000000","00000001","00000001","00000000","00000001"],["00000000","00000001","00000007","00000000","00000001"],["00000000","00000001","7fffffff","00000000","00000001"],["00000000","00000001","80000000","00000000","00000001"],["00000000","00000001","fffffff9","00000000","00000001"],["00000000","00000001","ffffffff","00000000","00000001"],["00000000","00000007","00000000","00000000","00000000","unguarded"],["00000000","00000007","00000001","00000000","00000001","unguarded"],["00000000","00000007","00000007","00000000","00000007"],["00000000","00000007","7fffffff","00000000","00000007"],["00000000","00000007","80000000","00000000","00000007"],["00000000","00000007","fffffff9","00000000","00000007"],["00000000","00000007","ffffffff","00000000","00000007"],["00000000","7fffffff","00000000","00000000","00000000","unguarded"],["00000000","7fffffff","00000001","00000000","00000001","unguarded"],["00000000","7fffffff","00000007","00000000","00000007","unguarded"],["00000000","7fffffff","7fffffff","00000000","7fffffff"],["00000000","7fffffff","80000000","00000000","7fffffff"],["00000000","7fffffff","fffffff9","00000000","7fffffff"],["00000000","7fffffff","ffffffff","00000000","7fffffff"],["00000000","80000000","00000000","00000000","00000000","unguarded"],["00000000","80000000","00000001","00000000","00000001","unguarded"],["00000000","80000000","00000007","00000000","00000007","unguarded"],["00000000","80000000","7fffffff","00000000","7fffffff","unguarded"],["00000000","80000000","80000000","00000000","80000000"],["00000000","80000000","fffffff9","00000000","80000000"],["00000000","80000000","ffffffff","00000000","80000000"],["00000000","fffffff9","00000000","00000000","00000000","unguarded"],["00000000","fffffff9","00000001","00000000","00000001","unguarded"],["00000000","fffffff9","00000007","00000000","00000007","unguarded"],["00000000","fffffff9","7fffffff","00000000","7fffffff","unguarded"],["00000000","fffffff9","80000000","00000000","80000000","unguarded"],["00000000","fffffff9","fffffff9","00000000","fffffff9"],["00000000","fffffff9","ffffffff","00000000","fffffff9"],["00000000","ffffffff","00000000","00000000","00000000","unguarded"],["00000000","ffffffff","00000001","00000000","00000001","unguarded"],["00000000","ffffffff","00000007","00000000","00000007","unguarded"],["00000000","ffffffff","7fffffff","00000000","7fffffff","unguarded"],["00000000","ffffffff","80000000","00000000","80000000","unguarded"],["00000000","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["00000000","ffffffff","ffffffff","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000000","00000001","00000000","00000001"],["00000001","00000000","00000007","00000000","00000001"],["00000001","00000000","7fffffff","00000000","00000001"],["00000001","00000000","80000000","00000000","00000001"],["00000001","00000000","fffffff9","00000000","00000001"],["00000001","00000000","ffffffff","00000000","00000001"],["00000001","00000001","00000000","00000000","00000000","unguarded"],["00000001","00000001","00000001","00000000","00000001"],["00000001","00000001","00000007","00000000","00000001"],["00000001","00000001","7fffffff","00000000","00000001"],["00000001","00000001","80000000","00000000","00000001"],["00000001","00000001","fffffff9","00000000","00000001"],["00000001","00000001","ffffffff","00000000","00000001"],["00000001","00000007","00000000","00000000","00000000","unguarded"],["00000001","00000007","00000001","00000000","00000001","unguarded"],["00000001","00000007","00000007","00000000","00000007"],["00000001","00000007","7fffffff","00000000","00000007"],["00000001","00000007","80000000","00000000","00000007"],["00000001","00000007","fffffff9","00000000","00000007"],["00000001","00000007","ffffffff","00000000","00000007"],["00000001","7fffffff","00000000","00000000","00000000","unguarded"],["00000001","7fffffff","00000001","00000000","00000001","unguarded"],["00000001","7fffffff","00000007","00000000","00000007","unguarded"],["00000001","7fffffff","7fffffff","00000000","7fffffff"],["00000001","7fffffff","80000000","00000000","7fffffff"],["00000001","7fffffff","fffffff9","00000000","7fffffff"],["00000001","7fffffff","ffffffff","00000000","7fffffff"],["00000001","80000000","00000000","00000000","00000000","unguarded"],["00000001","80000000","00000001","00000000","00000001","unguarded"],["00000001","80000000","00000007","00000000","00000007","unguarded"],["00000001","80000000","7fffffff","00000000","7fffffff","unguarded"],["00000001","80000000","80000000","00000000","80000000"],["00000001","80000000","fffffff9","00000000","80000000"],["00000001","80000000","ffffffff","00000000","80000000"],["00000001","fffffff9","00000000","00000000","00000000","unguarded"],["00000001","fffffff9","00000001","00000000","00000001","unguarded"],["00000001","fffffff9","00000007","00000000","00000007","unguarded"],["00000001","fffffff9","7fffffff","00000000","7fffffff","unguarded"],["00000001","fffffff9","80000000","00000000","80000000","unguarded"],["00000001","fffffff9","fffffff9","00000000","fffffff9"],["00000001","fffffff9","ffffffff","00000000","fffffff9"],["00000001","ffffffff","00000000","00000000","00000000","unguarded"],["00000001","ffffffff","00000001","00000000","00000001","unguarded"],["00000001","ffffffff","00000007","00000000","00000007","unguarded"],["00000001","ffffffff","7fffffff","00000000","7fffffff","unguarded"],["00000001","ffffffff","80000000","00000000","80000000","unguarded"],["00000001","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["00000001","ffffffff","ffffffff","00000000","ffffffff"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000000","00000001","00000000","00000001"],["00000007","00000000","00000007","00000000","00000007"],["00000007","00000000","7fffffff","00000000","00000007"],["00000007","00000000","80000000","00000000","00000007"],["00000007","00000000","fffffff9","00000000","00000007"],["00000007","00000000","ffffffff","00000000","00000007"],["00000007","00000001","00000000","00000000","00000000","unguarded"],["00000007","00000001","00000001","00000000","00000001"],["00000007","00000001","00000007","00000000","00000007"],["00000007","00000001","7fffffff","00000000","00000007"],["00000007","00000001","80000000","00000000","00000007"],["00000007","00000001","fffffff9","00000000","00000007"],["00000007","00000001","ffffffff","00000000","00000007"],["00000007","00000007","00000000","00000000","00000000","unguarded"],["00000007","00000007","00000001","00000000","00000001","unguarded"],["00000007","00000007","00000007","00000000","00000007"],["00000007","00000007","7fffffff","00000000","00000007"],["00000007","00000007","80000000","00000000","00000007"],["00000007","00000007","fffffff9","00000000","00000007"],["00000007","00000007","ffffffff","00000000","00000007"],["00000007","7fffffff","00000000","00000000","00000000","unguarded"],["00000007","7fffffff","00000001","00000000","00000001","unguarded"],["00000007","7fffffff","00000007","00000000","00000007","unguarded"],["00000007","7fffffff","7fffffff","00000000","7fffffff"],["00000007","7fffffff","80000000","00000000","7fffffff"],["00000007","7fffffff","fffffff9","00000000","7fffffff"],["00000007","7fffffff","ffffffff","00000000","7fffffff"],["00000007","80000000","00000000","00000000","00000000","unguarded"],["00000007","80000000","00000001","00000000","00000001","unguarded"],["00000007","80000000","00000007","00000000","00000007","unguarded"],["00000007","80000000","7fffffff","00000000","7fffffff","unguarded"],["00000007","80000000","80000000","00000000","80000000"],["00000007","80000000","fffffff9","00000000","80000000"],["00000007","80000000","ffffffff","00000000","80000000"],["00000007","fffffff9","00000000","00000000","00000000","unguarded"],["00000007","fffffff9","00000001","00000000","00000001","unguarded"],["00000007","fffffff9","00000007","00000000","00000007","unguarded"],["00000007","fffffff9","7fffffff","00000000","7fffffff","unguarded"],["00000007","fffffff9","80000000","00000000","80000000","unguarded"],["00000007","fffffff9","fffffff9","00000000","fffffff9"],["00000007","fffffff9","ffffffff","00000000","fffffff9"],["00000007","ffffffff","00000000","00000000","00000000","unguarded"],["00000007","ffffffff","00000001","00000000","00000001","unguarded"],["00000007","ffffffff","00000007","00000000","00000007","unguarded"],["00000007","ffffffff","7fffffff","00000000","7fffffff","unguarded"],["00000007","ffffffff","80000000","00000000","80000000","unguarded"],["00000007","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["00000007","ffffffff","ffffffff","00000000","ffffffff"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000000","00000001","00000000","00000001"],["7fffffff","00000000","00000007","00000000","00000007"],["7fffffff","00000000","7fffffff","00000000","7fffffff"],["7fffffff","00000000","80000000","00000000","7fffffff"],["7fffffff","00000000","fffffff9","00000000","7fffffff"],["7fffffff","00000000","ffffffff","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","00000000","unguarded"],["7fffffff","00000001","00000001","00000000","00000001"],["7fffffff","00000001","00000007","00000000","00000007"],["7fffffff","00000001","7fffffff","00000000","7fffffff"],["7fffffff","00000001","80000000","00000000","7fffffff"],["7fffffff","00000001","fffffff9","00000000","7fffffff"],["7fffffff","00000001","ffffffff","00000000","7fffffff"],["7fffffff","00000007","00000000","00000000","00000000","unguarded"],["7fffffff","00000007","00000001","00000000","00000001","unguarded"],["7fffffff","00000007","00000007","00000000","00000007"],["7fffffff","00000007","7fffffff","00000000","7fffffff"],["7fffffff","00000007","80000000","00000000","7fffffff"],["7fffffff","00000007","fffffff9","00000000","7fffffff"],["7fffffff","00000007","ffffffff","00000000","7fffffff"],["7fffffff","7fffffff","00000000","00000000","00000000","unguarded"],["7fffffff","7fffffff","00000001","00000000","00000001","unguarded"],["7fffffff","7fffffff","00000007","00000000","00000007","unguarded"],["7fffffff","7fffffff","7fffffff","00000000","7fffffff"],["7fffffff","7fffffff","80000000","00000000","7fffffff"],["7fffffff","7fffffff","fffffff9","00000000","7fffffff"],["7fffffff","7fffffff","ffffffff","00000000","7fffffff"],["7fffffff","80000000","00000000","00000000","00000000","unguarded"],["7fffffff","80000000","00000001","00000000","00000001","unguarded"],["7fffffff","80000000","00000007","00000000","00000007","unguarded"],["7fffffff","80000000","7fffffff","00000000","7fffffff","unguarded"],["7fffffff","80000000","80000000","00000000","80000000"],["7fffffff","80000000","fffffff9","00000000","80000000"],["7fffffff","80000000","ffffffff","00000000","80000000"],["7fffffff","fffffff9","00000000","00000000","00000000","unguarded"],["7fffffff","fffffff9","00000001","00000000","00000001","unguarded"],["7fffffff","fffffff9","00000007","00000000","00000007","unguarded"],["7fffffff","fffffff9","7fffffff","00000000","7fffffff","unguarded"],["7fffffff","fffffff9","80000000","00000000","80000000","unguarded"],["7fffffff","fffffff9","fffffff9","00000000","fffffff9"],["7fffffff","fffffff9","ffffffff","00000000","fffffff9"],["7fffffff","ffffffff","00000000","00000000","00000000","unguarded"],["7fffffff","ffffffff","00000001","00000000","00000001","unguarded"],["7fffffff","ffffffff","00000007","00000000","00000007","unguarded"],["7fffffff","ffffffff","7fffffff","00000000","7fffffff","unguarded"],["7fffffff","ffffffff","80000000","00000000","80000000","unguarded"],["7fffffff","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["7fffffff","ffffffff","ffffffff","00000000","ffffffff"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000000","00000001","00000000","00000001"],["80000000","00000000","00000007","00000000","00000007"],["80000000","00000000","7fffffff","00000000","7fffffff"],["80000000","00000000","80000000","00000000","80000000"],["80000000","00000000","fffffff9","00000000","80000000"],["80000000","00000000","ffffffff","00000000","80000000"],["80000000","00000001","00000000","00000000","00000000","unguarded"],["80000000","00000001","00000001","00000000","00000001"],["80000000","00000001","00000007","00000000","00000007"],["80000000","00000001","7fffffff","00000000","7fffffff"],["80000000","00000001","80000000","00000000","80000000"],["80000000","00000001","fffffff9","00000000","80000000"],["80000000","00000001","ffffffff","00000000","80000000"],["80000000","00000007","00000000","00000000","00000000","unguarded"],["80000000","00000007","00000001","00000000","00000001","unguarded"],["80000000","00000007","00000007","00000000","00000007"],["80000000","00000007","7fffffff","00000000","7fffffff"],["80000000","00000007","80000000","00000000","80000000"],["80000000","00000007","fffffff9","00000000","80000000"],["80000000","00000007","ffffffff","00000000","80000000"],["80000000","7fffffff","00000000","00000000","00000000","unguarded"],["80000000","7fffffff","00000001","00000000","00000001","unguarded"],["80000000","7fffffff","00000007","00000000","00000007","unguarded"],["80000000","7fffffff","7fffffff","00000000","7fffffff"],["80000000","7fffffff","80000000","00000000","80000000"],["80000000","7fffffff","fffffff9","00000000","80000000"],["80000000","7fffffff","ffffffff","00000000","80000000"],["80000000","80000000","00000000","00000000","00000000","unguarded"],["80000000","80000000","00000001","00000000","00000001","unguarded"],["80000000","80000000","00000007","00000000","00000007","unguarded"],["80000000","80000000","7fffffff","00000000","7fffffff","unguarded"],["80000000","80000000","80000000","00000000","80000000"],["80000000","80000000","fffffff9","00000000","80000000"],["80000000","80000000","ffffffff","00000000","80000000"],["80000000","fffffff9","00000000","00000000","00000000","unguarded"],["80000000","fffffff9","00000001","00000000","00000001","unguarded"],["80000000","fffffff9","00000007","00000000","00000007","unguarded"],["80000000","fffffff9","7fffffff","00000000","7fffffff","unguarded"],["80000000","fffffff9","80000000","00000000","80000000","unguarded"],["80000000","fffffff9","fffffff9","00000000","fffffff9"],["80000000","fffffff9","ffffffff","00000000","fffffff9"],["80000000","ffffffff","00000000","00000000","00000000","unguarded"],["80000000","ffffffff","00000001","00000000","00000001","unguarded"],["80000000","ffffffff","00000007","00000000","00000007","unguarded"],["80000000","ffffffff","7fffffff","00000000","7fffffff","unguarded"],["80000000","ffffffff","80000000","00000000","80000000","unguarded"],["80000000","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["80000000","ffffffff","ffffffff","00000000","ffffffff"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000000","00000001","00000000","00000001"],["fffffff9","00000000","00000007","00000000","00000007"],["fffffff9","00000000","7fffffff","00000000","7fffffff"],["fffffff9","00000000","80000000","00000000","80000000"],["fffffff9","00000000","fffffff9","00000000","fffffff9"],["fffffff9","00000000","ffffffff","00000000","fffffff9"],["fffffff9","00000001","00000000","00000000","00000000","unguarded"],["fffffff9","00000001","00000001","00000000","00000001"],["fffffff9","00000001","00000007","00000000","00000007"],["fffffff9","00000001","7fffffff","00000000","7fffffff"],["fffffff9","00000001","80000000","00000000","80000000"],["fffffff9","00000001","fffffff9","00000000","fffffff9"],["fffffff9","00000001","ffffffff","00000000","fffffff9"],["fffffff9","00000007","00000000","00000000","00000000","unguarded"],["fffffff9","00000007","00000001","00000000","00000001","unguarded"],["fffffff9","00000007","00000007","00000000","00000007"],["fffffff9","00000007","7fffffff","00000000","7fffffff"],["fffffff9","00000007","80000000","00000000","80000000"],["fffffff9","00000007","fffffff9","00000000","fffffff9"],["fffffff9","00000007","ffffffff","00000000","fffffff9"],["fffffff9","7fffffff","00000000","00000000","00000000","unguarded"],["fffffff9","7fffffff","00000001","00000000","00000001","unguarded"],["fffffff9","7fffffff","00000007","00000000","00000007","unguarded"],["fffffff9","7fffffff","7fffffff","00000000","7fffffff"],["fffffff9","7fffffff","80000000","00000000","80000000"],["fffffff9","7fffffff","fffffff9","00000000","fffffff9"],["fffffff9","7fffffff","ffffffff","00000000","fffffff9"],["fffffff9","80000000","00000000","00000000","00000000","unguarded"],["fffffff9","80000000","00000001","00000000","00000001","unguarded"],["fffffff9","80000000","00000007","00000000","00000007","unguarded"],["fffffff9","80000000","7fffffff","00000000","7fffffff","unguarded"],["fffffff9","80000000","80000000","00000000","80000000"],["fffffff9","80000000","fffffff9","00000000","fffffff9"],["fffffff9","80000000","ffffffff","00000000","fffffff9"],["fffffff9","fffffff9","00000000","00000000","00000000","unguarded"],["fffffff9","fffffff9","00000001","00000000","00000001","unguarded"],["fffffff9","fffffff9","00000007","00000000","00000007","unguarded"],["fffffff9","fffffff9","7fffffff","00000000","7fffffff","unguarded"],["fffffff9","fffffff9","80000000","00000000","80000000","unguarded"],["fffffff9","fffffff9","fffffff9","00000000","fffffff9"],["fffffff9","fffffff9","ffffffff","00000000","fffffff9"],["fffffff9","ffffffff","00000000","00000000","00000000","unguarded"],["fffffff9","ffffffff","00000001","00000000","00000001","unguarded"],["fffffff9","ffffffff","00000007","00000000","00000007","unguarded"],["fffffff9","ffffffff","7fffffff","00000000","7fffffff","unguarded"],["fffffff9","ffffffff","80000000","00000000","80000000","unguarded"],["fffffff9","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["fffffff9","ffffffff","ffffffff","00000000","ffffffff"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000001","00000000","00000001"],["ffffffff","00000000","00000007","00000000","00000007"],["ffffffff","00000000","7fffffff","00000000","7fffffff"],["ffffffff","00000000","80000000","00000000","80000000"],["ffffffff","00000000","fffffff9","00000000","fffffff9"],["ffffffff","00000000","ffffffff","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","00000000","unguarded"],["ffffffff","00000001","00000001","00000000","00000001"],["ffffffff","00000001","00000007","00000000","00000007"],["ffffffff","00000001","7fffffff","00000000","7fffffff"],["ffffffff","00000001","80000000","00000000","80000000"],["ffffffff","00000001","fffffff9","00000000","fffffff9"],["ffffffff","00000001","ffffffff","00000000","ffffffff"],["ffffffff","00000007","00000000","00000000","00000000","unguarded"],["ffffffff","00000007","00000001","00000000","00000001","unguarded"],["ffffffff","00000007","00000007","00000000","00000007"],["ffffffff","00000007","7fffffff","00000000","7fffffff"],["ffffffff","00000007","80000000","00000000","80000000"],["ffffffff","00000007","fffffff9","00000000","fffffff9"],["ffffffff","00000007","ffffffff","00000000","ffffffff"],["ffffffff","7fffffff","00000000","00000000","00000000","unguarded"],["ffffffff","7fffffff","00000001","00000000","00000001","unguarded"],["ffffffff","7fffffff","00000007","00000000","00000007","unguarded"],["ffffffff","7fffffff","7fffffff","00000000","7fffffff"],["ffffffff","7fffffff","80000000","00000000","80000000"],["ffffffff","7fffffff","fffffff9","00000000","fffffff9"],["ffffffff","7fffffff","ffffffff","00000000","ffffffff"],["ffffffff","80000000","00000000","00000000","00000000","unguarded"],["ffffffff","80000000","00000001","00000000","00000001","unguarded"],["ffffffff","80000000","00000007","00000000","00000007","unguarded"],["ffffffff","80000000","7fffffff","00000000","7fffffff","unguarded"],["ffffffff","80000000","80000000","00000000","80000000"],["ffffffff","80000000","fffffff9","00000000","fffffff9"],["ffffffff","80000000","ffffffff","00000000","ffffffff"],["ffffffff","fffffff9","00000000","00000000","00000000","unguarded"],["ffffffff","fffffff9","00000001","00000000","00000001","unguarded"],["ffffffff","fffffff9","00000007","00000000","00000007","unguarded"],["ffffffff","fffffff9","7fffffff","00000000","7fffffff","unguarded"],["ffffffff","fffffff9","80000000","00000000","80000000","unguarded"],["ffffffff","fffffff9","fffffff9","00000000","fffffff9"],["ffffffff","fffffff9","ffffffff","00000000","ffffffff"],["ffffffff","ffffffff","00000000","00000000","00000000","unguarded"],["ffffffff","ffffffff","00000001","00000000","00000001","unguarded"],["ffffffff","ffffffff","00000007","00000000","00000007","unguarded"],["ffffffff","ffffffff","7fffffff","00000000","7fffffff","unguarded"],["ffffffff","ffffffff","80000000","00000000","80000000","unguarded"],["ffffffff","ffffffff","fffffff9","00000000","fffffff9","unguarded"],["ffffffff","ffffffff","ffffffff","00000000","ffffffff"]]} +{"op":"abs_i32","code":33,"wgsl":"abs(ia)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000001"],["00000002","00000000","00000000","00000000","00000002"],["00000003","00000000","00000000","00000000","00000003"],["00000005","00000000","00000000","00000000","00000005"],["00000007","00000000","00000000","00000000","00000007"],["0000001f","00000000","00000000","00000000","0000001f"],["00000020","00000000","00000000","00000000","00000020"],["00000021","00000000","00000000","00000000","00000021"],["0000003f","00000000","00000000","00000000","0000003f"],["00000040","00000000","00000000","00000000","00000040"],["000000ff","00000000","00000000","00000000","000000ff"],["00007fff","00000000","00000000","00000000","00007fff"],["00008000","00000000","00000000","00000000","00008000"],["0000ffff","00000000","00000000","00000000","0000ffff"],["00010000","00000000","00000000","00000000","00010000"],["55555555","00000000","00000000","00000000","55555555"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7fffffff","00000000","00000000","00000000","7fffffff"],["80000000","00000000","00000000","00000000","80000000"],["80000001","00000000","00000000","00000000","7fffffff"],["aaaaaaaa","00000000","00000000","00000000","55555556"],["deadbeef","00000000","00000000","00000000","21524111"],["ffff0000","00000000","00000000","00000000","00010000"],["ffff8000","00000000","00000000","00000000","00008000"],["ffffffe0","00000000","00000000","00000000","00000020"],["ffffffe1","00000000","00000000","00000000","0000001f"],["fffffff9","00000000","00000000","00000000","00000007"],["fffffffd","00000000","00000000","00000000","00000003"],["fffffffe","00000000","00000000","00000000","00000002"],["ffffffff","00000000","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","00000001"],["00000002","00000000","00000000","00000000","00000002"],["00000003","00000000","00000000","00000000","00000003"],["fffffffe","00000000","00000000","00000000","00000002"],["00000004","00000000","00000000","00000000","00000004"],["00000007","00000000","00000000","00000000","00000007"],["fffffffc","00000000","00000000","00000000","00000004"],["00000008","00000000","00000000","00000000","00000008"],["0000000f","00000000","00000000","00000000","0000000f"],["fffffff8","00000000","00000000","00000000","00000008"],["00000010","00000000","00000000","00000000","00000010"],["0000001f","00000000","00000000","00000000","0000001f"],["fffffff0","00000000","00000000","00000000","00000010"],["00000020","00000000","00000000","00000000","00000020"],["0000003f","00000000","00000000","00000000","0000003f"],["ffffffe0","00000000","00000000","00000000","00000020"],["00000040","00000000","00000000","00000000","00000040"],["0000007f","00000000","00000000","00000000","0000007f"],["ffffffc0","00000000","00000000","00000000","00000040"],["00000080","00000000","00000000","00000000","00000080"],["000000ff","00000000","00000000","00000000","000000ff"],["ffffff80","00000000","00000000","00000000","00000080"],["00000100","00000000","00000000","00000000","00000100"],["000001ff","00000000","00000000","00000000","000001ff"],["ffffff00","00000000","00000000","00000000","00000100"],["00000200","00000000","00000000","00000000","00000200"],["000003ff","00000000","00000000","00000000","000003ff"],["fffffe00","00000000","00000000","00000000","00000200"],["00000400","00000000","00000000","00000000","00000400"],["000007ff","00000000","00000000","00000000","000007ff"],["fffffc00","00000000","00000000","00000000","00000400"],["00000800","00000000","00000000","00000000","00000800"],["00000fff","00000000","00000000","00000000","00000fff"],["fffff800","00000000","00000000","00000000","00000800"],["00001000","00000000","00000000","00000000","00001000"],["00001fff","00000000","00000000","00000000","00001fff"],["fffff000","00000000","00000000","00000000","00001000"],["00002000","00000000","00000000","00000000","00002000"],["00003fff","00000000","00000000","00000000","00003fff"],["ffffe000","00000000","00000000","00000000","00002000"],["00004000","00000000","00000000","00000000","00004000"],["00007fff","00000000","00000000","00000000","00007fff"],["ffffc000","00000000","00000000","00000000","00004000"],["00008000","00000000","00000000","00000000","00008000"],["0000ffff","00000000","00000000","00000000","0000ffff"],["ffff8000","00000000","00000000","00000000","00008000"],["00010000","00000000","00000000","00000000","00010000"],["0001ffff","00000000","00000000","00000000","0001ffff"],["ffff0000","00000000","00000000","00000000","00010000"],["00020000","00000000","00000000","00000000","00020000"],["0003ffff","00000000","00000000","00000000","0003ffff"],["fffe0000","00000000","00000000","00000000","00020000"],["00040000","00000000","00000000","00000000","00040000"],["0007ffff","00000000","00000000","00000000","0007ffff"],["fffc0000","00000000","00000000","00000000","00040000"],["00080000","00000000","00000000","00000000","00080000"],["000fffff","00000000","00000000","00000000","000fffff"],["fff80000","00000000","00000000","00000000","00080000"],["00100000","00000000","00000000","00000000","00100000"],["001fffff","00000000","00000000","00000000","001fffff"],["fff00000","00000000","00000000","00000000","00100000"],["00200000","00000000","00000000","00000000","00200000"],["003fffff","00000000","00000000","00000000","003fffff"],["ffe00000","00000000","00000000","00000000","00200000"],["00400000","00000000","00000000","00000000","00400000"],["007fffff","00000000","00000000","00000000","007fffff"],["ffc00000","00000000","00000000","00000000","00400000"],["00800000","00000000","00000000","00000000","00800000"],["00ffffff","00000000","00000000","00000000","00ffffff"],["ff800000","00000000","00000000","00000000","00800000"],["01000000","00000000","00000000","00000000","01000000"],["01ffffff","00000000","00000000","00000000","01ffffff"],["ff000000","00000000","00000000","00000000","01000000"],["02000000","00000000","00000000","00000000","02000000"],["03ffffff","00000000","00000000","00000000","03ffffff"],["fe000000","00000000","00000000","00000000","02000000"],["04000000","00000000","00000000","00000000","04000000"],["07ffffff","00000000","00000000","00000000","07ffffff"],["fc000000","00000000","00000000","00000000","04000000"],["08000000","00000000","00000000","00000000","08000000"],["0fffffff","00000000","00000000","00000000","0fffffff"],["f8000000","00000000","00000000","00000000","08000000"],["10000000","00000000","00000000","00000000","10000000"],["1fffffff","00000000","00000000","00000000","1fffffff"],["f0000000","00000000","00000000","00000000","10000000"],["20000000","00000000","00000000","00000000","20000000"],["3fffffff","00000000","00000000","00000000","3fffffff"],["e0000000","00000000","00000000","00000000","20000000"],["40000000","00000000","00000000","00000000","40000000"],["7fffffff","00000000","00000000","00000000","7fffffff"],["c0000000","00000000","00000000","00000000","40000000"],["80000000","00000000","00000000","00000000","80000000"],["ffffffff","00000000","00000000","00000000","00000001"],["80000000","00000000","00000000","00000000","80000000"]]} +{"op":"sign_i32","code":34,"wgsl":"sign(ia)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000001"],["00000002","00000000","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000001"],["00000005","00000000","00000000","00000000","00000001"],["00000007","00000000","00000000","00000000","00000001"],["0000001f","00000000","00000000","00000000","00000001"],["00000020","00000000","00000000","00000000","00000001"],["00000021","00000000","00000000","00000000","00000001"],["0000003f","00000000","00000000","00000000","00000001"],["00000040","00000000","00000000","00000000","00000001"],["000000ff","00000000","00000000","00000000","00000001"],["00007fff","00000000","00000000","00000000","00000001"],["00008000","00000000","00000000","00000000","00000001"],["0000ffff","00000000","00000000","00000000","00000001"],["00010000","00000000","00000000","00000000","00000001"],["55555555","00000000","00000000","00000000","00000001"],["7ffffffe","00000000","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","00000001"],["80000000","00000000","00000000","00000000","ffffffff"],["80000001","00000000","00000000","00000000","ffffffff"],["aaaaaaaa","00000000","00000000","00000000","ffffffff"],["deadbeef","00000000","00000000","00000000","ffffffff"],["ffff0000","00000000","00000000","00000000","ffffffff"],["ffff8000","00000000","00000000","00000000","ffffffff"],["ffffffe0","00000000","00000000","00000000","ffffffff"],["ffffffe1","00000000","00000000","00000000","ffffffff"],["fffffff9","00000000","00000000","00000000","ffffffff"],["fffffffd","00000000","00000000","00000000","ffffffff"],["fffffffe","00000000","00000000","00000000","ffffffff"],["ffffffff","00000000","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","ffffffff"],["00000002","00000000","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000001"],["fffffffe","00000000","00000000","00000000","ffffffff"],["00000004","00000000","00000000","00000000","00000001"],["00000007","00000000","00000000","00000000","00000001"],["fffffffc","00000000","00000000","00000000","ffffffff"],["00000008","00000000","00000000","00000000","00000001"],["0000000f","00000000","00000000","00000000","00000001"],["fffffff8","00000000","00000000","00000000","ffffffff"],["00000010","00000000","00000000","00000000","00000001"],["0000001f","00000000","00000000","00000000","00000001"],["fffffff0","00000000","00000000","00000000","ffffffff"],["00000020","00000000","00000000","00000000","00000001"],["0000003f","00000000","00000000","00000000","00000001"],["ffffffe0","00000000","00000000","00000000","ffffffff"],["00000040","00000000","00000000","00000000","00000001"],["0000007f","00000000","00000000","00000000","00000001"],["ffffffc0","00000000","00000000","00000000","ffffffff"],["00000080","00000000","00000000","00000000","00000001"],["000000ff","00000000","00000000","00000000","00000001"],["ffffff80","00000000","00000000","00000000","ffffffff"],["00000100","00000000","00000000","00000000","00000001"],["000001ff","00000000","00000000","00000000","00000001"],["ffffff00","00000000","00000000","00000000","ffffffff"],["00000200","00000000","00000000","00000000","00000001"],["000003ff","00000000","00000000","00000000","00000001"],["fffffe00","00000000","00000000","00000000","ffffffff"],["00000400","00000000","00000000","00000000","00000001"],["000007ff","00000000","00000000","00000000","00000001"],["fffffc00","00000000","00000000","00000000","ffffffff"],["00000800","00000000","00000000","00000000","00000001"],["00000fff","00000000","00000000","00000000","00000001"],["fffff800","00000000","00000000","00000000","ffffffff"],["00001000","00000000","00000000","00000000","00000001"],["00001fff","00000000","00000000","00000000","00000001"],["fffff000","00000000","00000000","00000000","ffffffff"],["00002000","00000000","00000000","00000000","00000001"],["00003fff","00000000","00000000","00000000","00000001"],["ffffe000","00000000","00000000","00000000","ffffffff"],["00004000","00000000","00000000","00000000","00000001"],["00007fff","00000000","00000000","00000000","00000001"],["ffffc000","00000000","00000000","00000000","ffffffff"],["00008000","00000000","00000000","00000000","00000001"],["0000ffff","00000000","00000000","00000000","00000001"],["ffff8000","00000000","00000000","00000000","ffffffff"],["00010000","00000000","00000000","00000000","00000001"],["0001ffff","00000000","00000000","00000000","00000001"],["ffff0000","00000000","00000000","00000000","ffffffff"],["00020000","00000000","00000000","00000000","00000001"],["0003ffff","00000000","00000000","00000000","00000001"],["fffe0000","00000000","00000000","00000000","ffffffff"],["00040000","00000000","00000000","00000000","00000001"],["0007ffff","00000000","00000000","00000000","00000001"],["fffc0000","00000000","00000000","00000000","ffffffff"],["00080000","00000000","00000000","00000000","00000001"],["000fffff","00000000","00000000","00000000","00000001"],["fff80000","00000000","00000000","00000000","ffffffff"],["00100000","00000000","00000000","00000000","00000001"],["001fffff","00000000","00000000","00000000","00000001"],["fff00000","00000000","00000000","00000000","ffffffff"],["00200000","00000000","00000000","00000000","00000001"],["003fffff","00000000","00000000","00000000","00000001"],["ffe00000","00000000","00000000","00000000","ffffffff"],["00400000","00000000","00000000","00000000","00000001"],["007fffff","00000000","00000000","00000000","00000001"],["ffc00000","00000000","00000000","00000000","ffffffff"],["00800000","00000000","00000000","00000000","00000001"],["00ffffff","00000000","00000000","00000000","00000001"],["ff800000","00000000","00000000","00000000","ffffffff"],["01000000","00000000","00000000","00000000","00000001"],["01ffffff","00000000","00000000","00000000","00000001"],["ff000000","00000000","00000000","00000000","ffffffff"],["02000000","00000000","00000000","00000000","00000001"],["03ffffff","00000000","00000000","00000000","00000001"],["fe000000","00000000","00000000","00000000","ffffffff"],["04000000","00000000","00000000","00000000","00000001"],["07ffffff","00000000","00000000","00000000","00000001"],["fc000000","00000000","00000000","00000000","ffffffff"],["08000000","00000000","00000000","00000000","00000001"],["0fffffff","00000000","00000000","00000000","00000001"],["f8000000","00000000","00000000","00000000","ffffffff"],["10000000","00000000","00000000","00000000","00000001"],["1fffffff","00000000","00000000","00000000","00000001"],["f0000000","00000000","00000000","00000000","ffffffff"],["20000000","00000000","00000000","00000000","00000001"],["3fffffff","00000000","00000000","00000000","00000001"],["e0000000","00000000","00000000","00000000","ffffffff"],["40000000","00000000","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","00000001"],["c0000000","00000000","00000000","00000000","ffffffff"],["80000000","00000000","00000000","00000000","ffffffff"],["ffffffff","00000000","00000000","00000000","ffffffff"],["80000000","00000000","00000000","00000000","ffffffff"]]} +{"op":"count_leading_zeros_u32","code":35,"wgsl":"countLeadingZeros(a)","cases":[["00000000","00000000","00000000","00000000","00000020"],["00000001","00000000","00000000","00000000","0000001f"],["00000002","00000000","00000000","00000000","0000001e"],["00000003","00000000","00000000","00000000","0000001e"],["00000005","00000000","00000000","00000000","0000001d"],["00000007","00000000","00000000","00000000","0000001d"],["0000001f","00000000","00000000","00000000","0000001b"],["00000020","00000000","00000000","00000000","0000001a"],["00000021","00000000","00000000","00000000","0000001a"],["0000003f","00000000","00000000","00000000","0000001a"],["00000040","00000000","00000000","00000000","00000019"],["000000ff","00000000","00000000","00000000","00000018"],["00007fff","00000000","00000000","00000000","00000011"],["00008000","00000000","00000000","00000000","00000010"],["0000ffff","00000000","00000000","00000000","00000010"],["00010000","00000000","00000000","00000000","0000000f"],["55555555","00000000","00000000","00000000","00000001"],["7ffffffe","00000000","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","00000001"],["80000000","00000000","00000000","00000000","00000000"],["80000001","00000000","00000000","00000000","00000000"],["aaaaaaaa","00000000","00000000","00000000","00000000"],["deadbeef","00000000","00000000","00000000","00000000"],["ffff0000","00000000","00000000","00000000","00000000"],["ffff8000","00000000","00000000","00000000","00000000"],["ffffffe0","00000000","00000000","00000000","00000000"],["ffffffe1","00000000","00000000","00000000","00000000"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffffd","00000000","00000000","00000000","00000000"],["fffffffe","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","0000001f"],["00000001","00000000","00000000","00000000","0000001f"],["ffffffff","00000000","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","0000001e"],["00000003","00000000","00000000","00000000","0000001e"],["fffffffe","00000000","00000000","00000000","00000000"],["00000004","00000000","00000000","00000000","0000001d"],["00000007","00000000","00000000","00000000","0000001d"],["fffffffc","00000000","00000000","00000000","00000000"],["00000008","00000000","00000000","00000000","0000001c"],["0000000f","00000000","00000000","00000000","0000001c"],["fffffff8","00000000","00000000","00000000","00000000"],["00000010","00000000","00000000","00000000","0000001b"],["0000001f","00000000","00000000","00000000","0000001b"],["fffffff0","00000000","00000000","00000000","00000000"],["00000020","00000000","00000000","00000000","0000001a"],["0000003f","00000000","00000000","00000000","0000001a"],["ffffffe0","00000000","00000000","00000000","00000000"],["00000040","00000000","00000000","00000000","00000019"],["0000007f","00000000","00000000","00000000","00000019"],["ffffffc0","00000000","00000000","00000000","00000000"],["00000080","00000000","00000000","00000000","00000018"],["000000ff","00000000","00000000","00000000","00000018"],["ffffff80","00000000","00000000","00000000","00000000"],["00000100","00000000","00000000","00000000","00000017"],["000001ff","00000000","00000000","00000000","00000017"],["ffffff00","00000000","00000000","00000000","00000000"],["00000200","00000000","00000000","00000000","00000016"],["000003ff","00000000","00000000","00000000","00000016"],["fffffe00","00000000","00000000","00000000","00000000"],["00000400","00000000","00000000","00000000","00000015"],["000007ff","00000000","00000000","00000000","00000015"],["fffffc00","00000000","00000000","00000000","00000000"],["00000800","00000000","00000000","00000000","00000014"],["00000fff","00000000","00000000","00000000","00000014"],["fffff800","00000000","00000000","00000000","00000000"],["00001000","00000000","00000000","00000000","00000013"],["00001fff","00000000","00000000","00000000","00000013"],["fffff000","00000000","00000000","00000000","00000000"],["00002000","00000000","00000000","00000000","00000012"],["00003fff","00000000","00000000","00000000","00000012"],["ffffe000","00000000","00000000","00000000","00000000"],["00004000","00000000","00000000","00000000","00000011"],["00007fff","00000000","00000000","00000000","00000011"],["ffffc000","00000000","00000000","00000000","00000000"],["00008000","00000000","00000000","00000000","00000010"],["0000ffff","00000000","00000000","00000000","00000010"],["ffff8000","00000000","00000000","00000000","00000000"],["00010000","00000000","00000000","00000000","0000000f"],["0001ffff","00000000","00000000","00000000","0000000f"],["ffff0000","00000000","00000000","00000000","00000000"],["00020000","00000000","00000000","00000000","0000000e"],["0003ffff","00000000","00000000","00000000","0000000e"],["fffe0000","00000000","00000000","00000000","00000000"],["00040000","00000000","00000000","00000000","0000000d"],["0007ffff","00000000","00000000","00000000","0000000d"],["fffc0000","00000000","00000000","00000000","00000000"],["00080000","00000000","00000000","00000000","0000000c"],["000fffff","00000000","00000000","00000000","0000000c"],["fff80000","00000000","00000000","00000000","00000000"],["00100000","00000000","00000000","00000000","0000000b"],["001fffff","00000000","00000000","00000000","0000000b"],["fff00000","00000000","00000000","00000000","00000000"],["00200000","00000000","00000000","00000000","0000000a"],["003fffff","00000000","00000000","00000000","0000000a"],["ffe00000","00000000","00000000","00000000","00000000"],["00400000","00000000","00000000","00000000","00000009"],["007fffff","00000000","00000000","00000000","00000009"],["ffc00000","00000000","00000000","00000000","00000000"],["00800000","00000000","00000000","00000000","00000008"],["00ffffff","00000000","00000000","00000000","00000008"],["ff800000","00000000","00000000","00000000","00000000"],["01000000","00000000","00000000","00000000","00000007"],["01ffffff","00000000","00000000","00000000","00000007"],["ff000000","00000000","00000000","00000000","00000000"],["02000000","00000000","00000000","00000000","00000006"],["03ffffff","00000000","00000000","00000000","00000006"],["fe000000","00000000","00000000","00000000","00000000"],["04000000","00000000","00000000","00000000","00000005"],["07ffffff","00000000","00000000","00000000","00000005"],["fc000000","00000000","00000000","00000000","00000000"],["08000000","00000000","00000000","00000000","00000004"],["0fffffff","00000000","00000000","00000000","00000004"],["f8000000","00000000","00000000","00000000","00000000"],["10000000","00000000","00000000","00000000","00000003"],["1fffffff","00000000","00000000","00000000","00000003"],["f0000000","00000000","00000000","00000000","00000000"],["20000000","00000000","00000000","00000000","00000002"],["3fffffff","00000000","00000000","00000000","00000002"],["e0000000","00000000","00000000","00000000","00000000"],["40000000","00000000","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","00000001"],["c0000000","00000000","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","00000000"]]} +{"op":"count_trailing_zeros_u32","code":36,"wgsl":"countTrailingZeros(a)","cases":[["00000000","00000000","00000000","00000000","00000020"],["00000001","00000000","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000000"],["00000005","00000000","00000000","00000000","00000000"],["00000007","00000000","00000000","00000000","00000000"],["0000001f","00000000","00000000","00000000","00000000"],["00000020","00000000","00000000","00000000","00000005"],["00000021","00000000","00000000","00000000","00000000"],["0000003f","00000000","00000000","00000000","00000000"],["00000040","00000000","00000000","00000000","00000006"],["000000ff","00000000","00000000","00000000","00000000"],["00007fff","00000000","00000000","00000000","00000000"],["00008000","00000000","00000000","00000000","0000000f"],["0000ffff","00000000","00000000","00000000","00000000"],["00010000","00000000","00000000","00000000","00000010"],["55555555","00000000","00000000","00000000","00000000"],["7ffffffe","00000000","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","0000001f"],["80000001","00000000","00000000","00000000","00000000"],["aaaaaaaa","00000000","00000000","00000000","00000001"],["deadbeef","00000000","00000000","00000000","00000000"],["ffff0000","00000000","00000000","00000000","00000010"],["ffff8000","00000000","00000000","00000000","0000000f"],["ffffffe0","00000000","00000000","00000000","00000005"],["ffffffe1","00000000","00000000","00000000","00000000"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffffd","00000000","00000000","00000000","00000000"],["fffffffe","00000000","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000000"],["fffffffe","00000000","00000000","00000000","00000001"],["00000004","00000000","00000000","00000000","00000002"],["00000007","00000000","00000000","00000000","00000000"],["fffffffc","00000000","00000000","00000000","00000002"],["00000008","00000000","00000000","00000000","00000003"],["0000000f","00000000","00000000","00000000","00000000"],["fffffff8","00000000","00000000","00000000","00000003"],["00000010","00000000","00000000","00000000","00000004"],["0000001f","00000000","00000000","00000000","00000000"],["fffffff0","00000000","00000000","00000000","00000004"],["00000020","00000000","00000000","00000000","00000005"],["0000003f","00000000","00000000","00000000","00000000"],["ffffffe0","00000000","00000000","00000000","00000005"],["00000040","00000000","00000000","00000000","00000006"],["0000007f","00000000","00000000","00000000","00000000"],["ffffffc0","00000000","00000000","00000000","00000006"],["00000080","00000000","00000000","00000000","00000007"],["000000ff","00000000","00000000","00000000","00000000"],["ffffff80","00000000","00000000","00000000","00000007"],["00000100","00000000","00000000","00000000","00000008"],["000001ff","00000000","00000000","00000000","00000000"],["ffffff00","00000000","00000000","00000000","00000008"],["00000200","00000000","00000000","00000000","00000009"],["000003ff","00000000","00000000","00000000","00000000"],["fffffe00","00000000","00000000","00000000","00000009"],["00000400","00000000","00000000","00000000","0000000a"],["000007ff","00000000","00000000","00000000","00000000"],["fffffc00","00000000","00000000","00000000","0000000a"],["00000800","00000000","00000000","00000000","0000000b"],["00000fff","00000000","00000000","00000000","00000000"],["fffff800","00000000","00000000","00000000","0000000b"],["00001000","00000000","00000000","00000000","0000000c"],["00001fff","00000000","00000000","00000000","00000000"],["fffff000","00000000","00000000","00000000","0000000c"],["00002000","00000000","00000000","00000000","0000000d"],["00003fff","00000000","00000000","00000000","00000000"],["ffffe000","00000000","00000000","00000000","0000000d"],["00004000","00000000","00000000","00000000","0000000e"],["00007fff","00000000","00000000","00000000","00000000"],["ffffc000","00000000","00000000","00000000","0000000e"],["00008000","00000000","00000000","00000000","0000000f"],["0000ffff","00000000","00000000","00000000","00000000"],["ffff8000","00000000","00000000","00000000","0000000f"],["00010000","00000000","00000000","00000000","00000010"],["0001ffff","00000000","00000000","00000000","00000000"],["ffff0000","00000000","00000000","00000000","00000010"],["00020000","00000000","00000000","00000000","00000011"],["0003ffff","00000000","00000000","00000000","00000000"],["fffe0000","00000000","00000000","00000000","00000011"],["00040000","00000000","00000000","00000000","00000012"],["0007ffff","00000000","00000000","00000000","00000000"],["fffc0000","00000000","00000000","00000000","00000012"],["00080000","00000000","00000000","00000000","00000013"],["000fffff","00000000","00000000","00000000","00000000"],["fff80000","00000000","00000000","00000000","00000013"],["00100000","00000000","00000000","00000000","00000014"],["001fffff","00000000","00000000","00000000","00000000"],["fff00000","00000000","00000000","00000000","00000014"],["00200000","00000000","00000000","00000000","00000015"],["003fffff","00000000","00000000","00000000","00000000"],["ffe00000","00000000","00000000","00000000","00000015"],["00400000","00000000","00000000","00000000","00000016"],["007fffff","00000000","00000000","00000000","00000000"],["ffc00000","00000000","00000000","00000000","00000016"],["00800000","00000000","00000000","00000000","00000017"],["00ffffff","00000000","00000000","00000000","00000000"],["ff800000","00000000","00000000","00000000","00000017"],["01000000","00000000","00000000","00000000","00000018"],["01ffffff","00000000","00000000","00000000","00000000"],["ff000000","00000000","00000000","00000000","00000018"],["02000000","00000000","00000000","00000000","00000019"],["03ffffff","00000000","00000000","00000000","00000000"],["fe000000","00000000","00000000","00000000","00000019"],["04000000","00000000","00000000","00000000","0000001a"],["07ffffff","00000000","00000000","00000000","00000000"],["fc000000","00000000","00000000","00000000","0000001a"],["08000000","00000000","00000000","00000000","0000001b"],["0fffffff","00000000","00000000","00000000","00000000"],["f8000000","00000000","00000000","00000000","0000001b"],["10000000","00000000","00000000","00000000","0000001c"],["1fffffff","00000000","00000000","00000000","00000000"],["f0000000","00000000","00000000","00000000","0000001c"],["20000000","00000000","00000000","00000000","0000001d"],["3fffffff","00000000","00000000","00000000","00000000"],["e0000000","00000000","00000000","00000000","0000001d"],["40000000","00000000","00000000","00000000","0000001e"],["7fffffff","00000000","00000000","00000000","00000000"],["c0000000","00000000","00000000","00000000","0000001e"],["80000000","00000000","00000000","00000000","0000001f"],["ffffffff","00000000","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","0000001f"]]} +{"op":"count_one_bits_u32","code":37,"wgsl":"countOneBits(a)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000001"],["00000002","00000000","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000002"],["00000005","00000000","00000000","00000000","00000002"],["00000007","00000000","00000000","00000000","00000003"],["0000001f","00000000","00000000","00000000","00000005"],["00000020","00000000","00000000","00000000","00000001"],["00000021","00000000","00000000","00000000","00000002"],["0000003f","00000000","00000000","00000000","00000006"],["00000040","00000000","00000000","00000000","00000001"],["000000ff","00000000","00000000","00000000","00000008"],["00007fff","00000000","00000000","00000000","0000000f"],["00008000","00000000","00000000","00000000","00000001"],["0000ffff","00000000","00000000","00000000","00000010"],["00010000","00000000","00000000","00000000","00000001"],["55555555","00000000","00000000","00000000","00000010"],["7ffffffe","00000000","00000000","00000000","0000001e"],["7fffffff","00000000","00000000","00000000","0000001f"],["80000000","00000000","00000000","00000000","00000001"],["80000001","00000000","00000000","00000000","00000002"],["aaaaaaaa","00000000","00000000","00000000","00000010"],["deadbeef","00000000","00000000","00000000","00000018"],["ffff0000","00000000","00000000","00000000","00000010"],["ffff8000","00000000","00000000","00000000","00000011"],["ffffffe0","00000000","00000000","00000000","0000001b"],["ffffffe1","00000000","00000000","00000000","0000001c"],["fffffff9","00000000","00000000","00000000","0000001e"],["fffffffd","00000000","00000000","00000000","0000001f"],["fffffffe","00000000","00000000","00000000","0000001f"],["ffffffff","00000000","00000000","00000000","00000020"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","00000020"],["00000002","00000000","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000002"],["fffffffe","00000000","00000000","00000000","0000001f"],["00000004","00000000","00000000","00000000","00000001"],["00000007","00000000","00000000","00000000","00000003"],["fffffffc","00000000","00000000","00000000","0000001e"],["00000008","00000000","00000000","00000000","00000001"],["0000000f","00000000","00000000","00000000","00000004"],["fffffff8","00000000","00000000","00000000","0000001d"],["00000010","00000000","00000000","00000000","00000001"],["0000001f","00000000","00000000","00000000","00000005"],["fffffff0","00000000","00000000","00000000","0000001c"],["00000020","00000000","00000000","00000000","00000001"],["0000003f","00000000","00000000","00000000","00000006"],["ffffffe0","00000000","00000000","00000000","0000001b"],["00000040","00000000","00000000","00000000","00000001"],["0000007f","00000000","00000000","00000000","00000007"],["ffffffc0","00000000","00000000","00000000","0000001a"],["00000080","00000000","00000000","00000000","00000001"],["000000ff","00000000","00000000","00000000","00000008"],["ffffff80","00000000","00000000","00000000","00000019"],["00000100","00000000","00000000","00000000","00000001"],["000001ff","00000000","00000000","00000000","00000009"],["ffffff00","00000000","00000000","00000000","00000018"],["00000200","00000000","00000000","00000000","00000001"],["000003ff","00000000","00000000","00000000","0000000a"],["fffffe00","00000000","00000000","00000000","00000017"],["00000400","00000000","00000000","00000000","00000001"],["000007ff","00000000","00000000","00000000","0000000b"],["fffffc00","00000000","00000000","00000000","00000016"],["00000800","00000000","00000000","00000000","00000001"],["00000fff","00000000","00000000","00000000","0000000c"],["fffff800","00000000","00000000","00000000","00000015"],["00001000","00000000","00000000","00000000","00000001"],["00001fff","00000000","00000000","00000000","0000000d"],["fffff000","00000000","00000000","00000000","00000014"],["00002000","00000000","00000000","00000000","00000001"],["00003fff","00000000","00000000","00000000","0000000e"],["ffffe000","00000000","00000000","00000000","00000013"],["00004000","00000000","00000000","00000000","00000001"],["00007fff","00000000","00000000","00000000","0000000f"],["ffffc000","00000000","00000000","00000000","00000012"],["00008000","00000000","00000000","00000000","00000001"],["0000ffff","00000000","00000000","00000000","00000010"],["ffff8000","00000000","00000000","00000000","00000011"],["00010000","00000000","00000000","00000000","00000001"],["0001ffff","00000000","00000000","00000000","00000011"],["ffff0000","00000000","00000000","00000000","00000010"],["00020000","00000000","00000000","00000000","00000001"],["0003ffff","00000000","00000000","00000000","00000012"],["fffe0000","00000000","00000000","00000000","0000000f"],["00040000","00000000","00000000","00000000","00000001"],["0007ffff","00000000","00000000","00000000","00000013"],["fffc0000","00000000","00000000","00000000","0000000e"],["00080000","00000000","00000000","00000000","00000001"],["000fffff","00000000","00000000","00000000","00000014"],["fff80000","00000000","00000000","00000000","0000000d"],["00100000","00000000","00000000","00000000","00000001"],["001fffff","00000000","00000000","00000000","00000015"],["fff00000","00000000","00000000","00000000","0000000c"],["00200000","00000000","00000000","00000000","00000001"],["003fffff","00000000","00000000","00000000","00000016"],["ffe00000","00000000","00000000","00000000","0000000b"],["00400000","00000000","00000000","00000000","00000001"],["007fffff","00000000","00000000","00000000","00000017"],["ffc00000","00000000","00000000","00000000","0000000a"],["00800000","00000000","00000000","00000000","00000001"],["00ffffff","00000000","00000000","00000000","00000018"],["ff800000","00000000","00000000","00000000","00000009"],["01000000","00000000","00000000","00000000","00000001"],["01ffffff","00000000","00000000","00000000","00000019"],["ff000000","00000000","00000000","00000000","00000008"],["02000000","00000000","00000000","00000000","00000001"],["03ffffff","00000000","00000000","00000000","0000001a"],["fe000000","00000000","00000000","00000000","00000007"],["04000000","00000000","00000000","00000000","00000001"],["07ffffff","00000000","00000000","00000000","0000001b"],["fc000000","00000000","00000000","00000000","00000006"],["08000000","00000000","00000000","00000000","00000001"],["0fffffff","00000000","00000000","00000000","0000001c"],["f8000000","00000000","00000000","00000000","00000005"],["10000000","00000000","00000000","00000000","00000001"],["1fffffff","00000000","00000000","00000000","0000001d"],["f0000000","00000000","00000000","00000000","00000004"],["20000000","00000000","00000000","00000000","00000001"],["3fffffff","00000000","00000000","00000000","0000001e"],["e0000000","00000000","00000000","00000000","00000003"],["40000000","00000000","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","0000001f"],["c0000000","00000000","00000000","00000000","00000002"],["80000000","00000000","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","00000020"],["80000000","00000000","00000000","00000000","00000001"]]} +{"op":"reverse_bits_u32","code":38,"wgsl":"reverseBits(a)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","80000000"],["00000002","00000000","00000000","00000000","40000000"],["00000003","00000000","00000000","00000000","c0000000"],["00000005","00000000","00000000","00000000","a0000000"],["00000007","00000000","00000000","00000000","e0000000"],["0000001f","00000000","00000000","00000000","f8000000"],["00000020","00000000","00000000","00000000","04000000"],["00000021","00000000","00000000","00000000","84000000"],["0000003f","00000000","00000000","00000000","fc000000"],["00000040","00000000","00000000","00000000","02000000"],["000000ff","00000000","00000000","00000000","ff000000"],["00007fff","00000000","00000000","00000000","fffe0000"],["00008000","00000000","00000000","00000000","00010000"],["0000ffff","00000000","00000000","00000000","ffff0000"],["00010000","00000000","00000000","00000000","00008000"],["55555555","00000000","00000000","00000000","aaaaaaaa"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7fffffff","00000000","00000000","00000000","fffffffe"],["80000000","00000000","00000000","00000000","00000001"],["80000001","00000000","00000000","00000000","80000001"],["aaaaaaaa","00000000","00000000","00000000","55555555"],["deadbeef","00000000","00000000","00000000","f77db57b"],["ffff0000","00000000","00000000","00000000","0000ffff"],["ffff8000","00000000","00000000","00000000","0001ffff"],["ffffffe0","00000000","00000000","00000000","07ffffff"],["ffffffe1","00000000","00000000","00000000","87ffffff"],["fffffff9","00000000","00000000","00000000","9fffffff"],["fffffffd","00000000","00000000","00000000","bfffffff"],["fffffffe","00000000","00000000","00000000","7fffffff"],["ffffffff","00000000","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","80000000"],["00000001","00000000","00000000","00000000","80000000"],["ffffffff","00000000","00000000","00000000","ffffffff"],["00000002","00000000","00000000","00000000","40000000"],["00000003","00000000","00000000","00000000","c0000000"],["fffffffe","00000000","00000000","00000000","7fffffff"],["00000004","00000000","00000000","00000000","20000000"],["00000007","00000000","00000000","00000000","e0000000"],["fffffffc","00000000","00000000","00000000","3fffffff"],["00000008","00000000","00000000","00000000","10000000"],["0000000f","00000000","00000000","00000000","f0000000"],["fffffff8","00000000","00000000","00000000","1fffffff"],["00000010","00000000","00000000","00000000","08000000"],["0000001f","00000000","00000000","00000000","f8000000"],["fffffff0","00000000","00000000","00000000","0fffffff"],["00000020","00000000","00000000","00000000","04000000"],["0000003f","00000000","00000000","00000000","fc000000"],["ffffffe0","00000000","00000000","00000000","07ffffff"],["00000040","00000000","00000000","00000000","02000000"],["0000007f","00000000","00000000","00000000","fe000000"],["ffffffc0","00000000","00000000","00000000","03ffffff"],["00000080","00000000","00000000","00000000","01000000"],["000000ff","00000000","00000000","00000000","ff000000"],["ffffff80","00000000","00000000","00000000","01ffffff"],["00000100","00000000","00000000","00000000","00800000"],["000001ff","00000000","00000000","00000000","ff800000"],["ffffff00","00000000","00000000","00000000","00ffffff"],["00000200","00000000","00000000","00000000","00400000"],["000003ff","00000000","00000000","00000000","ffc00000"],["fffffe00","00000000","00000000","00000000","007fffff"],["00000400","00000000","00000000","00000000","00200000"],["000007ff","00000000","00000000","00000000","ffe00000"],["fffffc00","00000000","00000000","00000000","003fffff"],["00000800","00000000","00000000","00000000","00100000"],["00000fff","00000000","00000000","00000000","fff00000"],["fffff800","00000000","00000000","00000000","001fffff"],["00001000","00000000","00000000","00000000","00080000"],["00001fff","00000000","00000000","00000000","fff80000"],["fffff000","00000000","00000000","00000000","000fffff"],["00002000","00000000","00000000","00000000","00040000"],["00003fff","00000000","00000000","00000000","fffc0000"],["ffffe000","00000000","00000000","00000000","0007ffff"],["00004000","00000000","00000000","00000000","00020000"],["00007fff","00000000","00000000","00000000","fffe0000"],["ffffc000","00000000","00000000","00000000","0003ffff"],["00008000","00000000","00000000","00000000","00010000"],["0000ffff","00000000","00000000","00000000","ffff0000"],["ffff8000","00000000","00000000","00000000","0001ffff"],["00010000","00000000","00000000","00000000","00008000"],["0001ffff","00000000","00000000","00000000","ffff8000"],["ffff0000","00000000","00000000","00000000","0000ffff"],["00020000","00000000","00000000","00000000","00004000"],["0003ffff","00000000","00000000","00000000","ffffc000"],["fffe0000","00000000","00000000","00000000","00007fff"],["00040000","00000000","00000000","00000000","00002000"],["0007ffff","00000000","00000000","00000000","ffffe000"],["fffc0000","00000000","00000000","00000000","00003fff"],["00080000","00000000","00000000","00000000","00001000"],["000fffff","00000000","00000000","00000000","fffff000"],["fff80000","00000000","00000000","00000000","00001fff"],["00100000","00000000","00000000","00000000","00000800"],["001fffff","00000000","00000000","00000000","fffff800"],["fff00000","00000000","00000000","00000000","00000fff"],["00200000","00000000","00000000","00000000","00000400"],["003fffff","00000000","00000000","00000000","fffffc00"],["ffe00000","00000000","00000000","00000000","000007ff"],["00400000","00000000","00000000","00000000","00000200"],["007fffff","00000000","00000000","00000000","fffffe00"],["ffc00000","00000000","00000000","00000000","000003ff"],["00800000","00000000","00000000","00000000","00000100"],["00ffffff","00000000","00000000","00000000","ffffff00"],["ff800000","00000000","00000000","00000000","000001ff"],["01000000","00000000","00000000","00000000","00000080"],["01ffffff","00000000","00000000","00000000","ffffff80"],["ff000000","00000000","00000000","00000000","000000ff"],["02000000","00000000","00000000","00000000","00000040"],["03ffffff","00000000","00000000","00000000","ffffffc0"],["fe000000","00000000","00000000","00000000","0000007f"],["04000000","00000000","00000000","00000000","00000020"],["07ffffff","00000000","00000000","00000000","ffffffe0"],["fc000000","00000000","00000000","00000000","0000003f"],["08000000","00000000","00000000","00000000","00000010"],["0fffffff","00000000","00000000","00000000","fffffff0"],["f8000000","00000000","00000000","00000000","0000001f"],["10000000","00000000","00000000","00000000","00000008"],["1fffffff","00000000","00000000","00000000","fffffff8"],["f0000000","00000000","00000000","00000000","0000000f"],["20000000","00000000","00000000","00000000","00000004"],["3fffffff","00000000","00000000","00000000","fffffffc"],["e0000000","00000000","00000000","00000000","00000007"],["40000000","00000000","00000000","00000000","00000002"],["7fffffff","00000000","00000000","00000000","fffffffe"],["c0000000","00000000","00000000","00000000","00000003"],["80000000","00000000","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","ffffffff"],["80000000","00000000","00000000","00000000","00000001"]]} +{"op":"first_leading_bit_u32","code":39,"wgsl":"firstLeadingBit(a)","cases":[["00000000","00000000","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000001"],["00000005","00000000","00000000","00000000","00000002"],["00000007","00000000","00000000","00000000","00000002"],["0000001f","00000000","00000000","00000000","00000004"],["00000020","00000000","00000000","00000000","00000005"],["00000021","00000000","00000000","00000000","00000005"],["0000003f","00000000","00000000","00000000","00000005"],["00000040","00000000","00000000","00000000","00000006"],["000000ff","00000000","00000000","00000000","00000007"],["00007fff","00000000","00000000","00000000","0000000e"],["00008000","00000000","00000000","00000000","0000000f"],["0000ffff","00000000","00000000","00000000","0000000f"],["00010000","00000000","00000000","00000000","00000010"],["55555555","00000000","00000000","00000000","0000001e"],["7ffffffe","00000000","00000000","00000000","0000001e"],["7fffffff","00000000","00000000","00000000","0000001e"],["80000000","00000000","00000000","00000000","0000001f"],["80000001","00000000","00000000","00000000","0000001f"],["aaaaaaaa","00000000","00000000","00000000","0000001f"],["deadbeef","00000000","00000000","00000000","0000001f"],["ffff0000","00000000","00000000","00000000","0000001f"],["ffff8000","00000000","00000000","00000000","0000001f"],["ffffffe0","00000000","00000000","00000000","0000001f"],["ffffffe1","00000000","00000000","00000000","0000001f"],["fffffff9","00000000","00000000","00000000","0000001f"],["fffffffd","00000000","00000000","00000000","0000001f"],["fffffffe","00000000","00000000","00000000","0000001f"],["ffffffff","00000000","00000000","00000000","0000001f"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000000","00000000","0000001f"],["00000002","00000000","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000001"],["fffffffe","00000000","00000000","00000000","0000001f"],["00000004","00000000","00000000","00000000","00000002"],["00000007","00000000","00000000","00000000","00000002"],["fffffffc","00000000","00000000","00000000","0000001f"],["00000008","00000000","00000000","00000000","00000003"],["0000000f","00000000","00000000","00000000","00000003"],["fffffff8","00000000","00000000","00000000","0000001f"],["00000010","00000000","00000000","00000000","00000004"],["0000001f","00000000","00000000","00000000","00000004"],["fffffff0","00000000","00000000","00000000","0000001f"],["00000020","00000000","00000000","00000000","00000005"],["0000003f","00000000","00000000","00000000","00000005"],["ffffffe0","00000000","00000000","00000000","0000001f"],["00000040","00000000","00000000","00000000","00000006"],["0000007f","00000000","00000000","00000000","00000006"],["ffffffc0","00000000","00000000","00000000","0000001f"],["00000080","00000000","00000000","00000000","00000007"],["000000ff","00000000","00000000","00000000","00000007"],["ffffff80","00000000","00000000","00000000","0000001f"],["00000100","00000000","00000000","00000000","00000008"],["000001ff","00000000","00000000","00000000","00000008"],["ffffff00","00000000","00000000","00000000","0000001f"],["00000200","00000000","00000000","00000000","00000009"],["000003ff","00000000","00000000","00000000","00000009"],["fffffe00","00000000","00000000","00000000","0000001f"],["00000400","00000000","00000000","00000000","0000000a"],["000007ff","00000000","00000000","00000000","0000000a"],["fffffc00","00000000","00000000","00000000","0000001f"],["00000800","00000000","00000000","00000000","0000000b"],["00000fff","00000000","00000000","00000000","0000000b"],["fffff800","00000000","00000000","00000000","0000001f"],["00001000","00000000","00000000","00000000","0000000c"],["00001fff","00000000","00000000","00000000","0000000c"],["fffff000","00000000","00000000","00000000","0000001f"],["00002000","00000000","00000000","00000000","0000000d"],["00003fff","00000000","00000000","00000000","0000000d"],["ffffe000","00000000","00000000","00000000","0000001f"],["00004000","00000000","00000000","00000000","0000000e"],["00007fff","00000000","00000000","00000000","0000000e"],["ffffc000","00000000","00000000","00000000","0000001f"],["00008000","00000000","00000000","00000000","0000000f"],["0000ffff","00000000","00000000","00000000","0000000f"],["ffff8000","00000000","00000000","00000000","0000001f"],["00010000","00000000","00000000","00000000","00000010"],["0001ffff","00000000","00000000","00000000","00000010"],["ffff0000","00000000","00000000","00000000","0000001f"],["00020000","00000000","00000000","00000000","00000011"],["0003ffff","00000000","00000000","00000000","00000011"],["fffe0000","00000000","00000000","00000000","0000001f"],["00040000","00000000","00000000","00000000","00000012"],["0007ffff","00000000","00000000","00000000","00000012"],["fffc0000","00000000","00000000","00000000","0000001f"],["00080000","00000000","00000000","00000000","00000013"],["000fffff","00000000","00000000","00000000","00000013"],["fff80000","00000000","00000000","00000000","0000001f"],["00100000","00000000","00000000","00000000","00000014"],["001fffff","00000000","00000000","00000000","00000014"],["fff00000","00000000","00000000","00000000","0000001f"],["00200000","00000000","00000000","00000000","00000015"],["003fffff","00000000","00000000","00000000","00000015"],["ffe00000","00000000","00000000","00000000","0000001f"],["00400000","00000000","00000000","00000000","00000016"],["007fffff","00000000","00000000","00000000","00000016"],["ffc00000","00000000","00000000","00000000","0000001f"],["00800000","00000000","00000000","00000000","00000017"],["00ffffff","00000000","00000000","00000000","00000017"],["ff800000","00000000","00000000","00000000","0000001f"],["01000000","00000000","00000000","00000000","00000018"],["01ffffff","00000000","00000000","00000000","00000018"],["ff000000","00000000","00000000","00000000","0000001f"],["02000000","00000000","00000000","00000000","00000019"],["03ffffff","00000000","00000000","00000000","00000019"],["fe000000","00000000","00000000","00000000","0000001f"],["04000000","00000000","00000000","00000000","0000001a"],["07ffffff","00000000","00000000","00000000","0000001a"],["fc000000","00000000","00000000","00000000","0000001f"],["08000000","00000000","00000000","00000000","0000001b"],["0fffffff","00000000","00000000","00000000","0000001b"],["f8000000","00000000","00000000","00000000","0000001f"],["10000000","00000000","00000000","00000000","0000001c"],["1fffffff","00000000","00000000","00000000","0000001c"],["f0000000","00000000","00000000","00000000","0000001f"],["20000000","00000000","00000000","00000000","0000001d"],["3fffffff","00000000","00000000","00000000","0000001d"],["e0000000","00000000","00000000","00000000","0000001f"],["40000000","00000000","00000000","00000000","0000001e"],["7fffffff","00000000","00000000","00000000","0000001e"],["c0000000","00000000","00000000","00000000","0000001f"],["80000000","00000000","00000000","00000000","0000001f"],["ffffffff","00000000","00000000","00000000","0000001f"],["80000000","00000000","00000000","00000000","0000001f"]]} +{"op":"first_leading_bit_i32","code":40,"wgsl":"firstLeadingBit(ia)","cases":[["00000000","00000000","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000001"],["00000005","00000000","00000000","00000000","00000002"],["00000007","00000000","00000000","00000000","00000002"],["0000001f","00000000","00000000","00000000","00000004"],["00000020","00000000","00000000","00000000","00000005"],["00000021","00000000","00000000","00000000","00000005"],["0000003f","00000000","00000000","00000000","00000005"],["00000040","00000000","00000000","00000000","00000006"],["000000ff","00000000","00000000","00000000","00000007"],["00007fff","00000000","00000000","00000000","0000000e"],["00008000","00000000","00000000","00000000","0000000f"],["0000ffff","00000000","00000000","00000000","0000000f"],["00010000","00000000","00000000","00000000","00000010"],["55555555","00000000","00000000","00000000","0000001e"],["7ffffffe","00000000","00000000","00000000","0000001e"],["7fffffff","00000000","00000000","00000000","0000001e"],["80000000","00000000","00000000","00000000","0000001e"],["80000001","00000000","00000000","00000000","0000001e"],["aaaaaaaa","00000000","00000000","00000000","0000001e"],["deadbeef","00000000","00000000","00000000","0000001d"],["ffff0000","00000000","00000000","00000000","0000000f"],["ffff8000","00000000","00000000","00000000","0000000e"],["ffffffe0","00000000","00000000","00000000","00000004"],["ffffffe1","00000000","00000000","00000000","00000004"],["fffffff9","00000000","00000000","00000000","00000002"],["fffffffd","00000000","00000000","00000000","00000001"],["fffffffe","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000000","00000000","ffffffff"],["00000002","00000000","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000001"],["fffffffe","00000000","00000000","00000000","00000000"],["00000004","00000000","00000000","00000000","00000002"],["00000007","00000000","00000000","00000000","00000002"],["fffffffc","00000000","00000000","00000000","00000001"],["00000008","00000000","00000000","00000000","00000003"],["0000000f","00000000","00000000","00000000","00000003"],["fffffff8","00000000","00000000","00000000","00000002"],["00000010","00000000","00000000","00000000","00000004"],["0000001f","00000000","00000000","00000000","00000004"],["fffffff0","00000000","00000000","00000000","00000003"],["00000020","00000000","00000000","00000000","00000005"],["0000003f","00000000","00000000","00000000","00000005"],["ffffffe0","00000000","00000000","00000000","00000004"],["00000040","00000000","00000000","00000000","00000006"],["0000007f","00000000","00000000","00000000","00000006"],["ffffffc0","00000000","00000000","00000000","00000005"],["00000080","00000000","00000000","00000000","00000007"],["000000ff","00000000","00000000","00000000","00000007"],["ffffff80","00000000","00000000","00000000","00000006"],["00000100","00000000","00000000","00000000","00000008"],["000001ff","00000000","00000000","00000000","00000008"],["ffffff00","00000000","00000000","00000000","00000007"],["00000200","00000000","00000000","00000000","00000009"],["000003ff","00000000","00000000","00000000","00000009"],["fffffe00","00000000","00000000","00000000","00000008"],["00000400","00000000","00000000","00000000","0000000a"],["000007ff","00000000","00000000","00000000","0000000a"],["fffffc00","00000000","00000000","00000000","00000009"],["00000800","00000000","00000000","00000000","0000000b"],["00000fff","00000000","00000000","00000000","0000000b"],["fffff800","00000000","00000000","00000000","0000000a"],["00001000","00000000","00000000","00000000","0000000c"],["00001fff","00000000","00000000","00000000","0000000c"],["fffff000","00000000","00000000","00000000","0000000b"],["00002000","00000000","00000000","00000000","0000000d"],["00003fff","00000000","00000000","00000000","0000000d"],["ffffe000","00000000","00000000","00000000","0000000c"],["00004000","00000000","00000000","00000000","0000000e"],["00007fff","00000000","00000000","00000000","0000000e"],["ffffc000","00000000","00000000","00000000","0000000d"],["00008000","00000000","00000000","00000000","0000000f"],["0000ffff","00000000","00000000","00000000","0000000f"],["ffff8000","00000000","00000000","00000000","0000000e"],["00010000","00000000","00000000","00000000","00000010"],["0001ffff","00000000","00000000","00000000","00000010"],["ffff0000","00000000","00000000","00000000","0000000f"],["00020000","00000000","00000000","00000000","00000011"],["0003ffff","00000000","00000000","00000000","00000011"],["fffe0000","00000000","00000000","00000000","00000010"],["00040000","00000000","00000000","00000000","00000012"],["0007ffff","00000000","00000000","00000000","00000012"],["fffc0000","00000000","00000000","00000000","00000011"],["00080000","00000000","00000000","00000000","00000013"],["000fffff","00000000","00000000","00000000","00000013"],["fff80000","00000000","00000000","00000000","00000012"],["00100000","00000000","00000000","00000000","00000014"],["001fffff","00000000","00000000","00000000","00000014"],["fff00000","00000000","00000000","00000000","00000013"],["00200000","00000000","00000000","00000000","00000015"],["003fffff","00000000","00000000","00000000","00000015"],["ffe00000","00000000","00000000","00000000","00000014"],["00400000","00000000","00000000","00000000","00000016"],["007fffff","00000000","00000000","00000000","00000016"],["ffc00000","00000000","00000000","00000000","00000015"],["00800000","00000000","00000000","00000000","00000017"],["00ffffff","00000000","00000000","00000000","00000017"],["ff800000","00000000","00000000","00000000","00000016"],["01000000","00000000","00000000","00000000","00000018"],["01ffffff","00000000","00000000","00000000","00000018"],["ff000000","00000000","00000000","00000000","00000017"],["02000000","00000000","00000000","00000000","00000019"],["03ffffff","00000000","00000000","00000000","00000019"],["fe000000","00000000","00000000","00000000","00000018"],["04000000","00000000","00000000","00000000","0000001a"],["07ffffff","00000000","00000000","00000000","0000001a"],["fc000000","00000000","00000000","00000000","00000019"],["08000000","00000000","00000000","00000000","0000001b"],["0fffffff","00000000","00000000","00000000","0000001b"],["f8000000","00000000","00000000","00000000","0000001a"],["10000000","00000000","00000000","00000000","0000001c"],["1fffffff","00000000","00000000","00000000","0000001c"],["f0000000","00000000","00000000","00000000","0000001b"],["20000000","00000000","00000000","00000000","0000001d"],["3fffffff","00000000","00000000","00000000","0000001d"],["e0000000","00000000","00000000","00000000","0000001c"],["40000000","00000000","00000000","00000000","0000001e"],["7fffffff","00000000","00000000","00000000","0000001e"],["c0000000","00000000","00000000","00000000","0000001d"],["80000000","00000000","00000000","00000000","0000001e"],["ffffffff","00000000","00000000","00000000","ffffffff"],["80000000","00000000","00000000","00000000","0000001e"]]} +{"op":"first_trailing_bit_u32","code":41,"wgsl":"firstTrailingBit(a)","cases":[["00000000","00000000","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000000"],["00000005","00000000","00000000","00000000","00000000"],["00000007","00000000","00000000","00000000","00000000"],["0000001f","00000000","00000000","00000000","00000000"],["00000020","00000000","00000000","00000000","00000005"],["00000021","00000000","00000000","00000000","00000000"],["0000003f","00000000","00000000","00000000","00000000"],["00000040","00000000","00000000","00000000","00000006"],["000000ff","00000000","00000000","00000000","00000000"],["00007fff","00000000","00000000","00000000","00000000"],["00008000","00000000","00000000","00000000","0000000f"],["0000ffff","00000000","00000000","00000000","00000000"],["00010000","00000000","00000000","00000000","00000010"],["55555555","00000000","00000000","00000000","00000000"],["7ffffffe","00000000","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","0000001f"],["80000001","00000000","00000000","00000000","00000000"],["aaaaaaaa","00000000","00000000","00000000","00000001"],["deadbeef","00000000","00000000","00000000","00000000"],["ffff0000","00000000","00000000","00000000","00000010"],["ffff8000","00000000","00000000","00000000","0000000f"],["ffffffe0","00000000","00000000","00000000","00000005"],["ffffffe1","00000000","00000000","00000000","00000000"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffffd","00000000","00000000","00000000","00000000"],["fffffffe","00000000","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","00000001"],["00000003","00000000","00000000","00000000","00000000"],["fffffffe","00000000","00000000","00000000","00000001"],["00000004","00000000","00000000","00000000","00000002"],["00000007","00000000","00000000","00000000","00000000"],["fffffffc","00000000","00000000","00000000","00000002"],["00000008","00000000","00000000","00000000","00000003"],["0000000f","00000000","00000000","00000000","00000000"],["fffffff8","00000000","00000000","00000000","00000003"],["00000010","00000000","00000000","00000000","00000004"],["0000001f","00000000","00000000","00000000","00000000"],["fffffff0","00000000","00000000","00000000","00000004"],["00000020","00000000","00000000","00000000","00000005"],["0000003f","00000000","00000000","00000000","00000000"],["ffffffe0","00000000","00000000","00000000","00000005"],["00000040","00000000","00000000","00000000","00000006"],["0000007f","00000000","00000000","00000000","00000000"],["ffffffc0","00000000","00000000","00000000","00000006"],["00000080","00000000","00000000","00000000","00000007"],["000000ff","00000000","00000000","00000000","00000000"],["ffffff80","00000000","00000000","00000000","00000007"],["00000100","00000000","00000000","00000000","00000008"],["000001ff","00000000","00000000","00000000","00000000"],["ffffff00","00000000","00000000","00000000","00000008"],["00000200","00000000","00000000","00000000","00000009"],["000003ff","00000000","00000000","00000000","00000000"],["fffffe00","00000000","00000000","00000000","00000009"],["00000400","00000000","00000000","00000000","0000000a"],["000007ff","00000000","00000000","00000000","00000000"],["fffffc00","00000000","00000000","00000000","0000000a"],["00000800","00000000","00000000","00000000","0000000b"],["00000fff","00000000","00000000","00000000","00000000"],["fffff800","00000000","00000000","00000000","0000000b"],["00001000","00000000","00000000","00000000","0000000c"],["00001fff","00000000","00000000","00000000","00000000"],["fffff000","00000000","00000000","00000000","0000000c"],["00002000","00000000","00000000","00000000","0000000d"],["00003fff","00000000","00000000","00000000","00000000"],["ffffe000","00000000","00000000","00000000","0000000d"],["00004000","00000000","00000000","00000000","0000000e"],["00007fff","00000000","00000000","00000000","00000000"],["ffffc000","00000000","00000000","00000000","0000000e"],["00008000","00000000","00000000","00000000","0000000f"],["0000ffff","00000000","00000000","00000000","00000000"],["ffff8000","00000000","00000000","00000000","0000000f"],["00010000","00000000","00000000","00000000","00000010"],["0001ffff","00000000","00000000","00000000","00000000"],["ffff0000","00000000","00000000","00000000","00000010"],["00020000","00000000","00000000","00000000","00000011"],["0003ffff","00000000","00000000","00000000","00000000"],["fffe0000","00000000","00000000","00000000","00000011"],["00040000","00000000","00000000","00000000","00000012"],["0007ffff","00000000","00000000","00000000","00000000"],["fffc0000","00000000","00000000","00000000","00000012"],["00080000","00000000","00000000","00000000","00000013"],["000fffff","00000000","00000000","00000000","00000000"],["fff80000","00000000","00000000","00000000","00000013"],["00100000","00000000","00000000","00000000","00000014"],["001fffff","00000000","00000000","00000000","00000000"],["fff00000","00000000","00000000","00000000","00000014"],["00200000","00000000","00000000","00000000","00000015"],["003fffff","00000000","00000000","00000000","00000000"],["ffe00000","00000000","00000000","00000000","00000015"],["00400000","00000000","00000000","00000000","00000016"],["007fffff","00000000","00000000","00000000","00000000"],["ffc00000","00000000","00000000","00000000","00000016"],["00800000","00000000","00000000","00000000","00000017"],["00ffffff","00000000","00000000","00000000","00000000"],["ff800000","00000000","00000000","00000000","00000017"],["01000000","00000000","00000000","00000000","00000018"],["01ffffff","00000000","00000000","00000000","00000000"],["ff000000","00000000","00000000","00000000","00000018"],["02000000","00000000","00000000","00000000","00000019"],["03ffffff","00000000","00000000","00000000","00000000"],["fe000000","00000000","00000000","00000000","00000019"],["04000000","00000000","00000000","00000000","0000001a"],["07ffffff","00000000","00000000","00000000","00000000"],["fc000000","00000000","00000000","00000000","0000001a"],["08000000","00000000","00000000","00000000","0000001b"],["0fffffff","00000000","00000000","00000000","00000000"],["f8000000","00000000","00000000","00000000","0000001b"],["10000000","00000000","00000000","00000000","0000001c"],["1fffffff","00000000","00000000","00000000","00000000"],["f0000000","00000000","00000000","00000000","0000001c"],["20000000","00000000","00000000","00000000","0000001d"],["3fffffff","00000000","00000000","00000000","00000000"],["e0000000","00000000","00000000","00000000","0000001d"],["40000000","00000000","00000000","00000000","0000001e"],["7fffffff","00000000","00000000","00000000","00000000"],["c0000000","00000000","00000000","00000000","0000001e"],["80000000","00000000","00000000","00000000","0000001f"],["ffffffff","00000000","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","0000001f"]]} +{"op":"count_leading_zeros_i32","code":42,"wgsl":"countLeadingZeros(ia)","cases":[["00000000","00000000","00000000","00000000","00000020"],["00000001","00000000","00000000","00000000","0000001f"],["00000002","00000000","00000000","00000000","0000001e"],["00000003","00000000","00000000","00000000","0000001e"],["00000005","00000000","00000000","00000000","0000001d"],["00000007","00000000","00000000","00000000","0000001d"],["0000001f","00000000","00000000","00000000","0000001b"],["00000020","00000000","00000000","00000000","0000001a"],["00000021","00000000","00000000","00000000","0000001a"],["0000003f","00000000","00000000","00000000","0000001a"],["00000040","00000000","00000000","00000000","00000019"],["000000ff","00000000","00000000","00000000","00000018"],["00007fff","00000000","00000000","00000000","00000011"],["00008000","00000000","00000000","00000000","00000010"],["0000ffff","00000000","00000000","00000000","00000010"],["00010000","00000000","00000000","00000000","0000000f"],["55555555","00000000","00000000","00000000","00000001"],["7ffffffe","00000000","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","00000001"],["80000000","00000000","00000000","00000000","00000000"],["80000001","00000000","00000000","00000000","00000000"],["aaaaaaaa","00000000","00000000","00000000","00000000"],["deadbeef","00000000","00000000","00000000","00000000"],["ffff0000","00000000","00000000","00000000","00000000"],["ffff8000","00000000","00000000","00000000","00000000"],["ffffffe0","00000000","00000000","00000000","00000000"],["ffffffe1","00000000","00000000","00000000","00000000"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffffd","00000000","00000000","00000000","00000000"],["fffffffe","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","0000001f"],["00000001","00000000","00000000","00000000","0000001f"],["ffffffff","00000000","00000000","00000000","00000000"],["00000002","00000000","00000000","00000000","0000001e"],["00000003","00000000","00000000","00000000","0000001e"],["fffffffe","00000000","00000000","00000000","00000000"],["00000004","00000000","00000000","00000000","0000001d"],["00000007","00000000","00000000","00000000","0000001d"],["fffffffc","00000000","00000000","00000000","00000000"],["00000008","00000000","00000000","00000000","0000001c"],["0000000f","00000000","00000000","00000000","0000001c"],["fffffff8","00000000","00000000","00000000","00000000"],["00000010","00000000","00000000","00000000","0000001b"],["0000001f","00000000","00000000","00000000","0000001b"],["fffffff0","00000000","00000000","00000000","00000000"],["00000020","00000000","00000000","00000000","0000001a"],["0000003f","00000000","00000000","00000000","0000001a"],["ffffffe0","00000000","00000000","00000000","00000000"],["00000040","00000000","00000000","00000000","00000019"],["0000007f","00000000","00000000","00000000","00000019"],["ffffffc0","00000000","00000000","00000000","00000000"],["00000080","00000000","00000000","00000000","00000018"],["000000ff","00000000","00000000","00000000","00000018"],["ffffff80","00000000","00000000","00000000","00000000"],["00000100","00000000","00000000","00000000","00000017"],["000001ff","00000000","00000000","00000000","00000017"],["ffffff00","00000000","00000000","00000000","00000000"],["00000200","00000000","00000000","00000000","00000016"],["000003ff","00000000","00000000","00000000","00000016"],["fffffe00","00000000","00000000","00000000","00000000"],["00000400","00000000","00000000","00000000","00000015"],["000007ff","00000000","00000000","00000000","00000015"],["fffffc00","00000000","00000000","00000000","00000000"],["00000800","00000000","00000000","00000000","00000014"],["00000fff","00000000","00000000","00000000","00000014"],["fffff800","00000000","00000000","00000000","00000000"],["00001000","00000000","00000000","00000000","00000013"],["00001fff","00000000","00000000","00000000","00000013"],["fffff000","00000000","00000000","00000000","00000000"],["00002000","00000000","00000000","00000000","00000012"],["00003fff","00000000","00000000","00000000","00000012"],["ffffe000","00000000","00000000","00000000","00000000"],["00004000","00000000","00000000","00000000","00000011"],["00007fff","00000000","00000000","00000000","00000011"],["ffffc000","00000000","00000000","00000000","00000000"],["00008000","00000000","00000000","00000000","00000010"],["0000ffff","00000000","00000000","00000000","00000010"],["ffff8000","00000000","00000000","00000000","00000000"],["00010000","00000000","00000000","00000000","0000000f"],["0001ffff","00000000","00000000","00000000","0000000f"],["ffff0000","00000000","00000000","00000000","00000000"],["00020000","00000000","00000000","00000000","0000000e"],["0003ffff","00000000","00000000","00000000","0000000e"],["fffe0000","00000000","00000000","00000000","00000000"],["00040000","00000000","00000000","00000000","0000000d"],["0007ffff","00000000","00000000","00000000","0000000d"],["fffc0000","00000000","00000000","00000000","00000000"],["00080000","00000000","00000000","00000000","0000000c"],["000fffff","00000000","00000000","00000000","0000000c"],["fff80000","00000000","00000000","00000000","00000000"],["00100000","00000000","00000000","00000000","0000000b"],["001fffff","00000000","00000000","00000000","0000000b"],["fff00000","00000000","00000000","00000000","00000000"],["00200000","00000000","00000000","00000000","0000000a"],["003fffff","00000000","00000000","00000000","0000000a"],["ffe00000","00000000","00000000","00000000","00000000"],["00400000","00000000","00000000","00000000","00000009"],["007fffff","00000000","00000000","00000000","00000009"],["ffc00000","00000000","00000000","00000000","00000000"],["00800000","00000000","00000000","00000000","00000008"],["00ffffff","00000000","00000000","00000000","00000008"],["ff800000","00000000","00000000","00000000","00000000"],["01000000","00000000","00000000","00000000","00000007"],["01ffffff","00000000","00000000","00000000","00000007"],["ff000000","00000000","00000000","00000000","00000000"],["02000000","00000000","00000000","00000000","00000006"],["03ffffff","00000000","00000000","00000000","00000006"],["fe000000","00000000","00000000","00000000","00000000"],["04000000","00000000","00000000","00000000","00000005"],["07ffffff","00000000","00000000","00000000","00000005"],["fc000000","00000000","00000000","00000000","00000000"],["08000000","00000000","00000000","00000000","00000004"],["0fffffff","00000000","00000000","00000000","00000004"],["f8000000","00000000","00000000","00000000","00000000"],["10000000","00000000","00000000","00000000","00000003"],["1fffffff","00000000","00000000","00000000","00000003"],["f0000000","00000000","00000000","00000000","00000000"],["20000000","00000000","00000000","00000000","00000002"],["3fffffff","00000000","00000000","00000000","00000002"],["e0000000","00000000","00000000","00000000","00000000"],["40000000","00000000","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","00000001"],["c0000000","00000000","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000000","00000000","00000000"],["80000000","00000000","00000000","00000000","00000000"]]} +{"op":"extract_bits_u32","code":43,"wgsl":"extractBits(a, b, c)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000000","00000001","00000000","00000000"],["00000000","00000000","00000002","00000000","00000000"],["00000000","00000000","0000000f","00000000","00000000"],["00000000","00000000","00000010","00000000","00000000"],["00000000","00000000","00000011","00000000","00000000"],["00000000","00000000","0000001e","00000000","00000000"],["00000000","00000000","0000001f","00000000","00000000"],["00000000","00000000","00000020","00000000","00000000"],["00000000","00000000","00000021","00000000","00000000"],["00000000","00000000","00000040","00000000","00000000"],["00000000","00000000","ffffffff","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000001","00000001","00000000","00000000"],["00000000","00000001","00000002","00000000","00000000"],["00000000","00000001","0000000f","00000000","00000000"],["00000000","00000001","00000010","00000000","00000000"],["00000000","00000001","00000011","00000000","00000000"],["00000000","00000001","0000001e","00000000","00000000"],["00000000","00000001","0000001f","00000000","00000000"],["00000000","00000001","00000020","00000000","00000000"],["00000000","00000001","00000021","00000000","00000000"],["00000000","00000001","00000040","00000000","00000000"],["00000000","00000001","ffffffff","00000000","00000000"],["00000000","00000002","00000000","00000000","00000000"],["00000000","00000002","00000001","00000000","00000000"],["00000000","00000002","00000002","00000000","00000000"],["00000000","00000002","0000000f","00000000","00000000"],["00000000","00000002","00000010","00000000","00000000"],["00000000","00000002","00000011","00000000","00000000"],["00000000","00000002","0000001e","00000000","00000000"],["00000000","00000002","0000001f","00000000","00000000"],["00000000","00000002","00000020","00000000","00000000"],["00000000","00000002","00000021","00000000","00000000"],["00000000","00000002","00000040","00000000","00000000"],["00000000","00000002","ffffffff","00000000","00000000"],["00000000","0000000f","00000000","00000000","00000000"],["00000000","0000000f","00000001","00000000","00000000"],["00000000","0000000f","00000002","00000000","00000000"],["00000000","0000000f","0000000f","00000000","00000000"],["00000000","0000000f","00000010","00000000","00000000"],["00000000","0000000f","00000011","00000000","00000000"],["00000000","0000000f","0000001e","00000000","00000000"],["00000000","0000000f","0000001f","00000000","00000000"],["00000000","0000000f","00000020","00000000","00000000"],["00000000","0000000f","00000021","00000000","00000000"],["00000000","0000000f","00000040","00000000","00000000"],["00000000","0000000f","ffffffff","00000000","00000000"],["00000000","00000010","00000000","00000000","00000000"],["00000000","00000010","00000001","00000000","00000000"],["00000000","00000010","00000002","00000000","00000000"],["00000000","00000010","0000000f","00000000","00000000"],["00000000","00000010","00000010","00000000","00000000"],["00000000","00000010","00000011","00000000","00000000"],["00000000","00000010","0000001e","00000000","00000000"],["00000000","00000010","0000001f","00000000","00000000"],["00000000","00000010","00000020","00000000","00000000"],["00000000","00000010","00000021","00000000","00000000"],["00000000","00000010","00000040","00000000","00000000"],["00000000","00000010","ffffffff","00000000","00000000"],["00000000","00000011","00000000","00000000","00000000"],["00000000","00000011","00000001","00000000","00000000"],["00000000","00000011","00000002","00000000","00000000"],["00000000","00000011","0000000f","00000000","00000000"],["00000000","00000011","00000010","00000000","00000000"],["00000000","00000011","00000011","00000000","00000000"],["00000000","00000011","0000001e","00000000","00000000"],["00000000","00000011","0000001f","00000000","00000000"],["00000000","00000011","00000020","00000000","00000000"],["00000000","00000011","00000021","00000000","00000000"],["00000000","00000011","00000040","00000000","00000000"],["00000000","00000011","ffffffff","00000000","00000000"],["00000000","0000001e","00000000","00000000","00000000"],["00000000","0000001e","00000001","00000000","00000000"],["00000000","0000001e","00000002","00000000","00000000"],["00000000","0000001e","0000000f","00000000","00000000"],["00000000","0000001e","00000010","00000000","00000000"],["00000000","0000001e","00000011","00000000","00000000"],["00000000","0000001e","0000001e","00000000","00000000"],["00000000","0000001e","0000001f","00000000","00000000"],["00000000","0000001e","00000020","00000000","00000000"],["00000000","0000001e","00000021","00000000","00000000"],["00000000","0000001e","00000040","00000000","00000000"],["00000000","0000001e","ffffffff","00000000","00000000"],["00000000","0000001f","00000000","00000000","00000000"],["00000000","0000001f","00000001","00000000","00000000"],["00000000","0000001f","00000002","00000000","00000000"],["00000000","0000001f","0000000f","00000000","00000000"],["00000000","0000001f","00000010","00000000","00000000"],["00000000","0000001f","00000011","00000000","00000000"],["00000000","0000001f","0000001e","00000000","00000000"],["00000000","0000001f","0000001f","00000000","00000000"],["00000000","0000001f","00000020","00000000","00000000"],["00000000","0000001f","00000021","00000000","00000000"],["00000000","0000001f","00000040","00000000","00000000"],["00000000","0000001f","ffffffff","00000000","00000000"],["00000000","00000020","00000000","00000000","00000000"],["00000000","00000020","00000001","00000000","00000000"],["00000000","00000020","00000002","00000000","00000000"],["00000000","00000020","0000000f","00000000","00000000"],["00000000","00000020","00000010","00000000","00000000"],["00000000","00000020","00000011","00000000","00000000"],["00000000","00000020","0000001e","00000000","00000000"],["00000000","00000020","0000001f","00000000","00000000"],["00000000","00000020","00000020","00000000","00000000"],["00000000","00000020","00000021","00000000","00000000"],["00000000","00000020","00000040","00000000","00000000"],["00000000","00000020","ffffffff","00000000","00000000"],["00000000","00000021","00000000","00000000","00000000"],["00000000","00000021","00000001","00000000","00000000"],["00000000","00000021","00000002","00000000","00000000"],["00000000","00000021","0000000f","00000000","00000000"],["00000000","00000021","00000010","00000000","00000000"],["00000000","00000021","00000011","00000000","00000000"],["00000000","00000021","0000001e","00000000","00000000"],["00000000","00000021","0000001f","00000000","00000000"],["00000000","00000021","00000020","00000000","00000000"],["00000000","00000021","00000021","00000000","00000000"],["00000000","00000021","00000040","00000000","00000000"],["00000000","00000021","ffffffff","00000000","00000000"],["00000000","00000040","00000000","00000000","00000000"],["00000000","00000040","00000001","00000000","00000000"],["00000000","00000040","00000002","00000000","00000000"],["00000000","00000040","0000000f","00000000","00000000"],["00000000","00000040","00000010","00000000","00000000"],["00000000","00000040","00000011","00000000","00000000"],["00000000","00000040","0000001e","00000000","00000000"],["00000000","00000040","0000001f","00000000","00000000"],["00000000","00000040","00000020","00000000","00000000"],["00000000","00000040","00000021","00000000","00000000"],["00000000","00000040","00000040","00000000","00000000"],["00000000","00000040","ffffffff","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000000","ffffffff","00000001","00000000","00000000"],["00000000","ffffffff","00000002","00000000","00000000"],["00000000","ffffffff","0000000f","00000000","00000000"],["00000000","ffffffff","00000010","00000000","00000000"],["00000000","ffffffff","00000011","00000000","00000000"],["00000000","ffffffff","0000001e","00000000","00000000"],["00000000","ffffffff","0000001f","00000000","00000000"],["00000000","ffffffff","00000020","00000000","00000000"],["00000000","ffffffff","00000021","00000000","00000000"],["00000000","ffffffff","00000040","00000000","00000000"],["00000000","ffffffff","ffffffff","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000000","00000001","00000000","00000001"],["00000001","00000000","00000002","00000000","00000001"],["00000001","00000000","0000000f","00000000","00000001"],["00000001","00000000","00000010","00000000","00000001"],["00000001","00000000","00000011","00000000","00000001"],["00000001","00000000","0000001e","00000000","00000001"],["00000001","00000000","0000001f","00000000","00000001"],["00000001","00000000","00000020","00000000","00000001"],["00000001","00000000","00000021","00000000","00000001"],["00000001","00000000","00000040","00000000","00000001"],["00000001","00000000","ffffffff","00000000","00000001"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000001","00000001","00000000","00000000"],["00000001","00000001","00000002","00000000","00000000"],["00000001","00000001","0000000f","00000000","00000000"],["00000001","00000001","00000010","00000000","00000000"],["00000001","00000001","00000011","00000000","00000000"],["00000001","00000001","0000001e","00000000","00000000"],["00000001","00000001","0000001f","00000000","00000000"],["00000001","00000001","00000020","00000000","00000000"],["00000001","00000001","00000021","00000000","00000000"],["00000001","00000001","00000040","00000000","00000000"],["00000001","00000001","ffffffff","00000000","00000000"],["00000001","00000002","00000000","00000000","00000000"],["00000001","00000002","00000001","00000000","00000000"],["00000001","00000002","00000002","00000000","00000000"],["00000001","00000002","0000000f","00000000","00000000"],["00000001","00000002","00000010","00000000","00000000"],["00000001","00000002","00000011","00000000","00000000"],["00000001","00000002","0000001e","00000000","00000000"],["00000001","00000002","0000001f","00000000","00000000"],["00000001","00000002","00000020","00000000","00000000"],["00000001","00000002","00000021","00000000","00000000"],["00000001","00000002","00000040","00000000","00000000"],["00000001","00000002","ffffffff","00000000","00000000"],["00000001","0000000f","00000000","00000000","00000000"],["00000001","0000000f","00000001","00000000","00000000"],["00000001","0000000f","00000002","00000000","00000000"],["00000001","0000000f","0000000f","00000000","00000000"],["00000001","0000000f","00000010","00000000","00000000"],["00000001","0000000f","00000011","00000000","00000000"],["00000001","0000000f","0000001e","00000000","00000000"],["00000001","0000000f","0000001f","00000000","00000000"],["00000001","0000000f","00000020","00000000","00000000"],["00000001","0000000f","00000021","00000000","00000000"],["00000001","0000000f","00000040","00000000","00000000"],["00000001","0000000f","ffffffff","00000000","00000000"],["00000001","00000010","00000000","00000000","00000000"],["00000001","00000010","00000001","00000000","00000000"],["00000001","00000010","00000002","00000000","00000000"],["00000001","00000010","0000000f","00000000","00000000"],["00000001","00000010","00000010","00000000","00000000"],["00000001","00000010","00000011","00000000","00000000"],["00000001","00000010","0000001e","00000000","00000000"],["00000001","00000010","0000001f","00000000","00000000"],["00000001","00000010","00000020","00000000","00000000"],["00000001","00000010","00000021","00000000","00000000"],["00000001","00000010","00000040","00000000","00000000"],["00000001","00000010","ffffffff","00000000","00000000"],["00000001","00000011","00000000","00000000","00000000"],["00000001","00000011","00000001","00000000","00000000"],["00000001","00000011","00000002","00000000","00000000"],["00000001","00000011","0000000f","00000000","00000000"],["00000001","00000011","00000010","00000000","00000000"],["00000001","00000011","00000011","00000000","00000000"],["00000001","00000011","0000001e","00000000","00000000"],["00000001","00000011","0000001f","00000000","00000000"],["00000001","00000011","00000020","00000000","00000000"],["00000001","00000011","00000021","00000000","00000000"],["00000001","00000011","00000040","00000000","00000000"],["00000001","00000011","ffffffff","00000000","00000000"],["00000001","0000001e","00000000","00000000","00000000"],["00000001","0000001e","00000001","00000000","00000000"],["00000001","0000001e","00000002","00000000","00000000"],["00000001","0000001e","0000000f","00000000","00000000"],["00000001","0000001e","00000010","00000000","00000000"],["00000001","0000001e","00000011","00000000","00000000"],["00000001","0000001e","0000001e","00000000","00000000"],["00000001","0000001e","0000001f","00000000","00000000"],["00000001","0000001e","00000020","00000000","00000000"],["00000001","0000001e","00000021","00000000","00000000"],["00000001","0000001e","00000040","00000000","00000000"],["00000001","0000001e","ffffffff","00000000","00000000"],["00000001","0000001f","00000000","00000000","00000000"],["00000001","0000001f","00000001","00000000","00000000"],["00000001","0000001f","00000002","00000000","00000000"],["00000001","0000001f","0000000f","00000000","00000000"],["00000001","0000001f","00000010","00000000","00000000"],["00000001","0000001f","00000011","00000000","00000000"],["00000001","0000001f","0000001e","00000000","00000000"],["00000001","0000001f","0000001f","00000000","00000000"],["00000001","0000001f","00000020","00000000","00000000"],["00000001","0000001f","00000021","00000000","00000000"],["00000001","0000001f","00000040","00000000","00000000"],["00000001","0000001f","ffffffff","00000000","00000000"],["00000001","00000020","00000000","00000000","00000000"],["00000001","00000020","00000001","00000000","00000000"],["00000001","00000020","00000002","00000000","00000000"],["00000001","00000020","0000000f","00000000","00000000"],["00000001","00000020","00000010","00000000","00000000"],["00000001","00000020","00000011","00000000","00000000"],["00000001","00000020","0000001e","00000000","00000000"],["00000001","00000020","0000001f","00000000","00000000"],["00000001","00000020","00000020","00000000","00000000"],["00000001","00000020","00000021","00000000","00000000"],["00000001","00000020","00000040","00000000","00000000"],["00000001","00000020","ffffffff","00000000","00000000"],["00000001","00000021","00000000","00000000","00000000"],["00000001","00000021","00000001","00000000","00000000"],["00000001","00000021","00000002","00000000","00000000"],["00000001","00000021","0000000f","00000000","00000000"],["00000001","00000021","00000010","00000000","00000000"],["00000001","00000021","00000011","00000000","00000000"],["00000001","00000021","0000001e","00000000","00000000"],["00000001","00000021","0000001f","00000000","00000000"],["00000001","00000021","00000020","00000000","00000000"],["00000001","00000021","00000021","00000000","00000000"],["00000001","00000021","00000040","00000000","00000000"],["00000001","00000021","ffffffff","00000000","00000000"],["00000001","00000040","00000000","00000000","00000000"],["00000001","00000040","00000001","00000000","00000000"],["00000001","00000040","00000002","00000000","00000000"],["00000001","00000040","0000000f","00000000","00000000"],["00000001","00000040","00000010","00000000","00000000"],["00000001","00000040","00000011","00000000","00000000"],["00000001","00000040","0000001e","00000000","00000000"],["00000001","00000040","0000001f","00000000","00000000"],["00000001","00000040","00000020","00000000","00000000"],["00000001","00000040","00000021","00000000","00000000"],["00000001","00000040","00000040","00000000","00000000"],["00000001","00000040","ffffffff","00000000","00000000"],["00000001","ffffffff","00000000","00000000","00000000"],["00000001","ffffffff","00000001","00000000","00000000"],["00000001","ffffffff","00000002","00000000","00000000"],["00000001","ffffffff","0000000f","00000000","00000000"],["00000001","ffffffff","00000010","00000000","00000000"],["00000001","ffffffff","00000011","00000000","00000000"],["00000001","ffffffff","0000001e","00000000","00000000"],["00000001","ffffffff","0000001f","00000000","00000000"],["00000001","ffffffff","00000020","00000000","00000000"],["00000001","ffffffff","00000021","00000000","00000000"],["00000001","ffffffff","00000040","00000000","00000000"],["00000001","ffffffff","ffffffff","00000000","00000000"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000000","00000001","00000000","00000000"],["80000000","00000000","00000002","00000000","00000000"],["80000000","00000000","0000000f","00000000","00000000"],["80000000","00000000","00000010","00000000","00000000"],["80000000","00000000","00000011","00000000","00000000"],["80000000","00000000","0000001e","00000000","00000000"],["80000000","00000000","0000001f","00000000","00000000"],["80000000","00000000","00000020","00000000","80000000"],["80000000","00000000","00000021","00000000","80000000"],["80000000","00000000","00000040","00000000","80000000"],["80000000","00000000","ffffffff","00000000","80000000"],["80000000","00000001","00000000","00000000","00000000"],["80000000","00000001","00000001","00000000","00000000"],["80000000","00000001","00000002","00000000","00000000"],["80000000","00000001","0000000f","00000000","00000000"],["80000000","00000001","00000010","00000000","00000000"],["80000000","00000001","00000011","00000000","00000000"],["80000000","00000001","0000001e","00000000","00000000"],["80000000","00000001","0000001f","00000000","40000000"],["80000000","00000001","00000020","00000000","40000000"],["80000000","00000001","00000021","00000000","40000000"],["80000000","00000001","00000040","00000000","40000000"],["80000000","00000001","ffffffff","00000000","40000000"],["80000000","00000002","00000000","00000000","00000000"],["80000000","00000002","00000001","00000000","00000000"],["80000000","00000002","00000002","00000000","00000000"],["80000000","00000002","0000000f","00000000","00000000"],["80000000","00000002","00000010","00000000","00000000"],["80000000","00000002","00000011","00000000","00000000"],["80000000","00000002","0000001e","00000000","20000000"],["80000000","00000002","0000001f","00000000","20000000"],["80000000","00000002","00000020","00000000","20000000"],["80000000","00000002","00000021","00000000","20000000"],["80000000","00000002","00000040","00000000","20000000"],["80000000","00000002","ffffffff","00000000","20000000"],["80000000","0000000f","00000000","00000000","00000000"],["80000000","0000000f","00000001","00000000","00000000"],["80000000","0000000f","00000002","00000000","00000000"],["80000000","0000000f","0000000f","00000000","00000000"],["80000000","0000000f","00000010","00000000","00000000"],["80000000","0000000f","00000011","00000000","00010000"],["80000000","0000000f","0000001e","00000000","00010000"],["80000000","0000000f","0000001f","00000000","00010000"],["80000000","0000000f","00000020","00000000","00010000"],["80000000","0000000f","00000021","00000000","00010000"],["80000000","0000000f","00000040","00000000","00010000"],["80000000","0000000f","ffffffff","00000000","00010000"],["80000000","00000010","00000000","00000000","00000000"],["80000000","00000010","00000001","00000000","00000000"],["80000000","00000010","00000002","00000000","00000000"],["80000000","00000010","0000000f","00000000","00000000"],["80000000","00000010","00000010","00000000","00008000"],["80000000","00000010","00000011","00000000","00008000"],["80000000","00000010","0000001e","00000000","00008000"],["80000000","00000010","0000001f","00000000","00008000"],["80000000","00000010","00000020","00000000","00008000"],["80000000","00000010","00000021","00000000","00008000"],["80000000","00000010","00000040","00000000","00008000"],["80000000","00000010","ffffffff","00000000","00008000"],["80000000","00000011","00000000","00000000","00000000"],["80000000","00000011","00000001","00000000","00000000"],["80000000","00000011","00000002","00000000","00000000"],["80000000","00000011","0000000f","00000000","00004000"],["80000000","00000011","00000010","00000000","00004000"],["80000000","00000011","00000011","00000000","00004000"],["80000000","00000011","0000001e","00000000","00004000"],["80000000","00000011","0000001f","00000000","00004000"],["80000000","00000011","00000020","00000000","00004000"],["80000000","00000011","00000021","00000000","00004000"],["80000000","00000011","00000040","00000000","00004000"],["80000000","00000011","ffffffff","00000000","00004000"],["80000000","0000001e","00000000","00000000","00000000"],["80000000","0000001e","00000001","00000000","00000000"],["80000000","0000001e","00000002","00000000","00000002"],["80000000","0000001e","0000000f","00000000","00000002"],["80000000","0000001e","00000010","00000000","00000002"],["80000000","0000001e","00000011","00000000","00000002"],["80000000","0000001e","0000001e","00000000","00000002"],["80000000","0000001e","0000001f","00000000","00000002"],["80000000","0000001e","00000020","00000000","00000002"],["80000000","0000001e","00000021","00000000","00000002"],["80000000","0000001e","00000040","00000000","00000002"],["80000000","0000001e","ffffffff","00000000","00000002"],["80000000","0000001f","00000000","00000000","00000000"],["80000000","0000001f","00000001","00000000","00000001"],["80000000","0000001f","00000002","00000000","00000001"],["80000000","0000001f","0000000f","00000000","00000001"],["80000000","0000001f","00000010","00000000","00000001"],["80000000","0000001f","00000011","00000000","00000001"],["80000000","0000001f","0000001e","00000000","00000001"],["80000000","0000001f","0000001f","00000000","00000001"],["80000000","0000001f","00000020","00000000","00000001"],["80000000","0000001f","00000021","00000000","00000001"],["80000000","0000001f","00000040","00000000","00000001"],["80000000","0000001f","ffffffff","00000000","00000001"],["80000000","00000020","00000000","00000000","00000000"],["80000000","00000020","00000001","00000000","00000000"],["80000000","00000020","00000002","00000000","00000000"],["80000000","00000020","0000000f","00000000","00000000"],["80000000","00000020","00000010","00000000","00000000"],["80000000","00000020","00000011","00000000","00000000"],["80000000","00000020","0000001e","00000000","00000000"],["80000000","00000020","0000001f","00000000","00000000"],["80000000","00000020","00000020","00000000","00000000"],["80000000","00000020","00000021","00000000","00000000"],["80000000","00000020","00000040","00000000","00000000"],["80000000","00000020","ffffffff","00000000","00000000"],["80000000","00000021","00000000","00000000","00000000"],["80000000","00000021","00000001","00000000","00000000"],["80000000","00000021","00000002","00000000","00000000"],["80000000","00000021","0000000f","00000000","00000000"],["80000000","00000021","00000010","00000000","00000000"],["80000000","00000021","00000011","00000000","00000000"],["80000000","00000021","0000001e","00000000","00000000"],["80000000","00000021","0000001f","00000000","00000000"],["80000000","00000021","00000020","00000000","00000000"],["80000000","00000021","00000021","00000000","00000000"],["80000000","00000021","00000040","00000000","00000000"],["80000000","00000021","ffffffff","00000000","00000000"],["80000000","00000040","00000000","00000000","00000000"],["80000000","00000040","00000001","00000000","00000000"],["80000000","00000040","00000002","00000000","00000000"],["80000000","00000040","0000000f","00000000","00000000"],["80000000","00000040","00000010","00000000","00000000"],["80000000","00000040","00000011","00000000","00000000"],["80000000","00000040","0000001e","00000000","00000000"],["80000000","00000040","0000001f","00000000","00000000"],["80000000","00000040","00000020","00000000","00000000"],["80000000","00000040","00000021","00000000","00000000"],["80000000","00000040","00000040","00000000","00000000"],["80000000","00000040","ffffffff","00000000","00000000"],["80000000","ffffffff","00000000","00000000","00000000"],["80000000","ffffffff","00000001","00000000","00000000"],["80000000","ffffffff","00000002","00000000","00000000"],["80000000","ffffffff","0000000f","00000000","00000000"],["80000000","ffffffff","00000010","00000000","00000000"],["80000000","ffffffff","00000011","00000000","00000000"],["80000000","ffffffff","0000001e","00000000","00000000"],["80000000","ffffffff","0000001f","00000000","00000000"],["80000000","ffffffff","00000020","00000000","00000000"],["80000000","ffffffff","00000021","00000000","00000000"],["80000000","ffffffff","00000040","00000000","00000000"],["80000000","ffffffff","ffffffff","00000000","00000000"],["deadbeef","00000000","00000000","00000000","00000000"],["deadbeef","00000000","00000001","00000000","00000001"],["deadbeef","00000000","00000002","00000000","00000003"],["deadbeef","00000000","0000000f","00000000","00003eef"],["deadbeef","00000000","00000010","00000000","0000beef"],["deadbeef","00000000","00000011","00000000","0001beef"],["deadbeef","00000000","0000001e","00000000","1eadbeef"],["deadbeef","00000000","0000001f","00000000","5eadbeef"],["deadbeef","00000000","00000020","00000000","deadbeef"],["deadbeef","00000000","00000021","00000000","deadbeef"],["deadbeef","00000000","00000040","00000000","deadbeef"],["deadbeef","00000000","ffffffff","00000000","deadbeef"],["deadbeef","00000001","00000000","00000000","00000000"],["deadbeef","00000001","00000001","00000000","00000001"],["deadbeef","00000001","00000002","00000000","00000003"],["deadbeef","00000001","0000000f","00000000","00005f77"],["deadbeef","00000001","00000010","00000000","0000df77"],["deadbeef","00000001","00000011","00000000","0000df77"],["deadbeef","00000001","0000001e","00000000","2f56df77"],["deadbeef","00000001","0000001f","00000000","6f56df77"],["deadbeef","00000001","00000020","00000000","6f56df77"],["deadbeef","00000001","00000021","00000000","6f56df77"],["deadbeef","00000001","00000040","00000000","6f56df77"],["deadbeef","00000001","ffffffff","00000000","6f56df77"],["deadbeef","00000002","00000000","00000000","00000000"],["deadbeef","00000002","00000001","00000000","00000001"],["deadbeef","00000002","00000002","00000000","00000003"],["deadbeef","00000002","0000000f","00000000","00006fbb"],["deadbeef","00000002","00000010","00000000","00006fbb"],["deadbeef","00000002","00000011","00000000","00016fbb"],["deadbeef","00000002","0000001e","00000000","37ab6fbb"],["deadbeef","00000002","0000001f","00000000","37ab6fbb"],["deadbeef","00000002","00000020","00000000","37ab6fbb"],["deadbeef","00000002","00000021","00000000","37ab6fbb"],["deadbeef","00000002","00000040","00000000","37ab6fbb"],["deadbeef","00000002","ffffffff","00000000","37ab6fbb"],["deadbeef","0000000f","00000000","00000000","00000000"],["deadbeef","0000000f","00000001","00000000","00000001"],["deadbeef","0000000f","00000002","00000000","00000003"],["deadbeef","0000000f","0000000f","00000000","00003d5b"],["deadbeef","0000000f","00000010","00000000","0000bd5b"],["deadbeef","0000000f","00000011","00000000","0001bd5b"],["deadbeef","0000000f","0000001e","00000000","0001bd5b"],["deadbeef","0000000f","0000001f","00000000","0001bd5b"],["deadbeef","0000000f","00000020","00000000","0001bd5b"],["deadbeef","0000000f","00000021","00000000","0001bd5b"],["deadbeef","0000000f","00000040","00000000","0001bd5b"],["deadbeef","0000000f","ffffffff","00000000","0001bd5b"],["deadbeef","00000010","00000000","00000000","00000000"],["deadbeef","00000010","00000001","00000000","00000001"],["deadbeef","00000010","00000002","00000000","00000001"],["deadbeef","00000010","0000000f","00000000","00005ead"],["deadbeef","00000010","00000010","00000000","0000dead"],["deadbeef","00000010","00000011","00000000","0000dead"],["deadbeef","00000010","0000001e","00000000","0000dead"],["deadbeef","00000010","0000001f","00000000","0000dead"],["deadbeef","00000010","00000020","00000000","0000dead"],["deadbeef","00000010","00000021","00000000","0000dead"],["deadbeef","00000010","00000040","00000000","0000dead"],["deadbeef","00000010","ffffffff","00000000","0000dead"],["deadbeef","00000011","00000000","00000000","00000000"],["deadbeef","00000011","00000001","00000000","00000000"],["deadbeef","00000011","00000002","00000000","00000002"],["deadbeef","00000011","0000000f","00000000","00006f56"],["deadbeef","00000011","00000010","00000000","00006f56"],["deadbeef","00000011","00000011","00000000","00006f56"],["deadbeef","00000011","0000001e","00000000","00006f56"],["deadbeef","00000011","0000001f","00000000","00006f56"],["deadbeef","00000011","00000020","00000000","00006f56"],["deadbeef","00000011","00000021","00000000","00006f56"],["deadbeef","00000011","00000040","00000000","00006f56"],["deadbeef","00000011","ffffffff","00000000","00006f56"],["deadbeef","0000001e","00000000","00000000","00000000"],["deadbeef","0000001e","00000001","00000000","00000001"],["deadbeef","0000001e","00000002","00000000","00000003"],["deadbeef","0000001e","0000000f","00000000","00000003"],["deadbeef","0000001e","00000010","00000000","00000003"],["deadbeef","0000001e","00000011","00000000","00000003"],["deadbeef","0000001e","0000001e","00000000","00000003"],["deadbeef","0000001e","0000001f","00000000","00000003"],["deadbeef","0000001e","00000020","00000000","00000003"],["deadbeef","0000001e","00000021","00000000","00000003"],["deadbeef","0000001e","00000040","00000000","00000003"],["deadbeef","0000001e","ffffffff","00000000","00000003"],["deadbeef","0000001f","00000000","00000000","00000000"],["deadbeef","0000001f","00000001","00000000","00000001"],["deadbeef","0000001f","00000002","00000000","00000001"],["deadbeef","0000001f","0000000f","00000000","00000001"],["deadbeef","0000001f","00000010","00000000","00000001"],["deadbeef","0000001f","00000011","00000000","00000001"],["deadbeef","0000001f","0000001e","00000000","00000001"],["deadbeef","0000001f","0000001f","00000000","00000001"],["deadbeef","0000001f","00000020","00000000","00000001"],["deadbeef","0000001f","00000021","00000000","00000001"],["deadbeef","0000001f","00000040","00000000","00000001"],["deadbeef","0000001f","ffffffff","00000000","00000001"],["deadbeef","00000020","00000000","00000000","00000000"],["deadbeef","00000020","00000001","00000000","00000000"],["deadbeef","00000020","00000002","00000000","00000000"],["deadbeef","00000020","0000000f","00000000","00000000"],["deadbeef","00000020","00000010","00000000","00000000"],["deadbeef","00000020","00000011","00000000","00000000"],["deadbeef","00000020","0000001e","00000000","00000000"],["deadbeef","00000020","0000001f","00000000","00000000"],["deadbeef","00000020","00000020","00000000","00000000"],["deadbeef","00000020","00000021","00000000","00000000"],["deadbeef","00000020","00000040","00000000","00000000"],["deadbeef","00000020","ffffffff","00000000","00000000"],["deadbeef","00000021","00000000","00000000","00000000"],["deadbeef","00000021","00000001","00000000","00000000"],["deadbeef","00000021","00000002","00000000","00000000"],["deadbeef","00000021","0000000f","00000000","00000000"],["deadbeef","00000021","00000010","00000000","00000000"],["deadbeef","00000021","00000011","00000000","00000000"],["deadbeef","00000021","0000001e","00000000","00000000"],["deadbeef","00000021","0000001f","00000000","00000000"],["deadbeef","00000021","00000020","00000000","00000000"],["deadbeef","00000021","00000021","00000000","00000000"],["deadbeef","00000021","00000040","00000000","00000000"],["deadbeef","00000021","ffffffff","00000000","00000000"],["deadbeef","00000040","00000000","00000000","00000000"],["deadbeef","00000040","00000001","00000000","00000000"],["deadbeef","00000040","00000002","00000000","00000000"],["deadbeef","00000040","0000000f","00000000","00000000"],["deadbeef","00000040","00000010","00000000","00000000"],["deadbeef","00000040","00000011","00000000","00000000"],["deadbeef","00000040","0000001e","00000000","00000000"],["deadbeef","00000040","0000001f","00000000","00000000"],["deadbeef","00000040","00000020","00000000","00000000"],["deadbeef","00000040","00000021","00000000","00000000"],["deadbeef","00000040","00000040","00000000","00000000"],["deadbeef","00000040","ffffffff","00000000","00000000"],["deadbeef","ffffffff","00000000","00000000","00000000"],["deadbeef","ffffffff","00000001","00000000","00000000"],["deadbeef","ffffffff","00000002","00000000","00000000"],["deadbeef","ffffffff","0000000f","00000000","00000000"],["deadbeef","ffffffff","00000010","00000000","00000000"],["deadbeef","ffffffff","00000011","00000000","00000000"],["deadbeef","ffffffff","0000001e","00000000","00000000"],["deadbeef","ffffffff","0000001f","00000000","00000000"],["deadbeef","ffffffff","00000020","00000000","00000000"],["deadbeef","ffffffff","00000021","00000000","00000000"],["deadbeef","ffffffff","00000040","00000000","00000000"],["deadbeef","ffffffff","ffffffff","00000000","00000000"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000000","00000001","00000000","00000001"],["7fffffff","00000000","00000002","00000000","00000003"],["7fffffff","00000000","0000000f","00000000","00007fff"],["7fffffff","00000000","00000010","00000000","0000ffff"],["7fffffff","00000000","00000011","00000000","0001ffff"],["7fffffff","00000000","0000001e","00000000","3fffffff"],["7fffffff","00000000","0000001f","00000000","7fffffff"],["7fffffff","00000000","00000020","00000000","7fffffff"],["7fffffff","00000000","00000021","00000000","7fffffff"],["7fffffff","00000000","00000040","00000000","7fffffff"],["7fffffff","00000000","ffffffff","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","00000000"],["7fffffff","00000001","00000001","00000000","00000001"],["7fffffff","00000001","00000002","00000000","00000003"],["7fffffff","00000001","0000000f","00000000","00007fff"],["7fffffff","00000001","00000010","00000000","0000ffff"],["7fffffff","00000001","00000011","00000000","0001ffff"],["7fffffff","00000001","0000001e","00000000","3fffffff"],["7fffffff","00000001","0000001f","00000000","3fffffff"],["7fffffff","00000001","00000020","00000000","3fffffff"],["7fffffff","00000001","00000021","00000000","3fffffff"],["7fffffff","00000001","00000040","00000000","3fffffff"],["7fffffff","00000001","ffffffff","00000000","3fffffff"],["7fffffff","00000002","00000000","00000000","00000000"],["7fffffff","00000002","00000001","00000000","00000001"],["7fffffff","00000002","00000002","00000000","00000003"],["7fffffff","00000002","0000000f","00000000","00007fff"],["7fffffff","00000002","00000010","00000000","0000ffff"],["7fffffff","00000002","00000011","00000000","0001ffff"],["7fffffff","00000002","0000001e","00000000","1fffffff"],["7fffffff","00000002","0000001f","00000000","1fffffff"],["7fffffff","00000002","00000020","00000000","1fffffff"],["7fffffff","00000002","00000021","00000000","1fffffff"],["7fffffff","00000002","00000040","00000000","1fffffff"],["7fffffff","00000002","ffffffff","00000000","1fffffff"],["7fffffff","0000000f","00000000","00000000","00000000"],["7fffffff","0000000f","00000001","00000000","00000001"],["7fffffff","0000000f","00000002","00000000","00000003"],["7fffffff","0000000f","0000000f","00000000","00007fff"],["7fffffff","0000000f","00000010","00000000","0000ffff"],["7fffffff","0000000f","00000011","00000000","0000ffff"],["7fffffff","0000000f","0000001e","00000000","0000ffff"],["7fffffff","0000000f","0000001f","00000000","0000ffff"],["7fffffff","0000000f","00000020","00000000","0000ffff"],["7fffffff","0000000f","00000021","00000000","0000ffff"],["7fffffff","0000000f","00000040","00000000","0000ffff"],["7fffffff","0000000f","ffffffff","00000000","0000ffff"],["7fffffff","00000010","00000000","00000000","00000000"],["7fffffff","00000010","00000001","00000000","00000001"],["7fffffff","00000010","00000002","00000000","00000003"],["7fffffff","00000010","0000000f","00000000","00007fff"],["7fffffff","00000010","00000010","00000000","00007fff"],["7fffffff","00000010","00000011","00000000","00007fff"],["7fffffff","00000010","0000001e","00000000","00007fff"],["7fffffff","00000010","0000001f","00000000","00007fff"],["7fffffff","00000010","00000020","00000000","00007fff"],["7fffffff","00000010","00000021","00000000","00007fff"],["7fffffff","00000010","00000040","00000000","00007fff"],["7fffffff","00000010","ffffffff","00000000","00007fff"],["7fffffff","00000011","00000000","00000000","00000000"],["7fffffff","00000011","00000001","00000000","00000001"],["7fffffff","00000011","00000002","00000000","00000003"],["7fffffff","00000011","0000000f","00000000","00003fff"],["7fffffff","00000011","00000010","00000000","00003fff"],["7fffffff","00000011","00000011","00000000","00003fff"],["7fffffff","00000011","0000001e","00000000","00003fff"],["7fffffff","00000011","0000001f","00000000","00003fff"],["7fffffff","00000011","00000020","00000000","00003fff"],["7fffffff","00000011","00000021","00000000","00003fff"],["7fffffff","00000011","00000040","00000000","00003fff"],["7fffffff","00000011","ffffffff","00000000","00003fff"],["7fffffff","0000001e","00000000","00000000","00000000"],["7fffffff","0000001e","00000001","00000000","00000001"],["7fffffff","0000001e","00000002","00000000","00000001"],["7fffffff","0000001e","0000000f","00000000","00000001"],["7fffffff","0000001e","00000010","00000000","00000001"],["7fffffff","0000001e","00000011","00000000","00000001"],["7fffffff","0000001e","0000001e","00000000","00000001"],["7fffffff","0000001e","0000001f","00000000","00000001"],["7fffffff","0000001e","00000020","00000000","00000001"],["7fffffff","0000001e","00000021","00000000","00000001"],["7fffffff","0000001e","00000040","00000000","00000001"],["7fffffff","0000001e","ffffffff","00000000","00000001"],["7fffffff","0000001f","00000000","00000000","00000000"],["7fffffff","0000001f","00000001","00000000","00000000"],["7fffffff","0000001f","00000002","00000000","00000000"],["7fffffff","0000001f","0000000f","00000000","00000000"],["7fffffff","0000001f","00000010","00000000","00000000"],["7fffffff","0000001f","00000011","00000000","00000000"],["7fffffff","0000001f","0000001e","00000000","00000000"],["7fffffff","0000001f","0000001f","00000000","00000000"],["7fffffff","0000001f","00000020","00000000","00000000"],["7fffffff","0000001f","00000021","00000000","00000000"],["7fffffff","0000001f","00000040","00000000","00000000"],["7fffffff","0000001f","ffffffff","00000000","00000000"],["7fffffff","00000020","00000000","00000000","00000000"],["7fffffff","00000020","00000001","00000000","00000000"],["7fffffff","00000020","00000002","00000000","00000000"],["7fffffff","00000020","0000000f","00000000","00000000"],["7fffffff","00000020","00000010","00000000","00000000"],["7fffffff","00000020","00000011","00000000","00000000"],["7fffffff","00000020","0000001e","00000000","00000000"],["7fffffff","00000020","0000001f","00000000","00000000"],["7fffffff","00000020","00000020","00000000","00000000"],["7fffffff","00000020","00000021","00000000","00000000"],["7fffffff","00000020","00000040","00000000","00000000"],["7fffffff","00000020","ffffffff","00000000","00000000"],["7fffffff","00000021","00000000","00000000","00000000"],["7fffffff","00000021","00000001","00000000","00000000"],["7fffffff","00000021","00000002","00000000","00000000"],["7fffffff","00000021","0000000f","00000000","00000000"],["7fffffff","00000021","00000010","00000000","00000000"],["7fffffff","00000021","00000011","00000000","00000000"],["7fffffff","00000021","0000001e","00000000","00000000"],["7fffffff","00000021","0000001f","00000000","00000000"],["7fffffff","00000021","00000020","00000000","00000000"],["7fffffff","00000021","00000021","00000000","00000000"],["7fffffff","00000021","00000040","00000000","00000000"],["7fffffff","00000021","ffffffff","00000000","00000000"],["7fffffff","00000040","00000000","00000000","00000000"],["7fffffff","00000040","00000001","00000000","00000000"],["7fffffff","00000040","00000002","00000000","00000000"],["7fffffff","00000040","0000000f","00000000","00000000"],["7fffffff","00000040","00000010","00000000","00000000"],["7fffffff","00000040","00000011","00000000","00000000"],["7fffffff","00000040","0000001e","00000000","00000000"],["7fffffff","00000040","0000001f","00000000","00000000"],["7fffffff","00000040","00000020","00000000","00000000"],["7fffffff","00000040","00000021","00000000","00000000"],["7fffffff","00000040","00000040","00000000","00000000"],["7fffffff","00000040","ffffffff","00000000","00000000"],["7fffffff","ffffffff","00000000","00000000","00000000"],["7fffffff","ffffffff","00000001","00000000","00000000"],["7fffffff","ffffffff","00000002","00000000","00000000"],["7fffffff","ffffffff","0000000f","00000000","00000000"],["7fffffff","ffffffff","00000010","00000000","00000000"],["7fffffff","ffffffff","00000011","00000000","00000000"],["7fffffff","ffffffff","0000001e","00000000","00000000"],["7fffffff","ffffffff","0000001f","00000000","00000000"],["7fffffff","ffffffff","00000020","00000000","00000000"],["7fffffff","ffffffff","00000021","00000000","00000000"],["7fffffff","ffffffff","00000040","00000000","00000000"],["7fffffff","ffffffff","ffffffff","00000000","00000000"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000001","00000000","00000001"],["ffffffff","00000000","00000002","00000000","00000003"],["ffffffff","00000000","0000000f","00000000","00007fff"],["ffffffff","00000000","00000010","00000000","0000ffff"],["ffffffff","00000000","00000011","00000000","0001ffff"],["ffffffff","00000000","0000001e","00000000","3fffffff"],["ffffffff","00000000","0000001f","00000000","7fffffff"],["ffffffff","00000000","00000020","00000000","ffffffff"],["ffffffff","00000000","00000021","00000000","ffffffff"],["ffffffff","00000000","00000040","00000000","ffffffff"],["ffffffff","00000000","ffffffff","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","00000000"],["ffffffff","00000001","00000001","00000000","00000001"],["ffffffff","00000001","00000002","00000000","00000003"],["ffffffff","00000001","0000000f","00000000","00007fff"],["ffffffff","00000001","00000010","00000000","0000ffff"],["ffffffff","00000001","00000011","00000000","0001ffff"],["ffffffff","00000001","0000001e","00000000","3fffffff"],["ffffffff","00000001","0000001f","00000000","7fffffff"],["ffffffff","00000001","00000020","00000000","7fffffff"],["ffffffff","00000001","00000021","00000000","7fffffff"],["ffffffff","00000001","00000040","00000000","7fffffff"],["ffffffff","00000001","ffffffff","00000000","7fffffff"],["ffffffff","00000002","00000000","00000000","00000000"],["ffffffff","00000002","00000001","00000000","00000001"],["ffffffff","00000002","00000002","00000000","00000003"],["ffffffff","00000002","0000000f","00000000","00007fff"],["ffffffff","00000002","00000010","00000000","0000ffff"],["ffffffff","00000002","00000011","00000000","0001ffff"],["ffffffff","00000002","0000001e","00000000","3fffffff"],["ffffffff","00000002","0000001f","00000000","3fffffff"],["ffffffff","00000002","00000020","00000000","3fffffff"],["ffffffff","00000002","00000021","00000000","3fffffff"],["ffffffff","00000002","00000040","00000000","3fffffff"],["ffffffff","00000002","ffffffff","00000000","3fffffff"],["ffffffff","0000000f","00000000","00000000","00000000"],["ffffffff","0000000f","00000001","00000000","00000001"],["ffffffff","0000000f","00000002","00000000","00000003"],["ffffffff","0000000f","0000000f","00000000","00007fff"],["ffffffff","0000000f","00000010","00000000","0000ffff"],["ffffffff","0000000f","00000011","00000000","0001ffff"],["ffffffff","0000000f","0000001e","00000000","0001ffff"],["ffffffff","0000000f","0000001f","00000000","0001ffff"],["ffffffff","0000000f","00000020","00000000","0001ffff"],["ffffffff","0000000f","00000021","00000000","0001ffff"],["ffffffff","0000000f","00000040","00000000","0001ffff"],["ffffffff","0000000f","ffffffff","00000000","0001ffff"],["ffffffff","00000010","00000000","00000000","00000000"],["ffffffff","00000010","00000001","00000000","00000001"],["ffffffff","00000010","00000002","00000000","00000003"],["ffffffff","00000010","0000000f","00000000","00007fff"],["ffffffff","00000010","00000010","00000000","0000ffff"],["ffffffff","00000010","00000011","00000000","0000ffff"],["ffffffff","00000010","0000001e","00000000","0000ffff"],["ffffffff","00000010","0000001f","00000000","0000ffff"],["ffffffff","00000010","00000020","00000000","0000ffff"],["ffffffff","00000010","00000021","00000000","0000ffff"],["ffffffff","00000010","00000040","00000000","0000ffff"],["ffffffff","00000010","ffffffff","00000000","0000ffff"],["ffffffff","00000011","00000000","00000000","00000000"],["ffffffff","00000011","00000001","00000000","00000001"],["ffffffff","00000011","00000002","00000000","00000003"],["ffffffff","00000011","0000000f","00000000","00007fff"],["ffffffff","00000011","00000010","00000000","00007fff"],["ffffffff","00000011","00000011","00000000","00007fff"],["ffffffff","00000011","0000001e","00000000","00007fff"],["ffffffff","00000011","0000001f","00000000","00007fff"],["ffffffff","00000011","00000020","00000000","00007fff"],["ffffffff","00000011","00000021","00000000","00007fff"],["ffffffff","00000011","00000040","00000000","00007fff"],["ffffffff","00000011","ffffffff","00000000","00007fff"],["ffffffff","0000001e","00000000","00000000","00000000"],["ffffffff","0000001e","00000001","00000000","00000001"],["ffffffff","0000001e","00000002","00000000","00000003"],["ffffffff","0000001e","0000000f","00000000","00000003"],["ffffffff","0000001e","00000010","00000000","00000003"],["ffffffff","0000001e","00000011","00000000","00000003"],["ffffffff","0000001e","0000001e","00000000","00000003"],["ffffffff","0000001e","0000001f","00000000","00000003"],["ffffffff","0000001e","00000020","00000000","00000003"],["ffffffff","0000001e","00000021","00000000","00000003"],["ffffffff","0000001e","00000040","00000000","00000003"],["ffffffff","0000001e","ffffffff","00000000","00000003"],["ffffffff","0000001f","00000000","00000000","00000000"],["ffffffff","0000001f","00000001","00000000","00000001"],["ffffffff","0000001f","00000002","00000000","00000001"],["ffffffff","0000001f","0000000f","00000000","00000001"],["ffffffff","0000001f","00000010","00000000","00000001"],["ffffffff","0000001f","00000011","00000000","00000001"],["ffffffff","0000001f","0000001e","00000000","00000001"],["ffffffff","0000001f","0000001f","00000000","00000001"],["ffffffff","0000001f","00000020","00000000","00000001"],["ffffffff","0000001f","00000021","00000000","00000001"],["ffffffff","0000001f","00000040","00000000","00000001"],["ffffffff","0000001f","ffffffff","00000000","00000001"],["ffffffff","00000020","00000000","00000000","00000000"],["ffffffff","00000020","00000001","00000000","00000000"],["ffffffff","00000020","00000002","00000000","00000000"],["ffffffff","00000020","0000000f","00000000","00000000"],["ffffffff","00000020","00000010","00000000","00000000"],["ffffffff","00000020","00000011","00000000","00000000"],["ffffffff","00000020","0000001e","00000000","00000000"],["ffffffff","00000020","0000001f","00000000","00000000"],["ffffffff","00000020","00000020","00000000","00000000"],["ffffffff","00000020","00000021","00000000","00000000"],["ffffffff","00000020","00000040","00000000","00000000"],["ffffffff","00000020","ffffffff","00000000","00000000"],["ffffffff","00000021","00000000","00000000","00000000"],["ffffffff","00000021","00000001","00000000","00000000"],["ffffffff","00000021","00000002","00000000","00000000"],["ffffffff","00000021","0000000f","00000000","00000000"],["ffffffff","00000021","00000010","00000000","00000000"],["ffffffff","00000021","00000011","00000000","00000000"],["ffffffff","00000021","0000001e","00000000","00000000"],["ffffffff","00000021","0000001f","00000000","00000000"],["ffffffff","00000021","00000020","00000000","00000000"],["ffffffff","00000021","00000021","00000000","00000000"],["ffffffff","00000021","00000040","00000000","00000000"],["ffffffff","00000021","ffffffff","00000000","00000000"],["ffffffff","00000040","00000000","00000000","00000000"],["ffffffff","00000040","00000001","00000000","00000000"],["ffffffff","00000040","00000002","00000000","00000000"],["ffffffff","00000040","0000000f","00000000","00000000"],["ffffffff","00000040","00000010","00000000","00000000"],["ffffffff","00000040","00000011","00000000","00000000"],["ffffffff","00000040","0000001e","00000000","00000000"],["ffffffff","00000040","0000001f","00000000","00000000"],["ffffffff","00000040","00000020","00000000","00000000"],["ffffffff","00000040","00000021","00000000","00000000"],["ffffffff","00000040","00000040","00000000","00000000"],["ffffffff","00000040","ffffffff","00000000","00000000"],["ffffffff","ffffffff","00000000","00000000","00000000"],["ffffffff","ffffffff","00000001","00000000","00000000"],["ffffffff","ffffffff","00000002","00000000","00000000"],["ffffffff","ffffffff","0000000f","00000000","00000000"],["ffffffff","ffffffff","00000010","00000000","00000000"],["ffffffff","ffffffff","00000011","00000000","00000000"],["ffffffff","ffffffff","0000001e","00000000","00000000"],["ffffffff","ffffffff","0000001f","00000000","00000000"],["ffffffff","ffffffff","00000020","00000000","00000000"],["ffffffff","ffffffff","00000021","00000000","00000000"],["ffffffff","ffffffff","00000040","00000000","00000000"],["ffffffff","ffffffff","ffffffff","00000000","00000000"],["55555555","00000000","00000000","00000000","00000000"],["55555555","00000000","00000001","00000000","00000001"],["55555555","00000000","00000002","00000000","00000001"],["55555555","00000000","0000000f","00000000","00005555"],["55555555","00000000","00000010","00000000","00005555"],["55555555","00000000","00000011","00000000","00015555"],["55555555","00000000","0000001e","00000000","15555555"],["55555555","00000000","0000001f","00000000","55555555"],["55555555","00000000","00000020","00000000","55555555"],["55555555","00000000","00000021","00000000","55555555"],["55555555","00000000","00000040","00000000","55555555"],["55555555","00000000","ffffffff","00000000","55555555"],["55555555","00000001","00000000","00000000","00000000"],["55555555","00000001","00000001","00000000","00000000"],["55555555","00000001","00000002","00000000","00000002"],["55555555","00000001","0000000f","00000000","00002aaa"],["55555555","00000001","00000010","00000000","0000aaaa"],["55555555","00000001","00000011","00000000","0000aaaa"],["55555555","00000001","0000001e","00000000","2aaaaaaa"],["55555555","00000001","0000001f","00000000","2aaaaaaa"],["55555555","00000001","00000020","00000000","2aaaaaaa"],["55555555","00000001","00000021","00000000","2aaaaaaa"],["55555555","00000001","00000040","00000000","2aaaaaaa"],["55555555","00000001","ffffffff","00000000","2aaaaaaa"],["55555555","00000002","00000000","00000000","00000000"],["55555555","00000002","00000001","00000000","00000001"],["55555555","00000002","00000002","00000000","00000001"],["55555555","00000002","0000000f","00000000","00005555"],["55555555","00000002","00000010","00000000","00005555"],["55555555","00000002","00000011","00000000","00015555"],["55555555","00000002","0000001e","00000000","15555555"],["55555555","00000002","0000001f","00000000","15555555"],["55555555","00000002","00000020","00000000","15555555"],["55555555","00000002","00000021","00000000","15555555"],["55555555","00000002","00000040","00000000","15555555"],["55555555","00000002","ffffffff","00000000","15555555"],["55555555","0000000f","00000000","00000000","00000000"],["55555555","0000000f","00000001","00000000","00000000"],["55555555","0000000f","00000002","00000000","00000002"],["55555555","0000000f","0000000f","00000000","00002aaa"],["55555555","0000000f","00000010","00000000","0000aaaa"],["55555555","0000000f","00000011","00000000","0000aaaa"],["55555555","0000000f","0000001e","00000000","0000aaaa"],["55555555","0000000f","0000001f","00000000","0000aaaa"],["55555555","0000000f","00000020","00000000","0000aaaa"],["55555555","0000000f","00000021","00000000","0000aaaa"],["55555555","0000000f","00000040","00000000","0000aaaa"],["55555555","0000000f","ffffffff","00000000","0000aaaa"],["55555555","00000010","00000000","00000000","00000000"],["55555555","00000010","00000001","00000000","00000001"],["55555555","00000010","00000002","00000000","00000001"],["55555555","00000010","0000000f","00000000","00005555"],["55555555","00000010","00000010","00000000","00005555"],["55555555","00000010","00000011","00000000","00005555"],["55555555","00000010","0000001e","00000000","00005555"],["55555555","00000010","0000001f","00000000","00005555"],["55555555","00000010","00000020","00000000","00005555"],["55555555","00000010","00000021","00000000","00005555"],["55555555","00000010","00000040","00000000","00005555"],["55555555","00000010","ffffffff","00000000","00005555"],["55555555","00000011","00000000","00000000","00000000"],["55555555","00000011","00000001","00000000","00000000"],["55555555","00000011","00000002","00000000","00000002"],["55555555","00000011","0000000f","00000000","00002aaa"],["55555555","00000011","00000010","00000000","00002aaa"],["55555555","00000011","00000011","00000000","00002aaa"],["55555555","00000011","0000001e","00000000","00002aaa"],["55555555","00000011","0000001f","00000000","00002aaa"],["55555555","00000011","00000020","00000000","00002aaa"],["55555555","00000011","00000021","00000000","00002aaa"],["55555555","00000011","00000040","00000000","00002aaa"],["55555555","00000011","ffffffff","00000000","00002aaa"],["55555555","0000001e","00000000","00000000","00000000"],["55555555","0000001e","00000001","00000000","00000001"],["55555555","0000001e","00000002","00000000","00000001"],["55555555","0000001e","0000000f","00000000","00000001"],["55555555","0000001e","00000010","00000000","00000001"],["55555555","0000001e","00000011","00000000","00000001"],["55555555","0000001e","0000001e","00000000","00000001"],["55555555","0000001e","0000001f","00000000","00000001"],["55555555","0000001e","00000020","00000000","00000001"],["55555555","0000001e","00000021","00000000","00000001"],["55555555","0000001e","00000040","00000000","00000001"],["55555555","0000001e","ffffffff","00000000","00000001"],["55555555","0000001f","00000000","00000000","00000000"],["55555555","0000001f","00000001","00000000","00000000"],["55555555","0000001f","00000002","00000000","00000000"],["55555555","0000001f","0000000f","00000000","00000000"],["55555555","0000001f","00000010","00000000","00000000"],["55555555","0000001f","00000011","00000000","00000000"],["55555555","0000001f","0000001e","00000000","00000000"],["55555555","0000001f","0000001f","00000000","00000000"],["55555555","0000001f","00000020","00000000","00000000"],["55555555","0000001f","00000021","00000000","00000000"],["55555555","0000001f","00000040","00000000","00000000"],["55555555","0000001f","ffffffff","00000000","00000000"],["55555555","00000020","00000000","00000000","00000000"],["55555555","00000020","00000001","00000000","00000000"],["55555555","00000020","00000002","00000000","00000000"],["55555555","00000020","0000000f","00000000","00000000"],["55555555","00000020","00000010","00000000","00000000"],["55555555","00000020","00000011","00000000","00000000"],["55555555","00000020","0000001e","00000000","00000000"],["55555555","00000020","0000001f","00000000","00000000"],["55555555","00000020","00000020","00000000","00000000"],["55555555","00000020","00000021","00000000","00000000"],["55555555","00000020","00000040","00000000","00000000"],["55555555","00000020","ffffffff","00000000","00000000"],["55555555","00000021","00000000","00000000","00000000"],["55555555","00000021","00000001","00000000","00000000"],["55555555","00000021","00000002","00000000","00000000"],["55555555","00000021","0000000f","00000000","00000000"],["55555555","00000021","00000010","00000000","00000000"],["55555555","00000021","00000011","00000000","00000000"],["55555555","00000021","0000001e","00000000","00000000"],["55555555","00000021","0000001f","00000000","00000000"],["55555555","00000021","00000020","00000000","00000000"],["55555555","00000021","00000021","00000000","00000000"],["55555555","00000021","00000040","00000000","00000000"],["55555555","00000021","ffffffff","00000000","00000000"],["55555555","00000040","00000000","00000000","00000000"],["55555555","00000040","00000001","00000000","00000000"],["55555555","00000040","00000002","00000000","00000000"],["55555555","00000040","0000000f","00000000","00000000"],["55555555","00000040","00000010","00000000","00000000"],["55555555","00000040","00000011","00000000","00000000"],["55555555","00000040","0000001e","00000000","00000000"],["55555555","00000040","0000001f","00000000","00000000"],["55555555","00000040","00000020","00000000","00000000"],["55555555","00000040","00000021","00000000","00000000"],["55555555","00000040","00000040","00000000","00000000"],["55555555","00000040","ffffffff","00000000","00000000"],["55555555","ffffffff","00000000","00000000","00000000"],["55555555","ffffffff","00000001","00000000","00000000"],["55555555","ffffffff","00000002","00000000","00000000"],["55555555","ffffffff","0000000f","00000000","00000000"],["55555555","ffffffff","00000010","00000000","00000000"],["55555555","ffffffff","00000011","00000000","00000000"],["55555555","ffffffff","0000001e","00000000","00000000"],["55555555","ffffffff","0000001f","00000000","00000000"],["55555555","ffffffff","00000020","00000000","00000000"],["55555555","ffffffff","00000021","00000000","00000000"],["55555555","ffffffff","00000040","00000000","00000000"],["55555555","ffffffff","ffffffff","00000000","00000000"]]} +{"op":"extract_bits_i32","code":44,"wgsl":"extractBits(ia, b, c)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000000","00000001","00000000","00000000"],["00000000","00000000","00000002","00000000","00000000"],["00000000","00000000","0000000f","00000000","00000000"],["00000000","00000000","00000010","00000000","00000000"],["00000000","00000000","00000011","00000000","00000000"],["00000000","00000000","0000001e","00000000","00000000"],["00000000","00000000","0000001f","00000000","00000000"],["00000000","00000000","00000020","00000000","00000000"],["00000000","00000000","00000021","00000000","00000000"],["00000000","00000000","00000040","00000000","00000000"],["00000000","00000000","ffffffff","00000000","00000000"],["00000000","00000001","00000000","00000000","00000000"],["00000000","00000001","00000001","00000000","00000000"],["00000000","00000001","00000002","00000000","00000000"],["00000000","00000001","0000000f","00000000","00000000"],["00000000","00000001","00000010","00000000","00000000"],["00000000","00000001","00000011","00000000","00000000"],["00000000","00000001","0000001e","00000000","00000000"],["00000000","00000001","0000001f","00000000","00000000"],["00000000","00000001","00000020","00000000","00000000"],["00000000","00000001","00000021","00000000","00000000"],["00000000","00000001","00000040","00000000","00000000"],["00000000","00000001","ffffffff","00000000","00000000"],["00000000","00000002","00000000","00000000","00000000"],["00000000","00000002","00000001","00000000","00000000"],["00000000","00000002","00000002","00000000","00000000"],["00000000","00000002","0000000f","00000000","00000000"],["00000000","00000002","00000010","00000000","00000000"],["00000000","00000002","00000011","00000000","00000000"],["00000000","00000002","0000001e","00000000","00000000"],["00000000","00000002","0000001f","00000000","00000000"],["00000000","00000002","00000020","00000000","00000000"],["00000000","00000002","00000021","00000000","00000000"],["00000000","00000002","00000040","00000000","00000000"],["00000000","00000002","ffffffff","00000000","00000000"],["00000000","0000000f","00000000","00000000","00000000"],["00000000","0000000f","00000001","00000000","00000000"],["00000000","0000000f","00000002","00000000","00000000"],["00000000","0000000f","0000000f","00000000","00000000"],["00000000","0000000f","00000010","00000000","00000000"],["00000000","0000000f","00000011","00000000","00000000"],["00000000","0000000f","0000001e","00000000","00000000"],["00000000","0000000f","0000001f","00000000","00000000"],["00000000","0000000f","00000020","00000000","00000000"],["00000000","0000000f","00000021","00000000","00000000"],["00000000","0000000f","00000040","00000000","00000000"],["00000000","0000000f","ffffffff","00000000","00000000"],["00000000","00000010","00000000","00000000","00000000"],["00000000","00000010","00000001","00000000","00000000"],["00000000","00000010","00000002","00000000","00000000"],["00000000","00000010","0000000f","00000000","00000000"],["00000000","00000010","00000010","00000000","00000000"],["00000000","00000010","00000011","00000000","00000000"],["00000000","00000010","0000001e","00000000","00000000"],["00000000","00000010","0000001f","00000000","00000000"],["00000000","00000010","00000020","00000000","00000000"],["00000000","00000010","00000021","00000000","00000000"],["00000000","00000010","00000040","00000000","00000000"],["00000000","00000010","ffffffff","00000000","00000000"],["00000000","00000011","00000000","00000000","00000000"],["00000000","00000011","00000001","00000000","00000000"],["00000000","00000011","00000002","00000000","00000000"],["00000000","00000011","0000000f","00000000","00000000"],["00000000","00000011","00000010","00000000","00000000"],["00000000","00000011","00000011","00000000","00000000"],["00000000","00000011","0000001e","00000000","00000000"],["00000000","00000011","0000001f","00000000","00000000"],["00000000","00000011","00000020","00000000","00000000"],["00000000","00000011","00000021","00000000","00000000"],["00000000","00000011","00000040","00000000","00000000"],["00000000","00000011","ffffffff","00000000","00000000"],["00000000","0000001e","00000000","00000000","00000000"],["00000000","0000001e","00000001","00000000","00000000"],["00000000","0000001e","00000002","00000000","00000000"],["00000000","0000001e","0000000f","00000000","00000000"],["00000000","0000001e","00000010","00000000","00000000"],["00000000","0000001e","00000011","00000000","00000000"],["00000000","0000001e","0000001e","00000000","00000000"],["00000000","0000001e","0000001f","00000000","00000000"],["00000000","0000001e","00000020","00000000","00000000"],["00000000","0000001e","00000021","00000000","00000000"],["00000000","0000001e","00000040","00000000","00000000"],["00000000","0000001e","ffffffff","00000000","00000000"],["00000000","0000001f","00000000","00000000","00000000"],["00000000","0000001f","00000001","00000000","00000000"],["00000000","0000001f","00000002","00000000","00000000"],["00000000","0000001f","0000000f","00000000","00000000"],["00000000","0000001f","00000010","00000000","00000000"],["00000000","0000001f","00000011","00000000","00000000"],["00000000","0000001f","0000001e","00000000","00000000"],["00000000","0000001f","0000001f","00000000","00000000"],["00000000","0000001f","00000020","00000000","00000000"],["00000000","0000001f","00000021","00000000","00000000"],["00000000","0000001f","00000040","00000000","00000000"],["00000000","0000001f","ffffffff","00000000","00000000"],["00000000","00000020","00000000","00000000","00000000"],["00000000","00000020","00000001","00000000","00000000"],["00000000","00000020","00000002","00000000","00000000"],["00000000","00000020","0000000f","00000000","00000000"],["00000000","00000020","00000010","00000000","00000000"],["00000000","00000020","00000011","00000000","00000000"],["00000000","00000020","0000001e","00000000","00000000"],["00000000","00000020","0000001f","00000000","00000000"],["00000000","00000020","00000020","00000000","00000000"],["00000000","00000020","00000021","00000000","00000000"],["00000000","00000020","00000040","00000000","00000000"],["00000000","00000020","ffffffff","00000000","00000000"],["00000000","00000021","00000000","00000000","00000000"],["00000000","00000021","00000001","00000000","00000000"],["00000000","00000021","00000002","00000000","00000000"],["00000000","00000021","0000000f","00000000","00000000"],["00000000","00000021","00000010","00000000","00000000"],["00000000","00000021","00000011","00000000","00000000"],["00000000","00000021","0000001e","00000000","00000000"],["00000000","00000021","0000001f","00000000","00000000"],["00000000","00000021","00000020","00000000","00000000"],["00000000","00000021","00000021","00000000","00000000"],["00000000","00000021","00000040","00000000","00000000"],["00000000","00000021","ffffffff","00000000","00000000"],["00000000","00000040","00000000","00000000","00000000"],["00000000","00000040","00000001","00000000","00000000"],["00000000","00000040","00000002","00000000","00000000"],["00000000","00000040","0000000f","00000000","00000000"],["00000000","00000040","00000010","00000000","00000000"],["00000000","00000040","00000011","00000000","00000000"],["00000000","00000040","0000001e","00000000","00000000"],["00000000","00000040","0000001f","00000000","00000000"],["00000000","00000040","00000020","00000000","00000000"],["00000000","00000040","00000021","00000000","00000000"],["00000000","00000040","00000040","00000000","00000000"],["00000000","00000040","ffffffff","00000000","00000000"],["00000000","ffffffff","00000000","00000000","00000000"],["00000000","ffffffff","00000001","00000000","00000000"],["00000000","ffffffff","00000002","00000000","00000000"],["00000000","ffffffff","0000000f","00000000","00000000"],["00000000","ffffffff","00000010","00000000","00000000"],["00000000","ffffffff","00000011","00000000","00000000"],["00000000","ffffffff","0000001e","00000000","00000000"],["00000000","ffffffff","0000001f","00000000","00000000"],["00000000","ffffffff","00000020","00000000","00000000"],["00000000","ffffffff","00000021","00000000","00000000"],["00000000","ffffffff","00000040","00000000","00000000"],["00000000","ffffffff","ffffffff","00000000","00000000"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000000","00000001","00000000","ffffffff"],["00000001","00000000","00000002","00000000","00000001"],["00000001","00000000","0000000f","00000000","00000001"],["00000001","00000000","00000010","00000000","00000001"],["00000001","00000000","00000011","00000000","00000001"],["00000001","00000000","0000001e","00000000","00000001"],["00000001","00000000","0000001f","00000000","00000001"],["00000001","00000000","00000020","00000000","00000001"],["00000001","00000000","00000021","00000000","00000001"],["00000001","00000000","00000040","00000000","00000001"],["00000001","00000000","ffffffff","00000000","00000001"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000001","00000001","00000000","00000000"],["00000001","00000001","00000002","00000000","00000000"],["00000001","00000001","0000000f","00000000","00000000"],["00000001","00000001","00000010","00000000","00000000"],["00000001","00000001","00000011","00000000","00000000"],["00000001","00000001","0000001e","00000000","00000000"],["00000001","00000001","0000001f","00000000","00000000"],["00000001","00000001","00000020","00000000","00000000"],["00000001","00000001","00000021","00000000","00000000"],["00000001","00000001","00000040","00000000","00000000"],["00000001","00000001","ffffffff","00000000","00000000"],["00000001","00000002","00000000","00000000","00000000"],["00000001","00000002","00000001","00000000","00000000"],["00000001","00000002","00000002","00000000","00000000"],["00000001","00000002","0000000f","00000000","00000000"],["00000001","00000002","00000010","00000000","00000000"],["00000001","00000002","00000011","00000000","00000000"],["00000001","00000002","0000001e","00000000","00000000"],["00000001","00000002","0000001f","00000000","00000000"],["00000001","00000002","00000020","00000000","00000000"],["00000001","00000002","00000021","00000000","00000000"],["00000001","00000002","00000040","00000000","00000000"],["00000001","00000002","ffffffff","00000000","00000000"],["00000001","0000000f","00000000","00000000","00000000"],["00000001","0000000f","00000001","00000000","00000000"],["00000001","0000000f","00000002","00000000","00000000"],["00000001","0000000f","0000000f","00000000","00000000"],["00000001","0000000f","00000010","00000000","00000000"],["00000001","0000000f","00000011","00000000","00000000"],["00000001","0000000f","0000001e","00000000","00000000"],["00000001","0000000f","0000001f","00000000","00000000"],["00000001","0000000f","00000020","00000000","00000000"],["00000001","0000000f","00000021","00000000","00000000"],["00000001","0000000f","00000040","00000000","00000000"],["00000001","0000000f","ffffffff","00000000","00000000"],["00000001","00000010","00000000","00000000","00000000"],["00000001","00000010","00000001","00000000","00000000"],["00000001","00000010","00000002","00000000","00000000"],["00000001","00000010","0000000f","00000000","00000000"],["00000001","00000010","00000010","00000000","00000000"],["00000001","00000010","00000011","00000000","00000000"],["00000001","00000010","0000001e","00000000","00000000"],["00000001","00000010","0000001f","00000000","00000000"],["00000001","00000010","00000020","00000000","00000000"],["00000001","00000010","00000021","00000000","00000000"],["00000001","00000010","00000040","00000000","00000000"],["00000001","00000010","ffffffff","00000000","00000000"],["00000001","00000011","00000000","00000000","00000000"],["00000001","00000011","00000001","00000000","00000000"],["00000001","00000011","00000002","00000000","00000000"],["00000001","00000011","0000000f","00000000","00000000"],["00000001","00000011","00000010","00000000","00000000"],["00000001","00000011","00000011","00000000","00000000"],["00000001","00000011","0000001e","00000000","00000000"],["00000001","00000011","0000001f","00000000","00000000"],["00000001","00000011","00000020","00000000","00000000"],["00000001","00000011","00000021","00000000","00000000"],["00000001","00000011","00000040","00000000","00000000"],["00000001","00000011","ffffffff","00000000","00000000"],["00000001","0000001e","00000000","00000000","00000000"],["00000001","0000001e","00000001","00000000","00000000"],["00000001","0000001e","00000002","00000000","00000000"],["00000001","0000001e","0000000f","00000000","00000000"],["00000001","0000001e","00000010","00000000","00000000"],["00000001","0000001e","00000011","00000000","00000000"],["00000001","0000001e","0000001e","00000000","00000000"],["00000001","0000001e","0000001f","00000000","00000000"],["00000001","0000001e","00000020","00000000","00000000"],["00000001","0000001e","00000021","00000000","00000000"],["00000001","0000001e","00000040","00000000","00000000"],["00000001","0000001e","ffffffff","00000000","00000000"],["00000001","0000001f","00000000","00000000","00000000"],["00000001","0000001f","00000001","00000000","00000000"],["00000001","0000001f","00000002","00000000","00000000"],["00000001","0000001f","0000000f","00000000","00000000"],["00000001","0000001f","00000010","00000000","00000000"],["00000001","0000001f","00000011","00000000","00000000"],["00000001","0000001f","0000001e","00000000","00000000"],["00000001","0000001f","0000001f","00000000","00000000"],["00000001","0000001f","00000020","00000000","00000000"],["00000001","0000001f","00000021","00000000","00000000"],["00000001","0000001f","00000040","00000000","00000000"],["00000001","0000001f","ffffffff","00000000","00000000"],["00000001","00000020","00000000","00000000","00000000"],["00000001","00000020","00000001","00000000","00000000"],["00000001","00000020","00000002","00000000","00000000"],["00000001","00000020","0000000f","00000000","00000000"],["00000001","00000020","00000010","00000000","00000000"],["00000001","00000020","00000011","00000000","00000000"],["00000001","00000020","0000001e","00000000","00000000"],["00000001","00000020","0000001f","00000000","00000000"],["00000001","00000020","00000020","00000000","00000000"],["00000001","00000020","00000021","00000000","00000000"],["00000001","00000020","00000040","00000000","00000000"],["00000001","00000020","ffffffff","00000000","00000000"],["00000001","00000021","00000000","00000000","00000000"],["00000001","00000021","00000001","00000000","00000000"],["00000001","00000021","00000002","00000000","00000000"],["00000001","00000021","0000000f","00000000","00000000"],["00000001","00000021","00000010","00000000","00000000"],["00000001","00000021","00000011","00000000","00000000"],["00000001","00000021","0000001e","00000000","00000000"],["00000001","00000021","0000001f","00000000","00000000"],["00000001","00000021","00000020","00000000","00000000"],["00000001","00000021","00000021","00000000","00000000"],["00000001","00000021","00000040","00000000","00000000"],["00000001","00000021","ffffffff","00000000","00000000"],["00000001","00000040","00000000","00000000","00000000"],["00000001","00000040","00000001","00000000","00000000"],["00000001","00000040","00000002","00000000","00000000"],["00000001","00000040","0000000f","00000000","00000000"],["00000001","00000040","00000010","00000000","00000000"],["00000001","00000040","00000011","00000000","00000000"],["00000001","00000040","0000001e","00000000","00000000"],["00000001","00000040","0000001f","00000000","00000000"],["00000001","00000040","00000020","00000000","00000000"],["00000001","00000040","00000021","00000000","00000000"],["00000001","00000040","00000040","00000000","00000000"],["00000001","00000040","ffffffff","00000000","00000000"],["00000001","ffffffff","00000000","00000000","00000000"],["00000001","ffffffff","00000001","00000000","00000000"],["00000001","ffffffff","00000002","00000000","00000000"],["00000001","ffffffff","0000000f","00000000","00000000"],["00000001","ffffffff","00000010","00000000","00000000"],["00000001","ffffffff","00000011","00000000","00000000"],["00000001","ffffffff","0000001e","00000000","00000000"],["00000001","ffffffff","0000001f","00000000","00000000"],["00000001","ffffffff","00000020","00000000","00000000"],["00000001","ffffffff","00000021","00000000","00000000"],["00000001","ffffffff","00000040","00000000","00000000"],["00000001","ffffffff","ffffffff","00000000","00000000"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000000","00000001","00000000","00000000"],["80000000","00000000","00000002","00000000","00000000"],["80000000","00000000","0000000f","00000000","00000000"],["80000000","00000000","00000010","00000000","00000000"],["80000000","00000000","00000011","00000000","00000000"],["80000000","00000000","0000001e","00000000","00000000"],["80000000","00000000","0000001f","00000000","00000000"],["80000000","00000000","00000020","00000000","80000000"],["80000000","00000000","00000021","00000000","80000000"],["80000000","00000000","00000040","00000000","80000000"],["80000000","00000000","ffffffff","00000000","80000000"],["80000000","00000001","00000000","00000000","00000000"],["80000000","00000001","00000001","00000000","00000000"],["80000000","00000001","00000002","00000000","00000000"],["80000000","00000001","0000000f","00000000","00000000"],["80000000","00000001","00000010","00000000","00000000"],["80000000","00000001","00000011","00000000","00000000"],["80000000","00000001","0000001e","00000000","00000000"],["80000000","00000001","0000001f","00000000","c0000000"],["80000000","00000001","00000020","00000000","c0000000"],["80000000","00000001","00000021","00000000","c0000000"],["80000000","00000001","00000040","00000000","c0000000"],["80000000","00000001","ffffffff","00000000","c0000000"],["80000000","00000002","00000000","00000000","00000000"],["80000000","00000002","00000001","00000000","00000000"],["80000000","00000002","00000002","00000000","00000000"],["80000000","00000002","0000000f","00000000","00000000"],["80000000","00000002","00000010","00000000","00000000"],["80000000","00000002","00000011","00000000","00000000"],["80000000","00000002","0000001e","00000000","e0000000"],["80000000","00000002","0000001f","00000000","e0000000"],["80000000","00000002","00000020","00000000","e0000000"],["80000000","00000002","00000021","00000000","e0000000"],["80000000","00000002","00000040","00000000","e0000000"],["80000000","00000002","ffffffff","00000000","e0000000"],["80000000","0000000f","00000000","00000000","00000000"],["80000000","0000000f","00000001","00000000","00000000"],["80000000","0000000f","00000002","00000000","00000000"],["80000000","0000000f","0000000f","00000000","00000000"],["80000000","0000000f","00000010","00000000","00000000"],["80000000","0000000f","00000011","00000000","ffff0000"],["80000000","0000000f","0000001e","00000000","ffff0000"],["80000000","0000000f","0000001f","00000000","ffff0000"],["80000000","0000000f","00000020","00000000","ffff0000"],["80000000","0000000f","00000021","00000000","ffff0000"],["80000000","0000000f","00000040","00000000","ffff0000"],["80000000","0000000f","ffffffff","00000000","ffff0000"],["80000000","00000010","00000000","00000000","00000000"],["80000000","00000010","00000001","00000000","00000000"],["80000000","00000010","00000002","00000000","00000000"],["80000000","00000010","0000000f","00000000","00000000"],["80000000","00000010","00000010","00000000","ffff8000"],["80000000","00000010","00000011","00000000","ffff8000"],["80000000","00000010","0000001e","00000000","ffff8000"],["80000000","00000010","0000001f","00000000","ffff8000"],["80000000","00000010","00000020","00000000","ffff8000"],["80000000","00000010","00000021","00000000","ffff8000"],["80000000","00000010","00000040","00000000","ffff8000"],["80000000","00000010","ffffffff","00000000","ffff8000"],["80000000","00000011","00000000","00000000","00000000"],["80000000","00000011","00000001","00000000","00000000"],["80000000","00000011","00000002","00000000","00000000"],["80000000","00000011","0000000f","00000000","ffffc000"],["80000000","00000011","00000010","00000000","ffffc000"],["80000000","00000011","00000011","00000000","ffffc000"],["80000000","00000011","0000001e","00000000","ffffc000"],["80000000","00000011","0000001f","00000000","ffffc000"],["80000000","00000011","00000020","00000000","ffffc000"],["80000000","00000011","00000021","00000000","ffffc000"],["80000000","00000011","00000040","00000000","ffffc000"],["80000000","00000011","ffffffff","00000000","ffffc000"],["80000000","0000001e","00000000","00000000","00000000"],["80000000","0000001e","00000001","00000000","00000000"],["80000000","0000001e","00000002","00000000","fffffffe"],["80000000","0000001e","0000000f","00000000","fffffffe"],["80000000","0000001e","00000010","00000000","fffffffe"],["80000000","0000001e","00000011","00000000","fffffffe"],["80000000","0000001e","0000001e","00000000","fffffffe"],["80000000","0000001e","0000001f","00000000","fffffffe"],["80000000","0000001e","00000020","00000000","fffffffe"],["80000000","0000001e","00000021","00000000","fffffffe"],["80000000","0000001e","00000040","00000000","fffffffe"],["80000000","0000001e","ffffffff","00000000","fffffffe"],["80000000","0000001f","00000000","00000000","00000000"],["80000000","0000001f","00000001","00000000","ffffffff"],["80000000","0000001f","00000002","00000000","ffffffff"],["80000000","0000001f","0000000f","00000000","ffffffff"],["80000000","0000001f","00000010","00000000","ffffffff"],["80000000","0000001f","00000011","00000000","ffffffff"],["80000000","0000001f","0000001e","00000000","ffffffff"],["80000000","0000001f","0000001f","00000000","ffffffff"],["80000000","0000001f","00000020","00000000","ffffffff"],["80000000","0000001f","00000021","00000000","ffffffff"],["80000000","0000001f","00000040","00000000","ffffffff"],["80000000","0000001f","ffffffff","00000000","ffffffff"],["80000000","00000020","00000000","00000000","00000000"],["80000000","00000020","00000001","00000000","00000000"],["80000000","00000020","00000002","00000000","00000000"],["80000000","00000020","0000000f","00000000","00000000"],["80000000","00000020","00000010","00000000","00000000"],["80000000","00000020","00000011","00000000","00000000"],["80000000","00000020","0000001e","00000000","00000000"],["80000000","00000020","0000001f","00000000","00000000"],["80000000","00000020","00000020","00000000","00000000"],["80000000","00000020","00000021","00000000","00000000"],["80000000","00000020","00000040","00000000","00000000"],["80000000","00000020","ffffffff","00000000","00000000"],["80000000","00000021","00000000","00000000","00000000"],["80000000","00000021","00000001","00000000","00000000"],["80000000","00000021","00000002","00000000","00000000"],["80000000","00000021","0000000f","00000000","00000000"],["80000000","00000021","00000010","00000000","00000000"],["80000000","00000021","00000011","00000000","00000000"],["80000000","00000021","0000001e","00000000","00000000"],["80000000","00000021","0000001f","00000000","00000000"],["80000000","00000021","00000020","00000000","00000000"],["80000000","00000021","00000021","00000000","00000000"],["80000000","00000021","00000040","00000000","00000000"],["80000000","00000021","ffffffff","00000000","00000000"],["80000000","00000040","00000000","00000000","00000000"],["80000000","00000040","00000001","00000000","00000000"],["80000000","00000040","00000002","00000000","00000000"],["80000000","00000040","0000000f","00000000","00000000"],["80000000","00000040","00000010","00000000","00000000"],["80000000","00000040","00000011","00000000","00000000"],["80000000","00000040","0000001e","00000000","00000000"],["80000000","00000040","0000001f","00000000","00000000"],["80000000","00000040","00000020","00000000","00000000"],["80000000","00000040","00000021","00000000","00000000"],["80000000","00000040","00000040","00000000","00000000"],["80000000","00000040","ffffffff","00000000","00000000"],["80000000","ffffffff","00000000","00000000","00000000"],["80000000","ffffffff","00000001","00000000","00000000"],["80000000","ffffffff","00000002","00000000","00000000"],["80000000","ffffffff","0000000f","00000000","00000000"],["80000000","ffffffff","00000010","00000000","00000000"],["80000000","ffffffff","00000011","00000000","00000000"],["80000000","ffffffff","0000001e","00000000","00000000"],["80000000","ffffffff","0000001f","00000000","00000000"],["80000000","ffffffff","00000020","00000000","00000000"],["80000000","ffffffff","00000021","00000000","00000000"],["80000000","ffffffff","00000040","00000000","00000000"],["80000000","ffffffff","ffffffff","00000000","00000000"],["deadbeef","00000000","00000000","00000000","00000000"],["deadbeef","00000000","00000001","00000000","ffffffff"],["deadbeef","00000000","00000002","00000000","ffffffff"],["deadbeef","00000000","0000000f","00000000","00003eef"],["deadbeef","00000000","00000010","00000000","ffffbeef"],["deadbeef","00000000","00000011","00000000","ffffbeef"],["deadbeef","00000000","0000001e","00000000","1eadbeef"],["deadbeef","00000000","0000001f","00000000","deadbeef"],["deadbeef","00000000","00000020","00000000","deadbeef"],["deadbeef","00000000","00000021","00000000","deadbeef"],["deadbeef","00000000","00000040","00000000","deadbeef"],["deadbeef","00000000","ffffffff","00000000","deadbeef"],["deadbeef","00000001","00000000","00000000","00000000"],["deadbeef","00000001","00000001","00000000","ffffffff"],["deadbeef","00000001","00000002","00000000","ffffffff"],["deadbeef","00000001","0000000f","00000000","ffffdf77"],["deadbeef","00000001","00000010","00000000","ffffdf77"],["deadbeef","00000001","00000011","00000000","0000df77"],["deadbeef","00000001","0000001e","00000000","ef56df77"],["deadbeef","00000001","0000001f","00000000","ef56df77"],["deadbeef","00000001","00000020","00000000","ef56df77"],["deadbeef","00000001","00000021","00000000","ef56df77"],["deadbeef","00000001","00000040","00000000","ef56df77"],["deadbeef","00000001","ffffffff","00000000","ef56df77"],["deadbeef","00000002","00000000","00000000","00000000"],["deadbeef","00000002","00000001","00000000","ffffffff"],["deadbeef","00000002","00000002","00000000","ffffffff"],["deadbeef","00000002","0000000f","00000000","ffffefbb"],["deadbeef","00000002","00000010","00000000","00006fbb"],["deadbeef","00000002","00000011","00000000","ffff6fbb"],["deadbeef","00000002","0000001e","00000000","f7ab6fbb"],["deadbeef","00000002","0000001f","00000000","f7ab6fbb"],["deadbeef","00000002","00000020","00000000","f7ab6fbb"],["deadbeef","00000002","00000021","00000000","f7ab6fbb"],["deadbeef","00000002","00000040","00000000","f7ab6fbb"],["deadbeef","00000002","ffffffff","00000000","f7ab6fbb"],["deadbeef","0000000f","00000000","00000000","00000000"],["deadbeef","0000000f","00000001","00000000","ffffffff"],["deadbeef","0000000f","00000002","00000000","ffffffff"],["deadbeef","0000000f","0000000f","00000000","00003d5b"],["deadbeef","0000000f","00000010","00000000","ffffbd5b"],["deadbeef","0000000f","00000011","00000000","ffffbd5b"],["deadbeef","0000000f","0000001e","00000000","ffffbd5b"],["deadbeef","0000000f","0000001f","00000000","ffffbd5b"],["deadbeef","0000000f","00000020","00000000","ffffbd5b"],["deadbeef","0000000f","00000021","00000000","ffffbd5b"],["deadbeef","0000000f","00000040","00000000","ffffbd5b"],["deadbeef","0000000f","ffffffff","00000000","ffffbd5b"],["deadbeef","00000010","00000000","00000000","00000000"],["deadbeef","00000010","00000001","00000000","ffffffff"],["deadbeef","00000010","00000002","00000000","00000001"],["deadbeef","00000010","0000000f","00000000","ffffdead"],["deadbeef","00000010","00000010","00000000","ffffdead"],["deadbeef","00000010","00000011","00000000","ffffdead"],["deadbeef","00000010","0000001e","00000000","ffffdead"],["deadbeef","00000010","0000001f","00000000","ffffdead"],["deadbeef","00000010","00000020","00000000","ffffdead"],["deadbeef","00000010","00000021","00000000","ffffdead"],["deadbeef","00000010","00000040","00000000","ffffdead"],["deadbeef","00000010","ffffffff","00000000","ffffdead"],["deadbeef","00000011","00000000","00000000","00000000"],["deadbeef","00000011","00000001","00000000","00000000"],["deadbeef","00000011","00000002","00000000","fffffffe"],["deadbeef","00000011","0000000f","00000000","ffffef56"],["deadbeef","00000011","00000010","00000000","ffffef56"],["deadbeef","00000011","00000011","00000000","ffffef56"],["deadbeef","00000011","0000001e","00000000","ffffef56"],["deadbeef","00000011","0000001f","00000000","ffffef56"],["deadbeef","00000011","00000020","00000000","ffffef56"],["deadbeef","00000011","00000021","00000000","ffffef56"],["deadbeef","00000011","00000040","00000000","ffffef56"],["deadbeef","00000011","ffffffff","00000000","ffffef56"],["deadbeef","0000001e","00000000","00000000","00000000"],["deadbeef","0000001e","00000001","00000000","ffffffff"],["deadbeef","0000001e","00000002","00000000","ffffffff"],["deadbeef","0000001e","0000000f","00000000","ffffffff"],["deadbeef","0000001e","00000010","00000000","ffffffff"],["deadbeef","0000001e","00000011","00000000","ffffffff"],["deadbeef","0000001e","0000001e","00000000","ffffffff"],["deadbeef","0000001e","0000001f","00000000","ffffffff"],["deadbeef","0000001e","00000020","00000000","ffffffff"],["deadbeef","0000001e","00000021","00000000","ffffffff"],["deadbeef","0000001e","00000040","00000000","ffffffff"],["deadbeef","0000001e","ffffffff","00000000","ffffffff"],["deadbeef","0000001f","00000000","00000000","00000000"],["deadbeef","0000001f","00000001","00000000","ffffffff"],["deadbeef","0000001f","00000002","00000000","ffffffff"],["deadbeef","0000001f","0000000f","00000000","ffffffff"],["deadbeef","0000001f","00000010","00000000","ffffffff"],["deadbeef","0000001f","00000011","00000000","ffffffff"],["deadbeef","0000001f","0000001e","00000000","ffffffff"],["deadbeef","0000001f","0000001f","00000000","ffffffff"],["deadbeef","0000001f","00000020","00000000","ffffffff"],["deadbeef","0000001f","00000021","00000000","ffffffff"],["deadbeef","0000001f","00000040","00000000","ffffffff"],["deadbeef","0000001f","ffffffff","00000000","ffffffff"],["deadbeef","00000020","00000000","00000000","00000000"],["deadbeef","00000020","00000001","00000000","00000000"],["deadbeef","00000020","00000002","00000000","00000000"],["deadbeef","00000020","0000000f","00000000","00000000"],["deadbeef","00000020","00000010","00000000","00000000"],["deadbeef","00000020","00000011","00000000","00000000"],["deadbeef","00000020","0000001e","00000000","00000000"],["deadbeef","00000020","0000001f","00000000","00000000"],["deadbeef","00000020","00000020","00000000","00000000"],["deadbeef","00000020","00000021","00000000","00000000"],["deadbeef","00000020","00000040","00000000","00000000"],["deadbeef","00000020","ffffffff","00000000","00000000"],["deadbeef","00000021","00000000","00000000","00000000"],["deadbeef","00000021","00000001","00000000","00000000"],["deadbeef","00000021","00000002","00000000","00000000"],["deadbeef","00000021","0000000f","00000000","00000000"],["deadbeef","00000021","00000010","00000000","00000000"],["deadbeef","00000021","00000011","00000000","00000000"],["deadbeef","00000021","0000001e","00000000","00000000"],["deadbeef","00000021","0000001f","00000000","00000000"],["deadbeef","00000021","00000020","00000000","00000000"],["deadbeef","00000021","00000021","00000000","00000000"],["deadbeef","00000021","00000040","00000000","00000000"],["deadbeef","00000021","ffffffff","00000000","00000000"],["deadbeef","00000040","00000000","00000000","00000000"],["deadbeef","00000040","00000001","00000000","00000000"],["deadbeef","00000040","00000002","00000000","00000000"],["deadbeef","00000040","0000000f","00000000","00000000"],["deadbeef","00000040","00000010","00000000","00000000"],["deadbeef","00000040","00000011","00000000","00000000"],["deadbeef","00000040","0000001e","00000000","00000000"],["deadbeef","00000040","0000001f","00000000","00000000"],["deadbeef","00000040","00000020","00000000","00000000"],["deadbeef","00000040","00000021","00000000","00000000"],["deadbeef","00000040","00000040","00000000","00000000"],["deadbeef","00000040","ffffffff","00000000","00000000"],["deadbeef","ffffffff","00000000","00000000","00000000"],["deadbeef","ffffffff","00000001","00000000","00000000"],["deadbeef","ffffffff","00000002","00000000","00000000"],["deadbeef","ffffffff","0000000f","00000000","00000000"],["deadbeef","ffffffff","00000010","00000000","00000000"],["deadbeef","ffffffff","00000011","00000000","00000000"],["deadbeef","ffffffff","0000001e","00000000","00000000"],["deadbeef","ffffffff","0000001f","00000000","00000000"],["deadbeef","ffffffff","00000020","00000000","00000000"],["deadbeef","ffffffff","00000021","00000000","00000000"],["deadbeef","ffffffff","00000040","00000000","00000000"],["deadbeef","ffffffff","ffffffff","00000000","00000000"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000000","00000001","00000000","ffffffff"],["7fffffff","00000000","00000002","00000000","ffffffff"],["7fffffff","00000000","0000000f","00000000","ffffffff"],["7fffffff","00000000","00000010","00000000","ffffffff"],["7fffffff","00000000","00000011","00000000","ffffffff"],["7fffffff","00000000","0000001e","00000000","ffffffff"],["7fffffff","00000000","0000001f","00000000","ffffffff"],["7fffffff","00000000","00000020","00000000","7fffffff"],["7fffffff","00000000","00000021","00000000","7fffffff"],["7fffffff","00000000","00000040","00000000","7fffffff"],["7fffffff","00000000","ffffffff","00000000","7fffffff"],["7fffffff","00000001","00000000","00000000","00000000"],["7fffffff","00000001","00000001","00000000","ffffffff"],["7fffffff","00000001","00000002","00000000","ffffffff"],["7fffffff","00000001","0000000f","00000000","ffffffff"],["7fffffff","00000001","00000010","00000000","ffffffff"],["7fffffff","00000001","00000011","00000000","ffffffff"],["7fffffff","00000001","0000001e","00000000","ffffffff"],["7fffffff","00000001","0000001f","00000000","3fffffff"],["7fffffff","00000001","00000020","00000000","3fffffff"],["7fffffff","00000001","00000021","00000000","3fffffff"],["7fffffff","00000001","00000040","00000000","3fffffff"],["7fffffff","00000001","ffffffff","00000000","3fffffff"],["7fffffff","00000002","00000000","00000000","00000000"],["7fffffff","00000002","00000001","00000000","ffffffff"],["7fffffff","00000002","00000002","00000000","ffffffff"],["7fffffff","00000002","0000000f","00000000","ffffffff"],["7fffffff","00000002","00000010","00000000","ffffffff"],["7fffffff","00000002","00000011","00000000","ffffffff"],["7fffffff","00000002","0000001e","00000000","1fffffff"],["7fffffff","00000002","0000001f","00000000","1fffffff"],["7fffffff","00000002","00000020","00000000","1fffffff"],["7fffffff","00000002","00000021","00000000","1fffffff"],["7fffffff","00000002","00000040","00000000","1fffffff"],["7fffffff","00000002","ffffffff","00000000","1fffffff"],["7fffffff","0000000f","00000000","00000000","00000000"],["7fffffff","0000000f","00000001","00000000","ffffffff"],["7fffffff","0000000f","00000002","00000000","ffffffff"],["7fffffff","0000000f","0000000f","00000000","ffffffff"],["7fffffff","0000000f","00000010","00000000","ffffffff"],["7fffffff","0000000f","00000011","00000000","0000ffff"],["7fffffff","0000000f","0000001e","00000000","0000ffff"],["7fffffff","0000000f","0000001f","00000000","0000ffff"],["7fffffff","0000000f","00000020","00000000","0000ffff"],["7fffffff","0000000f","00000021","00000000","0000ffff"],["7fffffff","0000000f","00000040","00000000","0000ffff"],["7fffffff","0000000f","ffffffff","00000000","0000ffff"],["7fffffff","00000010","00000000","00000000","00000000"],["7fffffff","00000010","00000001","00000000","ffffffff"],["7fffffff","00000010","00000002","00000000","ffffffff"],["7fffffff","00000010","0000000f","00000000","ffffffff"],["7fffffff","00000010","00000010","00000000","00007fff"],["7fffffff","00000010","00000011","00000000","00007fff"],["7fffffff","00000010","0000001e","00000000","00007fff"],["7fffffff","00000010","0000001f","00000000","00007fff"],["7fffffff","00000010","00000020","00000000","00007fff"],["7fffffff","00000010","00000021","00000000","00007fff"],["7fffffff","00000010","00000040","00000000","00007fff"],["7fffffff","00000010","ffffffff","00000000","00007fff"],["7fffffff","00000011","00000000","00000000","00000000"],["7fffffff","00000011","00000001","00000000","ffffffff"],["7fffffff","00000011","00000002","00000000","ffffffff"],["7fffffff","00000011","0000000f","00000000","00003fff"],["7fffffff","00000011","00000010","00000000","00003fff"],["7fffffff","00000011","00000011","00000000","00003fff"],["7fffffff","00000011","0000001e","00000000","00003fff"],["7fffffff","00000011","0000001f","00000000","00003fff"],["7fffffff","00000011","00000020","00000000","00003fff"],["7fffffff","00000011","00000021","00000000","00003fff"],["7fffffff","00000011","00000040","00000000","00003fff"],["7fffffff","00000011","ffffffff","00000000","00003fff"],["7fffffff","0000001e","00000000","00000000","00000000"],["7fffffff","0000001e","00000001","00000000","ffffffff"],["7fffffff","0000001e","00000002","00000000","00000001"],["7fffffff","0000001e","0000000f","00000000","00000001"],["7fffffff","0000001e","00000010","00000000","00000001"],["7fffffff","0000001e","00000011","00000000","00000001"],["7fffffff","0000001e","0000001e","00000000","00000001"],["7fffffff","0000001e","0000001f","00000000","00000001"],["7fffffff","0000001e","00000020","00000000","00000001"],["7fffffff","0000001e","00000021","00000000","00000001"],["7fffffff","0000001e","00000040","00000000","00000001"],["7fffffff","0000001e","ffffffff","00000000","00000001"],["7fffffff","0000001f","00000000","00000000","00000000"],["7fffffff","0000001f","00000001","00000000","00000000"],["7fffffff","0000001f","00000002","00000000","00000000"],["7fffffff","0000001f","0000000f","00000000","00000000"],["7fffffff","0000001f","00000010","00000000","00000000"],["7fffffff","0000001f","00000011","00000000","00000000"],["7fffffff","0000001f","0000001e","00000000","00000000"],["7fffffff","0000001f","0000001f","00000000","00000000"],["7fffffff","0000001f","00000020","00000000","00000000"],["7fffffff","0000001f","00000021","00000000","00000000"],["7fffffff","0000001f","00000040","00000000","00000000"],["7fffffff","0000001f","ffffffff","00000000","00000000"],["7fffffff","00000020","00000000","00000000","00000000"],["7fffffff","00000020","00000001","00000000","00000000"],["7fffffff","00000020","00000002","00000000","00000000"],["7fffffff","00000020","0000000f","00000000","00000000"],["7fffffff","00000020","00000010","00000000","00000000"],["7fffffff","00000020","00000011","00000000","00000000"],["7fffffff","00000020","0000001e","00000000","00000000"],["7fffffff","00000020","0000001f","00000000","00000000"],["7fffffff","00000020","00000020","00000000","00000000"],["7fffffff","00000020","00000021","00000000","00000000"],["7fffffff","00000020","00000040","00000000","00000000"],["7fffffff","00000020","ffffffff","00000000","00000000"],["7fffffff","00000021","00000000","00000000","00000000"],["7fffffff","00000021","00000001","00000000","00000000"],["7fffffff","00000021","00000002","00000000","00000000"],["7fffffff","00000021","0000000f","00000000","00000000"],["7fffffff","00000021","00000010","00000000","00000000"],["7fffffff","00000021","00000011","00000000","00000000"],["7fffffff","00000021","0000001e","00000000","00000000"],["7fffffff","00000021","0000001f","00000000","00000000"],["7fffffff","00000021","00000020","00000000","00000000"],["7fffffff","00000021","00000021","00000000","00000000"],["7fffffff","00000021","00000040","00000000","00000000"],["7fffffff","00000021","ffffffff","00000000","00000000"],["7fffffff","00000040","00000000","00000000","00000000"],["7fffffff","00000040","00000001","00000000","00000000"],["7fffffff","00000040","00000002","00000000","00000000"],["7fffffff","00000040","0000000f","00000000","00000000"],["7fffffff","00000040","00000010","00000000","00000000"],["7fffffff","00000040","00000011","00000000","00000000"],["7fffffff","00000040","0000001e","00000000","00000000"],["7fffffff","00000040","0000001f","00000000","00000000"],["7fffffff","00000040","00000020","00000000","00000000"],["7fffffff","00000040","00000021","00000000","00000000"],["7fffffff","00000040","00000040","00000000","00000000"],["7fffffff","00000040","ffffffff","00000000","00000000"],["7fffffff","ffffffff","00000000","00000000","00000000"],["7fffffff","ffffffff","00000001","00000000","00000000"],["7fffffff","ffffffff","00000002","00000000","00000000"],["7fffffff","ffffffff","0000000f","00000000","00000000"],["7fffffff","ffffffff","00000010","00000000","00000000"],["7fffffff","ffffffff","00000011","00000000","00000000"],["7fffffff","ffffffff","0000001e","00000000","00000000"],["7fffffff","ffffffff","0000001f","00000000","00000000"],["7fffffff","ffffffff","00000020","00000000","00000000"],["7fffffff","ffffffff","00000021","00000000","00000000"],["7fffffff","ffffffff","00000040","00000000","00000000"],["7fffffff","ffffffff","ffffffff","00000000","00000000"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000000","00000001","00000000","ffffffff"],["ffffffff","00000000","00000002","00000000","ffffffff"],["ffffffff","00000000","0000000f","00000000","ffffffff"],["ffffffff","00000000","00000010","00000000","ffffffff"],["ffffffff","00000000","00000011","00000000","ffffffff"],["ffffffff","00000000","0000001e","00000000","ffffffff"],["ffffffff","00000000","0000001f","00000000","ffffffff"],["ffffffff","00000000","00000020","00000000","ffffffff"],["ffffffff","00000000","00000021","00000000","ffffffff"],["ffffffff","00000000","00000040","00000000","ffffffff"],["ffffffff","00000000","ffffffff","00000000","ffffffff"],["ffffffff","00000001","00000000","00000000","00000000"],["ffffffff","00000001","00000001","00000000","ffffffff"],["ffffffff","00000001","00000002","00000000","ffffffff"],["ffffffff","00000001","0000000f","00000000","ffffffff"],["ffffffff","00000001","00000010","00000000","ffffffff"],["ffffffff","00000001","00000011","00000000","ffffffff"],["ffffffff","00000001","0000001e","00000000","ffffffff"],["ffffffff","00000001","0000001f","00000000","ffffffff"],["ffffffff","00000001","00000020","00000000","ffffffff"],["ffffffff","00000001","00000021","00000000","ffffffff"],["ffffffff","00000001","00000040","00000000","ffffffff"],["ffffffff","00000001","ffffffff","00000000","ffffffff"],["ffffffff","00000002","00000000","00000000","00000000"],["ffffffff","00000002","00000001","00000000","ffffffff"],["ffffffff","00000002","00000002","00000000","ffffffff"],["ffffffff","00000002","0000000f","00000000","ffffffff"],["ffffffff","00000002","00000010","00000000","ffffffff"],["ffffffff","00000002","00000011","00000000","ffffffff"],["ffffffff","00000002","0000001e","00000000","ffffffff"],["ffffffff","00000002","0000001f","00000000","ffffffff"],["ffffffff","00000002","00000020","00000000","ffffffff"],["ffffffff","00000002","00000021","00000000","ffffffff"],["ffffffff","00000002","00000040","00000000","ffffffff"],["ffffffff","00000002","ffffffff","00000000","ffffffff"],["ffffffff","0000000f","00000000","00000000","00000000"],["ffffffff","0000000f","00000001","00000000","ffffffff"],["ffffffff","0000000f","00000002","00000000","ffffffff"],["ffffffff","0000000f","0000000f","00000000","ffffffff"],["ffffffff","0000000f","00000010","00000000","ffffffff"],["ffffffff","0000000f","00000011","00000000","ffffffff"],["ffffffff","0000000f","0000001e","00000000","ffffffff"],["ffffffff","0000000f","0000001f","00000000","ffffffff"],["ffffffff","0000000f","00000020","00000000","ffffffff"],["ffffffff","0000000f","00000021","00000000","ffffffff"],["ffffffff","0000000f","00000040","00000000","ffffffff"],["ffffffff","0000000f","ffffffff","00000000","ffffffff"],["ffffffff","00000010","00000000","00000000","00000000"],["ffffffff","00000010","00000001","00000000","ffffffff"],["ffffffff","00000010","00000002","00000000","ffffffff"],["ffffffff","00000010","0000000f","00000000","ffffffff"],["ffffffff","00000010","00000010","00000000","ffffffff"],["ffffffff","00000010","00000011","00000000","ffffffff"],["ffffffff","00000010","0000001e","00000000","ffffffff"],["ffffffff","00000010","0000001f","00000000","ffffffff"],["ffffffff","00000010","00000020","00000000","ffffffff"],["ffffffff","00000010","00000021","00000000","ffffffff"],["ffffffff","00000010","00000040","00000000","ffffffff"],["ffffffff","00000010","ffffffff","00000000","ffffffff"],["ffffffff","00000011","00000000","00000000","00000000"],["ffffffff","00000011","00000001","00000000","ffffffff"],["ffffffff","00000011","00000002","00000000","ffffffff"],["ffffffff","00000011","0000000f","00000000","ffffffff"],["ffffffff","00000011","00000010","00000000","ffffffff"],["ffffffff","00000011","00000011","00000000","ffffffff"],["ffffffff","00000011","0000001e","00000000","ffffffff"],["ffffffff","00000011","0000001f","00000000","ffffffff"],["ffffffff","00000011","00000020","00000000","ffffffff"],["ffffffff","00000011","00000021","00000000","ffffffff"],["ffffffff","00000011","00000040","00000000","ffffffff"],["ffffffff","00000011","ffffffff","00000000","ffffffff"],["ffffffff","0000001e","00000000","00000000","00000000"],["ffffffff","0000001e","00000001","00000000","ffffffff"],["ffffffff","0000001e","00000002","00000000","ffffffff"],["ffffffff","0000001e","0000000f","00000000","ffffffff"],["ffffffff","0000001e","00000010","00000000","ffffffff"],["ffffffff","0000001e","00000011","00000000","ffffffff"],["ffffffff","0000001e","0000001e","00000000","ffffffff"],["ffffffff","0000001e","0000001f","00000000","ffffffff"],["ffffffff","0000001e","00000020","00000000","ffffffff"],["ffffffff","0000001e","00000021","00000000","ffffffff"],["ffffffff","0000001e","00000040","00000000","ffffffff"],["ffffffff","0000001e","ffffffff","00000000","ffffffff"],["ffffffff","0000001f","00000000","00000000","00000000"],["ffffffff","0000001f","00000001","00000000","ffffffff"],["ffffffff","0000001f","00000002","00000000","ffffffff"],["ffffffff","0000001f","0000000f","00000000","ffffffff"],["ffffffff","0000001f","00000010","00000000","ffffffff"],["ffffffff","0000001f","00000011","00000000","ffffffff"],["ffffffff","0000001f","0000001e","00000000","ffffffff"],["ffffffff","0000001f","0000001f","00000000","ffffffff"],["ffffffff","0000001f","00000020","00000000","ffffffff"],["ffffffff","0000001f","00000021","00000000","ffffffff"],["ffffffff","0000001f","00000040","00000000","ffffffff"],["ffffffff","0000001f","ffffffff","00000000","ffffffff"],["ffffffff","00000020","00000000","00000000","00000000"],["ffffffff","00000020","00000001","00000000","00000000"],["ffffffff","00000020","00000002","00000000","00000000"],["ffffffff","00000020","0000000f","00000000","00000000"],["ffffffff","00000020","00000010","00000000","00000000"],["ffffffff","00000020","00000011","00000000","00000000"],["ffffffff","00000020","0000001e","00000000","00000000"],["ffffffff","00000020","0000001f","00000000","00000000"],["ffffffff","00000020","00000020","00000000","00000000"],["ffffffff","00000020","00000021","00000000","00000000"],["ffffffff","00000020","00000040","00000000","00000000"],["ffffffff","00000020","ffffffff","00000000","00000000"],["ffffffff","00000021","00000000","00000000","00000000"],["ffffffff","00000021","00000001","00000000","00000000"],["ffffffff","00000021","00000002","00000000","00000000"],["ffffffff","00000021","0000000f","00000000","00000000"],["ffffffff","00000021","00000010","00000000","00000000"],["ffffffff","00000021","00000011","00000000","00000000"],["ffffffff","00000021","0000001e","00000000","00000000"],["ffffffff","00000021","0000001f","00000000","00000000"],["ffffffff","00000021","00000020","00000000","00000000"],["ffffffff","00000021","00000021","00000000","00000000"],["ffffffff","00000021","00000040","00000000","00000000"],["ffffffff","00000021","ffffffff","00000000","00000000"],["ffffffff","00000040","00000000","00000000","00000000"],["ffffffff","00000040","00000001","00000000","00000000"],["ffffffff","00000040","00000002","00000000","00000000"],["ffffffff","00000040","0000000f","00000000","00000000"],["ffffffff","00000040","00000010","00000000","00000000"],["ffffffff","00000040","00000011","00000000","00000000"],["ffffffff","00000040","0000001e","00000000","00000000"],["ffffffff","00000040","0000001f","00000000","00000000"],["ffffffff","00000040","00000020","00000000","00000000"],["ffffffff","00000040","00000021","00000000","00000000"],["ffffffff","00000040","00000040","00000000","00000000"],["ffffffff","00000040","ffffffff","00000000","00000000"],["ffffffff","ffffffff","00000000","00000000","00000000"],["ffffffff","ffffffff","00000001","00000000","00000000"],["ffffffff","ffffffff","00000002","00000000","00000000"],["ffffffff","ffffffff","0000000f","00000000","00000000"],["ffffffff","ffffffff","00000010","00000000","00000000"],["ffffffff","ffffffff","00000011","00000000","00000000"],["ffffffff","ffffffff","0000001e","00000000","00000000"],["ffffffff","ffffffff","0000001f","00000000","00000000"],["ffffffff","ffffffff","00000020","00000000","00000000"],["ffffffff","ffffffff","00000021","00000000","00000000"],["ffffffff","ffffffff","00000040","00000000","00000000"],["ffffffff","ffffffff","ffffffff","00000000","00000000"],["55555555","00000000","00000000","00000000","00000000"],["55555555","00000000","00000001","00000000","ffffffff"],["55555555","00000000","00000002","00000000","00000001"],["55555555","00000000","0000000f","00000000","ffffd555"],["55555555","00000000","00000010","00000000","00005555"],["55555555","00000000","00000011","00000000","ffff5555"],["55555555","00000000","0000001e","00000000","15555555"],["55555555","00000000","0000001f","00000000","d5555555"],["55555555","00000000","00000020","00000000","55555555"],["55555555","00000000","00000021","00000000","55555555"],["55555555","00000000","00000040","00000000","55555555"],["55555555","00000000","ffffffff","00000000","55555555"],["55555555","00000001","00000000","00000000","00000000"],["55555555","00000001","00000001","00000000","00000000"],["55555555","00000001","00000002","00000000","fffffffe"],["55555555","00000001","0000000f","00000000","00002aaa"],["55555555","00000001","00000010","00000000","ffffaaaa"],["55555555","00000001","00000011","00000000","0000aaaa"],["55555555","00000001","0000001e","00000000","eaaaaaaa"],["55555555","00000001","0000001f","00000000","2aaaaaaa"],["55555555","00000001","00000020","00000000","2aaaaaaa"],["55555555","00000001","00000021","00000000","2aaaaaaa"],["55555555","00000001","00000040","00000000","2aaaaaaa"],["55555555","00000001","ffffffff","00000000","2aaaaaaa"],["55555555","00000002","00000000","00000000","00000000"],["55555555","00000002","00000001","00000000","ffffffff"],["55555555","00000002","00000002","00000000","00000001"],["55555555","00000002","0000000f","00000000","ffffd555"],["55555555","00000002","00000010","00000000","00005555"],["55555555","00000002","00000011","00000000","ffff5555"],["55555555","00000002","0000001e","00000000","15555555"],["55555555","00000002","0000001f","00000000","15555555"],["55555555","00000002","00000020","00000000","15555555"],["55555555","00000002","00000021","00000000","15555555"],["55555555","00000002","00000040","00000000","15555555"],["55555555","00000002","ffffffff","00000000","15555555"],["55555555","0000000f","00000000","00000000","00000000"],["55555555","0000000f","00000001","00000000","00000000"],["55555555","0000000f","00000002","00000000","fffffffe"],["55555555","0000000f","0000000f","00000000","00002aaa"],["55555555","0000000f","00000010","00000000","ffffaaaa"],["55555555","0000000f","00000011","00000000","0000aaaa"],["55555555","0000000f","0000001e","00000000","0000aaaa"],["55555555","0000000f","0000001f","00000000","0000aaaa"],["55555555","0000000f","00000020","00000000","0000aaaa"],["55555555","0000000f","00000021","00000000","0000aaaa"],["55555555","0000000f","00000040","00000000","0000aaaa"],["55555555","0000000f","ffffffff","00000000","0000aaaa"],["55555555","00000010","00000000","00000000","00000000"],["55555555","00000010","00000001","00000000","ffffffff"],["55555555","00000010","00000002","00000000","00000001"],["55555555","00000010","0000000f","00000000","ffffd555"],["55555555","00000010","00000010","00000000","00005555"],["55555555","00000010","00000011","00000000","00005555"],["55555555","00000010","0000001e","00000000","00005555"],["55555555","00000010","0000001f","00000000","00005555"],["55555555","00000010","00000020","00000000","00005555"],["55555555","00000010","00000021","00000000","00005555"],["55555555","00000010","00000040","00000000","00005555"],["55555555","00000010","ffffffff","00000000","00005555"],["55555555","00000011","00000000","00000000","00000000"],["55555555","00000011","00000001","00000000","00000000"],["55555555","00000011","00000002","00000000","fffffffe"],["55555555","00000011","0000000f","00000000","00002aaa"],["55555555","00000011","00000010","00000000","00002aaa"],["55555555","00000011","00000011","00000000","00002aaa"],["55555555","00000011","0000001e","00000000","00002aaa"],["55555555","00000011","0000001f","00000000","00002aaa"],["55555555","00000011","00000020","00000000","00002aaa"],["55555555","00000011","00000021","00000000","00002aaa"],["55555555","00000011","00000040","00000000","00002aaa"],["55555555","00000011","ffffffff","00000000","00002aaa"],["55555555","0000001e","00000000","00000000","00000000"],["55555555","0000001e","00000001","00000000","ffffffff"],["55555555","0000001e","00000002","00000000","00000001"],["55555555","0000001e","0000000f","00000000","00000001"],["55555555","0000001e","00000010","00000000","00000001"],["55555555","0000001e","00000011","00000000","00000001"],["55555555","0000001e","0000001e","00000000","00000001"],["55555555","0000001e","0000001f","00000000","00000001"],["55555555","0000001e","00000020","00000000","00000001"],["55555555","0000001e","00000021","00000000","00000001"],["55555555","0000001e","00000040","00000000","00000001"],["55555555","0000001e","ffffffff","00000000","00000001"],["55555555","0000001f","00000000","00000000","00000000"],["55555555","0000001f","00000001","00000000","00000000"],["55555555","0000001f","00000002","00000000","00000000"],["55555555","0000001f","0000000f","00000000","00000000"],["55555555","0000001f","00000010","00000000","00000000"],["55555555","0000001f","00000011","00000000","00000000"],["55555555","0000001f","0000001e","00000000","00000000"],["55555555","0000001f","0000001f","00000000","00000000"],["55555555","0000001f","00000020","00000000","00000000"],["55555555","0000001f","00000021","00000000","00000000"],["55555555","0000001f","00000040","00000000","00000000"],["55555555","0000001f","ffffffff","00000000","00000000"],["55555555","00000020","00000000","00000000","00000000"],["55555555","00000020","00000001","00000000","00000000"],["55555555","00000020","00000002","00000000","00000000"],["55555555","00000020","0000000f","00000000","00000000"],["55555555","00000020","00000010","00000000","00000000"],["55555555","00000020","00000011","00000000","00000000"],["55555555","00000020","0000001e","00000000","00000000"],["55555555","00000020","0000001f","00000000","00000000"],["55555555","00000020","00000020","00000000","00000000"],["55555555","00000020","00000021","00000000","00000000"],["55555555","00000020","00000040","00000000","00000000"],["55555555","00000020","ffffffff","00000000","00000000"],["55555555","00000021","00000000","00000000","00000000"],["55555555","00000021","00000001","00000000","00000000"],["55555555","00000021","00000002","00000000","00000000"],["55555555","00000021","0000000f","00000000","00000000"],["55555555","00000021","00000010","00000000","00000000"],["55555555","00000021","00000011","00000000","00000000"],["55555555","00000021","0000001e","00000000","00000000"],["55555555","00000021","0000001f","00000000","00000000"],["55555555","00000021","00000020","00000000","00000000"],["55555555","00000021","00000021","00000000","00000000"],["55555555","00000021","00000040","00000000","00000000"],["55555555","00000021","ffffffff","00000000","00000000"],["55555555","00000040","00000000","00000000","00000000"],["55555555","00000040","00000001","00000000","00000000"],["55555555","00000040","00000002","00000000","00000000"],["55555555","00000040","0000000f","00000000","00000000"],["55555555","00000040","00000010","00000000","00000000"],["55555555","00000040","00000011","00000000","00000000"],["55555555","00000040","0000001e","00000000","00000000"],["55555555","00000040","0000001f","00000000","00000000"],["55555555","00000040","00000020","00000000","00000000"],["55555555","00000040","00000021","00000000","00000000"],["55555555","00000040","00000040","00000000","00000000"],["55555555","00000040","ffffffff","00000000","00000000"],["55555555","ffffffff","00000000","00000000","00000000"],["55555555","ffffffff","00000001","00000000","00000000"],["55555555","ffffffff","00000002","00000000","00000000"],["55555555","ffffffff","0000000f","00000000","00000000"],["55555555","ffffffff","00000010","00000000","00000000"],["55555555","ffffffff","00000011","00000000","00000000"],["55555555","ffffffff","0000001e","00000000","00000000"],["55555555","ffffffff","0000001f","00000000","00000000"],["55555555","ffffffff","00000020","00000000","00000000"],["55555555","ffffffff","00000021","00000000","00000000"],["55555555","ffffffff","00000040","00000000","00000000"],["55555555","ffffffff","ffffffff","00000000","00000000"]]} +{"op":"insert_bits_u32","code":45,"wgsl":"insertBits(a, b, c, d)","cases":[["00000000","ffffffff","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000001","00000001"],["00000000","ffffffff","00000000","00000002","00000003"],["00000000","ffffffff","00000000","0000000f","00007fff"],["00000000","ffffffff","00000000","00000010","0000ffff"],["00000000","ffffffff","00000000","00000011","0001ffff"],["00000000","ffffffff","00000000","0000001e","3fffffff"],["00000000","ffffffff","00000000","0000001f","7fffffff"],["00000000","ffffffff","00000000","00000020","ffffffff"],["00000000","ffffffff","00000000","00000021","ffffffff"],["00000000","ffffffff","00000000","00000040","ffffffff"],["00000000","ffffffff","00000000","ffffffff","ffffffff"],["00000000","ffffffff","00000001","00000000","00000000"],["00000000","ffffffff","00000001","00000001","00000002"],["00000000","ffffffff","00000001","00000002","00000006"],["00000000","ffffffff","00000001","0000000f","0000fffe"],["00000000","ffffffff","00000001","00000010","0001fffe"],["00000000","ffffffff","00000001","00000011","0003fffe"],["00000000","ffffffff","00000001","0000001e","7ffffffe"],["00000000","ffffffff","00000001","0000001f","fffffffe"],["00000000","ffffffff","00000001","00000020","fffffffe"],["00000000","ffffffff","00000001","00000021","fffffffe"],["00000000","ffffffff","00000001","00000040","fffffffe"],["00000000","ffffffff","00000001","ffffffff","fffffffe"],["00000000","ffffffff","00000002","00000000","00000000"],["00000000","ffffffff","00000002","00000001","00000004"],["00000000","ffffffff","00000002","00000002","0000000c"],["00000000","ffffffff","00000002","0000000f","0001fffc"],["00000000","ffffffff","00000002","00000010","0003fffc"],["00000000","ffffffff","00000002","00000011","0007fffc"],["00000000","ffffffff","00000002","0000001e","fffffffc"],["00000000","ffffffff","00000002","0000001f","fffffffc"],["00000000","ffffffff","00000002","00000020","fffffffc"],["00000000","ffffffff","00000002","00000021","fffffffc"],["00000000","ffffffff","00000002","00000040","fffffffc"],["00000000","ffffffff","00000002","ffffffff","fffffffc"],["00000000","ffffffff","0000000f","00000000","00000000"],["00000000","ffffffff","0000000f","00000001","00008000"],["00000000","ffffffff","0000000f","00000002","00018000"],["00000000","ffffffff","0000000f","0000000f","3fff8000"],["00000000","ffffffff","0000000f","00000010","7fff8000"],["00000000","ffffffff","0000000f","00000011","ffff8000"],["00000000","ffffffff","0000000f","0000001e","ffff8000"],["00000000","ffffffff","0000000f","0000001f","ffff8000"],["00000000","ffffffff","0000000f","00000020","ffff8000"],["00000000","ffffffff","0000000f","00000021","ffff8000"],["00000000","ffffffff","0000000f","00000040","ffff8000"],["00000000","ffffffff","0000000f","ffffffff","ffff8000"],["00000000","ffffffff","00000010","00000000","00000000"],["00000000","ffffffff","00000010","00000001","00010000"],["00000000","ffffffff","00000010","00000002","00030000"],["00000000","ffffffff","00000010","0000000f","7fff0000"],["00000000","ffffffff","00000010","00000010","ffff0000"],["00000000","ffffffff","00000010","00000011","ffff0000"],["00000000","ffffffff","00000010","0000001e","ffff0000"],["00000000","ffffffff","00000010","0000001f","ffff0000"],["00000000","ffffffff","00000010","00000020","ffff0000"],["00000000","ffffffff","00000010","00000021","ffff0000"],["00000000","ffffffff","00000010","00000040","ffff0000"],["00000000","ffffffff","00000010","ffffffff","ffff0000"],["00000000","ffffffff","00000011","00000000","00000000"],["00000000","ffffffff","00000011","00000001","00020000"],["00000000","ffffffff","00000011","00000002","00060000"],["00000000","ffffffff","00000011","0000000f","fffe0000"],["00000000","ffffffff","00000011","00000010","fffe0000"],["00000000","ffffffff","00000011","00000011","fffe0000"],["00000000","ffffffff","00000011","0000001e","fffe0000"],["00000000","ffffffff","00000011","0000001f","fffe0000"],["00000000","ffffffff","00000011","00000020","fffe0000"],["00000000","ffffffff","00000011","00000021","fffe0000"],["00000000","ffffffff","00000011","00000040","fffe0000"],["00000000","ffffffff","00000011","ffffffff","fffe0000"],["00000000","ffffffff","0000001e","00000000","00000000"],["00000000","ffffffff","0000001e","00000001","40000000"],["00000000","ffffffff","0000001e","00000002","c0000000"],["00000000","ffffffff","0000001e","0000000f","c0000000"],["00000000","ffffffff","0000001e","00000010","c0000000"],["00000000","ffffffff","0000001e","00000011","c0000000"],["00000000","ffffffff","0000001e","0000001e","c0000000"],["00000000","ffffffff","0000001e","0000001f","c0000000"],["00000000","ffffffff","0000001e","00000020","c0000000"],["00000000","ffffffff","0000001e","00000021","c0000000"],["00000000","ffffffff","0000001e","00000040","c0000000"],["00000000","ffffffff","0000001e","ffffffff","c0000000"],["00000000","ffffffff","0000001f","00000000","00000000"],["00000000","ffffffff","0000001f","00000001","80000000"],["00000000","ffffffff","0000001f","00000002","80000000"],["00000000","ffffffff","0000001f","0000000f","80000000"],["00000000","ffffffff","0000001f","00000010","80000000"],["00000000","ffffffff","0000001f","00000011","80000000"],["00000000","ffffffff","0000001f","0000001e","80000000"],["00000000","ffffffff","0000001f","0000001f","80000000"],["00000000","ffffffff","0000001f","00000020","80000000"],["00000000","ffffffff","0000001f","00000021","80000000"],["00000000","ffffffff","0000001f","00000040","80000000"],["00000000","ffffffff","0000001f","ffffffff","80000000"],["00000000","ffffffff","00000020","00000000","00000000"],["00000000","ffffffff","00000020","00000001","00000000"],["00000000","ffffffff","00000020","00000002","00000000"],["00000000","ffffffff","00000020","0000000f","00000000"],["00000000","ffffffff","00000020","00000010","00000000"],["00000000","ffffffff","00000020","00000011","00000000"],["00000000","ffffffff","00000020","0000001e","00000000"],["00000000","ffffffff","00000020","0000001f","00000000"],["00000000","ffffffff","00000020","00000020","00000000"],["00000000","ffffffff","00000020","00000021","00000000"],["00000000","ffffffff","00000020","00000040","00000000"],["00000000","ffffffff","00000020","ffffffff","00000000"],["00000000","ffffffff","00000021","00000000","00000000"],["00000000","ffffffff","00000021","00000001","00000000"],["00000000","ffffffff","00000021","00000002","00000000"],["00000000","ffffffff","00000021","0000000f","00000000"],["00000000","ffffffff","00000021","00000010","00000000"],["00000000","ffffffff","00000021","00000011","00000000"],["00000000","ffffffff","00000021","0000001e","00000000"],["00000000","ffffffff","00000021","0000001f","00000000"],["00000000","ffffffff","00000021","00000020","00000000"],["00000000","ffffffff","00000021","00000021","00000000"],["00000000","ffffffff","00000021","00000040","00000000"],["00000000","ffffffff","00000021","ffffffff","00000000"],["00000000","ffffffff","00000040","00000000","00000000"],["00000000","ffffffff","00000040","00000001","00000000"],["00000000","ffffffff","00000040","00000002","00000000"],["00000000","ffffffff","00000040","0000000f","00000000"],["00000000","ffffffff","00000040","00000010","00000000"],["00000000","ffffffff","00000040","00000011","00000000"],["00000000","ffffffff","00000040","0000001e","00000000"],["00000000","ffffffff","00000040","0000001f","00000000"],["00000000","ffffffff","00000040","00000020","00000000"],["00000000","ffffffff","00000040","00000021","00000000"],["00000000","ffffffff","00000040","00000040","00000000"],["00000000","ffffffff","00000040","ffffffff","00000000"],["00000000","ffffffff","ffffffff","00000000","00000000"],["00000000","ffffffff","ffffffff","00000001","00000000"],["00000000","ffffffff","ffffffff","00000002","00000000"],["00000000","ffffffff","ffffffff","0000000f","00000000"],["00000000","ffffffff","ffffffff","00000010","00000000"],["00000000","ffffffff","ffffffff","00000011","00000000"],["00000000","ffffffff","ffffffff","0000001e","00000000"],["00000000","ffffffff","ffffffff","0000001f","00000000"],["00000000","ffffffff","ffffffff","00000020","00000000"],["00000000","ffffffff","ffffffff","00000021","00000000"],["00000000","ffffffff","ffffffff","00000040","00000000"],["00000000","ffffffff","ffffffff","ffffffff","00000000"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000000","00000000","00000001","fffffffe"],["ffffffff","00000000","00000000","00000002","fffffffc"],["ffffffff","00000000","00000000","0000000f","ffff8000"],["ffffffff","00000000","00000000","00000010","ffff0000"],["ffffffff","00000000","00000000","00000011","fffe0000"],["ffffffff","00000000","00000000","0000001e","c0000000"],["ffffffff","00000000","00000000","0000001f","80000000"],["ffffffff","00000000","00000000","00000020","00000000"],["ffffffff","00000000","00000000","00000021","00000000"],["ffffffff","00000000","00000000","00000040","00000000"],["ffffffff","00000000","00000000","ffffffff","00000000"],["ffffffff","00000000","00000001","00000000","ffffffff"],["ffffffff","00000000","00000001","00000001","fffffffd"],["ffffffff","00000000","00000001","00000002","fffffff9"],["ffffffff","00000000","00000001","0000000f","ffff0001"],["ffffffff","00000000","00000001","00000010","fffe0001"],["ffffffff","00000000","00000001","00000011","fffc0001"],["ffffffff","00000000","00000001","0000001e","80000001"],["ffffffff","00000000","00000001","0000001f","00000001"],["ffffffff","00000000","00000001","00000020","00000001"],["ffffffff","00000000","00000001","00000021","00000001"],["ffffffff","00000000","00000001","00000040","00000001"],["ffffffff","00000000","00000001","ffffffff","00000001"],["ffffffff","00000000","00000002","00000000","ffffffff"],["ffffffff","00000000","00000002","00000001","fffffffb"],["ffffffff","00000000","00000002","00000002","fffffff3"],["ffffffff","00000000","00000002","0000000f","fffe0003"],["ffffffff","00000000","00000002","00000010","fffc0003"],["ffffffff","00000000","00000002","00000011","fff80003"],["ffffffff","00000000","00000002","0000001e","00000003"],["ffffffff","00000000","00000002","0000001f","00000003"],["ffffffff","00000000","00000002","00000020","00000003"],["ffffffff","00000000","00000002","00000021","00000003"],["ffffffff","00000000","00000002","00000040","00000003"],["ffffffff","00000000","00000002","ffffffff","00000003"],["ffffffff","00000000","0000000f","00000000","ffffffff"],["ffffffff","00000000","0000000f","00000001","ffff7fff"],["ffffffff","00000000","0000000f","00000002","fffe7fff"],["ffffffff","00000000","0000000f","0000000f","c0007fff"],["ffffffff","00000000","0000000f","00000010","80007fff"],["ffffffff","00000000","0000000f","00000011","00007fff"],["ffffffff","00000000","0000000f","0000001e","00007fff"],["ffffffff","00000000","0000000f","0000001f","00007fff"],["ffffffff","00000000","0000000f","00000020","00007fff"],["ffffffff","00000000","0000000f","00000021","00007fff"],["ffffffff","00000000","0000000f","00000040","00007fff"],["ffffffff","00000000","0000000f","ffffffff","00007fff"],["ffffffff","00000000","00000010","00000000","ffffffff"],["ffffffff","00000000","00000010","00000001","fffeffff"],["ffffffff","00000000","00000010","00000002","fffcffff"],["ffffffff","00000000","00000010","0000000f","8000ffff"],["ffffffff","00000000","00000010","00000010","0000ffff"],["ffffffff","00000000","00000010","00000011","0000ffff"],["ffffffff","00000000","00000010","0000001e","0000ffff"],["ffffffff","00000000","00000010","0000001f","0000ffff"],["ffffffff","00000000","00000010","00000020","0000ffff"],["ffffffff","00000000","00000010","00000021","0000ffff"],["ffffffff","00000000","00000010","00000040","0000ffff"],["ffffffff","00000000","00000010","ffffffff","0000ffff"],["ffffffff","00000000","00000011","00000000","ffffffff"],["ffffffff","00000000","00000011","00000001","fffdffff"],["ffffffff","00000000","00000011","00000002","fff9ffff"],["ffffffff","00000000","00000011","0000000f","0001ffff"],["ffffffff","00000000","00000011","00000010","0001ffff"],["ffffffff","00000000","00000011","00000011","0001ffff"],["ffffffff","00000000","00000011","0000001e","0001ffff"],["ffffffff","00000000","00000011","0000001f","0001ffff"],["ffffffff","00000000","00000011","00000020","0001ffff"],["ffffffff","00000000","00000011","00000021","0001ffff"],["ffffffff","00000000","00000011","00000040","0001ffff"],["ffffffff","00000000","00000011","ffffffff","0001ffff"],["ffffffff","00000000","0000001e","00000000","ffffffff"],["ffffffff","00000000","0000001e","00000001","bfffffff"],["ffffffff","00000000","0000001e","00000002","3fffffff"],["ffffffff","00000000","0000001e","0000000f","3fffffff"],["ffffffff","00000000","0000001e","00000010","3fffffff"],["ffffffff","00000000","0000001e","00000011","3fffffff"],["ffffffff","00000000","0000001e","0000001e","3fffffff"],["ffffffff","00000000","0000001e","0000001f","3fffffff"],["ffffffff","00000000","0000001e","00000020","3fffffff"],["ffffffff","00000000","0000001e","00000021","3fffffff"],["ffffffff","00000000","0000001e","00000040","3fffffff"],["ffffffff","00000000","0000001e","ffffffff","3fffffff"],["ffffffff","00000000","0000001f","00000000","ffffffff"],["ffffffff","00000000","0000001f","00000001","7fffffff"],["ffffffff","00000000","0000001f","00000002","7fffffff"],["ffffffff","00000000","0000001f","0000000f","7fffffff"],["ffffffff","00000000","0000001f","00000010","7fffffff"],["ffffffff","00000000","0000001f","00000011","7fffffff"],["ffffffff","00000000","0000001f","0000001e","7fffffff"],["ffffffff","00000000","0000001f","0000001f","7fffffff"],["ffffffff","00000000","0000001f","00000020","7fffffff"],["ffffffff","00000000","0000001f","00000021","7fffffff"],["ffffffff","00000000","0000001f","00000040","7fffffff"],["ffffffff","00000000","0000001f","ffffffff","7fffffff"],["ffffffff","00000000","00000020","00000000","ffffffff"],["ffffffff","00000000","00000020","00000001","ffffffff"],["ffffffff","00000000","00000020","00000002","ffffffff"],["ffffffff","00000000","00000020","0000000f","ffffffff"],["ffffffff","00000000","00000020","00000010","ffffffff"],["ffffffff","00000000","00000020","00000011","ffffffff"],["ffffffff","00000000","00000020","0000001e","ffffffff"],["ffffffff","00000000","00000020","0000001f","ffffffff"],["ffffffff","00000000","00000020","00000020","ffffffff"],["ffffffff","00000000","00000020","00000021","ffffffff"],["ffffffff","00000000","00000020","00000040","ffffffff"],["ffffffff","00000000","00000020","ffffffff","ffffffff"],["ffffffff","00000000","00000021","00000000","ffffffff"],["ffffffff","00000000","00000021","00000001","ffffffff"],["ffffffff","00000000","00000021","00000002","ffffffff"],["ffffffff","00000000","00000021","0000000f","ffffffff"],["ffffffff","00000000","00000021","00000010","ffffffff"],["ffffffff","00000000","00000021","00000011","ffffffff"],["ffffffff","00000000","00000021","0000001e","ffffffff"],["ffffffff","00000000","00000021","0000001f","ffffffff"],["ffffffff","00000000","00000021","00000020","ffffffff"],["ffffffff","00000000","00000021","00000021","ffffffff"],["ffffffff","00000000","00000021","00000040","ffffffff"],["ffffffff","00000000","00000021","ffffffff","ffffffff"],["ffffffff","00000000","00000040","00000000","ffffffff"],["ffffffff","00000000","00000040","00000001","ffffffff"],["ffffffff","00000000","00000040","00000002","ffffffff"],["ffffffff","00000000","00000040","0000000f","ffffffff"],["ffffffff","00000000","00000040","00000010","ffffffff"],["ffffffff","00000000","00000040","00000011","ffffffff"],["ffffffff","00000000","00000040","0000001e","ffffffff"],["ffffffff","00000000","00000040","0000001f","ffffffff"],["ffffffff","00000000","00000040","00000020","ffffffff"],["ffffffff","00000000","00000040","00000021","ffffffff"],["ffffffff","00000000","00000040","00000040","ffffffff"],["ffffffff","00000000","00000040","ffffffff","ffffffff"],["ffffffff","00000000","ffffffff","00000000","ffffffff"],["ffffffff","00000000","ffffffff","00000001","ffffffff"],["ffffffff","00000000","ffffffff","00000002","ffffffff"],["ffffffff","00000000","ffffffff","0000000f","ffffffff"],["ffffffff","00000000","ffffffff","00000010","ffffffff"],["ffffffff","00000000","ffffffff","00000011","ffffffff"],["ffffffff","00000000","ffffffff","0000001e","ffffffff"],["ffffffff","00000000","ffffffff","0000001f","ffffffff"],["ffffffff","00000000","ffffffff","00000020","ffffffff"],["ffffffff","00000000","ffffffff","00000021","ffffffff"],["ffffffff","00000000","ffffffff","00000040","ffffffff"],["ffffffff","00000000","ffffffff","ffffffff","ffffffff"],["deadbeef","12345678","00000000","00000000","deadbeef"],["deadbeef","12345678","00000000","00000001","deadbeee"],["deadbeef","12345678","00000000","00000002","deadbeec"],["deadbeef","12345678","00000000","0000000f","deadd678"],["deadbeef","12345678","00000000","00000010","dead5678"],["deadbeef","12345678","00000000","00000011","deac5678"],["deadbeef","12345678","00000000","0000001e","d2345678"],["deadbeef","12345678","00000000","0000001f","92345678"],["deadbeef","12345678","00000000","00000020","12345678"],["deadbeef","12345678","00000000","00000021","12345678"],["deadbeef","12345678","00000000","00000040","12345678"],["deadbeef","12345678","00000000","ffffffff","12345678"],["deadbeef","12345678","00000001","00000000","deadbeef"],["deadbeef","12345678","00000001","00000001","deadbeed"],["deadbeef","12345678","00000001","00000002","deadbee9"],["deadbeef","12345678","00000001","0000000f","deadacf1"],["deadbeef","12345678","00000001","00000010","deacacf1"],["deadbeef","12345678","00000001","00000011","deacacf1"],["deadbeef","12345678","00000001","0000001e","a468acf1"],["deadbeef","12345678","00000001","0000001f","2468acf1"],["deadbeef","12345678","00000001","00000020","2468acf1"],["deadbeef","12345678","00000001","00000021","2468acf1"],["deadbeef","12345678","00000001","00000040","2468acf1"],["deadbeef","12345678","00000001","ffffffff","2468acf1"],["deadbeef","12345678","00000002","00000000","deadbeef"],["deadbeef","12345678","00000002","00000001","deadbeeb"],["deadbeef","12345678","00000002","00000002","deadbee3"],["deadbeef","12345678","00000002","0000000f","dead59e3"],["deadbeef","12345678","00000002","00000010","dead59e3"],["deadbeef","12345678","00000002","00000011","dea959e3"],["deadbeef","12345678","00000002","0000001e","48d159e3"],["deadbeef","12345678","00000002","0000001f","48d159e3"],["deadbeef","12345678","00000002","00000020","48d159e3"],["deadbeef","12345678","00000002","00000021","48d159e3"],["deadbeef","12345678","00000002","00000040","48d159e3"],["deadbeef","12345678","00000002","ffffffff","48d159e3"],["deadbeef","12345678","0000000f","00000000","deadbeef"],["deadbeef","12345678","0000000f","00000001","dead3eef"],["deadbeef","12345678","0000000f","00000002","deac3eef"],["deadbeef","12345678","0000000f","0000000f","eb3c3eef"],["deadbeef","12345678","0000000f","00000010","ab3c3eef"],["deadbeef","12345678","0000000f","00000011","2b3c3eef"],["deadbeef","12345678","0000000f","0000001e","2b3c3eef"],["deadbeef","12345678","0000000f","0000001f","2b3c3eef"],["deadbeef","12345678","0000000f","00000020","2b3c3eef"],["deadbeef","12345678","0000000f","00000021","2b3c3eef"],["deadbeef","12345678","0000000f","00000040","2b3c3eef"],["deadbeef","12345678","0000000f","ffffffff","2b3c3eef"],["deadbeef","12345678","00000010","00000000","deadbeef"],["deadbeef","12345678","00000010","00000001","deacbeef"],["deadbeef","12345678","00000010","00000002","deacbeef"],["deadbeef","12345678","00000010","0000000f","d678beef"],["deadbeef","12345678","00000010","00000010","5678beef"],["deadbeef","12345678","00000010","00000011","5678beef"],["deadbeef","12345678","00000010","0000001e","5678beef"],["deadbeef","12345678","00000010","0000001f","5678beef"],["deadbeef","12345678","00000010","00000020","5678beef"],["deadbeef","12345678","00000010","00000021","5678beef"],["deadbeef","12345678","00000010","00000040","5678beef"],["deadbeef","12345678","00000010","ffffffff","5678beef"],["deadbeef","12345678","00000011","00000000","deadbeef"],["deadbeef","12345678","00000011","00000001","deadbeef"],["deadbeef","12345678","00000011","00000002","dea9beef"],["deadbeef","12345678","00000011","0000000f","acf1beef"],["deadbeef","12345678","00000011","00000010","acf1beef"],["deadbeef","12345678","00000011","00000011","acf1beef"],["deadbeef","12345678","00000011","0000001e","acf1beef"],["deadbeef","12345678","00000011","0000001f","acf1beef"],["deadbeef","12345678","00000011","00000020","acf1beef"],["deadbeef","12345678","00000011","00000021","acf1beef"],["deadbeef","12345678","00000011","00000040","acf1beef"],["deadbeef","12345678","00000011","ffffffff","acf1beef"],["deadbeef","12345678","0000001e","00000000","deadbeef"],["deadbeef","12345678","0000001e","00000001","9eadbeef"],["deadbeef","12345678","0000001e","00000002","1eadbeef"],["deadbeef","12345678","0000001e","0000000f","1eadbeef"],["deadbeef","12345678","0000001e","00000010","1eadbeef"],["deadbeef","12345678","0000001e","00000011","1eadbeef"],["deadbeef","12345678","0000001e","0000001e","1eadbeef"],["deadbeef","12345678","0000001e","0000001f","1eadbeef"],["deadbeef","12345678","0000001e","00000020","1eadbeef"],["deadbeef","12345678","0000001e","00000021","1eadbeef"],["deadbeef","12345678","0000001e","00000040","1eadbeef"],["deadbeef","12345678","0000001e","ffffffff","1eadbeef"],["deadbeef","12345678","0000001f","00000000","deadbeef"],["deadbeef","12345678","0000001f","00000001","5eadbeef"],["deadbeef","12345678","0000001f","00000002","5eadbeef"],["deadbeef","12345678","0000001f","0000000f","5eadbeef"],["deadbeef","12345678","0000001f","00000010","5eadbeef"],["deadbeef","12345678","0000001f","00000011","5eadbeef"],["deadbeef","12345678","0000001f","0000001e","5eadbeef"],["deadbeef","12345678","0000001f","0000001f","5eadbeef"],["deadbeef","12345678","0000001f","00000020","5eadbeef"],["deadbeef","12345678","0000001f","00000021","5eadbeef"],["deadbeef","12345678","0000001f","00000040","5eadbeef"],["deadbeef","12345678","0000001f","ffffffff","5eadbeef"],["deadbeef","12345678","00000020","00000000","deadbeef"],["deadbeef","12345678","00000020","00000001","deadbeef"],["deadbeef","12345678","00000020","00000002","deadbeef"],["deadbeef","12345678","00000020","0000000f","deadbeef"],["deadbeef","12345678","00000020","00000010","deadbeef"],["deadbeef","12345678","00000020","00000011","deadbeef"],["deadbeef","12345678","00000020","0000001e","deadbeef"],["deadbeef","12345678","00000020","0000001f","deadbeef"],["deadbeef","12345678","00000020","00000020","deadbeef"],["deadbeef","12345678","00000020","00000021","deadbeef"],["deadbeef","12345678","00000020","00000040","deadbeef"],["deadbeef","12345678","00000020","ffffffff","deadbeef"],["deadbeef","12345678","00000021","00000000","deadbeef"],["deadbeef","12345678","00000021","00000001","deadbeef"],["deadbeef","12345678","00000021","00000002","deadbeef"],["deadbeef","12345678","00000021","0000000f","deadbeef"],["deadbeef","12345678","00000021","00000010","deadbeef"],["deadbeef","12345678","00000021","00000011","deadbeef"],["deadbeef","12345678","00000021","0000001e","deadbeef"],["deadbeef","12345678","00000021","0000001f","deadbeef"],["deadbeef","12345678","00000021","00000020","deadbeef"],["deadbeef","12345678","00000021","00000021","deadbeef"],["deadbeef","12345678","00000021","00000040","deadbeef"],["deadbeef","12345678","00000021","ffffffff","deadbeef"],["deadbeef","12345678","00000040","00000000","deadbeef"],["deadbeef","12345678","00000040","00000001","deadbeef"],["deadbeef","12345678","00000040","00000002","deadbeef"],["deadbeef","12345678","00000040","0000000f","deadbeef"],["deadbeef","12345678","00000040","00000010","deadbeef"],["deadbeef","12345678","00000040","00000011","deadbeef"],["deadbeef","12345678","00000040","0000001e","deadbeef"],["deadbeef","12345678","00000040","0000001f","deadbeef"],["deadbeef","12345678","00000040","00000020","deadbeef"],["deadbeef","12345678","00000040","00000021","deadbeef"],["deadbeef","12345678","00000040","00000040","deadbeef"],["deadbeef","12345678","00000040","ffffffff","deadbeef"],["deadbeef","12345678","ffffffff","00000000","deadbeef"],["deadbeef","12345678","ffffffff","00000001","deadbeef"],["deadbeef","12345678","ffffffff","00000002","deadbeef"],["deadbeef","12345678","ffffffff","0000000f","deadbeef"],["deadbeef","12345678","ffffffff","00000010","deadbeef"],["deadbeef","12345678","ffffffff","00000011","deadbeef"],["deadbeef","12345678","ffffffff","0000001e","deadbeef"],["deadbeef","12345678","ffffffff","0000001f","deadbeef"],["deadbeef","12345678","ffffffff","00000020","deadbeef"],["deadbeef","12345678","ffffffff","00000021","deadbeef"],["deadbeef","12345678","ffffffff","00000040","deadbeef"],["deadbeef","12345678","ffffffff","ffffffff","deadbeef"],["80000000","00000001","00000000","00000000","80000000"],["80000000","00000001","00000000","00000001","80000001"],["80000000","00000001","00000000","00000002","80000001"],["80000000","00000001","00000000","0000000f","80000001"],["80000000","00000001","00000000","00000010","80000001"],["80000000","00000001","00000000","00000011","80000001"],["80000000","00000001","00000000","0000001e","80000001"],["80000000","00000001","00000000","0000001f","80000001"],["80000000","00000001","00000000","00000020","00000001"],["80000000","00000001","00000000","00000021","00000001"],["80000000","00000001","00000000","00000040","00000001"],["80000000","00000001","00000000","ffffffff","00000001"],["80000000","00000001","00000001","00000000","80000000"],["80000000","00000001","00000001","00000001","80000002"],["80000000","00000001","00000001","00000002","80000002"],["80000000","00000001","00000001","0000000f","80000002"],["80000000","00000001","00000001","00000010","80000002"],["80000000","00000001","00000001","00000011","80000002"],["80000000","00000001","00000001","0000001e","80000002"],["80000000","00000001","00000001","0000001f","00000002"],["80000000","00000001","00000001","00000020","00000002"],["80000000","00000001","00000001","00000021","00000002"],["80000000","00000001","00000001","00000040","00000002"],["80000000","00000001","00000001","ffffffff","00000002"],["80000000","00000001","00000002","00000000","80000000"],["80000000","00000001","00000002","00000001","80000004"],["80000000","00000001","00000002","00000002","80000004"],["80000000","00000001","00000002","0000000f","80000004"],["80000000","00000001","00000002","00000010","80000004"],["80000000","00000001","00000002","00000011","80000004"],["80000000","00000001","00000002","0000001e","00000004"],["80000000","00000001","00000002","0000001f","00000004"],["80000000","00000001","00000002","00000020","00000004"],["80000000","00000001","00000002","00000021","00000004"],["80000000","00000001","00000002","00000040","00000004"],["80000000","00000001","00000002","ffffffff","00000004"],["80000000","00000001","0000000f","00000000","80000000"],["80000000","00000001","0000000f","00000001","80008000"],["80000000","00000001","0000000f","00000002","80008000"],["80000000","00000001","0000000f","0000000f","80008000"],["80000000","00000001","0000000f","00000010","80008000"],["80000000","00000001","0000000f","00000011","00008000"],["80000000","00000001","0000000f","0000001e","00008000"],["80000000","00000001","0000000f","0000001f","00008000"],["80000000","00000001","0000000f","00000020","00008000"],["80000000","00000001","0000000f","00000021","00008000"],["80000000","00000001","0000000f","00000040","00008000"],["80000000","00000001","0000000f","ffffffff","00008000"],["80000000","00000001","00000010","00000000","80000000"],["80000000","00000001","00000010","00000001","80010000"],["80000000","00000001","00000010","00000002","80010000"],["80000000","00000001","00000010","0000000f","80010000"],["80000000","00000001","00000010","00000010","00010000"],["80000000","00000001","00000010","00000011","00010000"],["80000000","00000001","00000010","0000001e","00010000"],["80000000","00000001","00000010","0000001f","00010000"],["80000000","00000001","00000010","00000020","00010000"],["80000000","00000001","00000010","00000021","00010000"],["80000000","00000001","00000010","00000040","00010000"],["80000000","00000001","00000010","ffffffff","00010000"],["80000000","00000001","00000011","00000000","80000000"],["80000000","00000001","00000011","00000001","80020000"],["80000000","00000001","00000011","00000002","80020000"],["80000000","00000001","00000011","0000000f","00020000"],["80000000","00000001","00000011","00000010","00020000"],["80000000","00000001","00000011","00000011","00020000"],["80000000","00000001","00000011","0000001e","00020000"],["80000000","00000001","00000011","0000001f","00020000"],["80000000","00000001","00000011","00000020","00020000"],["80000000","00000001","00000011","00000021","00020000"],["80000000","00000001","00000011","00000040","00020000"],["80000000","00000001","00000011","ffffffff","00020000"],["80000000","00000001","0000001e","00000000","80000000"],["80000000","00000001","0000001e","00000001","c0000000"],["80000000","00000001","0000001e","00000002","40000000"],["80000000","00000001","0000001e","0000000f","40000000"],["80000000","00000001","0000001e","00000010","40000000"],["80000000","00000001","0000001e","00000011","40000000"],["80000000","00000001","0000001e","0000001e","40000000"],["80000000","00000001","0000001e","0000001f","40000000"],["80000000","00000001","0000001e","00000020","40000000"],["80000000","00000001","0000001e","00000021","40000000"],["80000000","00000001","0000001e","00000040","40000000"],["80000000","00000001","0000001e","ffffffff","40000000"],["80000000","00000001","0000001f","00000000","80000000"],["80000000","00000001","0000001f","00000001","80000000"],["80000000","00000001","0000001f","00000002","80000000"],["80000000","00000001","0000001f","0000000f","80000000"],["80000000","00000001","0000001f","00000010","80000000"],["80000000","00000001","0000001f","00000011","80000000"],["80000000","00000001","0000001f","0000001e","80000000"],["80000000","00000001","0000001f","0000001f","80000000"],["80000000","00000001","0000001f","00000020","80000000"],["80000000","00000001","0000001f","00000021","80000000"],["80000000","00000001","0000001f","00000040","80000000"],["80000000","00000001","0000001f","ffffffff","80000000"],["80000000","00000001","00000020","00000000","80000000"],["80000000","00000001","00000020","00000001","80000000"],["80000000","00000001","00000020","00000002","80000000"],["80000000","00000001","00000020","0000000f","80000000"],["80000000","00000001","00000020","00000010","80000000"],["80000000","00000001","00000020","00000011","80000000"],["80000000","00000001","00000020","0000001e","80000000"],["80000000","00000001","00000020","0000001f","80000000"],["80000000","00000001","00000020","00000020","80000000"],["80000000","00000001","00000020","00000021","80000000"],["80000000","00000001","00000020","00000040","80000000"],["80000000","00000001","00000020","ffffffff","80000000"],["80000000","00000001","00000021","00000000","80000000"],["80000000","00000001","00000021","00000001","80000000"],["80000000","00000001","00000021","00000002","80000000"],["80000000","00000001","00000021","0000000f","80000000"],["80000000","00000001","00000021","00000010","80000000"],["80000000","00000001","00000021","00000011","80000000"],["80000000","00000001","00000021","0000001e","80000000"],["80000000","00000001","00000021","0000001f","80000000"],["80000000","00000001","00000021","00000020","80000000"],["80000000","00000001","00000021","00000021","80000000"],["80000000","00000001","00000021","00000040","80000000"],["80000000","00000001","00000021","ffffffff","80000000"],["80000000","00000001","00000040","00000000","80000000"],["80000000","00000001","00000040","00000001","80000000"],["80000000","00000001","00000040","00000002","80000000"],["80000000","00000001","00000040","0000000f","80000000"],["80000000","00000001","00000040","00000010","80000000"],["80000000","00000001","00000040","00000011","80000000"],["80000000","00000001","00000040","0000001e","80000000"],["80000000","00000001","00000040","0000001f","80000000"],["80000000","00000001","00000040","00000020","80000000"],["80000000","00000001","00000040","00000021","80000000"],["80000000","00000001","00000040","00000040","80000000"],["80000000","00000001","00000040","ffffffff","80000000"],["80000000","00000001","ffffffff","00000000","80000000"],["80000000","00000001","ffffffff","00000001","80000000"],["80000000","00000001","ffffffff","00000002","80000000"],["80000000","00000001","ffffffff","0000000f","80000000"],["80000000","00000001","ffffffff","00000010","80000000"],["80000000","00000001","ffffffff","00000011","80000000"],["80000000","00000001","ffffffff","0000001e","80000000"],["80000000","00000001","ffffffff","0000001f","80000000"],["80000000","00000001","ffffffff","00000020","80000000"],["80000000","00000001","ffffffff","00000021","80000000"],["80000000","00000001","ffffffff","00000040","80000000"],["80000000","00000001","ffffffff","ffffffff","80000000"]]} +{"op":"insert_bits_i32","code":46,"wgsl":"insertBits(ia, ib, c, d)","cases":[["00000000","ffffffff","00000000","00000000","00000000"],["00000000","ffffffff","00000000","00000001","00000001"],["00000000","ffffffff","00000000","00000002","00000003"],["00000000","ffffffff","00000000","0000000f","00007fff"],["00000000","ffffffff","00000000","00000010","0000ffff"],["00000000","ffffffff","00000000","00000011","0001ffff"],["00000000","ffffffff","00000000","0000001e","3fffffff"],["00000000","ffffffff","00000000","0000001f","7fffffff"],["00000000","ffffffff","00000000","00000020","ffffffff"],["00000000","ffffffff","00000000","00000021","ffffffff"],["00000000","ffffffff","00000000","00000040","ffffffff"],["00000000","ffffffff","00000000","ffffffff","ffffffff"],["00000000","ffffffff","00000001","00000000","00000000"],["00000000","ffffffff","00000001","00000001","00000002"],["00000000","ffffffff","00000001","00000002","00000006"],["00000000","ffffffff","00000001","0000000f","0000fffe"],["00000000","ffffffff","00000001","00000010","0001fffe"],["00000000","ffffffff","00000001","00000011","0003fffe"],["00000000","ffffffff","00000001","0000001e","7ffffffe"],["00000000","ffffffff","00000001","0000001f","fffffffe"],["00000000","ffffffff","00000001","00000020","fffffffe"],["00000000","ffffffff","00000001","00000021","fffffffe"],["00000000","ffffffff","00000001","00000040","fffffffe"],["00000000","ffffffff","00000001","ffffffff","fffffffe"],["00000000","ffffffff","00000002","00000000","00000000"],["00000000","ffffffff","00000002","00000001","00000004"],["00000000","ffffffff","00000002","00000002","0000000c"],["00000000","ffffffff","00000002","0000000f","0001fffc"],["00000000","ffffffff","00000002","00000010","0003fffc"],["00000000","ffffffff","00000002","00000011","0007fffc"],["00000000","ffffffff","00000002","0000001e","fffffffc"],["00000000","ffffffff","00000002","0000001f","fffffffc"],["00000000","ffffffff","00000002","00000020","fffffffc"],["00000000","ffffffff","00000002","00000021","fffffffc"],["00000000","ffffffff","00000002","00000040","fffffffc"],["00000000","ffffffff","00000002","ffffffff","fffffffc"],["00000000","ffffffff","0000000f","00000000","00000000"],["00000000","ffffffff","0000000f","00000001","00008000"],["00000000","ffffffff","0000000f","00000002","00018000"],["00000000","ffffffff","0000000f","0000000f","3fff8000"],["00000000","ffffffff","0000000f","00000010","7fff8000"],["00000000","ffffffff","0000000f","00000011","ffff8000"],["00000000","ffffffff","0000000f","0000001e","ffff8000"],["00000000","ffffffff","0000000f","0000001f","ffff8000"],["00000000","ffffffff","0000000f","00000020","ffff8000"],["00000000","ffffffff","0000000f","00000021","ffff8000"],["00000000","ffffffff","0000000f","00000040","ffff8000"],["00000000","ffffffff","0000000f","ffffffff","ffff8000"],["00000000","ffffffff","00000010","00000000","00000000"],["00000000","ffffffff","00000010","00000001","00010000"],["00000000","ffffffff","00000010","00000002","00030000"],["00000000","ffffffff","00000010","0000000f","7fff0000"],["00000000","ffffffff","00000010","00000010","ffff0000"],["00000000","ffffffff","00000010","00000011","ffff0000"],["00000000","ffffffff","00000010","0000001e","ffff0000"],["00000000","ffffffff","00000010","0000001f","ffff0000"],["00000000","ffffffff","00000010","00000020","ffff0000"],["00000000","ffffffff","00000010","00000021","ffff0000"],["00000000","ffffffff","00000010","00000040","ffff0000"],["00000000","ffffffff","00000010","ffffffff","ffff0000"],["00000000","ffffffff","00000011","00000000","00000000"],["00000000","ffffffff","00000011","00000001","00020000"],["00000000","ffffffff","00000011","00000002","00060000"],["00000000","ffffffff","00000011","0000000f","fffe0000"],["00000000","ffffffff","00000011","00000010","fffe0000"],["00000000","ffffffff","00000011","00000011","fffe0000"],["00000000","ffffffff","00000011","0000001e","fffe0000"],["00000000","ffffffff","00000011","0000001f","fffe0000"],["00000000","ffffffff","00000011","00000020","fffe0000"],["00000000","ffffffff","00000011","00000021","fffe0000"],["00000000","ffffffff","00000011","00000040","fffe0000"],["00000000","ffffffff","00000011","ffffffff","fffe0000"],["00000000","ffffffff","0000001e","00000000","00000000"],["00000000","ffffffff","0000001e","00000001","40000000"],["00000000","ffffffff","0000001e","00000002","c0000000"],["00000000","ffffffff","0000001e","0000000f","c0000000"],["00000000","ffffffff","0000001e","00000010","c0000000"],["00000000","ffffffff","0000001e","00000011","c0000000"],["00000000","ffffffff","0000001e","0000001e","c0000000"],["00000000","ffffffff","0000001e","0000001f","c0000000"],["00000000","ffffffff","0000001e","00000020","c0000000"],["00000000","ffffffff","0000001e","00000021","c0000000"],["00000000","ffffffff","0000001e","00000040","c0000000"],["00000000","ffffffff","0000001e","ffffffff","c0000000"],["00000000","ffffffff","0000001f","00000000","00000000"],["00000000","ffffffff","0000001f","00000001","80000000"],["00000000","ffffffff","0000001f","00000002","80000000"],["00000000","ffffffff","0000001f","0000000f","80000000"],["00000000","ffffffff","0000001f","00000010","80000000"],["00000000","ffffffff","0000001f","00000011","80000000"],["00000000","ffffffff","0000001f","0000001e","80000000"],["00000000","ffffffff","0000001f","0000001f","80000000"],["00000000","ffffffff","0000001f","00000020","80000000"],["00000000","ffffffff","0000001f","00000021","80000000"],["00000000","ffffffff","0000001f","00000040","80000000"],["00000000","ffffffff","0000001f","ffffffff","80000000"],["00000000","ffffffff","00000020","00000000","00000000"],["00000000","ffffffff","00000020","00000001","00000000"],["00000000","ffffffff","00000020","00000002","00000000"],["00000000","ffffffff","00000020","0000000f","00000000"],["00000000","ffffffff","00000020","00000010","00000000"],["00000000","ffffffff","00000020","00000011","00000000"],["00000000","ffffffff","00000020","0000001e","00000000"],["00000000","ffffffff","00000020","0000001f","00000000"],["00000000","ffffffff","00000020","00000020","00000000"],["00000000","ffffffff","00000020","00000021","00000000"],["00000000","ffffffff","00000020","00000040","00000000"],["00000000","ffffffff","00000020","ffffffff","00000000"],["00000000","ffffffff","00000021","00000000","00000000"],["00000000","ffffffff","00000021","00000001","00000000"],["00000000","ffffffff","00000021","00000002","00000000"],["00000000","ffffffff","00000021","0000000f","00000000"],["00000000","ffffffff","00000021","00000010","00000000"],["00000000","ffffffff","00000021","00000011","00000000"],["00000000","ffffffff","00000021","0000001e","00000000"],["00000000","ffffffff","00000021","0000001f","00000000"],["00000000","ffffffff","00000021","00000020","00000000"],["00000000","ffffffff","00000021","00000021","00000000"],["00000000","ffffffff","00000021","00000040","00000000"],["00000000","ffffffff","00000021","ffffffff","00000000"],["00000000","ffffffff","00000040","00000000","00000000"],["00000000","ffffffff","00000040","00000001","00000000"],["00000000","ffffffff","00000040","00000002","00000000"],["00000000","ffffffff","00000040","0000000f","00000000"],["00000000","ffffffff","00000040","00000010","00000000"],["00000000","ffffffff","00000040","00000011","00000000"],["00000000","ffffffff","00000040","0000001e","00000000"],["00000000","ffffffff","00000040","0000001f","00000000"],["00000000","ffffffff","00000040","00000020","00000000"],["00000000","ffffffff","00000040","00000021","00000000"],["00000000","ffffffff","00000040","00000040","00000000"],["00000000","ffffffff","00000040","ffffffff","00000000"],["00000000","ffffffff","ffffffff","00000000","00000000"],["00000000","ffffffff","ffffffff","00000001","00000000"],["00000000","ffffffff","ffffffff","00000002","00000000"],["00000000","ffffffff","ffffffff","0000000f","00000000"],["00000000","ffffffff","ffffffff","00000010","00000000"],["00000000","ffffffff","ffffffff","00000011","00000000"],["00000000","ffffffff","ffffffff","0000001e","00000000"],["00000000","ffffffff","ffffffff","0000001f","00000000"],["00000000","ffffffff","ffffffff","00000020","00000000"],["00000000","ffffffff","ffffffff","00000021","00000000"],["00000000","ffffffff","ffffffff","00000040","00000000"],["00000000","ffffffff","ffffffff","ffffffff","00000000"],["ffffffff","00000000","00000000","00000000","ffffffff"],["ffffffff","00000000","00000000","00000001","fffffffe"],["ffffffff","00000000","00000000","00000002","fffffffc"],["ffffffff","00000000","00000000","0000000f","ffff8000"],["ffffffff","00000000","00000000","00000010","ffff0000"],["ffffffff","00000000","00000000","00000011","fffe0000"],["ffffffff","00000000","00000000","0000001e","c0000000"],["ffffffff","00000000","00000000","0000001f","80000000"],["ffffffff","00000000","00000000","00000020","00000000"],["ffffffff","00000000","00000000","00000021","00000000"],["ffffffff","00000000","00000000","00000040","00000000"],["ffffffff","00000000","00000000","ffffffff","00000000"],["ffffffff","00000000","00000001","00000000","ffffffff"],["ffffffff","00000000","00000001","00000001","fffffffd"],["ffffffff","00000000","00000001","00000002","fffffff9"],["ffffffff","00000000","00000001","0000000f","ffff0001"],["ffffffff","00000000","00000001","00000010","fffe0001"],["ffffffff","00000000","00000001","00000011","fffc0001"],["ffffffff","00000000","00000001","0000001e","80000001"],["ffffffff","00000000","00000001","0000001f","00000001"],["ffffffff","00000000","00000001","00000020","00000001"],["ffffffff","00000000","00000001","00000021","00000001"],["ffffffff","00000000","00000001","00000040","00000001"],["ffffffff","00000000","00000001","ffffffff","00000001"],["ffffffff","00000000","00000002","00000000","ffffffff"],["ffffffff","00000000","00000002","00000001","fffffffb"],["ffffffff","00000000","00000002","00000002","fffffff3"],["ffffffff","00000000","00000002","0000000f","fffe0003"],["ffffffff","00000000","00000002","00000010","fffc0003"],["ffffffff","00000000","00000002","00000011","fff80003"],["ffffffff","00000000","00000002","0000001e","00000003"],["ffffffff","00000000","00000002","0000001f","00000003"],["ffffffff","00000000","00000002","00000020","00000003"],["ffffffff","00000000","00000002","00000021","00000003"],["ffffffff","00000000","00000002","00000040","00000003"],["ffffffff","00000000","00000002","ffffffff","00000003"],["ffffffff","00000000","0000000f","00000000","ffffffff"],["ffffffff","00000000","0000000f","00000001","ffff7fff"],["ffffffff","00000000","0000000f","00000002","fffe7fff"],["ffffffff","00000000","0000000f","0000000f","c0007fff"],["ffffffff","00000000","0000000f","00000010","80007fff"],["ffffffff","00000000","0000000f","00000011","00007fff"],["ffffffff","00000000","0000000f","0000001e","00007fff"],["ffffffff","00000000","0000000f","0000001f","00007fff"],["ffffffff","00000000","0000000f","00000020","00007fff"],["ffffffff","00000000","0000000f","00000021","00007fff"],["ffffffff","00000000","0000000f","00000040","00007fff"],["ffffffff","00000000","0000000f","ffffffff","00007fff"],["ffffffff","00000000","00000010","00000000","ffffffff"],["ffffffff","00000000","00000010","00000001","fffeffff"],["ffffffff","00000000","00000010","00000002","fffcffff"],["ffffffff","00000000","00000010","0000000f","8000ffff"],["ffffffff","00000000","00000010","00000010","0000ffff"],["ffffffff","00000000","00000010","00000011","0000ffff"],["ffffffff","00000000","00000010","0000001e","0000ffff"],["ffffffff","00000000","00000010","0000001f","0000ffff"],["ffffffff","00000000","00000010","00000020","0000ffff"],["ffffffff","00000000","00000010","00000021","0000ffff"],["ffffffff","00000000","00000010","00000040","0000ffff"],["ffffffff","00000000","00000010","ffffffff","0000ffff"],["ffffffff","00000000","00000011","00000000","ffffffff"],["ffffffff","00000000","00000011","00000001","fffdffff"],["ffffffff","00000000","00000011","00000002","fff9ffff"],["ffffffff","00000000","00000011","0000000f","0001ffff"],["ffffffff","00000000","00000011","00000010","0001ffff"],["ffffffff","00000000","00000011","00000011","0001ffff"],["ffffffff","00000000","00000011","0000001e","0001ffff"],["ffffffff","00000000","00000011","0000001f","0001ffff"],["ffffffff","00000000","00000011","00000020","0001ffff"],["ffffffff","00000000","00000011","00000021","0001ffff"],["ffffffff","00000000","00000011","00000040","0001ffff"],["ffffffff","00000000","00000011","ffffffff","0001ffff"],["ffffffff","00000000","0000001e","00000000","ffffffff"],["ffffffff","00000000","0000001e","00000001","bfffffff"],["ffffffff","00000000","0000001e","00000002","3fffffff"],["ffffffff","00000000","0000001e","0000000f","3fffffff"],["ffffffff","00000000","0000001e","00000010","3fffffff"],["ffffffff","00000000","0000001e","00000011","3fffffff"],["ffffffff","00000000","0000001e","0000001e","3fffffff"],["ffffffff","00000000","0000001e","0000001f","3fffffff"],["ffffffff","00000000","0000001e","00000020","3fffffff"],["ffffffff","00000000","0000001e","00000021","3fffffff"],["ffffffff","00000000","0000001e","00000040","3fffffff"],["ffffffff","00000000","0000001e","ffffffff","3fffffff"],["ffffffff","00000000","0000001f","00000000","ffffffff"],["ffffffff","00000000","0000001f","00000001","7fffffff"],["ffffffff","00000000","0000001f","00000002","7fffffff"],["ffffffff","00000000","0000001f","0000000f","7fffffff"],["ffffffff","00000000","0000001f","00000010","7fffffff"],["ffffffff","00000000","0000001f","00000011","7fffffff"],["ffffffff","00000000","0000001f","0000001e","7fffffff"],["ffffffff","00000000","0000001f","0000001f","7fffffff"],["ffffffff","00000000","0000001f","00000020","7fffffff"],["ffffffff","00000000","0000001f","00000021","7fffffff"],["ffffffff","00000000","0000001f","00000040","7fffffff"],["ffffffff","00000000","0000001f","ffffffff","7fffffff"],["ffffffff","00000000","00000020","00000000","ffffffff"],["ffffffff","00000000","00000020","00000001","ffffffff"],["ffffffff","00000000","00000020","00000002","ffffffff"],["ffffffff","00000000","00000020","0000000f","ffffffff"],["ffffffff","00000000","00000020","00000010","ffffffff"],["ffffffff","00000000","00000020","00000011","ffffffff"],["ffffffff","00000000","00000020","0000001e","ffffffff"],["ffffffff","00000000","00000020","0000001f","ffffffff"],["ffffffff","00000000","00000020","00000020","ffffffff"],["ffffffff","00000000","00000020","00000021","ffffffff"],["ffffffff","00000000","00000020","00000040","ffffffff"],["ffffffff","00000000","00000020","ffffffff","ffffffff"],["ffffffff","00000000","00000021","00000000","ffffffff"],["ffffffff","00000000","00000021","00000001","ffffffff"],["ffffffff","00000000","00000021","00000002","ffffffff"],["ffffffff","00000000","00000021","0000000f","ffffffff"],["ffffffff","00000000","00000021","00000010","ffffffff"],["ffffffff","00000000","00000021","00000011","ffffffff"],["ffffffff","00000000","00000021","0000001e","ffffffff"],["ffffffff","00000000","00000021","0000001f","ffffffff"],["ffffffff","00000000","00000021","00000020","ffffffff"],["ffffffff","00000000","00000021","00000021","ffffffff"],["ffffffff","00000000","00000021","00000040","ffffffff"],["ffffffff","00000000","00000021","ffffffff","ffffffff"],["ffffffff","00000000","00000040","00000000","ffffffff"],["ffffffff","00000000","00000040","00000001","ffffffff"],["ffffffff","00000000","00000040","00000002","ffffffff"],["ffffffff","00000000","00000040","0000000f","ffffffff"],["ffffffff","00000000","00000040","00000010","ffffffff"],["ffffffff","00000000","00000040","00000011","ffffffff"],["ffffffff","00000000","00000040","0000001e","ffffffff"],["ffffffff","00000000","00000040","0000001f","ffffffff"],["ffffffff","00000000","00000040","00000020","ffffffff"],["ffffffff","00000000","00000040","00000021","ffffffff"],["ffffffff","00000000","00000040","00000040","ffffffff"],["ffffffff","00000000","00000040","ffffffff","ffffffff"],["ffffffff","00000000","ffffffff","00000000","ffffffff"],["ffffffff","00000000","ffffffff","00000001","ffffffff"],["ffffffff","00000000","ffffffff","00000002","ffffffff"],["ffffffff","00000000","ffffffff","0000000f","ffffffff"],["ffffffff","00000000","ffffffff","00000010","ffffffff"],["ffffffff","00000000","ffffffff","00000011","ffffffff"],["ffffffff","00000000","ffffffff","0000001e","ffffffff"],["ffffffff","00000000","ffffffff","0000001f","ffffffff"],["ffffffff","00000000","ffffffff","00000020","ffffffff"],["ffffffff","00000000","ffffffff","00000021","ffffffff"],["ffffffff","00000000","ffffffff","00000040","ffffffff"],["ffffffff","00000000","ffffffff","ffffffff","ffffffff"],["deadbeef","12345678","00000000","00000000","deadbeef"],["deadbeef","12345678","00000000","00000001","deadbeee"],["deadbeef","12345678","00000000","00000002","deadbeec"],["deadbeef","12345678","00000000","0000000f","deadd678"],["deadbeef","12345678","00000000","00000010","dead5678"],["deadbeef","12345678","00000000","00000011","deac5678"],["deadbeef","12345678","00000000","0000001e","d2345678"],["deadbeef","12345678","00000000","0000001f","92345678"],["deadbeef","12345678","00000000","00000020","12345678"],["deadbeef","12345678","00000000","00000021","12345678"],["deadbeef","12345678","00000000","00000040","12345678"],["deadbeef","12345678","00000000","ffffffff","12345678"],["deadbeef","12345678","00000001","00000000","deadbeef"],["deadbeef","12345678","00000001","00000001","deadbeed"],["deadbeef","12345678","00000001","00000002","deadbee9"],["deadbeef","12345678","00000001","0000000f","deadacf1"],["deadbeef","12345678","00000001","00000010","deacacf1"],["deadbeef","12345678","00000001","00000011","deacacf1"],["deadbeef","12345678","00000001","0000001e","a468acf1"],["deadbeef","12345678","00000001","0000001f","2468acf1"],["deadbeef","12345678","00000001","00000020","2468acf1"],["deadbeef","12345678","00000001","00000021","2468acf1"],["deadbeef","12345678","00000001","00000040","2468acf1"],["deadbeef","12345678","00000001","ffffffff","2468acf1"],["deadbeef","12345678","00000002","00000000","deadbeef"],["deadbeef","12345678","00000002","00000001","deadbeeb"],["deadbeef","12345678","00000002","00000002","deadbee3"],["deadbeef","12345678","00000002","0000000f","dead59e3"],["deadbeef","12345678","00000002","00000010","dead59e3"],["deadbeef","12345678","00000002","00000011","dea959e3"],["deadbeef","12345678","00000002","0000001e","48d159e3"],["deadbeef","12345678","00000002","0000001f","48d159e3"],["deadbeef","12345678","00000002","00000020","48d159e3"],["deadbeef","12345678","00000002","00000021","48d159e3"],["deadbeef","12345678","00000002","00000040","48d159e3"],["deadbeef","12345678","00000002","ffffffff","48d159e3"],["deadbeef","12345678","0000000f","00000000","deadbeef"],["deadbeef","12345678","0000000f","00000001","dead3eef"],["deadbeef","12345678","0000000f","00000002","deac3eef"],["deadbeef","12345678","0000000f","0000000f","eb3c3eef"],["deadbeef","12345678","0000000f","00000010","ab3c3eef"],["deadbeef","12345678","0000000f","00000011","2b3c3eef"],["deadbeef","12345678","0000000f","0000001e","2b3c3eef"],["deadbeef","12345678","0000000f","0000001f","2b3c3eef"],["deadbeef","12345678","0000000f","00000020","2b3c3eef"],["deadbeef","12345678","0000000f","00000021","2b3c3eef"],["deadbeef","12345678","0000000f","00000040","2b3c3eef"],["deadbeef","12345678","0000000f","ffffffff","2b3c3eef"],["deadbeef","12345678","00000010","00000000","deadbeef"],["deadbeef","12345678","00000010","00000001","deacbeef"],["deadbeef","12345678","00000010","00000002","deacbeef"],["deadbeef","12345678","00000010","0000000f","d678beef"],["deadbeef","12345678","00000010","00000010","5678beef"],["deadbeef","12345678","00000010","00000011","5678beef"],["deadbeef","12345678","00000010","0000001e","5678beef"],["deadbeef","12345678","00000010","0000001f","5678beef"],["deadbeef","12345678","00000010","00000020","5678beef"],["deadbeef","12345678","00000010","00000021","5678beef"],["deadbeef","12345678","00000010","00000040","5678beef"],["deadbeef","12345678","00000010","ffffffff","5678beef"],["deadbeef","12345678","00000011","00000000","deadbeef"],["deadbeef","12345678","00000011","00000001","deadbeef"],["deadbeef","12345678","00000011","00000002","dea9beef"],["deadbeef","12345678","00000011","0000000f","acf1beef"],["deadbeef","12345678","00000011","00000010","acf1beef"],["deadbeef","12345678","00000011","00000011","acf1beef"],["deadbeef","12345678","00000011","0000001e","acf1beef"],["deadbeef","12345678","00000011","0000001f","acf1beef"],["deadbeef","12345678","00000011","00000020","acf1beef"],["deadbeef","12345678","00000011","00000021","acf1beef"],["deadbeef","12345678","00000011","00000040","acf1beef"],["deadbeef","12345678","00000011","ffffffff","acf1beef"],["deadbeef","12345678","0000001e","00000000","deadbeef"],["deadbeef","12345678","0000001e","00000001","9eadbeef"],["deadbeef","12345678","0000001e","00000002","1eadbeef"],["deadbeef","12345678","0000001e","0000000f","1eadbeef"],["deadbeef","12345678","0000001e","00000010","1eadbeef"],["deadbeef","12345678","0000001e","00000011","1eadbeef"],["deadbeef","12345678","0000001e","0000001e","1eadbeef"],["deadbeef","12345678","0000001e","0000001f","1eadbeef"],["deadbeef","12345678","0000001e","00000020","1eadbeef"],["deadbeef","12345678","0000001e","00000021","1eadbeef"],["deadbeef","12345678","0000001e","00000040","1eadbeef"],["deadbeef","12345678","0000001e","ffffffff","1eadbeef"],["deadbeef","12345678","0000001f","00000000","deadbeef"],["deadbeef","12345678","0000001f","00000001","5eadbeef"],["deadbeef","12345678","0000001f","00000002","5eadbeef"],["deadbeef","12345678","0000001f","0000000f","5eadbeef"],["deadbeef","12345678","0000001f","00000010","5eadbeef"],["deadbeef","12345678","0000001f","00000011","5eadbeef"],["deadbeef","12345678","0000001f","0000001e","5eadbeef"],["deadbeef","12345678","0000001f","0000001f","5eadbeef"],["deadbeef","12345678","0000001f","00000020","5eadbeef"],["deadbeef","12345678","0000001f","00000021","5eadbeef"],["deadbeef","12345678","0000001f","00000040","5eadbeef"],["deadbeef","12345678","0000001f","ffffffff","5eadbeef"],["deadbeef","12345678","00000020","00000000","deadbeef"],["deadbeef","12345678","00000020","00000001","deadbeef"],["deadbeef","12345678","00000020","00000002","deadbeef"],["deadbeef","12345678","00000020","0000000f","deadbeef"],["deadbeef","12345678","00000020","00000010","deadbeef"],["deadbeef","12345678","00000020","00000011","deadbeef"],["deadbeef","12345678","00000020","0000001e","deadbeef"],["deadbeef","12345678","00000020","0000001f","deadbeef"],["deadbeef","12345678","00000020","00000020","deadbeef"],["deadbeef","12345678","00000020","00000021","deadbeef"],["deadbeef","12345678","00000020","00000040","deadbeef"],["deadbeef","12345678","00000020","ffffffff","deadbeef"],["deadbeef","12345678","00000021","00000000","deadbeef"],["deadbeef","12345678","00000021","00000001","deadbeef"],["deadbeef","12345678","00000021","00000002","deadbeef"],["deadbeef","12345678","00000021","0000000f","deadbeef"],["deadbeef","12345678","00000021","00000010","deadbeef"],["deadbeef","12345678","00000021","00000011","deadbeef"],["deadbeef","12345678","00000021","0000001e","deadbeef"],["deadbeef","12345678","00000021","0000001f","deadbeef"],["deadbeef","12345678","00000021","00000020","deadbeef"],["deadbeef","12345678","00000021","00000021","deadbeef"],["deadbeef","12345678","00000021","00000040","deadbeef"],["deadbeef","12345678","00000021","ffffffff","deadbeef"],["deadbeef","12345678","00000040","00000000","deadbeef"],["deadbeef","12345678","00000040","00000001","deadbeef"],["deadbeef","12345678","00000040","00000002","deadbeef"],["deadbeef","12345678","00000040","0000000f","deadbeef"],["deadbeef","12345678","00000040","00000010","deadbeef"],["deadbeef","12345678","00000040","00000011","deadbeef"],["deadbeef","12345678","00000040","0000001e","deadbeef"],["deadbeef","12345678","00000040","0000001f","deadbeef"],["deadbeef","12345678","00000040","00000020","deadbeef"],["deadbeef","12345678","00000040","00000021","deadbeef"],["deadbeef","12345678","00000040","00000040","deadbeef"],["deadbeef","12345678","00000040","ffffffff","deadbeef"],["deadbeef","12345678","ffffffff","00000000","deadbeef"],["deadbeef","12345678","ffffffff","00000001","deadbeef"],["deadbeef","12345678","ffffffff","00000002","deadbeef"],["deadbeef","12345678","ffffffff","0000000f","deadbeef"],["deadbeef","12345678","ffffffff","00000010","deadbeef"],["deadbeef","12345678","ffffffff","00000011","deadbeef"],["deadbeef","12345678","ffffffff","0000001e","deadbeef"],["deadbeef","12345678","ffffffff","0000001f","deadbeef"],["deadbeef","12345678","ffffffff","00000020","deadbeef"],["deadbeef","12345678","ffffffff","00000021","deadbeef"],["deadbeef","12345678","ffffffff","00000040","deadbeef"],["deadbeef","12345678","ffffffff","ffffffff","deadbeef"],["80000000","00000001","00000000","00000000","80000000"],["80000000","00000001","00000000","00000001","80000001"],["80000000","00000001","00000000","00000002","80000001"],["80000000","00000001","00000000","0000000f","80000001"],["80000000","00000001","00000000","00000010","80000001"],["80000000","00000001","00000000","00000011","80000001"],["80000000","00000001","00000000","0000001e","80000001"],["80000000","00000001","00000000","0000001f","80000001"],["80000000","00000001","00000000","00000020","00000001"],["80000000","00000001","00000000","00000021","00000001"],["80000000","00000001","00000000","00000040","00000001"],["80000000","00000001","00000000","ffffffff","00000001"],["80000000","00000001","00000001","00000000","80000000"],["80000000","00000001","00000001","00000001","80000002"],["80000000","00000001","00000001","00000002","80000002"],["80000000","00000001","00000001","0000000f","80000002"],["80000000","00000001","00000001","00000010","80000002"],["80000000","00000001","00000001","00000011","80000002"],["80000000","00000001","00000001","0000001e","80000002"],["80000000","00000001","00000001","0000001f","00000002"],["80000000","00000001","00000001","00000020","00000002"],["80000000","00000001","00000001","00000021","00000002"],["80000000","00000001","00000001","00000040","00000002"],["80000000","00000001","00000001","ffffffff","00000002"],["80000000","00000001","00000002","00000000","80000000"],["80000000","00000001","00000002","00000001","80000004"],["80000000","00000001","00000002","00000002","80000004"],["80000000","00000001","00000002","0000000f","80000004"],["80000000","00000001","00000002","00000010","80000004"],["80000000","00000001","00000002","00000011","80000004"],["80000000","00000001","00000002","0000001e","00000004"],["80000000","00000001","00000002","0000001f","00000004"],["80000000","00000001","00000002","00000020","00000004"],["80000000","00000001","00000002","00000021","00000004"],["80000000","00000001","00000002","00000040","00000004"],["80000000","00000001","00000002","ffffffff","00000004"],["80000000","00000001","0000000f","00000000","80000000"],["80000000","00000001","0000000f","00000001","80008000"],["80000000","00000001","0000000f","00000002","80008000"],["80000000","00000001","0000000f","0000000f","80008000"],["80000000","00000001","0000000f","00000010","80008000"],["80000000","00000001","0000000f","00000011","00008000"],["80000000","00000001","0000000f","0000001e","00008000"],["80000000","00000001","0000000f","0000001f","00008000"],["80000000","00000001","0000000f","00000020","00008000"],["80000000","00000001","0000000f","00000021","00008000"],["80000000","00000001","0000000f","00000040","00008000"],["80000000","00000001","0000000f","ffffffff","00008000"],["80000000","00000001","00000010","00000000","80000000"],["80000000","00000001","00000010","00000001","80010000"],["80000000","00000001","00000010","00000002","80010000"],["80000000","00000001","00000010","0000000f","80010000"],["80000000","00000001","00000010","00000010","00010000"],["80000000","00000001","00000010","00000011","00010000"],["80000000","00000001","00000010","0000001e","00010000"],["80000000","00000001","00000010","0000001f","00010000"],["80000000","00000001","00000010","00000020","00010000"],["80000000","00000001","00000010","00000021","00010000"],["80000000","00000001","00000010","00000040","00010000"],["80000000","00000001","00000010","ffffffff","00010000"],["80000000","00000001","00000011","00000000","80000000"],["80000000","00000001","00000011","00000001","80020000"],["80000000","00000001","00000011","00000002","80020000"],["80000000","00000001","00000011","0000000f","00020000"],["80000000","00000001","00000011","00000010","00020000"],["80000000","00000001","00000011","00000011","00020000"],["80000000","00000001","00000011","0000001e","00020000"],["80000000","00000001","00000011","0000001f","00020000"],["80000000","00000001","00000011","00000020","00020000"],["80000000","00000001","00000011","00000021","00020000"],["80000000","00000001","00000011","00000040","00020000"],["80000000","00000001","00000011","ffffffff","00020000"],["80000000","00000001","0000001e","00000000","80000000"],["80000000","00000001","0000001e","00000001","c0000000"],["80000000","00000001","0000001e","00000002","40000000"],["80000000","00000001","0000001e","0000000f","40000000"],["80000000","00000001","0000001e","00000010","40000000"],["80000000","00000001","0000001e","00000011","40000000"],["80000000","00000001","0000001e","0000001e","40000000"],["80000000","00000001","0000001e","0000001f","40000000"],["80000000","00000001","0000001e","00000020","40000000"],["80000000","00000001","0000001e","00000021","40000000"],["80000000","00000001","0000001e","00000040","40000000"],["80000000","00000001","0000001e","ffffffff","40000000"],["80000000","00000001","0000001f","00000000","80000000"],["80000000","00000001","0000001f","00000001","80000000"],["80000000","00000001","0000001f","00000002","80000000"],["80000000","00000001","0000001f","0000000f","80000000"],["80000000","00000001","0000001f","00000010","80000000"],["80000000","00000001","0000001f","00000011","80000000"],["80000000","00000001","0000001f","0000001e","80000000"],["80000000","00000001","0000001f","0000001f","80000000"],["80000000","00000001","0000001f","00000020","80000000"],["80000000","00000001","0000001f","00000021","80000000"],["80000000","00000001","0000001f","00000040","80000000"],["80000000","00000001","0000001f","ffffffff","80000000"],["80000000","00000001","00000020","00000000","80000000"],["80000000","00000001","00000020","00000001","80000000"],["80000000","00000001","00000020","00000002","80000000"],["80000000","00000001","00000020","0000000f","80000000"],["80000000","00000001","00000020","00000010","80000000"],["80000000","00000001","00000020","00000011","80000000"],["80000000","00000001","00000020","0000001e","80000000"],["80000000","00000001","00000020","0000001f","80000000"],["80000000","00000001","00000020","00000020","80000000"],["80000000","00000001","00000020","00000021","80000000"],["80000000","00000001","00000020","00000040","80000000"],["80000000","00000001","00000020","ffffffff","80000000"],["80000000","00000001","00000021","00000000","80000000"],["80000000","00000001","00000021","00000001","80000000"],["80000000","00000001","00000021","00000002","80000000"],["80000000","00000001","00000021","0000000f","80000000"],["80000000","00000001","00000021","00000010","80000000"],["80000000","00000001","00000021","00000011","80000000"],["80000000","00000001","00000021","0000001e","80000000"],["80000000","00000001","00000021","0000001f","80000000"],["80000000","00000001","00000021","00000020","80000000"],["80000000","00000001","00000021","00000021","80000000"],["80000000","00000001","00000021","00000040","80000000"],["80000000","00000001","00000021","ffffffff","80000000"],["80000000","00000001","00000040","00000000","80000000"],["80000000","00000001","00000040","00000001","80000000"],["80000000","00000001","00000040","00000002","80000000"],["80000000","00000001","00000040","0000000f","80000000"],["80000000","00000001","00000040","00000010","80000000"],["80000000","00000001","00000040","00000011","80000000"],["80000000","00000001","00000040","0000001e","80000000"],["80000000","00000001","00000040","0000001f","80000000"],["80000000","00000001","00000040","00000020","80000000"],["80000000","00000001","00000040","00000021","80000000"],["80000000","00000001","00000040","00000040","80000000"],["80000000","00000001","00000040","ffffffff","80000000"],["80000000","00000001","ffffffff","00000000","80000000"],["80000000","00000001","ffffffff","00000001","80000000"],["80000000","00000001","ffffffff","00000002","80000000"],["80000000","00000001","ffffffff","0000000f","80000000"],["80000000","00000001","ffffffff","00000010","80000000"],["80000000","00000001","ffffffff","00000011","80000000"],["80000000","00000001","ffffffff","0000001e","80000000"],["80000000","00000001","ffffffff","0000001f","80000000"],["80000000","00000001","ffffffff","00000020","80000000"],["80000000","00000001","ffffffff","00000021","80000000"],["80000000","00000001","ffffffff","00000040","80000000"],["80000000","00000001","ffffffff","ffffffff","80000000"]]} +{"op":"u32_of_i32","code":47,"wgsl":"u32(ia)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000001"],["00000002","00000000","00000000","00000000","00000002"],["00000003","00000000","00000000","00000000","00000003"],["00000005","00000000","00000000","00000000","00000005"],["00000007","00000000","00000000","00000000","00000007"],["0000001f","00000000","00000000","00000000","0000001f"],["00000020","00000000","00000000","00000000","00000020"],["00000021","00000000","00000000","00000000","00000021"],["0000003f","00000000","00000000","00000000","0000003f"],["00000040","00000000","00000000","00000000","00000040"],["000000ff","00000000","00000000","00000000","000000ff"],["00007fff","00000000","00000000","00000000","00007fff"],["00008000","00000000","00000000","00000000","00008000"],["0000ffff","00000000","00000000","00000000","0000ffff"],["00010000","00000000","00000000","00000000","00010000"],["55555555","00000000","00000000","00000000","55555555"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7fffffff","00000000","00000000","00000000","7fffffff"],["80000000","00000000","00000000","00000000","80000000"],["80000001","00000000","00000000","00000000","80000001"],["aaaaaaaa","00000000","00000000","00000000","aaaaaaaa"],["deadbeef","00000000","00000000","00000000","deadbeef"],["ffff0000","00000000","00000000","00000000","ffff0000"],["ffff8000","00000000","00000000","00000000","ffff8000"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["ffffffe1","00000000","00000000","00000000","ffffffe1"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffffd","00000000","00000000","00000000","fffffffd"],["fffffffe","00000000","00000000","00000000","fffffffe"],["ffffffff","00000000","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","ffffffff"],["00000002","00000000","00000000","00000000","00000002"],["00000003","00000000","00000000","00000000","00000003"],["fffffffe","00000000","00000000","00000000","fffffffe"],["00000004","00000000","00000000","00000000","00000004"],["00000007","00000000","00000000","00000000","00000007"],["fffffffc","00000000","00000000","00000000","fffffffc"],["00000008","00000000","00000000","00000000","00000008"],["0000000f","00000000","00000000","00000000","0000000f"],["fffffff8","00000000","00000000","00000000","fffffff8"],["00000010","00000000","00000000","00000000","00000010"],["0000001f","00000000","00000000","00000000","0000001f"],["fffffff0","00000000","00000000","00000000","fffffff0"],["00000020","00000000","00000000","00000000","00000020"],["0000003f","00000000","00000000","00000000","0000003f"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["00000040","00000000","00000000","00000000","00000040"],["0000007f","00000000","00000000","00000000","0000007f"],["ffffffc0","00000000","00000000","00000000","ffffffc0"],["00000080","00000000","00000000","00000000","00000080"],["000000ff","00000000","00000000","00000000","000000ff"],["ffffff80","00000000","00000000","00000000","ffffff80"],["00000100","00000000","00000000","00000000","00000100"],["000001ff","00000000","00000000","00000000","000001ff"],["ffffff00","00000000","00000000","00000000","ffffff00"],["00000200","00000000","00000000","00000000","00000200"],["000003ff","00000000","00000000","00000000","000003ff"],["fffffe00","00000000","00000000","00000000","fffffe00"],["00000400","00000000","00000000","00000000","00000400"],["000007ff","00000000","00000000","00000000","000007ff"],["fffffc00","00000000","00000000","00000000","fffffc00"],["00000800","00000000","00000000","00000000","00000800"],["00000fff","00000000","00000000","00000000","00000fff"],["fffff800","00000000","00000000","00000000","fffff800"],["00001000","00000000","00000000","00000000","00001000"],["00001fff","00000000","00000000","00000000","00001fff"],["fffff000","00000000","00000000","00000000","fffff000"],["00002000","00000000","00000000","00000000","00002000"],["00003fff","00000000","00000000","00000000","00003fff"],["ffffe000","00000000","00000000","00000000","ffffe000"],["00004000","00000000","00000000","00000000","00004000"],["00007fff","00000000","00000000","00000000","00007fff"],["ffffc000","00000000","00000000","00000000","ffffc000"],["00008000","00000000","00000000","00000000","00008000"],["0000ffff","00000000","00000000","00000000","0000ffff"],["ffff8000","00000000","00000000","00000000","ffff8000"],["00010000","00000000","00000000","00000000","00010000"],["0001ffff","00000000","00000000","00000000","0001ffff"],["ffff0000","00000000","00000000","00000000","ffff0000"],["00020000","00000000","00000000","00000000","00020000"],["0003ffff","00000000","00000000","00000000","0003ffff"],["fffe0000","00000000","00000000","00000000","fffe0000"],["00040000","00000000","00000000","00000000","00040000"],["0007ffff","00000000","00000000","00000000","0007ffff"],["fffc0000","00000000","00000000","00000000","fffc0000"],["00080000","00000000","00000000","00000000","00080000"],["000fffff","00000000","00000000","00000000","000fffff"],["fff80000","00000000","00000000","00000000","fff80000"],["00100000","00000000","00000000","00000000","00100000"],["001fffff","00000000","00000000","00000000","001fffff"],["fff00000","00000000","00000000","00000000","fff00000"],["00200000","00000000","00000000","00000000","00200000"],["003fffff","00000000","00000000","00000000","003fffff"],["ffe00000","00000000","00000000","00000000","ffe00000"],["00400000","00000000","00000000","00000000","00400000"],["007fffff","00000000","00000000","00000000","007fffff"],["ffc00000","00000000","00000000","00000000","ffc00000"],["00800000","00000000","00000000","00000000","00800000"],["00ffffff","00000000","00000000","00000000","00ffffff"],["ff800000","00000000","00000000","00000000","ff800000"],["01000000","00000000","00000000","00000000","01000000"],["01ffffff","00000000","00000000","00000000","01ffffff"],["ff000000","00000000","00000000","00000000","ff000000"],["02000000","00000000","00000000","00000000","02000000"],["03ffffff","00000000","00000000","00000000","03ffffff"],["fe000000","00000000","00000000","00000000","fe000000"],["04000000","00000000","00000000","00000000","04000000"],["07ffffff","00000000","00000000","00000000","07ffffff"],["fc000000","00000000","00000000","00000000","fc000000"],["08000000","00000000","00000000","00000000","08000000"],["0fffffff","00000000","00000000","00000000","0fffffff"],["f8000000","00000000","00000000","00000000","f8000000"],["10000000","00000000","00000000","00000000","10000000"],["1fffffff","00000000","00000000","00000000","1fffffff"],["f0000000","00000000","00000000","00000000","f0000000"],["20000000","00000000","00000000","00000000","20000000"],["3fffffff","00000000","00000000","00000000","3fffffff"],["e0000000","00000000","00000000","00000000","e0000000"],["40000000","00000000","00000000","00000000","40000000"],["7fffffff","00000000","00000000","00000000","7fffffff"],["c0000000","00000000","00000000","00000000","c0000000"],["80000000","00000000","00000000","00000000","80000000"],["ffffffff","00000000","00000000","00000000","ffffffff"],["80000000","00000000","00000000","00000000","80000000"]]} +{"op":"i32_of_u32","code":48,"wgsl":"i32(a)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000001","00000000","00000000","00000000","00000001"],["00000002","00000000","00000000","00000000","00000002"],["00000003","00000000","00000000","00000000","00000003"],["00000005","00000000","00000000","00000000","00000005"],["00000007","00000000","00000000","00000000","00000007"],["0000001f","00000000","00000000","00000000","0000001f"],["00000020","00000000","00000000","00000000","00000020"],["00000021","00000000","00000000","00000000","00000021"],["0000003f","00000000","00000000","00000000","0000003f"],["00000040","00000000","00000000","00000000","00000040"],["000000ff","00000000","00000000","00000000","000000ff"],["00007fff","00000000","00000000","00000000","00007fff"],["00008000","00000000","00000000","00000000","00008000"],["0000ffff","00000000","00000000","00000000","0000ffff"],["00010000","00000000","00000000","00000000","00010000"],["55555555","00000000","00000000","00000000","55555555"],["7ffffffe","00000000","00000000","00000000","7ffffffe"],["7fffffff","00000000","00000000","00000000","7fffffff"],["80000000","00000000","00000000","00000000","80000000"],["80000001","00000000","00000000","00000000","80000001"],["aaaaaaaa","00000000","00000000","00000000","aaaaaaaa"],["deadbeef","00000000","00000000","00000000","deadbeef"],["ffff0000","00000000","00000000","00000000","ffff0000"],["ffff8000","00000000","00000000","00000000","ffff8000"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["ffffffe1","00000000","00000000","00000000","ffffffe1"],["fffffff9","00000000","00000000","00000000","fffffff9"],["fffffffd","00000000","00000000","00000000","fffffffd"],["fffffffe","00000000","00000000","00000000","fffffffe"],["ffffffff","00000000","00000000","00000000","ffffffff"],["00000001","00000000","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","ffffffff"],["00000002","00000000","00000000","00000000","00000002"],["00000003","00000000","00000000","00000000","00000003"],["fffffffe","00000000","00000000","00000000","fffffffe"],["00000004","00000000","00000000","00000000","00000004"],["00000007","00000000","00000000","00000000","00000007"],["fffffffc","00000000","00000000","00000000","fffffffc"],["00000008","00000000","00000000","00000000","00000008"],["0000000f","00000000","00000000","00000000","0000000f"],["fffffff8","00000000","00000000","00000000","fffffff8"],["00000010","00000000","00000000","00000000","00000010"],["0000001f","00000000","00000000","00000000","0000001f"],["fffffff0","00000000","00000000","00000000","fffffff0"],["00000020","00000000","00000000","00000000","00000020"],["0000003f","00000000","00000000","00000000","0000003f"],["ffffffe0","00000000","00000000","00000000","ffffffe0"],["00000040","00000000","00000000","00000000","00000040"],["0000007f","00000000","00000000","00000000","0000007f"],["ffffffc0","00000000","00000000","00000000","ffffffc0"],["00000080","00000000","00000000","00000000","00000080"],["000000ff","00000000","00000000","00000000","000000ff"],["ffffff80","00000000","00000000","00000000","ffffff80"],["00000100","00000000","00000000","00000000","00000100"],["000001ff","00000000","00000000","00000000","000001ff"],["ffffff00","00000000","00000000","00000000","ffffff00"],["00000200","00000000","00000000","00000000","00000200"],["000003ff","00000000","00000000","00000000","000003ff"],["fffffe00","00000000","00000000","00000000","fffffe00"],["00000400","00000000","00000000","00000000","00000400"],["000007ff","00000000","00000000","00000000","000007ff"],["fffffc00","00000000","00000000","00000000","fffffc00"],["00000800","00000000","00000000","00000000","00000800"],["00000fff","00000000","00000000","00000000","00000fff"],["fffff800","00000000","00000000","00000000","fffff800"],["00001000","00000000","00000000","00000000","00001000"],["00001fff","00000000","00000000","00000000","00001fff"],["fffff000","00000000","00000000","00000000","fffff000"],["00002000","00000000","00000000","00000000","00002000"],["00003fff","00000000","00000000","00000000","00003fff"],["ffffe000","00000000","00000000","00000000","ffffe000"],["00004000","00000000","00000000","00000000","00004000"],["00007fff","00000000","00000000","00000000","00007fff"],["ffffc000","00000000","00000000","00000000","ffffc000"],["00008000","00000000","00000000","00000000","00008000"],["0000ffff","00000000","00000000","00000000","0000ffff"],["ffff8000","00000000","00000000","00000000","ffff8000"],["00010000","00000000","00000000","00000000","00010000"],["0001ffff","00000000","00000000","00000000","0001ffff"],["ffff0000","00000000","00000000","00000000","ffff0000"],["00020000","00000000","00000000","00000000","00020000"],["0003ffff","00000000","00000000","00000000","0003ffff"],["fffe0000","00000000","00000000","00000000","fffe0000"],["00040000","00000000","00000000","00000000","00040000"],["0007ffff","00000000","00000000","00000000","0007ffff"],["fffc0000","00000000","00000000","00000000","fffc0000"],["00080000","00000000","00000000","00000000","00080000"],["000fffff","00000000","00000000","00000000","000fffff"],["fff80000","00000000","00000000","00000000","fff80000"],["00100000","00000000","00000000","00000000","00100000"],["001fffff","00000000","00000000","00000000","001fffff"],["fff00000","00000000","00000000","00000000","fff00000"],["00200000","00000000","00000000","00000000","00200000"],["003fffff","00000000","00000000","00000000","003fffff"],["ffe00000","00000000","00000000","00000000","ffe00000"],["00400000","00000000","00000000","00000000","00400000"],["007fffff","00000000","00000000","00000000","007fffff"],["ffc00000","00000000","00000000","00000000","ffc00000"],["00800000","00000000","00000000","00000000","00800000"],["00ffffff","00000000","00000000","00000000","00ffffff"],["ff800000","00000000","00000000","00000000","ff800000"],["01000000","00000000","00000000","00000000","01000000"],["01ffffff","00000000","00000000","00000000","01ffffff"],["ff000000","00000000","00000000","00000000","ff000000"],["02000000","00000000","00000000","00000000","02000000"],["03ffffff","00000000","00000000","00000000","03ffffff"],["fe000000","00000000","00000000","00000000","fe000000"],["04000000","00000000","00000000","00000000","04000000"],["07ffffff","00000000","00000000","00000000","07ffffff"],["fc000000","00000000","00000000","00000000","fc000000"],["08000000","00000000","00000000","00000000","08000000"],["0fffffff","00000000","00000000","00000000","0fffffff"],["f8000000","00000000","00000000","00000000","f8000000"],["10000000","00000000","00000000","00000000","10000000"],["1fffffff","00000000","00000000","00000000","1fffffff"],["f0000000","00000000","00000000","00000000","f0000000"],["20000000","00000000","00000000","00000000","20000000"],["3fffffff","00000000","00000000","00000000","3fffffff"],["e0000000","00000000","00000000","00000000","e0000000"],["40000000","00000000","00000000","00000000","40000000"],["7fffffff","00000000","00000000","00000000","7fffffff"],["c0000000","00000000","00000000","00000000","c0000000"],["80000000","00000000","00000000","00000000","80000000"],["ffffffff","00000000","00000000","00000000","ffffffff"],["80000000","00000000","00000000","00000000","80000000"]]} +{"op":"u32_of_bool","code":49,"wgsl":"u32(a < b)","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000001","00000000","00000000","00000001"],["00000000","00000007","00000000","00000000","00000001"],["00000000","7fffffff","00000000","00000000","00000001"],["00000000","80000000","00000000","00000000","00000001"],["00000000","fffffff9","00000000","00000000","00000001"],["00000000","ffffffff","00000000","00000000","00000001"],["00000001","00000000","00000000","00000000","00000000"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000007","00000000","00000000","00000001"],["00000001","7fffffff","00000000","00000000","00000001"],["00000001","80000000","00000000","00000000","00000001"],["00000001","fffffff9","00000000","00000000","00000001"],["00000001","ffffffff","00000000","00000000","00000001"],["00000007","00000000","00000000","00000000","00000000"],["00000007","00000001","00000000","00000000","00000000"],["00000007","00000007","00000000","00000000","00000000"],["00000007","7fffffff","00000000","00000000","00000001"],["00000007","80000000","00000000","00000000","00000001"],["00000007","fffffff9","00000000","00000000","00000001"],["00000007","ffffffff","00000000","00000000","00000001"],["7fffffff","00000000","00000000","00000000","00000000"],["7fffffff","00000001","00000000","00000000","00000000"],["7fffffff","00000007","00000000","00000000","00000000"],["7fffffff","7fffffff","00000000","00000000","00000000"],["7fffffff","80000000","00000000","00000000","00000001"],["7fffffff","fffffff9","00000000","00000000","00000001"],["7fffffff","ffffffff","00000000","00000000","00000001"],["80000000","00000000","00000000","00000000","00000000"],["80000000","00000001","00000000","00000000","00000000"],["80000000","00000007","00000000","00000000","00000000"],["80000000","7fffffff","00000000","00000000","00000000"],["80000000","80000000","00000000","00000000","00000000"],["80000000","fffffff9","00000000","00000000","00000001"],["80000000","ffffffff","00000000","00000000","00000001"],["fffffff9","00000000","00000000","00000000","00000000"],["fffffff9","00000001","00000000","00000000","00000000"],["fffffff9","00000007","00000000","00000000","00000000"],["fffffff9","7fffffff","00000000","00000000","00000000"],["fffffff9","80000000","00000000","00000000","00000000"],["fffffff9","fffffff9","00000000","00000000","00000000"],["fffffff9","ffffffff","00000000","00000000","00000001"],["ffffffff","00000000","00000000","00000000","00000000"],["ffffffff","00000001","00000000","00000000","00000000"],["ffffffff","00000007","00000000","00000000","00000000"],["ffffffff","7fffffff","00000000","00000000","00000000"],["ffffffff","80000000","00000000","00000000","00000000"],["ffffffff","fffffff9","00000000","00000000","00000000"],["ffffffff","ffffffff","00000000","00000000","00000000"]]} +{"op":"add_vec2_u32","code":50,"wgsl":"vec2(a, b) + vec2(c, d), folded","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000000","00000001","00000001","9e3779b8"],["00000000","00000000","00000007","00000007","53845408"],["00000000","00000000","7fffffff","7fffffff","9e3779b8"],["00000000","00000000","80000000","80000000","00000000"],["00000000","00000000","fffffff9","fffffff9","53845408"],["00000000","00000000","ffffffff","ffffffff","9e3779b8"],["00000000","00000001","00000000","00000001","3c6ef372"],["00000000","00000001","00000001","00000000","9e3779b8"],["00000000","00000001","00000007","00000006","53845408"],["00000000","00000001","7fffffff","7ffffffe","9e3779b8"],["00000000","00000001","80000000","80000001","3c6ef372"],["00000000","00000001","fffffff9","fffffff8","53845408"],["00000000","00000001","ffffffff","fffffffe","9e3779b8"],["00000000","00000007","00000000","00000007","a708a81e"],["00000000","00000007","00000001","00000006","08d12e64"],["00000000","00000007","00000007","00000000","53845408"],["00000000","00000007","7fffffff","7ffffff8","9e3779b8"],["00000000","00000007","80000000","80000007","a708a81e"],["00000000","00000007","fffffff9","fffffffe","e8ea9f64"],["00000000","00000007","ffffffff","fffffff8","9e3779b8"],["00000000","7fffffff","00000000","7fffffff","c3910c8e"],["00000000","7fffffff","00000001","7ffffffe","255992d4"],["00000000","7fffffff","00000007","7ffffff8","700cb878"],["00000000","7fffffff","7fffffff","00000000","9e3779b8"],["00000000","7fffffff","80000000","ffffffff","c3910c8e"],["00000000","7fffffff","fffffff9","80000006","e8ea9f64"],["00000000","7fffffff","ffffffff","80000000","9e3779b8"],["00000000","80000000","00000000","80000000","00000000"],["00000000","80000000","00000001","80000001","9e3779b8"],["00000000","80000000","00000007","80000007","53845408"],["00000000","80000000","7fffffff","ffffffff","9e3779b8"],["00000000","80000000","80000000","00000000","00000000"],["00000000","80000000","fffffff9","7ffffff9","53845408"],["00000000","80000000","ffffffff","7fffffff","9e3779b8"],["00000000","fffffff9","00000000","fffffff9","58f757e2"],["00000000","fffffff9","00000001","fffffff8","babfde28"],["00000000","fffffff9","00000007","fffffffe","700cb878"],["00000000","fffffff9","7fffffff","80000006","9e3779b8"],["00000000","fffffff9","80000000","7ffffff9","58f757e2"],["00000000","fffffff9","fffffff9","00000000","53845408"],["00000000","fffffff9","ffffffff","00000006","9e3779b8"],["00000000","ffffffff","00000000","ffffffff","c3910c8e"],["00000000","ffffffff","00000001","fffffffe","255992d4"],["00000000","ffffffff","00000007","fffffff8","700cb878"],["00000000","ffffffff","7fffffff","80000000","9e3779b8"],["00000000","ffffffff","80000000","7fffffff","c3910c8e"],["00000000","ffffffff","fffffff9","00000006","e8ea9f64"],["00000000","ffffffff","ffffffff","00000000","9e3779b8"],["00000001","00000000","00000000","00000001","9e3779b8"],["00000001","00000000","00000001","00000000","00000002"],["00000001","00000000","00000007","00000006","b54cda5e"],["00000001","00000000","7fffffff","7ffffffe","c3910c8e"],["00000001","00000000","80000000","80000001","9e3779b8"],["00000001","00000000","fffffff9","fffffff8","f1bbcdc2"],["00000001","00000000","ffffffff","fffffffe","c3910c8e"],["00000001","00000001","00000000","00000000","9e3779b8"],["00000001","00000001","00000001","00000001","3c6ef370"],["00000001","00000001","00000007","00000007","f1bbcdc0"],["00000001","00000001","7fffffff","7fffffff","00000000"],["00000001","00000001","80000000","80000000","9e3779b8"],["00000001","00000001","fffffff9","fffffff9","b54cda50"],["00000001","00000001","ffffffff","ffffffff","00000000"],["00000001","00000007","00000000","00000006","08d12e64"],["00000001","00000007","00000001","00000007","a708a81c"],["00000001","00000007","00000007","00000001","f1bbcdc0"],["00000001","00000007","7fffffff","7ffffff9","00000000"],["00000001","00000007","80000000","80000006","08d12e64"],["00000001","00000007","fffffff9","ffffffff","4ab325ac"],["00000001","00000007","ffffffff","fffffff9","00000000"],["00000001","7fffffff","00000000","7ffffffe","255992d4"],["00000001","7fffffff","00000001","7fffffff","c3910c8c"],["00000001","7fffffff","00000007","7ffffff9","0e443230"],["00000001","7fffffff","7fffffff","00000001","00000000"],["00000001","7fffffff","80000000","fffffffe","255992d4"],["00000001","7fffffff","fffffff9","80000007","4ab325ac"],["00000001","7fffffff","ffffffff","80000001","00000000"],["00000001","80000000","00000000","80000001","9e3779b8"],["00000001","80000000","00000001","80000000","00000002"],["00000001","80000000","00000007","80000006","b54cda5e"],["00000001","80000000","7fffffff","fffffffe","c3910c8e"],["00000001","80000000","80000000","00000001","9e3779b8"],["00000001","80000000","fffffff9","7ffffff8","f1bbcdc2"],["00000001","80000000","ffffffff","7ffffffe","c3910c8e"],["00000001","fffffff9","00000000","fffffff8","babfde28"],["00000001","fffffff9","00000001","fffffff9","58f757e0"],["00000001","fffffff9","00000007","ffffffff","0e443230"],["00000001","fffffff9","7fffffff","80000007","00000000"],["00000001","fffffff9","80000000","7ffffff8","babfde28"],["00000001","fffffff9","fffffff9","00000001","b54cda50"],["00000001","fffffff9","ffffffff","00000007","00000000"],["00000001","ffffffff","00000000","fffffffe","255992d4"],["00000001","ffffffff","00000001","ffffffff","c3910c8c"],["00000001","ffffffff","00000007","fffffff9","0e443230"],["00000001","ffffffff","7fffffff","80000001","00000000"],["00000001","ffffffff","80000000","7ffffffe","255992d4"],["00000001","ffffffff","fffffff9","00000007","4ab325ac"],["00000001","ffffffff","ffffffff","00000001","00000000"],["00000007","00000000","00000000","00000007","53845408"],["00000007","00000000","00000001","00000006","b54cda5e"],["00000007","00000000","00000007","00000000","0000000e"],["00000007","00000000","7fffffff","7ffffff8","0e44323e"],["00000007","00000000","80000000","80000007","53845408"],["00000007","00000000","fffffff9","fffffffe","c3910c8e"],["00000007","00000000","ffffffff","fffffff8","0e44323e"],["00000007","00000001","00000000","00000006","53845408"],["00000007","00000001","00000001","00000007","f1bbcdc0"],["00000007","00000001","00000007","00000001","3c6ef37c"],["00000007","00000001","7fffffff","7ffffff9","4ab325ac"],["00000007","00000001","80000000","80000006","53845408"],["00000007","00000001","fffffff9","ffffffff","00000000"],["00000007","00000001","ffffffff","fffffff9","4ab325ac"],["00000007","00000007","00000000","00000000","53845408"],["00000007","00000007","00000001","00000001","f1bbcdc0"],["00000007","00000007","00000007","00000007","a708a810"],["00000007","00000007","7fffffff","7fffffff","b54cda50"],["00000007","00000007","80000000","80000000","53845408"],["00000007","00000007","fffffff9","fffffff9","00000000"],["00000007","00000007","ffffffff","ffffffff","b54cda50"],["00000007","7fffffff","00000000","7ffffff8","700cb878"],["00000007","7fffffff","00000001","7ffffff9","0e443230"],["00000007","7fffffff","00000007","7fffffff","c3910c80"],["00000007","7fffffff","7fffffff","00000007","b54cda50"],["00000007","7fffffff","80000000","fffffff8","700cb878"],["00000007","7fffffff","fffffff9","80000001","00000000"],["00000007","7fffffff","ffffffff","80000007","b54cda50"],["00000007","80000000","00000000","80000007","53845408"],["00000007","80000000","00000001","80000006","b54cda5e"],["00000007","80000000","00000007","80000000","0000000e"],["00000007","80000000","7fffffff","fffffff8","0e44323e"],["00000007","80000000","80000000","00000007","53845408"],["00000007","80000000","fffffff9","7ffffffe","c3910c8e"],["00000007","80000000","ffffffff","7ffffff8","0e44323e"],["00000007","fffffff9","00000000","fffffffe","700cb878"],["00000007","fffffff9","00000001","ffffffff","0e443230"],["00000007","fffffff9","00000007","fffffff9","58f757ec"],["00000007","fffffff9","7fffffff","80000001","4ab325ac"],["00000007","fffffff9","80000000","7ffffffe","700cb878"],["00000007","fffffff9","fffffff9","00000007","00000000"],["00000007","fffffff9","ffffffff","00000001","4ab325ac"],["00000007","ffffffff","00000000","fffffff8","700cb878"],["00000007","ffffffff","00000001","fffffff9","0e443230"],["00000007","ffffffff","00000007","ffffffff","c3910c80"],["00000007","ffffffff","7fffffff","80000007","b54cda50"],["00000007","ffffffff","80000000","7ffffff8","700cb878"],["00000007","ffffffff","fffffff9","00000001","00000000"],["00000007","ffffffff","ffffffff","00000007","b54cda50"],["7fffffff","00000000","00000000","7fffffff","9e3779b8"],["7fffffff","00000000","00000001","7ffffffe","c3910c8e"],["7fffffff","00000000","00000007","7ffffff8","0e44323e"],["7fffffff","00000000","7fffffff","00000000","fffffffe"],["7fffffff","00000000","80000000","ffffffff","9e3779b8"],["7fffffff","00000000","fffffff9","80000006","4ab325ae"],["7fffffff","00000000","ffffffff","80000000","fffffffe"],["7fffffff","00000001","00000000","7ffffffe","9e3779b8"],["7fffffff","00000001","00000001","7fffffff","00000000"],["7fffffff","00000001","00000007","7ffffff9","4ab325ac"],["7fffffff","00000001","7fffffff","00000001","c3910c8c"],["7fffffff","00000001","80000000","fffffffe","9e3779b8"],["7fffffff","00000001","fffffff9","80000007","0e443230"],["7fffffff","00000001","ffffffff","80000001","c3910c8c"],["7fffffff","00000007","00000000","7ffffff8","9e3779b8"],["7fffffff","00000007","00000001","7ffffff9","00000000"],["7fffffff","00000007","00000007","7fffffff","b54cda50"],["7fffffff","00000007","7fffffff","00000007","58f757e0"],["7fffffff","00000007","80000000","fffffff8","9e3779b8"],["7fffffff","00000007","fffffff9","80000001","0e443230"],["7fffffff","00000007","ffffffff","80000007","58f757e0"],["7fffffff","7fffffff","00000000","00000000","9e3779b8"],["7fffffff","7fffffff","00000001","00000001","00000000"],["7fffffff","7fffffff","00000007","00000007","b54cda50"],["7fffffff","7fffffff","7fffffff","7fffffff","3c6ef370"],["7fffffff","7fffffff","80000000","80000000","9e3779b8"],["7fffffff","7fffffff","fffffff9","fffffff9","f1bbcdc0"],["7fffffff","7fffffff","ffffffff","ffffffff","3c6ef370"],["7fffffff","80000000","00000000","ffffffff","9e3779b8"],["7fffffff","80000000","00000001","fffffffe","c3910c8e"],["7fffffff","80000000","00000007","fffffff8","0e44323e"],["7fffffff","80000000","7fffffff","80000000","fffffffe"],["7fffffff","80000000","80000000","7fffffff","9e3779b8"],["7fffffff","80000000","fffffff9","00000006","4ab325ae"],["7fffffff","80000000","ffffffff","00000000","fffffffe"],["7fffffff","fffffff9","00000000","80000006","9e3779b8"],["7fffffff","fffffff9","00000001","80000007","00000000"],["7fffffff","fffffff9","00000007","80000001","4ab325ac"],["7fffffff","fffffff9","7fffffff","fffffff9","a708a81c"],["7fffffff","fffffff9","80000000","00000006","9e3779b8"],["7fffffff","fffffff9","fffffff9","7fffffff","f1bbcdc0"],["7fffffff","fffffff9","ffffffff","7ffffff9","a708a81c"],["7fffffff","ffffffff","00000000","80000000","9e3779b8"],["7fffffff","ffffffff","00000001","80000001","00000000"],["7fffffff","ffffffff","00000007","80000007","b54cda50"],["7fffffff","ffffffff","7fffffff","ffffffff","3c6ef370"],["7fffffff","ffffffff","80000000","00000000","9e3779b8"],["7fffffff","ffffffff","fffffff9","7ffffff9","f1bbcdc0"],["7fffffff","ffffffff","ffffffff","7fffffff","3c6ef370"],["80000000","00000000","00000000","80000000","00000000"],["80000000","00000000","00000001","80000001","9e3779b8"],["80000000","00000000","00000007","80000007","53845408"],["80000000","00000000","7fffffff","ffffffff","9e3779b8"],["80000000","00000000","80000000","00000000","00000000"],["80000000","00000000","fffffff9","7ffffff9","53845408"],["80000000","00000000","ffffffff","7fffffff","9e3779b8"],["80000000","00000001","00000000","80000001","3c6ef372"],["80000000","00000001","00000001","80000000","9e3779b8"],["80000000","00000001","00000007","80000006","53845408"],["80000000","00000001","7fffffff","fffffffe","9e3779b8"],["80000000","00000001","80000000","00000001","3c6ef372"],["80000000","00000001","fffffff9","7ffffff8","53845408"],["80000000","00000001","ffffffff","7ffffffe","9e3779b8"],["80000000","00000007","00000000","80000007","a708a81e"],["80000000","00000007","00000001","80000006","08d12e64"],["80000000","00000007","00000007","80000000","53845408"],["80000000","00000007","7fffffff","fffffff8","9e3779b8"],["80000000","00000007","80000000","00000007","a708a81e"],["80000000","00000007","fffffff9","7ffffffe","e8ea9f64"],["80000000","00000007","ffffffff","7ffffff8","9e3779b8"],["80000000","7fffffff","00000000","ffffffff","c3910c8e"],["80000000","7fffffff","00000001","fffffffe","255992d4"],["80000000","7fffffff","00000007","fffffff8","700cb878"],["80000000","7fffffff","7fffffff","80000000","9e3779b8"],["80000000","7fffffff","80000000","7fffffff","c3910c8e"],["80000000","7fffffff","fffffff9","00000006","e8ea9f64"],["80000000","7fffffff","ffffffff","00000000","9e3779b8"],["80000000","80000000","00000000","00000000","00000000"],["80000000","80000000","00000001","00000001","9e3779b8"],["80000000","80000000","00000007","00000007","53845408"],["80000000","80000000","7fffffff","7fffffff","9e3779b8"],["80000000","80000000","80000000","80000000","00000000"],["80000000","80000000","fffffff9","fffffff9","53845408"],["80000000","80000000","ffffffff","ffffffff","9e3779b8"],["80000000","fffffff9","00000000","7ffffff9","58f757e2"],["80000000","fffffff9","00000001","7ffffff8","babfde28"],["80000000","fffffff9","00000007","7ffffffe","700cb878"],["80000000","fffffff9","7fffffff","00000006","9e3779b8"],["80000000","fffffff9","80000000","fffffff9","58f757e2"],["80000000","fffffff9","fffffff9","80000000","53845408"],["80000000","fffffff9","ffffffff","80000006","9e3779b8"],["80000000","ffffffff","00000000","7fffffff","c3910c8e"],["80000000","ffffffff","00000001","7ffffffe","255992d4"],["80000000","ffffffff","00000007","7ffffff8","700cb878"],["80000000","ffffffff","7fffffff","00000000","9e3779b8"],["80000000","ffffffff","80000000","ffffffff","c3910c8e"],["80000000","ffffffff","fffffff9","80000006","e8ea9f64"],["80000000","ffffffff","ffffffff","80000000","9e3779b8"],["fffffff9","00000000","00000000","fffffff9","53845408"],["fffffff9","00000000","00000001","fffffff8","f1bbcdc2"],["fffffff9","00000000","00000007","fffffffe","c3910c8e"],["fffffff9","00000000","7fffffff","80000006","4ab325ae"],["fffffff9","00000000","80000000","7ffffff9","53845408"],["fffffff9","00000000","fffffff9","00000000","fffffff2"],["fffffff9","00000000","ffffffff","00000006","4ab325ae"],["fffffff9","00000001","00000000","fffffff8","53845408"],["fffffff9","00000001","00000001","fffffff9","b54cda50"],["fffffff9","00000001","00000007","ffffffff","00000000"],["fffffff9","00000001","7fffffff","80000007","0e443230"],["fffffff9","00000001","80000000","7ffffff8","53845408"],["fffffff9","00000001","fffffff9","00000001","c3910c80"],["fffffff9","00000001","ffffffff","00000007","0e443230"],["fffffff9","00000007","00000000","fffffffe","e8ea9f64"],["fffffff9","00000007","00000001","ffffffff","4ab325ac"],["fffffff9","00000007","00000007","fffffff9","00000000"],["fffffff9","00000007","7fffffff","80000001","0e443230"],["fffffff9","00000007","80000000","7ffffffe","e8ea9f64"],["fffffff9","00000007","fffffff9","00000007","58f757ec"],["fffffff9","00000007","ffffffff","00000001","0e443230"],["fffffff9","7fffffff","00000000","80000006","e8ea9f64"],["fffffff9","7fffffff","00000001","80000007","4ab325ac"],["fffffff9","7fffffff","00000007","80000001","00000000"],["fffffff9","7fffffff","7fffffff","fffffff9","f1bbcdc0"],["fffffff9","7fffffff","80000000","00000006","e8ea9f64"],["fffffff9","7fffffff","fffffff9","7fffffff","3c6ef37c"],["fffffff9","7fffffff","ffffffff","7ffffff9","f1bbcdc0"],["fffffff9","80000000","00000000","7ffffff9","53845408"],["fffffff9","80000000","00000001","7ffffff8","f1bbcdc2"],["fffffff9","80000000","00000007","7ffffffe","c3910c8e"],["fffffff9","80000000","7fffffff","00000006","4ab325ae"],["fffffff9","80000000","80000000","fffffff9","53845408"],["fffffff9","80000000","fffffff9","80000000","fffffff2"],["fffffff9","80000000","ffffffff","80000006","4ab325ae"],["fffffff9","fffffff9","00000000","00000000","53845408"],["fffffff9","fffffff9","00000001","00000001","b54cda50"],["fffffff9","fffffff9","00000007","00000007","00000000"],["fffffff9","fffffff9","7fffffff","7fffffff","f1bbcdc0"],["fffffff9","fffffff9","80000000","80000000","53845408"],["fffffff9","fffffff9","fffffff9","fffffff9","a708a810"],["fffffff9","fffffff9","ffffffff","ffffffff","f1bbcdc0"],["fffffff9","ffffffff","00000000","00000006","e8ea9f64"],["fffffff9","ffffffff","00000001","00000007","4ab325ac"],["fffffff9","ffffffff","00000007","00000001","00000000"],["fffffff9","ffffffff","7fffffff","7ffffff9","f1bbcdc0"],["fffffff9","ffffffff","80000000","80000006","e8ea9f64"],["fffffff9","ffffffff","fffffff9","ffffffff","3c6ef37c"],["fffffff9","ffffffff","ffffffff","fffffff9","f1bbcdc0"],["ffffffff","00000000","00000000","ffffffff","9e3779b8"],["ffffffff","00000000","00000001","fffffffe","c3910c8e"],["ffffffff","00000000","00000007","fffffff8","0e44323e"],["ffffffff","00000000","7fffffff","80000000","fffffffe"],["ffffffff","00000000","80000000","7fffffff","9e3779b8"],["ffffffff","00000000","fffffff9","00000006","4ab325ae"],["ffffffff","00000000","ffffffff","00000000","fffffffe"],["ffffffff","00000001","00000000","fffffffe","9e3779b8"],["ffffffff","00000001","00000001","ffffffff","00000000"],["ffffffff","00000001","00000007","fffffff9","4ab325ac"],["ffffffff","00000001","7fffffff","80000001","c3910c8c"],["ffffffff","00000001","80000000","7ffffffe","9e3779b8"],["ffffffff","00000001","fffffff9","00000007","0e443230"],["ffffffff","00000001","ffffffff","00000001","c3910c8c"],["ffffffff","00000007","00000000","fffffff8","9e3779b8"],["ffffffff","00000007","00000001","fffffff9","00000000"],["ffffffff","00000007","00000007","ffffffff","b54cda50"],["ffffffff","00000007","7fffffff","80000007","58f757e0"],["ffffffff","00000007","80000000","7ffffff8","9e3779b8"],["ffffffff","00000007","fffffff9","00000001","0e443230"],["ffffffff","00000007","ffffffff","00000007","58f757e0"],["ffffffff","7fffffff","00000000","80000000","9e3779b8"],["ffffffff","7fffffff","00000001","80000001","00000000"],["ffffffff","7fffffff","00000007","80000007","b54cda50"],["ffffffff","7fffffff","7fffffff","ffffffff","3c6ef370"],["ffffffff","7fffffff","80000000","00000000","9e3779b8"],["ffffffff","7fffffff","fffffff9","7ffffff9","f1bbcdc0"],["ffffffff","7fffffff","ffffffff","7fffffff","3c6ef370"],["ffffffff","80000000","00000000","7fffffff","9e3779b8"],["ffffffff","80000000","00000001","7ffffffe","c3910c8e"],["ffffffff","80000000","00000007","7ffffff8","0e44323e"],["ffffffff","80000000","7fffffff","00000000","fffffffe"],["ffffffff","80000000","80000000","ffffffff","9e3779b8"],["ffffffff","80000000","fffffff9","80000006","4ab325ae"],["ffffffff","80000000","ffffffff","80000000","fffffffe"],["ffffffff","fffffff9","00000000","00000006","9e3779b8"],["ffffffff","fffffff9","00000001","00000007","00000000"],["ffffffff","fffffff9","00000007","00000001","4ab325ac"],["ffffffff","fffffff9","7fffffff","7ffffff9","a708a81c"],["ffffffff","fffffff9","80000000","80000006","9e3779b8"],["ffffffff","fffffff9","fffffff9","ffffffff","f1bbcdc0"],["ffffffff","fffffff9","ffffffff","fffffff9","a708a81c"],["ffffffff","ffffffff","00000000","00000000","9e3779b8"],["ffffffff","ffffffff","00000001","00000001","00000000"],["ffffffff","ffffffff","00000007","00000007","b54cda50"],["ffffffff","ffffffff","7fffffff","7fffffff","3c6ef370"],["ffffffff","ffffffff","80000000","80000000","9e3779b8"],["ffffffff","ffffffff","fffffff9","fffffff9","f1bbcdc0"],["ffffffff","ffffffff","ffffffff","ffffffff","3c6ef370"]]} +{"op":"mul_vec2_u32","code":51,"wgsl":"vec2(a, b) * vec2(c, d), folded","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000000","00000001","00000001","00000000"],["00000000","00000000","00000007","00000007","00000000"],["00000000","00000000","7fffffff","7fffffff","00000000"],["00000000","00000000","80000000","80000000","00000000"],["00000000","00000000","fffffff9","fffffff9","00000000"],["00000000","00000000","ffffffff","ffffffff","00000000"],["00000000","00000001","00000000","00000001","9e3779b9"],["00000000","00000001","00000001","00000000","00000000"],["00000000","00000001","00000007","00000006","b54cda56"],["00000000","00000001","7fffffff","7ffffffe","43910c8e"],["00000000","00000001","80000000","80000001","1e3779b9"],["00000000","00000001","fffffff9","fffffff8","0e443238"],["00000000","00000001","ffffffff","fffffffe","c3910c8e"],["00000000","00000007","00000000","00000007","489e4c69"],["00000000","00000007","00000001","00000006","f519f85a"],["00000000","00000007","00000007","00000000","00000000"],["00000000","00000007","7fffffff","7ffffff8","e3dd5f88"],["00000000","00000007","80000000","80000007","c89e4c69"],["00000000","00000007","fffffff9","fffffffe","58f757e2"],["00000000","00000007","ffffffff","fffffff8","63dd5f88"],["00000000","7fffffff","00000000","7fffffff","9e3779b9"],["00000000","7fffffff","00000001","7ffffffe","bc6ef372"],["00000000","7fffffff","00000007","7ffffff8","71bbcdc8"],["00000000","7fffffff","7fffffff","00000000","00000000"],["00000000","7fffffff","80000000","ffffffff","1e3779b9"],["00000000","7fffffff","fffffff9","80000006","cab325aa"],["00000000","7fffffff","ffffffff","80000000","80000000"],["00000000","80000000","00000000","80000000","00000000"],["00000000","80000000","00000001","80000001","80000000"],["00000000","80000000","00000007","80000007","80000000"],["00000000","80000000","7fffffff","ffffffff","80000000"],["00000000","80000000","80000000","00000000","00000000"],["00000000","80000000","fffffff9","7ffffff9","80000000"],["00000000","80000000","ffffffff","7fffffff","80000000"],["00000000","fffffff9","00000000","fffffff9","489e4c69"],["00000000","fffffff9","00000001","fffffff8","9c22a078"],["00000000","fffffff9","00000007","fffffffe","a708a81e"],["00000000","fffffff9","7fffffff","80000006","8ae607a6"],["00000000","fffffff9","80000000","7ffffff9","c89e4c69"],["00000000","fffffff9","fffffff9","00000000","00000000"],["00000000","fffffff9","ffffffff","00000006","0ae607a6"],["00000000","ffffffff","00000000","ffffffff","9e3779b9"],["00000000","ffffffff","00000001","fffffffe","3c6ef372"],["00000000","ffffffff","00000007","fffffff8","f1bbcdc8"],["00000000","ffffffff","7fffffff","80000000","80000000"],["00000000","ffffffff","80000000","7fffffff","1e3779b9"],["00000000","ffffffff","fffffff9","00000006","4ab325aa"],["00000000","ffffffff","ffffffff","00000000","00000000"],["00000001","00000000","00000000","00000001","00000000"],["00000001","00000000","00000001","00000000","00000001"],["00000001","00000000","00000007","00000006","00000007"],["00000001","00000000","7fffffff","7ffffffe","7fffffff"],["00000001","00000000","80000000","80000001","80000000"],["00000001","00000000","fffffff9","fffffff8","fffffff9"],["00000001","00000000","ffffffff","fffffffe","ffffffff"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000001","00000001","00000001","9e3779b8"],["00000001","00000001","00000007","00000007","53845408"],["00000001","00000001","7fffffff","7fffffff","9e3779b8"],["00000001","00000001","80000000","80000000","00000000"],["00000001","00000001","fffffff9","fffffff9","53845408"],["00000001","00000001","ffffffff","ffffffff","9e3779b8"],["00000001","00000007","00000000","00000006","f519f85a"],["00000001","00000007","00000001","00000007","489e4c68"],["00000001","00000007","00000007","00000001","53845408"],["00000001","00000007","7fffffff","7ffffff9","489e4c68"],["00000001","00000007","80000000","80000006","f519f85a"],["00000001","00000007","fffffff9","ffffffff","53845408"],["00000001","00000007","ffffffff","fffffff9","489e4c68"],["00000001","7fffffff","00000000","7ffffffe","bc6ef372"],["00000001","7fffffff","00000001","7fffffff","9e3779b8"],["00000001","7fffffff","00000007","7ffffff9","53845408"],["00000001","7fffffff","7fffffff","00000001","9e3779b8"],["00000001","7fffffff","80000000","fffffffe","bc6ef372"],["00000001","7fffffff","fffffff9","80000007","53845408"],["00000001","7fffffff","ffffffff","80000001","9e3779b8"],["00000001","80000000","00000000","80000001","80000000"],["00000001","80000000","00000001","80000000","00000001"],["00000001","80000000","00000007","80000006","00000007"],["00000001","80000000","7fffffff","fffffffe","7fffffff"],["00000001","80000000","80000000","00000001","00000000"],["00000001","80000000","fffffff9","7ffffff8","fffffff9"],["00000001","80000000","ffffffff","7ffffffe","ffffffff"],["00000001","fffffff9","00000000","fffffff8","9c22a078"],["00000001","fffffff9","00000001","fffffff9","489e4c68"],["00000001","fffffff9","00000007","ffffffff","53845408"],["00000001","fffffff9","7fffffff","80000007","489e4c68"],["00000001","fffffff9","80000000","7ffffff8","9c22a078"],["00000001","fffffff9","fffffff9","00000001","53845408"],["00000001","fffffff9","ffffffff","00000007","489e4c68"],["00000001","ffffffff","00000000","fffffffe","3c6ef372"],["00000001","ffffffff","00000001","ffffffff","9e3779b8"],["00000001","ffffffff","00000007","fffffff9","53845408"],["00000001","ffffffff","7fffffff","80000001","9e3779b8"],["00000001","ffffffff","80000000","7ffffffe","3c6ef372"],["00000001","ffffffff","fffffff9","00000007","53845408"],["00000001","ffffffff","ffffffff","00000001","9e3779b8"],["00000007","00000000","00000000","00000007","00000000"],["00000007","00000000","00000001","00000006","00000007"],["00000007","00000000","00000007","00000000","00000031"],["00000007","00000000","7fffffff","7ffffff8","7ffffff9"],["00000007","00000000","80000000","80000007","80000000"],["00000007","00000000","fffffff9","fffffffe","ffffffcf"],["00000007","00000000","ffffffff","fffffff8","fffffff9"],["00000007","00000001","00000000","00000006","b54cda56"],["00000007","00000001","00000001","00000007","53845408"],["00000007","00000001","00000007","00000001","9e377988"],["00000007","00000001","7fffffff","7ffffff9","53845408"],["00000007","00000001","80000000","80000006","b54cda56"],["00000007","00000001","fffffff9","ffffffff","9e377988"],["00000007","00000001","ffffffff","fffffff9","53845408"],["00000007","00000007","00000000","00000000","00000000"],["00000007","00000007","00000001","00000001","53845408"],["00000007","00000007","00000007","00000007","489e4c58"],["00000007","00000007","7fffffff","7fffffff","53845408"],["00000007","00000007","80000000","80000000","00000000"],["00000007","00000007","fffffff9","fffffff9","489e4c58"],["00000007","00000007","ffffffff","ffffffff","53845408"],["00000007","7fffffff","00000000","7ffffff8","71bbcdc8"],["00000007","7fffffff","00000001","7ffffff9","53845408"],["00000007","7fffffff","00000007","7fffffff","9e377988"],["00000007","7fffffff","7fffffff","00000007","53845408"],["00000007","7fffffff","80000000","fffffff8","71bbcdc8"],["00000007","7fffffff","fffffff9","80000001","9e377988"],["00000007","7fffffff","ffffffff","80000007","53845408"],["00000007","80000000","00000000","80000007","80000000"],["00000007","80000000","00000001","80000006","00000007"],["00000007","80000000","00000007","80000000","00000031"],["00000007","80000000","7fffffff","fffffff8","7ffffff9"],["00000007","80000000","80000000","00000007","00000000"],["00000007","80000000","fffffff9","7ffffffe","ffffffcf"],["00000007","80000000","ffffffff","7ffffff8","fffffff9"],["00000007","fffffff9","00000000","fffffffe","a708a81e"],["00000007","fffffff9","00000001","ffffffff","53845408"],["00000007","fffffff9","00000007","fffffff9","489e4c58"],["00000007","fffffff9","7fffffff","80000001","53845408"],["00000007","fffffff9","80000000","7ffffffe","a708a81e"],["00000007","fffffff9","fffffff9","00000007","489e4c58"],["00000007","fffffff9","ffffffff","00000001","53845408"],["00000007","ffffffff","00000000","fffffff8","f1bbcdc8"],["00000007","ffffffff","00000001","fffffff9","53845408"],["00000007","ffffffff","00000007","ffffffff","9e377988"],["00000007","ffffffff","7fffffff","80000007","53845408"],["00000007","ffffffff","80000000","7ffffff8","f1bbcdc8"],["00000007","ffffffff","fffffff9","00000001","9e377988"],["00000007","ffffffff","ffffffff","00000007","53845408"],["7fffffff","00000000","00000000","7fffffff","00000000"],["7fffffff","00000000","00000001","7ffffffe","7fffffff"],["7fffffff","00000000","00000007","7ffffff8","7ffffff9"],["7fffffff","00000000","7fffffff","00000000","00000001"],["7fffffff","00000000","80000000","ffffffff","80000000"],["7fffffff","00000000","fffffff9","80000006","80000007"],["7fffffff","00000000","ffffffff","80000000","80000001"],["7fffffff","00000001","00000000","7ffffffe","43910c8e"],["7fffffff","00000001","00000001","7fffffff","9e3779b8"],["7fffffff","00000001","00000007","7ffffff9","53845408"],["7fffffff","00000001","7fffffff","00000001","9e3779b8"],["7fffffff","00000001","80000000","fffffffe","43910c8e"],["7fffffff","00000001","fffffff9","80000007","53845408"],["7fffffff","00000001","ffffffff","80000001","9e3779b8"],["7fffffff","00000007","00000000","7ffffff8","e3dd5f88"],["7fffffff","00000007","00000001","7ffffff9","489e4c68"],["7fffffff","00000007","00000007","7fffffff","53845408"],["7fffffff","00000007","7fffffff","00000007","489e4c68"],["7fffffff","00000007","80000000","fffffff8","e3dd5f88"],["7fffffff","00000007","fffffff9","80000001","53845408"],["7fffffff","00000007","ffffffff","80000007","489e4c68"],["7fffffff","7fffffff","00000000","00000000","00000000"],["7fffffff","7fffffff","00000001","00000001","9e3779b8"],["7fffffff","7fffffff","00000007","00000007","53845408"],["7fffffff","7fffffff","7fffffff","7fffffff","9e3779b8"],["7fffffff","7fffffff","80000000","80000000","00000000"],["7fffffff","7fffffff","fffffff9","fffffff9","53845408"],["7fffffff","7fffffff","ffffffff","ffffffff","9e3779b8"],["7fffffff","80000000","00000000","ffffffff","80000000"],["7fffffff","80000000","00000001","fffffffe","7fffffff"],["7fffffff","80000000","00000007","fffffff8","7ffffff9"],["7fffffff","80000000","7fffffff","80000000","00000001"],["7fffffff","80000000","80000000","7fffffff","00000000"],["7fffffff","80000000","fffffff9","00000006","80000007"],["7fffffff","80000000","ffffffff","00000000","80000001"],["7fffffff","fffffff9","00000000","80000006","8ae607a6"],["7fffffff","fffffff9","00000001","80000007","489e4c68"],["7fffffff","fffffff9","00000007","80000001","53845408"],["7fffffff","fffffff9","7fffffff","fffffff9","489e4c68"],["7fffffff","fffffff9","80000000","00000006","8ae607a6"],["7fffffff","fffffff9","fffffff9","7fffffff","53845408"],["7fffffff","fffffff9","ffffffff","7ffffff9","489e4c68"],["7fffffff","ffffffff","00000000","80000000","80000000"],["7fffffff","ffffffff","00000001","80000001","9e3779b8"],["7fffffff","ffffffff","00000007","80000007","53845408"],["7fffffff","ffffffff","7fffffff","ffffffff","9e3779b8"],["7fffffff","ffffffff","80000000","00000000","80000000"],["7fffffff","ffffffff","fffffff9","7ffffff9","53845408"],["7fffffff","ffffffff","ffffffff","7fffffff","9e3779b8"],["80000000","00000000","00000000","80000000","00000000"],["80000000","00000000","00000001","80000001","80000000"],["80000000","00000000","00000007","80000007","80000000"],["80000000","00000000","7fffffff","ffffffff","80000000"],["80000000","00000000","80000000","00000000","00000000"],["80000000","00000000","fffffff9","7ffffff9","80000000"],["80000000","00000000","ffffffff","7fffffff","80000000"],["80000000","00000001","00000000","80000001","1e3779b9"],["80000000","00000001","00000001","80000000","00000000"],["80000000","00000001","00000007","80000006","b54cda56"],["80000000","00000001","7fffffff","fffffffe","43910c8e"],["80000000","00000001","80000000","00000001","9e3779b9"],["80000000","00000001","fffffff9","7ffffff8","0e443238"],["80000000","00000001","ffffffff","7ffffffe","c3910c8e"],["80000000","00000007","00000000","80000007","c89e4c69"],["80000000","00000007","00000001","80000006","f519f85a"],["80000000","00000007","00000007","80000000","00000000"],["80000000","00000007","7fffffff","fffffff8","e3dd5f88"],["80000000","00000007","80000000","00000007","489e4c69"],["80000000","00000007","fffffff9","7ffffffe","58f757e2"],["80000000","00000007","ffffffff","7ffffff8","63dd5f88"],["80000000","7fffffff","00000000","ffffffff","1e3779b9"],["80000000","7fffffff","00000001","fffffffe","bc6ef372"],["80000000","7fffffff","00000007","fffffff8","71bbcdc8"],["80000000","7fffffff","7fffffff","80000000","00000000"],["80000000","7fffffff","80000000","7fffffff","9e3779b9"],["80000000","7fffffff","fffffff9","00000006","cab325aa"],["80000000","7fffffff","ffffffff","00000000","80000000"],["80000000","80000000","00000000","00000000","00000000"],["80000000","80000000","00000001","00000001","00000000"],["80000000","80000000","00000007","00000007","00000000"],["80000000","80000000","7fffffff","7fffffff","00000000"],["80000000","80000000","80000000","80000000","00000000"],["80000000","80000000","fffffff9","fffffff9","00000000"],["80000000","80000000","ffffffff","ffffffff","00000000"],["80000000","fffffff9","00000000","7ffffff9","c89e4c69"],["80000000","fffffff9","00000001","7ffffff8","9c22a078"],["80000000","fffffff9","00000007","7ffffffe","a708a81e"],["80000000","fffffff9","7fffffff","00000006","8ae607a6"],["80000000","fffffff9","80000000","fffffff9","489e4c69"],["80000000","fffffff9","fffffff9","80000000","00000000"],["80000000","fffffff9","ffffffff","80000006","0ae607a6"],["80000000","ffffffff","00000000","7fffffff","1e3779b9"],["80000000","ffffffff","00000001","7ffffffe","3c6ef372"],["80000000","ffffffff","00000007","7ffffff8","f1bbcdc8"],["80000000","ffffffff","7fffffff","00000000","80000000"],["80000000","ffffffff","80000000","ffffffff","9e3779b9"],["80000000","ffffffff","fffffff9","80000006","4ab325aa"],["80000000","ffffffff","ffffffff","80000000","00000000"],["fffffff9","00000000","00000000","fffffff9","00000000"],["fffffff9","00000000","00000001","fffffff8","fffffff9"],["fffffff9","00000000","00000007","fffffffe","ffffffcf"],["fffffff9","00000000","7fffffff","80000006","80000007"],["fffffff9","00000000","80000000","7ffffff9","80000000"],["fffffff9","00000000","fffffff9","00000000","00000031"],["fffffff9","00000000","ffffffff","00000006","00000007"],["fffffff9","00000001","00000000","fffffff8","0e443238"],["fffffff9","00000001","00000001","fffffff9","53845408"],["fffffff9","00000001","00000007","ffffffff","9e377988"],["fffffff9","00000001","7fffffff","80000007","53845408"],["fffffff9","00000001","80000000","7ffffff8","0e443238"],["fffffff9","00000001","fffffff9","00000001","9e377988"],["fffffff9","00000001","ffffffff","00000007","53845408"],["fffffff9","00000007","00000000","fffffffe","58f757e2"],["fffffff9","00000007","00000001","ffffffff","53845408"],["fffffff9","00000007","00000007","fffffff9","489e4c58"],["fffffff9","00000007","7fffffff","80000001","53845408"],["fffffff9","00000007","80000000","7ffffffe","58f757e2"],["fffffff9","00000007","fffffff9","00000007","489e4c58"],["fffffff9","00000007","ffffffff","00000001","53845408"],["fffffff9","7fffffff","00000000","80000006","cab325aa"],["fffffff9","7fffffff","00000001","80000007","53845408"],["fffffff9","7fffffff","00000007","80000001","9e377988"],["fffffff9","7fffffff","7fffffff","fffffff9","53845408"],["fffffff9","7fffffff","80000000","00000006","cab325aa"],["fffffff9","7fffffff","fffffff9","7fffffff","9e377988"],["fffffff9","7fffffff","ffffffff","7ffffff9","53845408"],["fffffff9","80000000","00000000","7ffffff9","80000000"],["fffffff9","80000000","00000001","7ffffff8","fffffff9"],["fffffff9","80000000","00000007","7ffffffe","ffffffcf"],["fffffff9","80000000","7fffffff","00000006","80000007"],["fffffff9","80000000","80000000","fffffff9","00000000"],["fffffff9","80000000","fffffff9","80000000","00000031"],["fffffff9","80000000","ffffffff","80000006","00000007"],["fffffff9","fffffff9","00000000","00000000","00000000"],["fffffff9","fffffff9","00000001","00000001","53845408"],["fffffff9","fffffff9","00000007","00000007","489e4c58"],["fffffff9","fffffff9","7fffffff","7fffffff","53845408"],["fffffff9","fffffff9","80000000","80000000","00000000"],["fffffff9","fffffff9","fffffff9","fffffff9","489e4c58"],["fffffff9","fffffff9","ffffffff","ffffffff","53845408"],["fffffff9","ffffffff","00000000","00000006","4ab325aa"],["fffffff9","ffffffff","00000001","00000007","53845408"],["fffffff9","ffffffff","00000007","00000001","9e377988"],["fffffff9","ffffffff","7fffffff","7ffffff9","53845408"],["fffffff9","ffffffff","80000000","80000006","4ab325aa"],["fffffff9","ffffffff","fffffff9","ffffffff","9e377988"],["fffffff9","ffffffff","ffffffff","fffffff9","53845408"],["ffffffff","00000000","00000000","ffffffff","00000000"],["ffffffff","00000000","00000001","fffffffe","ffffffff"],["ffffffff","00000000","00000007","fffffff8","fffffff9"],["ffffffff","00000000","7fffffff","80000000","80000001"],["ffffffff","00000000","80000000","7fffffff","80000000"],["ffffffff","00000000","fffffff9","00000006","00000007"],["ffffffff","00000000","ffffffff","00000000","00000001"],["ffffffff","00000001","00000000","fffffffe","c3910c8e"],["ffffffff","00000001","00000001","ffffffff","9e3779b8"],["ffffffff","00000001","00000007","fffffff9","53845408"],["ffffffff","00000001","7fffffff","80000001","9e3779b8"],["ffffffff","00000001","80000000","7ffffffe","c3910c8e"],["ffffffff","00000001","fffffff9","00000007","53845408"],["ffffffff","00000001","ffffffff","00000001","9e3779b8"],["ffffffff","00000007","00000000","fffffff8","63dd5f88"],["ffffffff","00000007","00000001","fffffff9","489e4c68"],["ffffffff","00000007","00000007","ffffffff","53845408"],["ffffffff","00000007","7fffffff","80000007","489e4c68"],["ffffffff","00000007","80000000","7ffffff8","63dd5f88"],["ffffffff","00000007","fffffff9","00000001","53845408"],["ffffffff","00000007","ffffffff","00000007","489e4c68"],["ffffffff","7fffffff","00000000","80000000","80000000"],["ffffffff","7fffffff","00000001","80000001","9e3779b8"],["ffffffff","7fffffff","00000007","80000007","53845408"],["ffffffff","7fffffff","7fffffff","ffffffff","9e3779b8"],["ffffffff","7fffffff","80000000","00000000","80000000"],["ffffffff","7fffffff","fffffff9","7ffffff9","53845408"],["ffffffff","7fffffff","ffffffff","7fffffff","9e3779b8"],["ffffffff","80000000","00000000","7fffffff","80000000"],["ffffffff","80000000","00000001","7ffffffe","ffffffff"],["ffffffff","80000000","00000007","7ffffff8","fffffff9"],["ffffffff","80000000","7fffffff","00000000","80000001"],["ffffffff","80000000","80000000","ffffffff","00000000"],["ffffffff","80000000","fffffff9","80000006","00000007"],["ffffffff","80000000","ffffffff","80000000","00000001"],["ffffffff","fffffff9","00000000","00000006","0ae607a6"],["ffffffff","fffffff9","00000001","00000007","489e4c68"],["ffffffff","fffffff9","00000007","00000001","53845408"],["ffffffff","fffffff9","7fffffff","7ffffff9","489e4c68"],["ffffffff","fffffff9","80000000","80000006","0ae607a6"],["ffffffff","fffffff9","fffffff9","ffffffff","53845408"],["ffffffff","fffffff9","ffffffff","fffffff9","489e4c68"],["ffffffff","ffffffff","00000000","00000000","00000000"],["ffffffff","ffffffff","00000001","00000001","9e3779b8"],["ffffffff","ffffffff","00000007","00000007","53845408"],["ffffffff","ffffffff","7fffffff","7fffffff","9e3779b8"],["ffffffff","ffffffff","80000000","80000000","00000000"],["ffffffff","ffffffff","fffffff9","fffffff9","53845408"],["ffffffff","ffffffff","ffffffff","ffffffff","9e3779b8"]]} +{"op":"mul_vec2_i32","code":52,"wgsl":"vec2(ia, ib) * vec2(ic, id), folded","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000000","00000001","00000001","00000000"],["00000000","00000000","00000007","00000007","00000000"],["00000000","00000000","7fffffff","7fffffff","00000000"],["00000000","00000000","80000000","80000000","00000000"],["00000000","00000000","fffffff9","fffffff9","00000000"],["00000000","00000000","ffffffff","ffffffff","00000000"],["00000000","00000001","00000000","00000001","9e3779b9"],["00000000","00000001","00000001","00000000","00000000"],["00000000","00000001","00000007","00000006","b54cda56"],["00000000","00000001","7fffffff","7ffffffe","43910c8e"],["00000000","00000001","80000000","80000001","1e3779b9"],["00000000","00000001","fffffff9","fffffff8","0e443238"],["00000000","00000001","ffffffff","fffffffe","c3910c8e"],["00000000","00000007","00000000","00000007","489e4c69"],["00000000","00000007","00000001","00000006","f519f85a"],["00000000","00000007","00000007","00000000","00000000"],["00000000","00000007","7fffffff","7ffffff8","e3dd5f88"],["00000000","00000007","80000000","80000007","c89e4c69"],["00000000","00000007","fffffff9","fffffffe","58f757e2"],["00000000","00000007","ffffffff","fffffff8","63dd5f88"],["00000000","7fffffff","00000000","7fffffff","9e3779b9"],["00000000","7fffffff","00000001","7ffffffe","bc6ef372"],["00000000","7fffffff","00000007","7ffffff8","71bbcdc8"],["00000000","7fffffff","7fffffff","00000000","00000000"],["00000000","7fffffff","80000000","ffffffff","1e3779b9"],["00000000","7fffffff","fffffff9","80000006","cab325aa"],["00000000","7fffffff","ffffffff","80000000","80000000"],["00000000","80000000","00000000","80000000","00000000"],["00000000","80000000","00000001","80000001","80000000"],["00000000","80000000","00000007","80000007","80000000"],["00000000","80000000","7fffffff","ffffffff","80000000"],["00000000","80000000","80000000","00000000","00000000"],["00000000","80000000","fffffff9","7ffffff9","80000000"],["00000000","80000000","ffffffff","7fffffff","80000000"],["00000000","fffffff9","00000000","fffffff9","489e4c69"],["00000000","fffffff9","00000001","fffffff8","9c22a078"],["00000000","fffffff9","00000007","fffffffe","a708a81e"],["00000000","fffffff9","7fffffff","80000006","8ae607a6"],["00000000","fffffff9","80000000","7ffffff9","c89e4c69"],["00000000","fffffff9","fffffff9","00000000","00000000"],["00000000","fffffff9","ffffffff","00000006","0ae607a6"],["00000000","ffffffff","00000000","ffffffff","9e3779b9"],["00000000","ffffffff","00000001","fffffffe","3c6ef372"],["00000000","ffffffff","00000007","fffffff8","f1bbcdc8"],["00000000","ffffffff","7fffffff","80000000","80000000"],["00000000","ffffffff","80000000","7fffffff","1e3779b9"],["00000000","ffffffff","fffffff9","00000006","4ab325aa"],["00000000","ffffffff","ffffffff","00000000","00000000"],["00000001","00000000","00000000","00000001","00000000"],["00000001","00000000","00000001","00000000","00000001"],["00000001","00000000","00000007","00000006","00000007"],["00000001","00000000","7fffffff","7ffffffe","7fffffff"],["00000001","00000000","80000000","80000001","80000000"],["00000001","00000000","fffffff9","fffffff8","fffffff9"],["00000001","00000000","ffffffff","fffffffe","ffffffff"],["00000001","00000001","00000000","00000000","00000000"],["00000001","00000001","00000001","00000001","9e3779b8"],["00000001","00000001","00000007","00000007","53845408"],["00000001","00000001","7fffffff","7fffffff","9e3779b8"],["00000001","00000001","80000000","80000000","00000000"],["00000001","00000001","fffffff9","fffffff9","53845408"],["00000001","00000001","ffffffff","ffffffff","9e3779b8"],["00000001","00000007","00000000","00000006","f519f85a"],["00000001","00000007","00000001","00000007","489e4c68"],["00000001","00000007","00000007","00000001","53845408"],["00000001","00000007","7fffffff","7ffffff9","489e4c68"],["00000001","00000007","80000000","80000006","f519f85a"],["00000001","00000007","fffffff9","ffffffff","53845408"],["00000001","00000007","ffffffff","fffffff9","489e4c68"],["00000001","7fffffff","00000000","7ffffffe","bc6ef372"],["00000001","7fffffff","00000001","7fffffff","9e3779b8"],["00000001","7fffffff","00000007","7ffffff9","53845408"],["00000001","7fffffff","7fffffff","00000001","9e3779b8"],["00000001","7fffffff","80000000","fffffffe","bc6ef372"],["00000001","7fffffff","fffffff9","80000007","53845408"],["00000001","7fffffff","ffffffff","80000001","9e3779b8"],["00000001","80000000","00000000","80000001","80000000"],["00000001","80000000","00000001","80000000","00000001"],["00000001","80000000","00000007","80000006","00000007"],["00000001","80000000","7fffffff","fffffffe","7fffffff"],["00000001","80000000","80000000","00000001","00000000"],["00000001","80000000","fffffff9","7ffffff8","fffffff9"],["00000001","80000000","ffffffff","7ffffffe","ffffffff"],["00000001","fffffff9","00000000","fffffff8","9c22a078"],["00000001","fffffff9","00000001","fffffff9","489e4c68"],["00000001","fffffff9","00000007","ffffffff","53845408"],["00000001","fffffff9","7fffffff","80000007","489e4c68"],["00000001","fffffff9","80000000","7ffffff8","9c22a078"],["00000001","fffffff9","fffffff9","00000001","53845408"],["00000001","fffffff9","ffffffff","00000007","489e4c68"],["00000001","ffffffff","00000000","fffffffe","3c6ef372"],["00000001","ffffffff","00000001","ffffffff","9e3779b8"],["00000001","ffffffff","00000007","fffffff9","53845408"],["00000001","ffffffff","7fffffff","80000001","9e3779b8"],["00000001","ffffffff","80000000","7ffffffe","3c6ef372"],["00000001","ffffffff","fffffff9","00000007","53845408"],["00000001","ffffffff","ffffffff","00000001","9e3779b8"],["00000007","00000000","00000000","00000007","00000000"],["00000007","00000000","00000001","00000006","00000007"],["00000007","00000000","00000007","00000000","00000031"],["00000007","00000000","7fffffff","7ffffff8","7ffffff9"],["00000007","00000000","80000000","80000007","80000000"],["00000007","00000000","fffffff9","fffffffe","ffffffcf"],["00000007","00000000","ffffffff","fffffff8","fffffff9"],["00000007","00000001","00000000","00000006","b54cda56"],["00000007","00000001","00000001","00000007","53845408"],["00000007","00000001","00000007","00000001","9e377988"],["00000007","00000001","7fffffff","7ffffff9","53845408"],["00000007","00000001","80000000","80000006","b54cda56"],["00000007","00000001","fffffff9","ffffffff","9e377988"],["00000007","00000001","ffffffff","fffffff9","53845408"],["00000007","00000007","00000000","00000000","00000000"],["00000007","00000007","00000001","00000001","53845408"],["00000007","00000007","00000007","00000007","489e4c58"],["00000007","00000007","7fffffff","7fffffff","53845408"],["00000007","00000007","80000000","80000000","00000000"],["00000007","00000007","fffffff9","fffffff9","489e4c58"],["00000007","00000007","ffffffff","ffffffff","53845408"],["00000007","7fffffff","00000000","7ffffff8","71bbcdc8"],["00000007","7fffffff","00000001","7ffffff9","53845408"],["00000007","7fffffff","00000007","7fffffff","9e377988"],["00000007","7fffffff","7fffffff","00000007","53845408"],["00000007","7fffffff","80000000","fffffff8","71bbcdc8"],["00000007","7fffffff","fffffff9","80000001","9e377988"],["00000007","7fffffff","ffffffff","80000007","53845408"],["00000007","80000000","00000000","80000007","80000000"],["00000007","80000000","00000001","80000006","00000007"],["00000007","80000000","00000007","80000000","00000031"],["00000007","80000000","7fffffff","fffffff8","7ffffff9"],["00000007","80000000","80000000","00000007","00000000"],["00000007","80000000","fffffff9","7ffffffe","ffffffcf"],["00000007","80000000","ffffffff","7ffffff8","fffffff9"],["00000007","fffffff9","00000000","fffffffe","a708a81e"],["00000007","fffffff9","00000001","ffffffff","53845408"],["00000007","fffffff9","00000007","fffffff9","489e4c58"],["00000007","fffffff9","7fffffff","80000001","53845408"],["00000007","fffffff9","80000000","7ffffffe","a708a81e"],["00000007","fffffff9","fffffff9","00000007","489e4c58"],["00000007","fffffff9","ffffffff","00000001","53845408"],["00000007","ffffffff","00000000","fffffff8","f1bbcdc8"],["00000007","ffffffff","00000001","fffffff9","53845408"],["00000007","ffffffff","00000007","ffffffff","9e377988"],["00000007","ffffffff","7fffffff","80000007","53845408"],["00000007","ffffffff","80000000","7ffffff8","f1bbcdc8"],["00000007","ffffffff","fffffff9","00000001","9e377988"],["00000007","ffffffff","ffffffff","00000007","53845408"],["7fffffff","00000000","00000000","7fffffff","00000000"],["7fffffff","00000000","00000001","7ffffffe","7fffffff"],["7fffffff","00000000","00000007","7ffffff8","7ffffff9"],["7fffffff","00000000","7fffffff","00000000","00000001"],["7fffffff","00000000","80000000","ffffffff","80000000"],["7fffffff","00000000","fffffff9","80000006","80000007"],["7fffffff","00000000","ffffffff","80000000","80000001"],["7fffffff","00000001","00000000","7ffffffe","43910c8e"],["7fffffff","00000001","00000001","7fffffff","9e3779b8"],["7fffffff","00000001","00000007","7ffffff9","53845408"],["7fffffff","00000001","7fffffff","00000001","9e3779b8"],["7fffffff","00000001","80000000","fffffffe","43910c8e"],["7fffffff","00000001","fffffff9","80000007","53845408"],["7fffffff","00000001","ffffffff","80000001","9e3779b8"],["7fffffff","00000007","00000000","7ffffff8","e3dd5f88"],["7fffffff","00000007","00000001","7ffffff9","489e4c68"],["7fffffff","00000007","00000007","7fffffff","53845408"],["7fffffff","00000007","7fffffff","00000007","489e4c68"],["7fffffff","00000007","80000000","fffffff8","e3dd5f88"],["7fffffff","00000007","fffffff9","80000001","53845408"],["7fffffff","00000007","ffffffff","80000007","489e4c68"],["7fffffff","7fffffff","00000000","00000000","00000000"],["7fffffff","7fffffff","00000001","00000001","9e3779b8"],["7fffffff","7fffffff","00000007","00000007","53845408"],["7fffffff","7fffffff","7fffffff","7fffffff","9e3779b8"],["7fffffff","7fffffff","80000000","80000000","00000000"],["7fffffff","7fffffff","fffffff9","fffffff9","53845408"],["7fffffff","7fffffff","ffffffff","ffffffff","9e3779b8"],["7fffffff","80000000","00000000","ffffffff","80000000"],["7fffffff","80000000","00000001","fffffffe","7fffffff"],["7fffffff","80000000","00000007","fffffff8","7ffffff9"],["7fffffff","80000000","7fffffff","80000000","00000001"],["7fffffff","80000000","80000000","7fffffff","00000000"],["7fffffff","80000000","fffffff9","00000006","80000007"],["7fffffff","80000000","ffffffff","00000000","80000001"],["7fffffff","fffffff9","00000000","80000006","8ae607a6"],["7fffffff","fffffff9","00000001","80000007","489e4c68"],["7fffffff","fffffff9","00000007","80000001","53845408"],["7fffffff","fffffff9","7fffffff","fffffff9","489e4c68"],["7fffffff","fffffff9","80000000","00000006","8ae607a6"],["7fffffff","fffffff9","fffffff9","7fffffff","53845408"],["7fffffff","fffffff9","ffffffff","7ffffff9","489e4c68"],["7fffffff","ffffffff","00000000","80000000","80000000"],["7fffffff","ffffffff","00000001","80000001","9e3779b8"],["7fffffff","ffffffff","00000007","80000007","53845408"],["7fffffff","ffffffff","7fffffff","ffffffff","9e3779b8"],["7fffffff","ffffffff","80000000","00000000","80000000"],["7fffffff","ffffffff","fffffff9","7ffffff9","53845408"],["7fffffff","ffffffff","ffffffff","7fffffff","9e3779b8"],["80000000","00000000","00000000","80000000","00000000"],["80000000","00000000","00000001","80000001","80000000"],["80000000","00000000","00000007","80000007","80000000"],["80000000","00000000","7fffffff","ffffffff","80000000"],["80000000","00000000","80000000","00000000","00000000"],["80000000","00000000","fffffff9","7ffffff9","80000000"],["80000000","00000000","ffffffff","7fffffff","80000000"],["80000000","00000001","00000000","80000001","1e3779b9"],["80000000","00000001","00000001","80000000","00000000"],["80000000","00000001","00000007","80000006","b54cda56"],["80000000","00000001","7fffffff","fffffffe","43910c8e"],["80000000","00000001","80000000","00000001","9e3779b9"],["80000000","00000001","fffffff9","7ffffff8","0e443238"],["80000000","00000001","ffffffff","7ffffffe","c3910c8e"],["80000000","00000007","00000000","80000007","c89e4c69"],["80000000","00000007","00000001","80000006","f519f85a"],["80000000","00000007","00000007","80000000","00000000"],["80000000","00000007","7fffffff","fffffff8","e3dd5f88"],["80000000","00000007","80000000","00000007","489e4c69"],["80000000","00000007","fffffff9","7ffffffe","58f757e2"],["80000000","00000007","ffffffff","7ffffff8","63dd5f88"],["80000000","7fffffff","00000000","ffffffff","1e3779b9"],["80000000","7fffffff","00000001","fffffffe","bc6ef372"],["80000000","7fffffff","00000007","fffffff8","71bbcdc8"],["80000000","7fffffff","7fffffff","80000000","00000000"],["80000000","7fffffff","80000000","7fffffff","9e3779b9"],["80000000","7fffffff","fffffff9","00000006","cab325aa"],["80000000","7fffffff","ffffffff","00000000","80000000"],["80000000","80000000","00000000","00000000","00000000"],["80000000","80000000","00000001","00000001","00000000"],["80000000","80000000","00000007","00000007","00000000"],["80000000","80000000","7fffffff","7fffffff","00000000"],["80000000","80000000","80000000","80000000","00000000"],["80000000","80000000","fffffff9","fffffff9","00000000"],["80000000","80000000","ffffffff","ffffffff","00000000"],["80000000","fffffff9","00000000","7ffffff9","c89e4c69"],["80000000","fffffff9","00000001","7ffffff8","9c22a078"],["80000000","fffffff9","00000007","7ffffffe","a708a81e"],["80000000","fffffff9","7fffffff","00000006","8ae607a6"],["80000000","fffffff9","80000000","fffffff9","489e4c69"],["80000000","fffffff9","fffffff9","80000000","00000000"],["80000000","fffffff9","ffffffff","80000006","0ae607a6"],["80000000","ffffffff","00000000","7fffffff","1e3779b9"],["80000000","ffffffff","00000001","7ffffffe","3c6ef372"],["80000000","ffffffff","00000007","7ffffff8","f1bbcdc8"],["80000000","ffffffff","7fffffff","00000000","80000000"],["80000000","ffffffff","80000000","ffffffff","9e3779b9"],["80000000","ffffffff","fffffff9","80000006","4ab325aa"],["80000000","ffffffff","ffffffff","80000000","00000000"],["fffffff9","00000000","00000000","fffffff9","00000000"],["fffffff9","00000000","00000001","fffffff8","fffffff9"],["fffffff9","00000000","00000007","fffffffe","ffffffcf"],["fffffff9","00000000","7fffffff","80000006","80000007"],["fffffff9","00000000","80000000","7ffffff9","80000000"],["fffffff9","00000000","fffffff9","00000000","00000031"],["fffffff9","00000000","ffffffff","00000006","00000007"],["fffffff9","00000001","00000000","fffffff8","0e443238"],["fffffff9","00000001","00000001","fffffff9","53845408"],["fffffff9","00000001","00000007","ffffffff","9e377988"],["fffffff9","00000001","7fffffff","80000007","53845408"],["fffffff9","00000001","80000000","7ffffff8","0e443238"],["fffffff9","00000001","fffffff9","00000001","9e377988"],["fffffff9","00000001","ffffffff","00000007","53845408"],["fffffff9","00000007","00000000","fffffffe","58f757e2"],["fffffff9","00000007","00000001","ffffffff","53845408"],["fffffff9","00000007","00000007","fffffff9","489e4c58"],["fffffff9","00000007","7fffffff","80000001","53845408"],["fffffff9","00000007","80000000","7ffffffe","58f757e2"],["fffffff9","00000007","fffffff9","00000007","489e4c58"],["fffffff9","00000007","ffffffff","00000001","53845408"],["fffffff9","7fffffff","00000000","80000006","cab325aa"],["fffffff9","7fffffff","00000001","80000007","53845408"],["fffffff9","7fffffff","00000007","80000001","9e377988"],["fffffff9","7fffffff","7fffffff","fffffff9","53845408"],["fffffff9","7fffffff","80000000","00000006","cab325aa"],["fffffff9","7fffffff","fffffff9","7fffffff","9e377988"],["fffffff9","7fffffff","ffffffff","7ffffff9","53845408"],["fffffff9","80000000","00000000","7ffffff9","80000000"],["fffffff9","80000000","00000001","7ffffff8","fffffff9"],["fffffff9","80000000","00000007","7ffffffe","ffffffcf"],["fffffff9","80000000","7fffffff","00000006","80000007"],["fffffff9","80000000","80000000","fffffff9","00000000"],["fffffff9","80000000","fffffff9","80000000","00000031"],["fffffff9","80000000","ffffffff","80000006","00000007"],["fffffff9","fffffff9","00000000","00000000","00000000"],["fffffff9","fffffff9","00000001","00000001","53845408"],["fffffff9","fffffff9","00000007","00000007","489e4c58"],["fffffff9","fffffff9","7fffffff","7fffffff","53845408"],["fffffff9","fffffff9","80000000","80000000","00000000"],["fffffff9","fffffff9","fffffff9","fffffff9","489e4c58"],["fffffff9","fffffff9","ffffffff","ffffffff","53845408"],["fffffff9","ffffffff","00000000","00000006","4ab325aa"],["fffffff9","ffffffff","00000001","00000007","53845408"],["fffffff9","ffffffff","00000007","00000001","9e377988"],["fffffff9","ffffffff","7fffffff","7ffffff9","53845408"],["fffffff9","ffffffff","80000000","80000006","4ab325aa"],["fffffff9","ffffffff","fffffff9","ffffffff","9e377988"],["fffffff9","ffffffff","ffffffff","fffffff9","53845408"],["ffffffff","00000000","00000000","ffffffff","00000000"],["ffffffff","00000000","00000001","fffffffe","ffffffff"],["ffffffff","00000000","00000007","fffffff8","fffffff9"],["ffffffff","00000000","7fffffff","80000000","80000001"],["ffffffff","00000000","80000000","7fffffff","80000000"],["ffffffff","00000000","fffffff9","00000006","00000007"],["ffffffff","00000000","ffffffff","00000000","00000001"],["ffffffff","00000001","00000000","fffffffe","c3910c8e"],["ffffffff","00000001","00000001","ffffffff","9e3779b8"],["ffffffff","00000001","00000007","fffffff9","53845408"],["ffffffff","00000001","7fffffff","80000001","9e3779b8"],["ffffffff","00000001","80000000","7ffffffe","c3910c8e"],["ffffffff","00000001","fffffff9","00000007","53845408"],["ffffffff","00000001","ffffffff","00000001","9e3779b8"],["ffffffff","00000007","00000000","fffffff8","63dd5f88"],["ffffffff","00000007","00000001","fffffff9","489e4c68"],["ffffffff","00000007","00000007","ffffffff","53845408"],["ffffffff","00000007","7fffffff","80000007","489e4c68"],["ffffffff","00000007","80000000","7ffffff8","63dd5f88"],["ffffffff","00000007","fffffff9","00000001","53845408"],["ffffffff","00000007","ffffffff","00000007","489e4c68"],["ffffffff","7fffffff","00000000","80000000","80000000"],["ffffffff","7fffffff","00000001","80000001","9e3779b8"],["ffffffff","7fffffff","00000007","80000007","53845408"],["ffffffff","7fffffff","7fffffff","ffffffff","9e3779b8"],["ffffffff","7fffffff","80000000","00000000","80000000"],["ffffffff","7fffffff","fffffff9","7ffffff9","53845408"],["ffffffff","7fffffff","ffffffff","7fffffff","9e3779b8"],["ffffffff","80000000","00000000","7fffffff","80000000"],["ffffffff","80000000","00000001","7ffffffe","ffffffff"],["ffffffff","80000000","00000007","7ffffff8","fffffff9"],["ffffffff","80000000","7fffffff","00000000","80000001"],["ffffffff","80000000","80000000","ffffffff","00000000"],["ffffffff","80000000","fffffff9","80000006","00000007"],["ffffffff","80000000","ffffffff","80000000","00000001"],["ffffffff","fffffff9","00000000","00000006","0ae607a6"],["ffffffff","fffffff9","00000001","00000007","489e4c68"],["ffffffff","fffffff9","00000007","00000001","53845408"],["ffffffff","fffffff9","7fffffff","7ffffff9","489e4c68"],["ffffffff","fffffff9","80000000","80000006","0ae607a6"],["ffffffff","fffffff9","fffffff9","ffffffff","53845408"],["ffffffff","fffffff9","ffffffff","fffffff9","489e4c68"],["ffffffff","ffffffff","00000000","00000000","00000000"],["ffffffff","ffffffff","00000001","00000001","9e3779b8"],["ffffffff","ffffffff","00000007","00000007","53845408"],["ffffffff","ffffffff","7fffffff","7fffffff","9e3779b8"],["ffffffff","ffffffff","80000000","80000000","00000000"],["ffffffff","ffffffff","fffffff9","fffffff9","53845408"],["ffffffff","ffffffff","ffffffff","ffffffff","9e3779b8"]]} +{"op":"shr_vec2_u32","code":53,"wgsl":"vec2(a, b) >> vec2(c, d), folded","cases":[["00000000","ffffffff","00000000","00000001","e1c88647"],["00000000","ffffffff","00000001","00000002","a1c88647"],["00000000","ffffffff","00000002","00000003","81c88647"],["00000000","ffffffff","00000003","00000004","f1c88647"],["00000000","ffffffff","00000004","00000005","29c88647"],["00000000","ffffffff","00000005","00000006","45c88647"],["00000000","ffffffff","00000006","00000007","d3c88647"],["00000000","ffffffff","00000007","00000008","1ac88647"],["00000000","ffffffff","00000008","00000009","3e488647"],["00000000","ffffffff","00000009","0000000a","d0088647"],["00000000","ffffffff","0000000a","0000000b","98e88647"],["00000000","ffffffff","0000000b","0000000c","fd588647"],["00000000","ffffffff","0000000c","0000000d","2f908647"],["00000000","ffffffff","0000000d","0000000e","48ac8647"],["00000000","ffffffff","0000000e","0000000f","553a8647"],["00000000","ffffffff","0000000f","00000010","db818647"],["00000000","ffffffff","00000010","00000011","1ea50647"],["00000000","ffffffff","00000011","00000012","4036c647"],["00000000","ffffffff","00000012","00000013","50ffa647"],["00000000","ffffffff","00000013","00000014","d9641647"],["00000000","ffffffff","00000014","00000015","1d964e47"],["00000000","ffffffff","00000015","00000016","3faf6a47"],["00000000","ffffffff","00000016","00000017","d0bbf847"],["00000000","ffffffff","00000017","00000018","99423f47"],["00000000","ffffffff","00000018","00000019","7d8562c7"],["00000000","ffffffff","00000019","0000001a","efa6f487"],["00000000","ffffffff","0000001a","0000001b","28b7bd67"],["00000000","ffffffff","0000001b","0000001c","454021d7"],["00000000","ffffffff","0000001c","0000001d","5384540f"],["00000000","ffffffff","0000001d","0000001e","daa66d2b"],["00000000","ffffffff","0000001e","0000001f","9e3779b9"],["00000000","ffffffff","0000001f","00000020","61c88647","unguarded"],["00000000","ffffffff","00000020","00000021","e1c88647","unguarded"],["00000000","ffffffff","00000021","00000022","a1c88647","unguarded"],["00000000","ffffffff","00000022","00000023","81c88647","unguarded"],["00000000","ffffffff","00000023","00000024","f1c88647","unguarded"],["00000000","ffffffff","00000024","00000025","29c88647","unguarded"],["00000000","ffffffff","00000025","00000026","45c88647","unguarded"],["00000000","ffffffff","00000026","00000027","d3c88647","unguarded"],["00000000","ffffffff","00000027","00000028","1ac88647","unguarded"],["00000000","ffffffff","00000028","00000029","3e488647","unguarded"],["00000000","ffffffff","0000003f","00000040","61c88647","unguarded"],["00000000","ffffffff","00000040","00000041","e1c88647","unguarded"],["00000000","ffffffff","00000041","00000042","a1c88647","unguarded"],["00000000","ffffffff","00000060","00000061","e1c88647","unguarded"],["00000000","ffffffff","0000007f","00000080","61c88647","unguarded"],["00000000","ffffffff","00000080","00000081","e1c88647","unguarded"],["00000000","ffffffff","000000ff","00000100","61c88647","unguarded"],["00000000","ffffffff","00000100","00000101","e1c88647","unguarded"],["00000000","ffffffff","7fffffff","80000000","61c88647","unguarded"],["00000000","ffffffff","80000000","80000001","e1c88647","unguarded"],["00000000","ffffffff","ffffffe0","ffffffe1","e1c88647","unguarded"],["00000000","ffffffff","ffffffff","00000000","61c88647","unguarded"],["00000001","fffffffe","00000000","00000001","e1c88646"],["00000001","fffffffe","00000001","00000002","a1c88647"],["00000001","fffffffe","00000002","00000003","81c88647"],["00000001","fffffffe","00000003","00000004","f1c88647"],["00000001","fffffffe","00000004","00000005","29c88647"],["00000001","fffffffe","00000005","00000006","45c88647"],["00000001","fffffffe","00000006","00000007","d3c88647"],["00000001","fffffffe","00000007","00000008","1ac88647"],["00000001","fffffffe","00000008","00000009","3e488647"],["00000001","fffffffe","00000009","0000000a","d0088647"],["00000001","fffffffe","0000000a","0000000b","98e88647"],["00000001","fffffffe","0000000b","0000000c","fd588647"],["00000001","fffffffe","0000000c","0000000d","2f908647"],["00000001","fffffffe","0000000d","0000000e","48ac8647"],["00000001","fffffffe","0000000e","0000000f","553a8647"],["00000001","fffffffe","0000000f","00000010","db818647"],["00000001","fffffffe","00000010","00000011","1ea50647"],["00000001","fffffffe","00000011","00000012","4036c647"],["00000001","fffffffe","00000012","00000013","50ffa647"],["00000001","fffffffe","00000013","00000014","d9641647"],["00000001","fffffffe","00000014","00000015","1d964e47"],["00000001","fffffffe","00000015","00000016","3faf6a47"],["00000001","fffffffe","00000016","00000017","d0bbf847"],["00000001","fffffffe","00000017","00000018","99423f47"],["00000001","fffffffe","00000018","00000019","7d8562c7"],["00000001","fffffffe","00000019","0000001a","efa6f487"],["00000001","fffffffe","0000001a","0000001b","28b7bd67"],["00000001","fffffffe","0000001b","0000001c","454021d7"],["00000001","fffffffe","0000001c","0000001d","5384540f"],["00000001","fffffffe","0000001d","0000001e","daa66d2b"],["00000001","fffffffe","0000001e","0000001f","9e3779b9"],["00000001","fffffffe","0000001f","00000020","c3910c8e","unguarded"],["00000001","fffffffe","00000020","00000021","e1c88646","unguarded"],["00000001","fffffffe","00000021","00000022","a1c88647","unguarded"],["00000001","fffffffe","00000022","00000023","81c88647","unguarded"],["00000001","fffffffe","00000023","00000024","f1c88647","unguarded"],["00000001","fffffffe","00000024","00000025","29c88647","unguarded"],["00000001","fffffffe","00000025","00000026","45c88647","unguarded"],["00000001","fffffffe","00000026","00000027","d3c88647","unguarded"],["00000001","fffffffe","00000027","00000028","1ac88647","unguarded"],["00000001","fffffffe","00000028","00000029","3e488647","unguarded"],["00000001","fffffffe","0000003f","00000040","c3910c8e","unguarded"],["00000001","fffffffe","00000040","00000041","e1c88646","unguarded"],["00000001","fffffffe","00000041","00000042","a1c88647","unguarded"],["00000001","fffffffe","00000060","00000061","e1c88646","unguarded"],["00000001","fffffffe","0000007f","00000080","c3910c8e","unguarded"],["00000001","fffffffe","00000080","00000081","e1c88646","unguarded"],["00000001","fffffffe","000000ff","00000100","c3910c8e","unguarded"],["00000001","fffffffe","00000100","00000101","e1c88646","unguarded"],["00000001","fffffffe","7fffffff","80000000","c3910c8e","unguarded"],["00000001","fffffffe","80000000","80000001","e1c88646","unguarded"],["00000001","fffffffe","ffffffe0","ffffffe1","e1c88646","unguarded"],["00000001","fffffffe","ffffffff","00000000","c3910c8e","unguarded"],["80000000","7fffffff","00000000","00000001","21c88647"],["80000000","7fffffff","00000001","00000002","c1c88647"],["80000000","7fffffff","00000002","00000003","d1c88647"],["80000000","7fffffff","00000003","00000004","39c88647"],["80000000","7fffffff","00000004","00000005","4dc88647"],["80000000","7fffffff","00000005","00000006","d7c88647"],["80000000","7fffffff","00000006","00000007","18c88647"],["80000000","7fffffff","00000007","00000008","3f488647"],["80000000","7fffffff","00000008","00000009","d0888647"],["80000000","7fffffff","00000009","0000000a","98a88647"],["80000000","7fffffff","0000000a","0000000b","fd788647"],["80000000","7fffffff","0000000b","0000000c","2f808647"],["80000000","7fffffff","0000000c","0000000d","48a48647"],["80000000","7fffffff","0000000d","0000000e","553e8647"],["80000000","7fffffff","0000000e","0000000f","db838647"],["80000000","7fffffff","0000000f","00000010","1ea40647"],["80000000","7fffffff","00000010","00000011","40364647"],["80000000","7fffffff","00000011","00000012","50ffe647"],["80000000","7fffffff","00000012","00000013","d9643647"],["80000000","7fffffff","00000013","00000014","1d965e47"],["80000000","7fffffff","00000014","00000015","3faf6247"],["80000000","7fffffff","00000015","00000016","d0bbfc47"],["80000000","7fffffff","00000016","00000017","99423d47"],["80000000","7fffffff","00000017","00000018","7d8563c7"],["80000000","7fffffff","00000018","00000019","efa6f407"],["80000000","7fffffff","00000019","0000001a","28b7bd27"],["80000000","7fffffff","0000001a","0000001b","454021f7"],["80000000","7fffffff","0000001b","0000001c","5384541f"],["80000000","7fffffff","0000001c","0000001d","daa66d23"],["80000000","7fffffff","0000001d","0000001e","9e3779bd"],["80000000","7fffffff","0000001e","0000001f","00000002"],["80000000","7fffffff","0000001f","00000020","e1c88646","unguarded"],["80000000","7fffffff","00000020","00000021","21c88647","unguarded"],["80000000","7fffffff","00000021","00000022","c1c88647","unguarded"],["80000000","7fffffff","00000022","00000023","d1c88647","unguarded"],["80000000","7fffffff","00000023","00000024","39c88647","unguarded"],["80000000","7fffffff","00000024","00000025","4dc88647","unguarded"],["80000000","7fffffff","00000025","00000026","d7c88647","unguarded"],["80000000","7fffffff","00000026","00000027","18c88647","unguarded"],["80000000","7fffffff","00000027","00000028","3f488647","unguarded"],["80000000","7fffffff","00000028","00000029","d0888647","unguarded"],["80000000","7fffffff","0000003f","00000040","e1c88646","unguarded"],["80000000","7fffffff","00000040","00000041","21c88647","unguarded"],["80000000","7fffffff","00000041","00000042","c1c88647","unguarded"],["80000000","7fffffff","00000060","00000061","21c88647","unguarded"],["80000000","7fffffff","0000007f","00000080","e1c88646","unguarded"],["80000000","7fffffff","00000080","00000081","21c88647","unguarded"],["80000000","7fffffff","000000ff","00000100","e1c88646","unguarded"],["80000000","7fffffff","00000100","00000101","21c88647","unguarded"],["80000000","7fffffff","7fffffff","80000000","e1c88646","unguarded"],["80000000","7fffffff","80000000","80000001","21c88647","unguarded"],["80000000","7fffffff","ffffffe0","ffffffe1","21c88647","unguarded"],["80000000","7fffffff","ffffffff","00000000","e1c88646","unguarded"],["deadbeef","21524110","00000000","00000001","397d74a7"],["deadbeef","21524110","00000001","00000002","9cbeba53"],["deadbeef","21524110","00000002","00000003","4e5f5d29"],["deadbeef","21524110","00000003","00000004","a72fae94"],["deadbeef","21524110","00000004","00000005","028b9426"],["deadbeef","21524110","00000005","00000006","8145ca13"],["deadbeef","21524110","00000006","00000007","40a2e509"],["deadbeef","21524110","00000007","00000008","a0517284"],["deadbeef","21524110","00000008","00000009","0104f59e"],["deadbeef","21524110","00000009","0000000a","00827acf"],["deadbeef","21524110","0000000a","0000000b","80413d67"],["deadbeef","21524110","0000000b","0000000c","c0209eb3"],["deadbeef","21524110","0000000c","0000000d","e0104f59"],["deadbeef","21524110","0000000d","0000000e","f00827ac"],["deadbeef","21524110","0000000e","0000000f","a8e8d632"],["deadbeef","21524110","0000000f","00000010","d4746b19"],["deadbeef","21524110","00000010","00000011","ea3a358c"],["deadbeef","21524110","00000011","00000012","a601d7e2"],["deadbeef","21524110","00000012","00000013","d300ebf1"],["deadbeef","21524110","00000013","00000014","698075f8"],["deadbeef","21524110","00000014","00000015","65a477d0"],["deadbeef","21524110","00000015","00000016","32d23be8"],["deadbeef","21524110","00000016","00000017","ca4d62c8"],["deadbeef","21524110","00000017","00000018","6526b164"],["deadbeef","21524110","00000018","00000019","e3779b4e"],["deadbeef","21524110","00000019","0000001a","f1bbcda7"],["deadbeef","21524110","0000001a","0000001b","78dde6d3"],["deadbeef","21524110","0000001b","0000001c","3c6ef369"],["deadbeef","21524110","0000001c","0000001d","9e3779b4"],["deadbeef","21524110","0000001d","0000001e","00000006"],["deadbeef","21524110","0000001e","0000001f","00000003"],["deadbeef","21524110","0000001f","00000020","cfa19491","unguarded"],["deadbeef","21524110","00000020","00000021","397d74a7","unguarded"],["deadbeef","21524110","00000021","00000022","9cbeba53","unguarded"],["deadbeef","21524110","00000022","00000023","4e5f5d29","unguarded"],["deadbeef","21524110","00000023","00000024","a72fae94","unguarded"],["deadbeef","21524110","00000024","00000025","028b9426","unguarded"],["deadbeef","21524110","00000025","00000026","8145ca13","unguarded"],["deadbeef","21524110","00000026","00000027","40a2e509","unguarded"],["deadbeef","21524110","00000027","00000028","a0517284","unguarded"],["deadbeef","21524110","00000028","00000029","0104f59e","unguarded"],["deadbeef","21524110","0000003f","00000040","cfa19491","unguarded"],["deadbeef","21524110","00000040","00000041","397d74a7","unguarded"],["deadbeef","21524110","00000041","00000042","9cbeba53","unguarded"],["deadbeef","21524110","00000060","00000061","397d74a7","unguarded"],["deadbeef","21524110","0000007f","00000080","cfa19491","unguarded"],["deadbeef","21524110","00000080","00000081","397d74a7","unguarded"],["deadbeef","21524110","000000ff","00000100","cfa19491","unguarded"],["deadbeef","21524110","00000100","00000101","397d74a7","unguarded"],["deadbeef","21524110","7fffffff","80000000","cfa19491","unguarded"],["deadbeef","21524110","80000000","80000001","397d74a7","unguarded"],["deadbeef","21524110","ffffffe0","ffffffe1","397d74a7","unguarded"],["deadbeef","21524110","ffffffff","00000000","cfa19491","unguarded"],["ffffffff","00000000","00000000","00000001","ffffffff"],["ffffffff","00000000","00000001","00000002","7fffffff"],["ffffffff","00000000","00000002","00000003","3fffffff"],["ffffffff","00000000","00000003","00000004","1fffffff"],["ffffffff","00000000","00000004","00000005","0fffffff"],["ffffffff","00000000","00000005","00000006","07ffffff"],["ffffffff","00000000","00000006","00000007","03ffffff"],["ffffffff","00000000","00000007","00000008","01ffffff"],["ffffffff","00000000","00000008","00000009","00ffffff"],["ffffffff","00000000","00000009","0000000a","007fffff"],["ffffffff","00000000","0000000a","0000000b","003fffff"],["ffffffff","00000000","0000000b","0000000c","001fffff"],["ffffffff","00000000","0000000c","0000000d","000fffff"],["ffffffff","00000000","0000000d","0000000e","0007ffff"],["ffffffff","00000000","0000000e","0000000f","0003ffff"],["ffffffff","00000000","0000000f","00000010","0001ffff"],["ffffffff","00000000","00000010","00000011","0000ffff"],["ffffffff","00000000","00000011","00000012","00007fff"],["ffffffff","00000000","00000012","00000013","00003fff"],["ffffffff","00000000","00000013","00000014","00001fff"],["ffffffff","00000000","00000014","00000015","00000fff"],["ffffffff","00000000","00000015","00000016","000007ff"],["ffffffff","00000000","00000016","00000017","000003ff"],["ffffffff","00000000","00000017","00000018","000001ff"],["ffffffff","00000000","00000018","00000019","000000ff"],["ffffffff","00000000","00000019","0000001a","0000007f"],["ffffffff","00000000","0000001a","0000001b","0000003f"],["ffffffff","00000000","0000001b","0000001c","0000001f"],["ffffffff","00000000","0000001c","0000001d","0000000f"],["ffffffff","00000000","0000001d","0000001e","00000007"],["ffffffff","00000000","0000001e","0000001f","00000003"],["ffffffff","00000000","0000001f","00000020","00000001","unguarded"],["ffffffff","00000000","00000020","00000021","ffffffff","unguarded"],["ffffffff","00000000","00000021","00000022","7fffffff","unguarded"],["ffffffff","00000000","00000022","00000023","3fffffff","unguarded"],["ffffffff","00000000","00000023","00000024","1fffffff","unguarded"],["ffffffff","00000000","00000024","00000025","0fffffff","unguarded"],["ffffffff","00000000","00000025","00000026","07ffffff","unguarded"],["ffffffff","00000000","00000026","00000027","03ffffff","unguarded"],["ffffffff","00000000","00000027","00000028","01ffffff","unguarded"],["ffffffff","00000000","00000028","00000029","00ffffff","unguarded"],["ffffffff","00000000","0000003f","00000040","00000001","unguarded"],["ffffffff","00000000","00000040","00000041","ffffffff","unguarded"],["ffffffff","00000000","00000041","00000042","7fffffff","unguarded"],["ffffffff","00000000","00000060","00000061","ffffffff","unguarded"],["ffffffff","00000000","0000007f","00000080","00000001","unguarded"],["ffffffff","00000000","00000080","00000081","ffffffff","unguarded"],["ffffffff","00000000","000000ff","00000100","00000001","unguarded"],["ffffffff","00000000","00000100","00000101","ffffffff","unguarded"],["ffffffff","00000000","7fffffff","80000000","00000001","unguarded"],["ffffffff","00000000","80000000","80000001","ffffffff","unguarded"],["ffffffff","00000000","ffffffe0","ffffffe1","ffffffff","unguarded"],["ffffffff","00000000","ffffffff","00000000","00000001","unguarded"]]} +{"op":"shr_vec2_i32","code":54,"wgsl":"vec2(ia, ib) >> vec2(c, d), folded","cases":[["00000000","ffffffff","00000000","00000001","61c88647"],["00000000","ffffffff","00000001","00000002","61c88647"],["00000000","ffffffff","00000002","00000003","61c88647"],["00000000","ffffffff","00000003","00000004","61c88647"],["00000000","ffffffff","00000004","00000005","61c88647"],["00000000","ffffffff","00000005","00000006","61c88647"],["00000000","ffffffff","00000006","00000007","61c88647"],["00000000","ffffffff","00000007","00000008","61c88647"],["00000000","ffffffff","00000008","00000009","61c88647"],["00000000","ffffffff","00000009","0000000a","61c88647"],["00000000","ffffffff","0000000a","0000000b","61c88647"],["00000000","ffffffff","0000000b","0000000c","61c88647"],["00000000","ffffffff","0000000c","0000000d","61c88647"],["00000000","ffffffff","0000000d","0000000e","61c88647"],["00000000","ffffffff","0000000e","0000000f","61c88647"],["00000000","ffffffff","0000000f","00000010","61c88647"],["00000000","ffffffff","00000010","00000011","61c88647"],["00000000","ffffffff","00000011","00000012","61c88647"],["00000000","ffffffff","00000012","00000013","61c88647"],["00000000","ffffffff","00000013","00000014","61c88647"],["00000000","ffffffff","00000014","00000015","61c88647"],["00000000","ffffffff","00000015","00000016","61c88647"],["00000000","ffffffff","00000016","00000017","61c88647"],["00000000","ffffffff","00000017","00000018","61c88647"],["00000000","ffffffff","00000018","00000019","61c88647"],["00000000","ffffffff","00000019","0000001a","61c88647"],["00000000","ffffffff","0000001a","0000001b","61c88647"],["00000000","ffffffff","0000001b","0000001c","61c88647"],["00000000","ffffffff","0000001c","0000001d","61c88647"],["00000000","ffffffff","0000001d","0000001e","61c88647"],["00000000","ffffffff","0000001e","0000001f","61c88647"],["00000000","ffffffff","0000001f","00000020","61c88647","unguarded"],["00000000","ffffffff","00000020","00000021","61c88647","unguarded"],["00000000","ffffffff","00000021","00000022","61c88647","unguarded"],["00000000","ffffffff","00000022","00000023","61c88647","unguarded"],["00000000","ffffffff","00000023","00000024","61c88647","unguarded"],["00000000","ffffffff","00000024","00000025","61c88647","unguarded"],["00000000","ffffffff","00000025","00000026","61c88647","unguarded"],["00000000","ffffffff","00000026","00000027","61c88647","unguarded"],["00000000","ffffffff","00000027","00000028","61c88647","unguarded"],["00000000","ffffffff","00000028","00000029","61c88647","unguarded"],["00000000","ffffffff","0000003f","00000040","61c88647","unguarded"],["00000000","ffffffff","00000040","00000041","61c88647","unguarded"],["00000000","ffffffff","00000041","00000042","61c88647","unguarded"],["00000000","ffffffff","00000060","00000061","61c88647","unguarded"],["00000000","ffffffff","0000007f","00000080","61c88647","unguarded"],["00000000","ffffffff","00000080","00000081","61c88647","unguarded"],["00000000","ffffffff","000000ff","00000100","61c88647","unguarded"],["00000000","ffffffff","00000100","00000101","61c88647","unguarded"],["00000000","ffffffff","7fffffff","80000000","61c88647","unguarded"],["00000000","ffffffff","80000000","80000001","61c88647","unguarded"],["00000000","ffffffff","ffffffe0","ffffffe1","61c88647","unguarded"],["00000000","ffffffff","ffffffff","00000000","61c88647","unguarded"],["00000001","fffffffe","00000000","00000001","61c88646"],["00000001","fffffffe","00000001","00000002","61c88647"],["00000001","fffffffe","00000002","00000003","61c88647"],["00000001","fffffffe","00000003","00000004","61c88647"],["00000001","fffffffe","00000004","00000005","61c88647"],["00000001","fffffffe","00000005","00000006","61c88647"],["00000001","fffffffe","00000006","00000007","61c88647"],["00000001","fffffffe","00000007","00000008","61c88647"],["00000001","fffffffe","00000008","00000009","61c88647"],["00000001","fffffffe","00000009","0000000a","61c88647"],["00000001","fffffffe","0000000a","0000000b","61c88647"],["00000001","fffffffe","0000000b","0000000c","61c88647"],["00000001","fffffffe","0000000c","0000000d","61c88647"],["00000001","fffffffe","0000000d","0000000e","61c88647"],["00000001","fffffffe","0000000e","0000000f","61c88647"],["00000001","fffffffe","0000000f","00000010","61c88647"],["00000001","fffffffe","00000010","00000011","61c88647"],["00000001","fffffffe","00000011","00000012","61c88647"],["00000001","fffffffe","00000012","00000013","61c88647"],["00000001","fffffffe","00000013","00000014","61c88647"],["00000001","fffffffe","00000014","00000015","61c88647"],["00000001","fffffffe","00000015","00000016","61c88647"],["00000001","fffffffe","00000016","00000017","61c88647"],["00000001","fffffffe","00000017","00000018","61c88647"],["00000001","fffffffe","00000018","00000019","61c88647"],["00000001","fffffffe","00000019","0000001a","61c88647"],["00000001","fffffffe","0000001a","0000001b","61c88647"],["00000001","fffffffe","0000001b","0000001c","61c88647"],["00000001","fffffffe","0000001c","0000001d","61c88647"],["00000001","fffffffe","0000001d","0000001e","61c88647"],["00000001","fffffffe","0000001e","0000001f","61c88647"],["00000001","fffffffe","0000001f","00000020","c3910c8e","unguarded"],["00000001","fffffffe","00000020","00000021","61c88646","unguarded"],["00000001","fffffffe","00000021","00000022","61c88647","unguarded"],["00000001","fffffffe","00000022","00000023","61c88647","unguarded"],["00000001","fffffffe","00000023","00000024","61c88647","unguarded"],["00000001","fffffffe","00000024","00000025","61c88647","unguarded"],["00000001","fffffffe","00000025","00000026","61c88647","unguarded"],["00000001","fffffffe","00000026","00000027","61c88647","unguarded"],["00000001","fffffffe","00000027","00000028","61c88647","unguarded"],["00000001","fffffffe","00000028","00000029","61c88647","unguarded"],["00000001","fffffffe","0000003f","00000040","c3910c8e","unguarded"],["00000001","fffffffe","00000040","00000041","61c88646","unguarded"],["00000001","fffffffe","00000041","00000042","61c88647","unguarded"],["00000001","fffffffe","00000060","00000061","61c88646","unguarded"],["00000001","fffffffe","0000007f","00000080","c3910c8e","unguarded"],["00000001","fffffffe","00000080","00000081","61c88646","unguarded"],["00000001","fffffffe","000000ff","00000100","c3910c8e","unguarded"],["00000001","fffffffe","00000100","00000101","61c88646","unguarded"],["00000001","fffffffe","7fffffff","80000000","c3910c8e","unguarded"],["00000001","fffffffe","80000000","80000001","61c88646","unguarded"],["00000001","fffffffe","ffffffe0","ffffffe1","61c88646","unguarded"],["00000001","fffffffe","ffffffff","00000000","c3910c8e","unguarded"],["80000000","7fffffff","00000000","00000001","21c88647"],["80000000","7fffffff","00000001","00000002","41c88647"],["80000000","7fffffff","00000002","00000003","11c88647"],["80000000","7fffffff","00000003","00000004","d9c88647"],["80000000","7fffffff","00000004","00000005","bdc88647"],["80000000","7fffffff","00000005","00000006","2fc88647"],["80000000","7fffffff","00000006","00000007","e4c88647"],["80000000","7fffffff","00000007","00000008","c1488647"],["80000000","7fffffff","00000008","00000009","2f888647"],["80000000","7fffffff","00000009","0000000a","67288647"],["80000000","7fffffff","0000000a","0000000b","02b88647"],["80000000","7fffffff","0000000b","0000000c","d0608647"],["80000000","7fffffff","0000000c","0000000d","b7548647"],["80000000","7fffffff","0000000d","0000000e","aac68647"],["80000000","7fffffff","0000000e","0000000f","247f8647"],["80000000","7fffffff","0000000f","00000010","e15a0647"],["80000000","7fffffff","00000010","00000011","bfc94647"],["80000000","7fffffff","00000011","00000012","af006647"],["80000000","7fffffff","00000012","00000013","269bf647"],["80000000","7fffffff","00000013","00000014","e269be47"],["80000000","7fffffff","00000014","00000015","c0509247"],["80000000","7fffffff","00000015","00000016","2f440447"],["80000000","7fffffff","00000016","00000017","66bdc147"],["80000000","7fffffff","00000017","00000018","827a9dc7"],["80000000","7fffffff","00000018","00000019","10590b07"],["80000000","7fffffff","00000019","0000001a","d74842a7"],["80000000","7fffffff","0000001a","0000001b","babfde37"],["80000000","7fffffff","0000001b","0000001c","ac7babff"],["80000000","7fffffff","0000001c","0000001d","255992d3"],["80000000","7fffffff","0000001d","0000001e","61c88645"],["80000000","7fffffff","0000001e","0000001f","fffffffe"],["80000000","7fffffff","0000001f","00000020","1e3779b8","unguarded"],["80000000","7fffffff","00000020","00000021","21c88647","unguarded"],["80000000","7fffffff","00000021","00000022","41c88647","unguarded"],["80000000","7fffffff","00000022","00000023","11c88647","unguarded"],["80000000","7fffffff","00000023","00000024","d9c88647","unguarded"],["80000000","7fffffff","00000024","00000025","bdc88647","unguarded"],["80000000","7fffffff","00000025","00000026","2fc88647","unguarded"],["80000000","7fffffff","00000026","00000027","e4c88647","unguarded"],["80000000","7fffffff","00000027","00000028","c1488647","unguarded"],["80000000","7fffffff","00000028","00000029","2f888647","unguarded"],["80000000","7fffffff","0000003f","00000040","1e3779b8","unguarded"],["80000000","7fffffff","00000040","00000041","21c88647","unguarded"],["80000000","7fffffff","00000041","00000042","41c88647","unguarded"],["80000000","7fffffff","00000060","00000061","21c88647","unguarded"],["80000000","7fffffff","0000007f","00000080","1e3779b8","unguarded"],["80000000","7fffffff","00000080","00000081","21c88647","unguarded"],["80000000","7fffffff","000000ff","00000100","1e3779b8","unguarded"],["80000000","7fffffff","00000100","00000101","21c88647","unguarded"],["80000000","7fffffff","7fffffff","80000000","1e3779b8","unguarded"],["80000000","7fffffff","80000000","80000001","21c88647","unguarded"],["80000000","7fffffff","ffffffe0","ffffffe1","21c88647","unguarded"],["80000000","7fffffff","ffffffff","00000000","1e3779b8","unguarded"],["deadbeef","21524110","00000000","00000001","397d74a7"],["deadbeef","21524110","00000001","00000002","1cbeba53"],["deadbeef","21524110","00000002","00000003","8e5f5d29"],["deadbeef","21524110","00000003","00000004","472fae94"],["deadbeef","21524110","00000004","00000005","f28b9426"],["deadbeef","21524110","00000005","00000006","7945ca13"],["deadbeef","21524110","00000006","00000007","bca2e509"],["deadbeef","21524110","00000007","00000008","5e517284"],["deadbeef","21524110","00000008","00000009","fe04f59e"],["deadbeef","21524110","00000009","0000000a","ff027acf"],["deadbeef","21524110","0000000a","0000000b","7f813d67"],["deadbeef","21524110","0000000b","0000000c","3fc09eb3"],["deadbeef","21524110","0000000c","0000000d","1fe04f59"],["deadbeef","21524110","0000000d","0000000e","0ff027ac"],["deadbeef","21524110","0000000e","0000000f","5714d632"],["deadbeef","21524110","0000000f","00000010","2b8a6b19"],["deadbeef","21524110","00000010","00000011","15c5358c"],["deadbeef","21524110","00000011","00000012","59fe57e2"],["deadbeef","21524110","00000012","00000013","2cff2bf1"],["deadbeef","21524110","00000013","00000014","967f95f8"],["deadbeef","21524110","00000014","00000015","9a5b87d0"],["deadbeef","21524110","00000015","00000016","cd2dc3e8"],["deadbeef","21524110","00000016","00000017","35b29ec8"],["deadbeef","21524110","00000017","00000018","9ad94f64"],["deadbeef","21524110","00000018","00000019","1c88644e"],["deadbeef","21524110","00000019","0000001a","0e443227"],["deadbeef","21524110","0000001a","0000001b","87221913"],["deadbeef","21524110","0000001b","0000001c","c3910c89"],["deadbeef","21524110","0000001c","0000001d","61c88644"],["deadbeef","21524110","0000001d","0000001e","fffffffe"],["deadbeef","21524110","0000001e","0000001f","ffffffff"],["deadbeef","21524110","0000001f","00000020","305e6b6f","unguarded"],["deadbeef","21524110","00000020","00000021","397d74a7","unguarded"],["deadbeef","21524110","00000021","00000022","1cbeba53","unguarded"],["deadbeef","21524110","00000022","00000023","8e5f5d29","unguarded"],["deadbeef","21524110","00000023","00000024","472fae94","unguarded"],["deadbeef","21524110","00000024","00000025","f28b9426","unguarded"],["deadbeef","21524110","00000025","00000026","7945ca13","unguarded"],["deadbeef","21524110","00000026","00000027","bca2e509","unguarded"],["deadbeef","21524110","00000027","00000028","5e517284","unguarded"],["deadbeef","21524110","00000028","00000029","fe04f59e","unguarded"],["deadbeef","21524110","0000003f","00000040","305e6b6f","unguarded"],["deadbeef","21524110","00000040","00000041","397d74a7","unguarded"],["deadbeef","21524110","00000041","00000042","1cbeba53","unguarded"],["deadbeef","21524110","00000060","00000061","397d74a7","unguarded"],["deadbeef","21524110","0000007f","00000080","305e6b6f","unguarded"],["deadbeef","21524110","00000080","00000081","397d74a7","unguarded"],["deadbeef","21524110","000000ff","00000100","305e6b6f","unguarded"],["deadbeef","21524110","00000100","00000101","397d74a7","unguarded"],["deadbeef","21524110","7fffffff","80000000","305e6b6f","unguarded"],["deadbeef","21524110","80000000","80000001","397d74a7","unguarded"],["deadbeef","21524110","ffffffe0","ffffffe1","397d74a7","unguarded"],["deadbeef","21524110","ffffffff","00000000","305e6b6f","unguarded"],["ffffffff","00000000","00000000","00000001","ffffffff"],["ffffffff","00000000","00000001","00000002","ffffffff"],["ffffffff","00000000","00000002","00000003","ffffffff"],["ffffffff","00000000","00000003","00000004","ffffffff"],["ffffffff","00000000","00000004","00000005","ffffffff"],["ffffffff","00000000","00000005","00000006","ffffffff"],["ffffffff","00000000","00000006","00000007","ffffffff"],["ffffffff","00000000","00000007","00000008","ffffffff"],["ffffffff","00000000","00000008","00000009","ffffffff"],["ffffffff","00000000","00000009","0000000a","ffffffff"],["ffffffff","00000000","0000000a","0000000b","ffffffff"],["ffffffff","00000000","0000000b","0000000c","ffffffff"],["ffffffff","00000000","0000000c","0000000d","ffffffff"],["ffffffff","00000000","0000000d","0000000e","ffffffff"],["ffffffff","00000000","0000000e","0000000f","ffffffff"],["ffffffff","00000000","0000000f","00000010","ffffffff"],["ffffffff","00000000","00000010","00000011","ffffffff"],["ffffffff","00000000","00000011","00000012","ffffffff"],["ffffffff","00000000","00000012","00000013","ffffffff"],["ffffffff","00000000","00000013","00000014","ffffffff"],["ffffffff","00000000","00000014","00000015","ffffffff"],["ffffffff","00000000","00000015","00000016","ffffffff"],["ffffffff","00000000","00000016","00000017","ffffffff"],["ffffffff","00000000","00000017","00000018","ffffffff"],["ffffffff","00000000","00000018","00000019","ffffffff"],["ffffffff","00000000","00000019","0000001a","ffffffff"],["ffffffff","00000000","0000001a","0000001b","ffffffff"],["ffffffff","00000000","0000001b","0000001c","ffffffff"],["ffffffff","00000000","0000001c","0000001d","ffffffff"],["ffffffff","00000000","0000001d","0000001e","ffffffff"],["ffffffff","00000000","0000001e","0000001f","ffffffff"],["ffffffff","00000000","0000001f","00000020","ffffffff","unguarded"],["ffffffff","00000000","00000020","00000021","ffffffff","unguarded"],["ffffffff","00000000","00000021","00000022","ffffffff","unguarded"],["ffffffff","00000000","00000022","00000023","ffffffff","unguarded"],["ffffffff","00000000","00000023","00000024","ffffffff","unguarded"],["ffffffff","00000000","00000024","00000025","ffffffff","unguarded"],["ffffffff","00000000","00000025","00000026","ffffffff","unguarded"],["ffffffff","00000000","00000026","00000027","ffffffff","unguarded"],["ffffffff","00000000","00000027","00000028","ffffffff","unguarded"],["ffffffff","00000000","00000028","00000029","ffffffff","unguarded"],["ffffffff","00000000","0000003f","00000040","ffffffff","unguarded"],["ffffffff","00000000","00000040","00000041","ffffffff","unguarded"],["ffffffff","00000000","00000041","00000042","ffffffff","unguarded"],["ffffffff","00000000","00000060","00000061","ffffffff","unguarded"],["ffffffff","00000000","0000007f","00000080","ffffffff","unguarded"],["ffffffff","00000000","00000080","00000081","ffffffff","unguarded"],["ffffffff","00000000","000000ff","00000100","ffffffff","unguarded"],["ffffffff","00000000","00000100","00000101","ffffffff","unguarded"],["ffffffff","00000000","7fffffff","80000000","ffffffff","unguarded"],["ffffffff","00000000","80000000","80000001","ffffffff","unguarded"],["ffffffff","00000000","ffffffe0","ffffffe1","ffffffff","unguarded"],["ffffffff","00000000","ffffffff","00000000","ffffffff","unguarded"]]} +{"op":"select_vec2_u32","code":55,"wgsl":"select(vec2(a, b), vec2(c, d), vec2(a < c, b < d)), folded","cases":[["00000000","00000000","00000000","00000000","00000000"],["00000000","00000000","00000001","00000001","9e3779b8"],["00000000","00000000","00000007","00000007","53845408"],["00000000","00000000","7fffffff","7fffffff","9e3779b8"],["00000000","00000000","80000000","80000000","00000000"],["00000000","00000000","fffffff9","fffffff9","53845408"],["00000000","00000000","ffffffff","ffffffff","9e3779b8"],["00000000","00000001","00000000","00000001","9e3779b9"],["00000000","00000001","00000001","00000000","9e3779b8"],["00000000","00000001","00000007","00000006","b54cda51"],["00000000","00000001","7fffffff","7ffffffe","3c6ef371"],["00000000","00000001","80000000","80000001","9e3779b9"],["00000000","00000001","fffffff9","fffffff8","f1bbcdc1"],["00000000","00000001","ffffffff","fffffffe","3c6ef371"],["00000000","00000007","00000000","00000007","5384540f"],["00000000","00000007","00000001","00000006","5384540e"],["00000000","00000007","00000007","00000000","53845408"],["00000000","00000007","7fffffff","7ffffff8","f1bbcdc7"],["00000000","00000007","80000000","80000007","5384540f"],["00000000","00000007","fffffff9","fffffffe","3c6ef377"],["00000000","00000007","ffffffff","fffffff8","f1bbcdc7"],["00000000","7fffffff","00000000","7fffffff","e1c88647"],["00000000","7fffffff","00000001","7ffffffe","e1c88646"],["00000000","7fffffff","00000007","7ffffff8","e1c88640"],["00000000","7fffffff","7fffffff","00000000","9e3779b8"],["00000000","7fffffff","80000000","ffffffff","e1c88647"],["00000000","7fffffff","fffffff9","80000006","cab325af"],["00000000","7fffffff","ffffffff","80000000","7fffffff"],["00000000","80000000","00000000","80000000","80000000"],["00000000","80000000","00000001","80000001","1e3779b8"],["00000000","80000000","00000007","80000007","d3845408"],["00000000","80000000","7fffffff","ffffffff","1e3779b8"],["00000000","80000000","80000000","00000000","00000000"],["00000000","80000000","fffffff9","7ffffff9","7ffffff9"],["00000000","80000000","ffffffff","7fffffff","7fffffff"],["00000000","fffffff9","00000000","fffffff9","ac7babf1"],["00000000","fffffff9","00000001","fffffff8","ac7babf0"],["00000000","fffffff9","00000007","fffffffe","c3910c89"],["00000000","fffffff9","7fffffff","80000006","d384540e"],["00000000","fffffff9","80000000","7ffffff9","2c7babf1"],["00000000","fffffff9","fffffff9","00000000","53845408"],["00000000","fffffff9","ffffffff","00000006","5384540e"],["00000000","ffffffff","00000000","ffffffff","61c88647"],["00000000","ffffffff","00000001","fffffffe","61c88646"],["00000000","ffffffff","00000007","fffffff8","61c88640"],["00000000","ffffffff","7fffffff","80000000","1e3779b8"],["00000000","ffffffff","80000000","7fffffff","e1c88647"],["00000000","ffffffff","fffffff9","00000006","9e3779be"],["00000000","ffffffff","ffffffff","00000000","9e3779b8"],["00000001","00000000","00000000","00000001","9e3779b8"],["00000001","00000000","00000001","00000000","00000001"],["00000001","00000000","00000007","00000006","b54cda51"],["00000001","00000000","7fffffff","7ffffffe","3c6ef371"],["00000001","00000000","80000000","80000001","9e3779b9"],["00000001","00000000","fffffff9","fffffff8","f1bbcdc1"],["00000001","00000000","ffffffff","fffffffe","3c6ef371"],["00000001","00000001","00000000","00000000","9e3779b8"],["00000001","00000001","00000001","00000001","9e3779b8"],["00000001","00000001","00000007","00000007","53845408"],["00000001","00000001","7fffffff","7fffffff","9e3779b8"],["00000001","00000001","80000000","80000000","00000000"],["00000001","00000001","fffffff9","fffffff9","53845408"],["00000001","00000001","ffffffff","ffffffff","9e3779b8"],["00000001","00000007","00000000","00000006","5384540e"],["00000001","00000007","00000001","00000007","5384540e"],["00000001","00000007","00000007","00000001","53845408"],["00000001","00000007","7fffffff","7ffffff9","5384540e"],["00000001","00000007","80000000","80000006","b54cda56"],["00000001","00000007","fffffff9","ffffffff","9e3779be"],["00000001","00000007","ffffffff","fffffff9","5384540e"],["00000001","7fffffff","00000000","7ffffffe","e1c88646"],["00000001","7fffffff","00000001","7fffffff","e1c88646"],["00000001","7fffffff","00000007","7ffffff9","e1c88640"],["00000001","7fffffff","7fffffff","00000001","9e3779b8"],["00000001","7fffffff","80000000","fffffffe","43910c8e"],["00000001","7fffffff","fffffff9","80000007","2c7babf6"],["00000001","7fffffff","ffffffff","80000001","e1c88646"],["00000001","80000000","00000000","80000001","1e3779b8"],["00000001","80000000","00000001","80000000","80000001"],["00000001","80000000","00000007","80000006","354cda51"],["00000001","80000000","7fffffff","fffffffe","bc6ef371"],["00000001","80000000","80000000","00000001","00000000"],["00000001","80000000","fffffff9","7ffffff8","7ffffff9"],["00000001","80000000","ffffffff","7ffffffe","7fffffff"],["00000001","fffffff9","00000000","fffffff8","ac7babf0"],["00000001","fffffff9","00000001","fffffff9","ac7babf0"],["00000001","fffffff9","00000007","ffffffff","61c88640"],["00000001","fffffff9","7fffffff","80000007","d384540e"],["00000001","fffffff9","80000000","7ffffff8","2c7babf1"],["00000001","fffffff9","fffffff9","00000001","53845408"],["00000001","fffffff9","ffffffff","00000007","5384540e"],["00000001","ffffffff","00000000","fffffffe","61c88646"],["00000001","ffffffff","00000001","ffffffff","61c88646"],["00000001","ffffffff","00000007","fffffff9","61c88640"],["00000001","ffffffff","7fffffff","80000001","1e3779b8"],["00000001","ffffffff","80000000","7ffffffe","e1c88647"],["00000001","ffffffff","fffffff9","00000007","9e3779be"],["00000001","ffffffff","ffffffff","00000001","9e3779b8"],["00000007","00000000","00000000","00000007","53845408"],["00000007","00000000","00000001","00000006","b54cda51"],["00000007","00000000","00000007","00000000","00000007"],["00000007","00000000","7fffffff","7ffffff8","f1bbcdc7"],["00000007","00000000","80000000","80000007","5384540f"],["00000007","00000000","fffffff9","fffffffe","3c6ef377"],["00000007","00000000","ffffffff","fffffff8","f1bbcdc7"],["00000007","00000001","00000000","00000006","b54cda51"],["00000007","00000001","00000001","00000007","53845408"],["00000007","00000001","00000007","00000001","9e3779be"],["00000007","00000001","7fffffff","7ffffff9","5384540e"],["00000007","00000001","80000000","80000006","b54cda56"],["00000007","00000001","fffffff9","ffffffff","9e3779be"],["00000007","00000001","ffffffff","fffffff9","5384540e"],["00000007","00000007","00000000","00000000","53845408"],["00000007","00000007","00000001","00000001","53845408"],["00000007","00000007","00000007","00000007","53845408"],["00000007","00000007","7fffffff","7fffffff","9e3779b8"],["00000007","00000007","80000000","80000000","00000000"],["00000007","00000007","fffffff9","fffffff9","53845408"],["00000007","00000007","ffffffff","ffffffff","9e3779b8"],["00000007","7fffffff","00000000","7ffffff8","e1c88640"],["00000007","7fffffff","00000001","7ffffff9","e1c88640"],["00000007","7fffffff","00000007","7fffffff","e1c88640"],["00000007","7fffffff","7fffffff","00000007","9e3779b8"],["00000007","7fffffff","80000000","fffffff8","8e443238"],["00000007","7fffffff","fffffff9","80000001","e1c88640"],["00000007","7fffffff","ffffffff","80000007","2c7babf0"],["00000007","80000000","00000000","80000007","d3845408"],["00000007","80000000","00000001","80000006","354cda51"],["00000007","80000000","00000007","80000000","80000007"],["00000007","80000000","7fffffff","fffffff8","71bbcdc7"],["00000007","80000000","80000000","00000007","00000000"],["00000007","80000000","fffffff9","7ffffffe","7ffffff9"],["00000007","80000000","ffffffff","7ffffff8","7fffffff"],["00000007","fffffff9","00000000","fffffffe","c3910c89"],["00000007","fffffff9","00000001","ffffffff","61c88640"],["00000007","fffffff9","00000007","fffffff9","ac7babf6"],["00000007","fffffff9","7fffffff","80000001","d384540e"],["00000007","fffffff9","80000000","7ffffffe","2c7babf1"],["00000007","fffffff9","fffffff9","00000007","53845408"],["00000007","fffffff9","ffffffff","00000001","5384540e"],["00000007","ffffffff","00000000","fffffff8","61c88640"],["00000007","ffffffff","00000001","fffffff9","61c88640"],["00000007","ffffffff","00000007","ffffffff","61c88640"],["00000007","ffffffff","7fffffff","80000007","1e3779b8"],["00000007","ffffffff","80000000","7ffffff8","e1c88647"],["00000007","ffffffff","fffffff9","00000001","9e3779be"],["00000007","ffffffff","ffffffff","00000007","9e3779b8"],["7fffffff","00000000","00000000","7fffffff","9e3779b8"],["7fffffff","00000000","00000001","7ffffffe","3c6ef371"],["7fffffff","00000000","00000007","7ffffff8","f1bbcdc7"],["7fffffff","00000000","7fffffff","00000000","7fffffff"],["7fffffff","00000000","80000000","ffffffff","e1c88647"],["7fffffff","00000000","fffffff9","80000006","cab325af"],["7fffffff","00000000","ffffffff","80000000","7fffffff"],["7fffffff","00000001","00000000","7ffffffe","3c6ef371"],["7fffffff","00000001","00000001","7fffffff","9e3779b8"],["7fffffff","00000001","00000007","7ffffff9","5384540e"],["7fffffff","00000001","7fffffff","00000001","e1c88646"],["7fffffff","00000001","80000000","fffffffe","43910c8e"],["7fffffff","00000001","fffffff9","80000007","2c7babf6"],["7fffffff","00000001","ffffffff","80000001","e1c88646"],["7fffffff","00000007","00000000","7ffffff8","f1bbcdc7"],["7fffffff","00000007","00000001","7ffffff9","5384540e"],["7fffffff","00000007","00000007","7fffffff","9e3779b8"],["7fffffff","00000007","7fffffff","00000007","2c7babf0"],["7fffffff","00000007","80000000","fffffff8","8e443238"],["7fffffff","00000007","fffffff9","80000001","e1c88640"],["7fffffff","00000007","ffffffff","80000007","2c7babf0"],["7fffffff","7fffffff","00000000","00000000","9e3779b8"],["7fffffff","7fffffff","00000001","00000001","9e3779b8"],["7fffffff","7fffffff","00000007","00000007","9e3779b8"],["7fffffff","7fffffff","7fffffff","7fffffff","9e3779b8"],["7fffffff","7fffffff","80000000","80000000","00000000"],["7fffffff","7fffffff","fffffff9","fffffff9","53845408"],["7fffffff","7fffffff","ffffffff","ffffffff","9e3779b8"],["7fffffff","80000000","00000000","ffffffff","1e3779b8"],["7fffffff","80000000","00000001","fffffffe","bc6ef371"],["7fffffff","80000000","00000007","fffffff8","71bbcdc7"],["7fffffff","80000000","7fffffff","80000000","ffffffff"],["7fffffff","80000000","80000000","7fffffff","00000000"],["7fffffff","80000000","fffffff9","00000006","7ffffff9"],["7fffffff","80000000","ffffffff","00000000","7fffffff"],["7fffffff","fffffff9","00000000","80000006","d384540e"],["7fffffff","fffffff9","00000001","80000007","d384540e"],["7fffffff","fffffff9","00000007","80000001","d384540e"],["7fffffff","fffffff9","7fffffff","fffffff9","d384540e"],["7fffffff","fffffff9","80000000","00000006","2c7babf1"],["7fffffff","fffffff9","fffffff9","7fffffff","53845408"],["7fffffff","fffffff9","ffffffff","7ffffff9","5384540e"],["7fffffff","ffffffff","00000000","80000000","1e3779b8"],["7fffffff","ffffffff","00000001","80000001","1e3779b8"],["7fffffff","ffffffff","00000007","80000007","1e3779b8"],["7fffffff","ffffffff","7fffffff","ffffffff","1e3779b8"],["7fffffff","ffffffff","80000000","00000000","e1c88647"],["7fffffff","ffffffff","fffffff9","7ffffff9","9e3779be"],["7fffffff","ffffffff","ffffffff","7fffffff","9e3779b8"],["80000000","00000000","00000000","80000000","00000000"],["80000000","00000000","00000001","80000001","9e3779b9"],["80000000","00000000","00000007","80000007","5384540f"],["80000000","00000000","7fffffff","ffffffff","e1c88647"],["80000000","00000000","80000000","00000000","80000000"],["80000000","00000000","fffffff9","7ffffff9","d3845408"],["80000000","00000000","ffffffff","7fffffff","1e3779b8"],["80000000","00000001","00000000","80000001","9e3779b9"],["80000000","00000001","00000001","80000000","00000000"],["80000000","00000001","00000007","80000006","b54cda56"],["80000000","00000001","7fffffff","fffffffe","43910c8e"],["80000000","00000001","80000000","00000001","1e3779b9"],["80000000","00000001","fffffff9","7ffffff8","71bbcdc1"],["80000000","00000001","ffffffff","7ffffffe","bc6ef371"],["80000000","00000007","00000000","80000007","5384540f"],["80000000","00000007","00000001","80000006","b54cda56"],["80000000","00000007","00000007","80000000","00000000"],["80000000","00000007","7fffffff","fffffff8","8e443238"],["80000000","00000007","80000000","00000007","d384540f"],["80000000","00000007","fffffff9","7ffffffe","bc6ef377"],["80000000","00000007","ffffffff","7ffffff8","71bbcdc7"],["80000000","7fffffff","00000000","ffffffff","e1c88647"],["80000000","7fffffff","00000001","fffffffe","43910c8e"],["80000000","7fffffff","00000007","fffffff8","8e443238"],["80000000","7fffffff","7fffffff","80000000","00000000"],["80000000","7fffffff","80000000","7fffffff","61c88647"],["80000000","7fffffff","fffffff9","00000006","1e3779be"],["80000000","7fffffff","ffffffff","00000000","1e3779b8"],["80000000","80000000","00000000","00000000","00000000"],["80000000","80000000","00000001","00000001","00000000"],["80000000","80000000","00000007","00000007","00000000"],["80000000","80000000","7fffffff","7fffffff","00000000"],["80000000","80000000","80000000","80000000","00000000"],["80000000","80000000","fffffff9","fffffff9","53845408"],["80000000","80000000","ffffffff","ffffffff","9e3779b8"],["80000000","fffffff9","00000000","7ffffff9","2c7babf1"],["80000000","fffffff9","00000001","7ffffff8","2c7babf1"],["80000000","fffffff9","00000007","7ffffffe","2c7babf1"],["80000000","fffffff9","7fffffff","00000006","2c7babf1"],["80000000","fffffff9","80000000","fffffff9","2c7babf1"],["80000000","fffffff9","fffffff9","80000000","53845408"],["80000000","fffffff9","ffffffff","80000006","5384540e"],["80000000","ffffffff","00000000","7fffffff","e1c88647"],["80000000","ffffffff","00000001","7ffffffe","e1c88647"],["80000000","ffffffff","00000007","7ffffff8","e1c88647"],["80000000","ffffffff","7fffffff","00000000","e1c88647"],["80000000","ffffffff","80000000","ffffffff","e1c88647"],["80000000","ffffffff","fffffff9","80000006","9e3779be"],["80000000","ffffffff","ffffffff","80000000","9e3779b8"],["fffffff9","00000000","00000000","fffffff9","53845408"],["fffffff9","00000000","00000001","fffffff8","f1bbcdc1"],["fffffff9","00000000","00000007","fffffffe","3c6ef377"],["fffffff9","00000000","7fffffff","80000006","cab325af"],["fffffff9","00000000","80000000","7ffffff9","d3845408"],["fffffff9","00000000","fffffff9","00000000","fffffff9"],["fffffff9","00000000","ffffffff","00000006","4ab325a9"],["fffffff9","00000001","00000000","fffffff8","f1bbcdc1"],["fffffff9","00000001","00000001","fffffff9","53845408"],["fffffff9","00000001","00000007","ffffffff","9e3779be"],["fffffff9","00000001","7fffffff","80000007","2c7babf6"],["fffffff9","00000001","80000000","7ffffff8","71bbcdc1"],["fffffff9","00000001","fffffff9","00000001","61c88640"],["fffffff9","00000001","ffffffff","00000007","ac7babf0"],["fffffff9","00000007","00000000","fffffffe","3c6ef377"],["fffffff9","00000007","00000001","ffffffff","9e3779be"],["fffffff9","00000007","00000007","fffffff9","53845408"],["fffffff9","00000007","7fffffff","80000001","e1c88640"],["fffffff9","00000007","80000000","7ffffffe","bc6ef377"],["fffffff9","00000007","fffffff9","00000007","ac7babf6"],["fffffff9","00000007","ffffffff","00000001","ac7babf0"],["fffffff9","7fffffff","00000000","80000006","cab325af"],["fffffff9","7fffffff","00000001","80000007","2c7babf6"],["fffffff9","7fffffff","00000007","80000001","e1c88640"],["fffffff9","7fffffff","7fffffff","fffffff9","53845408"],["fffffff9","7fffffff","80000000","00000006","1e3779be"],["fffffff9","7fffffff","fffffff9","7fffffff","1e3779be"],["fffffff9","7fffffff","ffffffff","7ffffff9","1e3779b8"],["fffffff9","80000000","00000000","7ffffff9","7ffffff9"],["fffffff9","80000000","00000001","7ffffff8","7ffffff9"],["fffffff9","80000000","00000007","7ffffffe","7ffffff9"],["fffffff9","80000000","7fffffff","00000006","7ffffff9"],["fffffff9","80000000","80000000","fffffff9","53845408"],["fffffff9","80000000","fffffff9","80000000","7ffffff9"],["fffffff9","80000000","ffffffff","80000006","cab325a9"],["fffffff9","fffffff9","00000000","00000000","53845408"],["fffffff9","fffffff9","00000001","00000001","53845408"],["fffffff9","fffffff9","00000007","00000007","53845408"],["fffffff9","fffffff9","7fffffff","7fffffff","53845408"],["fffffff9","fffffff9","80000000","80000000","53845408"],["fffffff9","fffffff9","fffffff9","fffffff9","53845408"],["fffffff9","fffffff9","ffffffff","ffffffff","9e3779b8"],["fffffff9","ffffffff","00000000","00000006","9e3779be"],["fffffff9","ffffffff","00000001","00000007","9e3779be"],["fffffff9","ffffffff","00000007","00000001","9e3779be"],["fffffff9","ffffffff","7fffffff","7ffffff9","9e3779be"],["fffffff9","ffffffff","80000000","80000006","9e3779be"],["fffffff9","ffffffff","fffffff9","ffffffff","9e3779be"],["fffffff9","ffffffff","ffffffff","fffffff9","9e3779b8"],["ffffffff","00000000","00000000","ffffffff","9e3779b8"],["ffffffff","00000000","00000001","fffffffe","3c6ef371"],["ffffffff","00000000","00000007","fffffff8","f1bbcdc7"],["ffffffff","00000000","7fffffff","80000000","7fffffff"],["ffffffff","00000000","80000000","7fffffff","1e3779b8"],["ffffffff","00000000","fffffff9","00000006","4ab325a9"],["ffffffff","00000000","ffffffff","00000000","ffffffff"],["ffffffff","00000001","00000000","fffffffe","3c6ef371"],["ffffffff","00000001","00000001","ffffffff","9e3779b8"],["ffffffff","00000001","00000007","fffffff9","5384540e"],["ffffffff","00000001","7fffffff","80000001","e1c88646"],["ffffffff","00000001","80000000","7ffffffe","bc6ef371"],["ffffffff","00000001","fffffff9","00000007","ac7babf0"],["ffffffff","00000001","ffffffff","00000001","61c88646"],["ffffffff","00000007","00000000","fffffff8","f1bbcdc7"],["ffffffff","00000007","00000001","fffffff9","5384540e"],["ffffffff","00000007","00000007","ffffffff","9e3779b8"],["ffffffff","00000007","7fffffff","80000007","2c7babf0"],["ffffffff","00000007","80000000","7ffffff8","71bbcdc7"],["ffffffff","00000007","fffffff9","00000001","ac7babf0"],["ffffffff","00000007","ffffffff","00000007","ac7babf0"],["ffffffff","7fffffff","00000000","80000000","7fffffff"],["ffffffff","7fffffff","00000001","80000001","e1c88646"],["ffffffff","7fffffff","00000007","80000007","2c7babf0"],["ffffffff","7fffffff","7fffffff","ffffffff","9e3779b8"],["ffffffff","7fffffff","80000000","00000000","1e3779b8"],["ffffffff","7fffffff","fffffff9","7ffffff9","1e3779b8"],["ffffffff","7fffffff","ffffffff","7fffffff","1e3779b8"],["ffffffff","80000000","00000000","7fffffff","7fffffff"],["ffffffff","80000000","00000001","7ffffffe","7fffffff"],["ffffffff","80000000","00000007","7ffffff8","7fffffff"],["ffffffff","80000000","7fffffff","00000000","7fffffff"],["ffffffff","80000000","80000000","ffffffff","9e3779b8"],["ffffffff","80000000","fffffff9","80000006","cab325a9"],["ffffffff","80000000","ffffffff","80000000","7fffffff"],["ffffffff","fffffff9","00000000","00000006","5384540e"],["ffffffff","fffffff9","00000001","00000007","5384540e"],["ffffffff","fffffff9","00000007","00000001","5384540e"],["ffffffff","fffffff9","7fffffff","7ffffff9","5384540e"],["ffffffff","fffffff9","80000000","80000006","5384540e"],["ffffffff","fffffff9","fffffff9","ffffffff","9e3779b8"],["ffffffff","fffffff9","ffffffff","fffffff9","5384540e"],["ffffffff","ffffffff","00000000","00000000","9e3779b8"],["ffffffff","ffffffff","00000001","00000001","9e3779b8"],["ffffffff","ffffffff","00000007","00000007","9e3779b8"],["ffffffff","ffffffff","7fffffff","7fffffff","9e3779b8"],["ffffffff","ffffffff","80000000","80000000","9e3779b8"],["ffffffff","ffffffff","fffffff9","fffffff9","9e3779b8"],["ffffffff","ffffffff","ffffffff","ffffffff","9e3779b8"]]} -- 2.54.0 (Apple Git-157) From e2d119706849b177a9058f9b23321233f252826c Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 13:45:32 -0400 Subject: [PATCH 31/50] wai-ops-gpu: every run-time shift amount masked, the run-time clamps as min(max()) naga 30.0.1 passes a shift amount to MSL, HLSL and SPIR-V without reducing it modulo 32, and writes an integer clamp as MSL's clamp, which leaves bounds out of order undefined. The kernels already handled every shift of 32 or more explicitly and load refuses lo > hi; masking each run-time amount with & 31u and writing the two run-time clamps as min(max(e, lo), hi) gives WGSL's result unchanged and makes the translated code defined on every backend. The clamp mutant follows its text. Co-Authored-By: Claude Opus 5.5 --- wai/wai-ops-gpu/src/wgsl/arith.wgsl | 22 +++++++++++++--------- wai/wai-ops-gpu/src/wgsl/ops32.wgsl | 9 ++++++--- wai/wai-ops-gpu/tests/mutants.rs | 2 +- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/wai/wai-ops-gpu/src/wgsl/arith.wgsl b/wai/wai-ops-gpu/src/wgsl/arith.wgsl index 89bb43f49..30e3292e7 100644 --- a/wai/wai-ops-gpu/src/wgsl/arith.wgsl +++ b/wai/wai-ops-gpu/src/wgsl/arith.wgsl @@ -5,9 +5,13 @@ // operation here uses only what every WGSL implementation defines identically: // `u32` addition, subtraction and multiplication, which wrap; bitwise operations; // comparisons; `bitcast`; and shifts, whose amount WGSL takes modulo 32, so every -// shift of 32 or more is handled explicitly (integer-operators §6). No floating -// point, and no signed operation that could overflow: signed values are read from -// a word's bits only to compare or to shift right arithmetically. +// shift of 32 or more is handled explicitly (integer-operators §6). Every shift by an +// amount known only at run time is also written with its amount masked, `& 31u`: +// WGSL gives the same result either way, and a translator that passes the amount to +// a language where a shift of 32 or more is undefined (MSL, HLSL, SPIR-V; naga 30.0.1 +// masks none) then never passes one (determinism-tiers §5, *Claiming the tier on a +// GPU*). No floating point, and no signed operation that could overflow: signed values +// are read from a word's bits only to compare or to shift right arithmetically. // // Each function's result is exact modulo 2^64 (W) or 2^128 (Q). A kernel uses one // only where the graph's certificate places the exact value inside that width @@ -118,10 +122,10 @@ fn w_sar(a: W, s: u32) -> W { return a; } if (s < 32u) { - return W((a.x >> s) | (a.y << (32u - s)), bitcast(bitcast(a.y) >> s)); + return W((a.x >> (s & 31u)) | (a.y << ((32u - s) & 31u)), bitcast(bitcast(a.y) >> (s & 31u))); } if (s < 64u) { - return W(bitcast(bitcast(a.y) >> (s - 32u)), sg); + return W(bitcast(bitcast(a.y) >> ((s - 32u) & 31u)), sg); } return W(sg, sg); } @@ -129,9 +133,9 @@ fn w_sar(a: W, s: u32) -> W { // 2^k for k in 0..=63 (2^63 is the bit pattern of −2^63). fn w_pow2(k: u32) -> W { if (k < 32u) { - return W(1u << k, 0u); + return W(1u << (k & 31u), 0u); } - return W(0u, 1u << (k - 32u)); + return W(0u, 1u << ((k - 32u) & 31u)); } // R_round(p, s) (§2) on 64 bits, for s in 0..=63, mode 0 floor, 1 half_up, 2 @@ -159,7 +163,7 @@ fn sar32(a: u32, s: u32) -> u32 { if (s >= 32u) { return bitcast(bitcast(a) >> 31u); } - return bitcast(bitcast(a) >> s); + return bitcast(bitcast(a) >> (s & 31u)); } // isqrt of a 32-bit value, digit by digit. @@ -324,7 +328,7 @@ fn q_shr_fill(a: Q, s: u32, f: u32) -> Q { for (var i = 0u; i < 4u; i++) { let lo = q_word(a, i + k, f); let hi = q_word(a, i + k + 1u, f); - r[i] = select((lo >> b) | (hi << (32u - b)), lo, b == 0u); + r[i] = select((lo >> b) | (hi << ((32u - b) & 31u)), lo, b == 0u); } return Q(r[0], r[1], r[2], r[3]); } diff --git a/wai/wai-ops-gpu/src/wgsl/ops32.wgsl b/wai/wai-ops-gpu/src/wgsl/ops32.wgsl index 7f3bcef5a..c199de953 100644 --- a/wai/wai-ops-gpu/src/wgsl/ops32.wgsl +++ b/wai/wai-ops-gpu/src/wgsl/ops32.wgsl @@ -199,7 +199,10 @@ fn lut16(@builtin(global_invocation_id) g: vec3) { } // lo and hi are the host's clamp bounds held to i32, which gives the same result -// on an i32 value (a bound past i32 is not reached by any i32). +// on an i32 value (a bound past i32 is not reached by any i32). Load refuses a clamp +// whose lo is above its hi; the bound is applied as min(max(v, lo), hi), WGSL's +// definition of an integer clamp, which every translation keeps whatever the bounds, +// where a backend's own clamp can leave bounds out of order undefined. @compute @workgroup_size(256) fn ew(@builtin(global_invocation_id) g: vec3) { let t = tid(g); @@ -209,7 +212,7 @@ fn ew(@builtin(global_invocation_id) g: vec3) { let v = A[t]; switch P.mode { case 0u: { - O[t] = bitcast(clamp(bitcast(v), bitcast(P.lo_x), bitcast(P.hi_x))); + O[t] = bitcast(min(max(bitcast(v), bitcast(P.lo_x)), bitcast(P.hi_x))); } case 1u: { O[t] = select(v, 0u, lt32(v, 0u)); @@ -239,7 +242,7 @@ fn policy(@builtin(global_invocation_id) g: vec3) { let lo = bitcast(P.lo_x); let hi = bitcast(P.hi_x); if (P.mode == 0u) { - O[t] = bitcast(clamp(v, lo, hi)); + O[t] = bitcast(min(max(v, lo), hi)); } else if (v < lo || v > hi) { atomicOr(&F[P.flag], 1u); } diff --git a/wai/wai-ops-gpu/tests/mutants.rs b/wai/wai-ops-gpu/tests/mutants.rs index 547d46c53..1c4d508d4 100644 --- a/wai/wai-ops-gpu/tests/mutants.rs +++ b/wai/wai-ops-gpu/tests/mutants.rs @@ -30,7 +30,7 @@ const MUTANTS: &[(&str, Module, &str, &str)] = &[ ("half_even ties to odd (acc64)", Module::Ops64, "(q_eq(rem, h) && (q.x & 1u) == 1u)", "(q_eq(rem, h) && (q.x & 1u) == 0u)"), ("half_even ties to odd (acc32)", Module::Ops32, "(w_eq(rem, h) && (q.x & 1u) == 1u)", "(w_eq(rem, h) && (q.x & 1u) == 0u)"), ("clamp operator saturates one below its top (acc64)", Module::Ops64, "put64(t, w_clamp(a64(t), lo, hi));", "put64(t, w_clamp(a64(t), lo, w_sub(hi, W(1u, 0u))));"), - ("clamp policy saturates one above its bottom (acc32)", Module::Ops32, "O[t] = bitcast(clamp(v, lo, hi));", "O[t] = bitcast(clamp(v, lo + 1, hi));"), + ("clamp policy saturates one above its bottom (acc32)", Module::Ops32, "O[t] = bitcast(min(max(v, lo), hi));", "O[t] = bitcast(min(max(v, lo + 1), hi));"), ("check policy misses values above its range (acc64)", Module::Ops64, "} else if (w_lt(v, lo) || w_lt(hi, v)) {", "} else if (w_lt(v, lo)) {"), // In the 32-bit kernels the 32 × 32-bit product only ever sees magnitudes of at most // 2^31, for which neither carry of its middle sum can be set (a0·b1 + a1·b0 stays -- 2.54.0 (Apple Git-157) From 6062a3d1feaab0abf0ab5d8b81a39706de4c4479 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 13:45:32 -0400 Subject: [PATCH 32/50] wai-ops-gpu: the shipped shaders held to the GPU tier's rules on naga's IR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tests/wgsl_rules.rs parses every shipped module with naga 30.0.1 and validates it with no capability, then holds it to determinism-tiers §5's GPU conditions: bool, i32 and u32 only, a closed list of expressions and integer built-ins, one atomic kind with its result unused, no barrier or workgroup memory, shift amounts masked below 32 and clamp bounds literal and ordered, every integer operation one the semantics suite runs, and naga's guards (naga_div, naga_mod, naga_neg, naga_abs, signed arithmetic through unsigned) in each module's MSL and HLSL. It holds the crate to the checked create_shader_module, and shows nine planted violations each refused by the rule it breaks. naga enters as a native dev-dependency, the release wgpu 30.0.1 already locks. Co-Authored-By: Claude Opus 5.5 --- wai/wai-ops-gpu/Cargo.lock | 1 + wai/wai-ops-gpu/Cargo.toml | 6 + wai/wai-ops-gpu/tests/wgsl_rules.rs | 486 ++++++++++++++++++++++++++++ 3 files changed, 493 insertions(+) create mode 100644 wai/wai-ops-gpu/tests/wgsl_rules.rs diff --git a/wai/wai-ops-gpu/Cargo.lock b/wai/wai-ops-gpu/Cargo.lock index 39c91494c..e965744de 100644 --- a/wai/wai-ops-gpu/Cargo.lock +++ b/wai/wai-ops-gpu/Cargo.lock @@ -705,6 +705,7 @@ version = "0.1.0" name = "wai-ops-gpu" version = "0.1.0" dependencies = [ + "naga", "wai-ops", "wgpu", ] diff --git a/wai/wai-ops-gpu/Cargo.toml b/wai/wai-ops-gpu/Cargo.toml index 7e1b39647..32fc66c22 100644 --- a/wai/wai-ops-gpu/Cargo.toml +++ b/wai/wai-ops-gpu/Cargo.toml @@ -29,5 +29,11 @@ wgpu = { version = "30.0.1", default-features = false, features = ["std", "wgsl" [target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies] wgpu = { version = "30.0.1", default-features = false, features = ["std", "wgsl", "webgpu"] } +# The WGSL rules test (tests/wgsl_rules.rs) reads the shipped modules on the IR of the +# translator wgpu compiles them with: naga, the same release wgpu 30.0.1 depends on, so +# the lockfile gains no package. +[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies] +naga = { version = "30.0.1", default-features = false, features = ["wgsl-in", "msl-out", "hlsl-out", "spv-out"] } + [profile.release] debug = false diff --git a/wai/wai-ops-gpu/tests/wgsl_rules.rs b/wai/wai-ops-gpu/tests/wgsl_rules.rs new file mode 100644 index 000000000..650c5925a --- /dev/null +++ b/wai/wai-ops-gpu/tests/wgsl_rules.rs @@ -0,0 +1,486 @@ +//! The shipped WGSL modules held, on naga 30.0.1's IR (the translator wgpu runs them +//! through), to the rules the `decode-equivalence` tier on a GPU rests on +//! (determinism-tiers §5, *Claiming the tier on a GPU*). No adapter is needed: these run +//! on every leg. +//! +//! 1. Each module parses, and validates with every validation flag and no capability: +//! so no `f16`, no 64-bit type, no subgroup or quad operation, no extension. +//! 2. Every entry point is a compute entry point; the globals are exactly the six +//! bindings of `wgsl/common.wgsl`, and there is no workgroup or private memory. +//! 3. Every scalar, in the type arena and in the type of every expression, is `bool`, +//! `i32` or `u32`; every literal is one of those. No floating-point value exists. +//! 4. Every expression is one of a closed list: no derivative, image, ray-query, +//! subgroup or cooperative-matrix expression; every built-in function is one of the +//! integer functions the semantics suite tests; every conversion is between `bool`, +//! `i32` and `u32`. +//! 5. In the kernels (every module but `semantics`, which exists to evaluate them), every +//! shift amount is a literal in 0..=31 or masked to 0..=31 (`e & 31u`), and every +//! `clamp` has literal bounds in order: the two integer operations whose WGSL result +//! naga 30.0.1 does not produce itself in MSL, HLSL and SPIR-V +//! (`semantics::UNGUARDED`) are reached only where every backend defines them. +//! 6. The only atomic operation is `atomicOr`, its result unused, so no result depends +//! on the order in which invocations reach it; there is no barrier. +//! 7. Every integer operation the kernels use (by operator and by signedness) is one the +//! semantics suite runs on every adapter (`src/semantics.rs`). +//! 8. Each module translates to MSL 2.4, HLSL shader model 5.1 and SPIR-V; the MSL and +//! HLSL carry naga's guards for every guarded operation the module uses (signed +//! arithmetic through unsigned, `naga_div`, `naga_mod`, `naga_neg`, `naga_abs`), and +//! the MSL guards for division vanish when `emit_int_div_checks` is turned off, +//! which is what the crate must never do. +//! +//! Then each planted violation (a floating-point value, `f16`, a subgroup operation, an +//! `atomicAdd`, an atomic's result read, a workgroup variable and barrier, an unmasked +//! shift, a run-time `clamp`) is shown to be refused, by the rule it breaks. + +use std::collections::BTreeSet; + +use naga::back::{hlsl, msl, spv}; +use naga::valid::{Capabilities, ModuleInfo, ValidationFlags, Validator}; +use naga::{AddressSpace, AtomicFunction, BinaryOperator, Block, Expression, Literal, MathFunction, Module, Scalar, ScalarKind, ShaderStage, Statement, StorageAccess, TypeInner, UnaryOperator}; +use wai_ops_gpu::kernels::Sources; +use wai_ops_gpu::semantics::Op; + +type Check = Result; + +/// Step 1. +fn compile(text: &str) -> Check<(Module, ModuleInfo)> { + let module = naga::front::wgsl::parse_str(text).map_err(|e| format!("rule 1: parse: {}", e.emit_to_string(text)))?; + let info = Validator::new(ValidationFlags::all(), Capabilities::empty()).validate(&module).map_err(|e| format!("rule 1: validation: {}", e.emit_to_string(text)))?; + Ok((module, info)) +} + +/// The functions and entry points, with their expression-info tables. +fn functions<'a>(m: &'a Module, info: &'a ModuleInfo) -> Vec<(String, &'a naga::Function, &'a naga::valid::FunctionInfo)> { + let mut v: Vec<(String, &naga::Function, &naga::valid::FunctionInfo)> = m.functions.iter().map(|(h, f)| (f.name.clone().unwrap_or_default(), f, &info[h])).collect(); + for (i, e) in m.entry_points.iter().enumerate() { + v.push((e.name.clone(), &e.function, info.get_entry_point(i))); + } + v +} + +/// Step 2. +fn interface(m: &Module) -> Check { + for e in &m.entry_points { + if e.stage != ShaderStage::Compute { + return Err(format!("rule 2: entry point `{}` is a {:?} stage", e.name, e.stage)); + } + if e.workgroup_size_overrides.is_some() || e.workgroup_size[1] != 1 || e.workgroup_size[2] != 1 { + return Err(format!("rule 2: entry point `{}` has workgroup size {:?}", e.name, e.workgroup_size)); + } + } + let mut found = Vec::new(); + for (_, v) in m.global_variables.iter() { + let name = v.name.clone().unwrap_or_default(); + let space = match v.space { + AddressSpace::Uniform => "uniform", + AddressSpace::Storage { access } if access == StorageAccess::LOAD => "read", + AddressSpace::Storage { access } if access.contains(StorageAccess::LOAD | StorageAccess::STORE) => "read_write", + other => return Err(format!("rule 2: global `{name}` is in address space {other:?}")), + }; + let b = v.binding.ok_or(format!("rule 2: global `{name}` has no binding"))?; + found.push((b.group, b.binding, space)); + } + found.sort(); + let want = vec![(0, 0, "uniform"), (0, 1, "read"), (0, 2, "read"), (0, 3, "read"), (0, 4, "read_write"), (0, 5, "read_write")]; + if found != want { + return Err(format!("rule 2: the globals are {found:?}, not the six bindings of common.wgsl")); + } + Ok(()) +} + +fn scalar_ok(s: Scalar) -> bool { + s.kind == ScalarKind::Bool || (matches!(s.kind, ScalarKind::Sint | ScalarKind::Uint) && s.width == 4) +} + +fn type_ok(t: &TypeInner) -> Check { + match *t { + TypeInner::Scalar(s) | TypeInner::Vector { scalar: s, .. } | TypeInner::Atomic(s) | TypeInner::ValuePointer { scalar: s, .. } => { + if scalar_ok(s) { Ok(()) } else { Err(format!("{:?} of width {}", s.kind, s.width)) } + } + TypeInner::Pointer { .. } | TypeInner::Array { .. } | TypeInner::Struct { .. } => Ok(()), + ref other => Err(format!("{other:?}")), + } +} + +/// Step 3. +fn types(m: &Module, info: &ModuleInfo) -> Check { + for (_, t) in m.types.iter() { + type_ok(&t.inner).map_err(|e| format!("rule 3: the type {} is not made of bool, i32 and u32: {e}", t.name.clone().unwrap_or_default()))?; + } + for (name, f, fi) in functions(m, info) { + for (h, e) in f.expressions.iter() { + type_ok(fi[h].ty.inner_with(&m.types)).map_err(|err| format!("rule 3: in `{name}`, {e:?} has a type that is not bool, i32 or u32: {err}"))?; + if let Expression::Literal(l) = e { + literal_ok(l).map_err(|err| format!("rule 3: in `{name}`: {err}"))?; + } + } + } + for (_, e) in m.global_expressions.iter() { + if let Expression::Literal(l) = e { + literal_ok(l).map_err(|err| format!("rule 3: at module scope: {err}"))?; + } + } + Ok(()) +} + +fn literal_ok(l: &Literal) -> Check { + match l { + Literal::U32(_) | Literal::I32(_) | Literal::Bool(_) => Ok(()), + other => Err(format!("the literal {other:?}")), + } +} + +/// The integer functions the semantics suite tests. +fn math_ok(f: MathFunction) -> bool { + use MathFunction::*; + matches!(f, Min | Max | Clamp | Abs | Sign | CountLeadingZeros | CountTrailingZeros | CountOneBits | ReverseBits | FirstLeadingBit | FirstTrailingBit | ExtractBits | InsertBits) +} + +/// The integer value of a literal, or of a constant initialised with one. +fn literal_value(m: &Module, arena: &naga::Arena, h: naga::Handle) -> Option { + let lit = |l: &Literal| match *l { + Literal::U32(v) => Some(i64::from(v)), + Literal::I32(v) => Some(i64::from(v)), + _ => None, + }; + match &arena[h] { + Expression::Literal(l) => lit(l), + Expression::Constant(c) => match &m.global_expressions[m.constants[*c].init] { + Expression::Literal(l) => lit(l), + _ => None, + }, + _ => None, + } +} + +/// A shift amount the kernels may use: a literal in 0..=31, or `e & k` with `k` a literal +/// in 0..=31 (either side). +fn amount_bounded(m: &Module, arena: &naga::Arena, h: naga::Handle) -> bool { + if let Some(v) = literal_value(m, arena, h) { + return (0..=31).contains(&v); + } + match arena[h] { + Expression::Binary { op: BinaryOperator::And, left, right } => [left, right].iter().any(|&x| literal_value(m, arena, x).is_some_and(|v| (0..=31).contains(&v))), + _ => false, + } +} + +/// The scalar kind of an expression and whether it is a vector. +fn kind_of(m: &Module, fi: &naga::valid::FunctionInfo, h: naga::Handle) -> (Option, bool) { + let t = fi[h].ty.inner_with(&m.types); + (t.scalar_kind(), matches!(t, TypeInner::Vector { .. })) +} + +/// Steps 4, 5 and 7: the closed list of expressions, the kernel rules on shifts and +/// `clamp`, and the semantics operation each integer operation is. Returns the +/// operations used. +fn expressions(m: &Module, info: &ModuleInfo, kernel: bool) -> Check> { + let mut used = BTreeSet::new(); + for (name, f, fi) in functions(m, info) { + let arena = &f.expressions; + for (h, e) in arena.iter() { + let at = |what: String| format!("in `{name}`, {what}"); + match *e { + Expression::Literal(_) | Expression::Constant(_) | Expression::ZeroValue(_) | Expression::Compose { .. } | Expression::Access { .. } | Expression::AccessIndex { .. } | Expression::Splat { .. } | Expression::Swizzle { .. } | Expression::FunctionArgument(_) | Expression::GlobalVariable(_) | Expression::LocalVariable(_) | Expression::Load { .. } | Expression::CallResult(_) | Expression::ArrayLength(_) => {} + Expression::Relational { fun, .. } => { + if !matches!(fun, naga::RelationalFunction::All | naga::RelationalFunction::Any) { + return Err(format!("rule 4: {}", at(format!("the relational function {fun:?}")))); + } + } + // naga gives every atomic call a result; the call statement does not count + // as a reference to it, so a count above zero is a read. + Expression::AtomicResult { .. } => { + if fi[h].ref_count > 0 { + return Err(format!("rule 6: {}", at("an atomic operation's result is read".into()))); + } + } + Expression::Unary { op, expr } => { + let (k, _) = kind_of(m, fi, expr); + match (op, k) { + (UnaryOperator::Negate, Some(ScalarKind::Sint)) => { + used.insert(Op::NegI32); + } + (UnaryOperator::BitwiseNot, Some(ScalarKind::Sint | ScalarKind::Uint)) => { + used.insert(Op::Not); + } + (UnaryOperator::LogicalNot, Some(ScalarKind::Bool)) | (UnaryOperator::BitwiseNot, Some(ScalarKind::Bool)) => {} + (op, k) => return Err(format!("rule 4: {}", at(format!("the unary {op:?} on {k:?}")))), + } + } + Expression::Binary { op, left, right } => { + let (k, vector) = kind_of(m, fi, left); + use BinaryOperator as B; + let s = k == Some(ScalarKind::Sint); + let int = matches!(k, Some(ScalarKind::Sint | ScalarKind::Uint)); + let v = vector; + let op_used = match op { + B::Add if int && v && !s => Some(Op::AddVec2U32), + B::Multiply if int && v => Some(if s { Op::MulVec2I32 } else { Op::MulVec2U32 }), + B::ShiftRight if v => Some(if s { Op::ShrVec2I32 } else { Op::ShrVec2U32 }), + B::Add if int && !v => Some(if s { Op::AddI32 } else { Op::AddU32 }), + B::Subtract if int && !v => Some(if s { Op::SubI32 } else { Op::SubU32 }), + B::Multiply if int && !v => Some(if s { Op::MulI32 } else { Op::MulU32 }), + B::Divide if int && !v => Some(if s { Op::DivI32 } else { Op::DivU32 }), + B::Modulo if int && !v => Some(if s { Op::RemI32 } else { Op::RemU32 }), + B::ShiftLeft if int && !v => Some(if s { Op::ShlI32 } else { Op::ShlU32 }), + B::ShiftRight if int && !v => Some(if s { Op::ShrI32 } else { Op::ShrU32 }), + B::And if int && !v => Some(Op::And), + B::InclusiveOr if int && !v => Some(Op::Or), + B::ExclusiveOr if int && !v => Some(Op::Xor), + B::Less | B::Greater if int && !v => Some(if s { Op::LtI32 } else { Op::LtU32 }), + B::LessEqual | B::GreaterEqual if int && !v => Some(if s { Op::LeI32 } else { Op::LeU32 }), + B::Equal if int && !v => Some(Op::Eq), + B::NotEqual if int && !v => Some(Op::Ne), + B::LogicalAnd | B::LogicalOr | B::And | B::InclusiveOr | B::Equal | B::NotEqual if k == Some(ScalarKind::Bool) => None, + _ => return Err(format!("rule 7: {}", at(format!("{op:?} on {k:?} (vector {vector}), which the semantics suite does not test")))), + }; + if kernel && matches!(op, B::ShiftLeft | B::ShiftRight) && !amount_bounded(m, arena, right) { + return Err(format!("rule 5: {}", at(format!("{op:?} by an amount that is neither a literal in 0..=31 nor masked to it: {:?}", arena[right])))); + } + used.extend(op_used); + } + Expression::Select { accept, .. } => { + let (k, vector) = kind_of(m, fi, accept); + used.insert(match (k, vector) { + (_, true) => Op::SelectVec2U32, + (Some(ScalarKind::Sint), false) => Op::SelectI32, + _ => Op::SelectU32, + }); + } + Expression::Math { fun, arg, arg1, arg2, .. } => { + if !math_ok(fun) { + return Err(format!("rule 4: {}", at(format!("the built-in function {fun:?}, not an integer function the suite tests")))); + } + let (k, _) = kind_of(m, fi, arg); + let s = k == Some(ScalarKind::Sint); + use MathFunction as F; + if kernel && fun == F::Clamp { + let lo = arg1.and_then(|x| literal_value(m, arena, x)); + let hi = arg2.and_then(|x| literal_value(m, arena, x)); + match (lo, hi) { + (Some(lo), Some(hi)) if lo <= hi => {} + _ => return Err(format!("rule 5: {}", at("a clamp whose bounds are not literals in order: write min(max(e, low), high)".into()))), + } + } + used.insert(match fun { + F::Min => if s { Op::MinI32 } else { Op::MinU32 }, + F::Max => if s { Op::MaxI32 } else { Op::MaxU32 }, + F::Clamp => if s { Op::ClampI32 } else { Op::ClampU32 }, + F::Abs => Op::AbsI32, + F::Sign => Op::SignI32, + F::CountLeadingZeros => if s { Op::CountLeadingZerosI32 } else { Op::CountLeadingZerosU32 }, + F::CountTrailingZeros => Op::CountTrailingZerosU32, + F::CountOneBits => Op::CountOneBitsU32, + F::ReverseBits => Op::ReverseBitsU32, + F::FirstLeadingBit => if s { Op::FirstLeadingBitI32 } else { Op::FirstLeadingBitU32 }, + F::FirstTrailingBit => Op::FirstTrailingBitU32, + F::ExtractBits => if s { Op::ExtractBitsI32 } else { Op::ExtractBitsU32 }, + F::InsertBits => if s { Op::InsertBitsI32 } else { Op::InsertBitsU32 }, + _ => unreachable!(), + }); + } + Expression::As { expr, kind, convert } => { + let (from, _) = kind_of(m, fi, expr); + let ok = |k: Option| matches!(k, Some(ScalarKind::Sint | ScalarKind::Uint | ScalarKind::Bool)); + if !ok(Some(kind)) || !ok(from) || convert.is_some_and(|w| w != 4) { + return Err(format!("rule 4: {}", at(format!("a conversion from {from:?} to {kind:?} ({convert:?})")))); + } + if convert.is_some() { + used.insert(match (from, kind) { + (Some(ScalarKind::Bool), _) => Op::U32OfBool, + (Some(ScalarKind::Sint), ScalarKind::Uint) => Op::U32OfI32, + (Some(ScalarKind::Uint), ScalarKind::Sint) => Op::I32OfU32, + _ => continue, + }); + } + } + ref other => return Err(format!("rule 4: {}", at(format!("the expression {other:?}")))), + } + } + } + Ok(used) +} + +/// Step 6, recursively. +fn statements(block: &Block, name: &str) -> Check { + for s in block.iter() { + match s { + // Whether its result is read is the expression rule's (rule 6 there). + Statement::Atomic { fun, .. } => { + if !matches!(fun, AtomicFunction::InclusiveOr) { + return Err(format!("rule 6: in `{name}`, the atomic operation {fun:?}")); + } + } + Statement::ControlBarrier(_) | Statement::MemoryBarrier(_) | Statement::WorkGroupUniformLoad { .. } => return Err(format!("rule 6: in `{name}`, a barrier")), + Statement::Block(b) => statements(b, name)?, + Statement::If { accept, reject, .. } => { + statements(accept, name)?; + statements(reject, name)?; + } + Statement::Switch { cases, .. } => { + for c in cases { + statements(&c.body, name)?; + } + } + Statement::Loop { body, continuing, .. } => { + statements(body, name)?; + statements(continuing, name)?; + } + Statement::Emit(_) | Statement::Break | Statement::Continue | Statement::Return { .. } | Statement::Store { .. } | Statement::Call { .. } => {} + other => return Err(format!("rule 4: in `{name}`, the statement {other:?}")), + } + } + Ok(()) +} + +/// What one module was found to use. +struct Found { + module: Module, + info: ModuleInfo, + used: BTreeSet, +} + +/// Rules 1–7 on one module's text; `kernel` is false only for the semantics module. +fn check(text: &str, kernel: bool) -> Check { + let (module, info) = compile(text)?; + interface(&module)?; + types(&module, &info)?; + let used = expressions(&module, &info, kernel)?; + for (name, f, _) in functions(&module, &info) { + statements(&f.body, &name)?; + } + Ok(Found { module, info, used }) +} + +fn msl_text(f: &Found, int_div_checks: bool) -> Check { + let options = msl::Options { lang_version: (2, 4), emit_int_div_checks: int_div_checks, ..Default::default() }; + msl::write_string(&f.module, &f.info, &options, &msl::PipelineOptions::default()).map(|(s, _)| s).map_err(|e| format!("rule 8: MSL: {e}")) +} + +fn hlsl_text(f: &Found) -> Check { + let mut s = String::new(); + hlsl::Writer::new(&mut s, &hlsl::Options::default(), &hlsl::PipelineOptions::default()).write(&f.module, &f.info, None).map_err(|e| format!("rule 8: HLSL: {e}"))?; + Ok(s) +} + +/// Rule 8 on one module: the translations, and the guards each must carry. +fn translations(name: &str, f: &Found) -> Check { + let m = msl_text(f, true)?; + let h = hlsl_text(f)?; + spv::write_vec(&f.module, &f.info, &spv::Options::default(), None).map_err(|e| format!("rule 8: {name}: SPIR-V: {e}"))?; + let u = &f.used; + let need = |cond: bool, text: &str, pat: &str, lang: &str| -> Check { + if cond && !text.contains(pat) { + return Err(format!("rule 8: {name}: the {lang} lacks `{pat}`, the guard for an operation the module uses")); + } + Ok(()) + }; + let signed = u.contains(&Op::AddI32) || u.contains(&Op::SubI32) || u.contains(&Op::MulI32) || u.contains(&Op::MulVec2I32); + need(signed, &m, "as_type(", "MSL")?; + need(signed, &h, "asuint(", "HLSL")?; + let div = [Op::DivU32, Op::DivI32].iter().any(|o| u.contains(o)); + let rem = [Op::RemU32, Op::RemI32].iter().any(|o| u.contains(o)); + for (text, lang) in [(&m, "MSL"), (&h, "HLSL")] { + need(div, text, "naga_div(", lang)?; + need(rem, text, "naga_mod(", lang)?; + need(u.contains(&Op::NegI32), text, "naga_neg(", lang)?; + need(u.contains(&Op::AbsI32), text, "naga_abs(", lang)?; + } + if div || rem { + let raw = msl_text(f, false)?; + if raw.contains("naga_div(") || raw.contains("naga_mod(") { + return Err(format!("rule 8: {name}: the MSL keeps its division guards with emit_int_div_checks off, so this check does not see the switch")); + } + } + Ok(()) +} + +#[test] +fn every_shipped_module_meets_the_rules() { + let src = Sources::shipped(); + let mut all = BTreeSet::new(); + for (name, text) in src.named() { + let kernel = name != "semantics"; + let f = check(text, kernel).unwrap_or_else(|e| panic!("{name}: {e}")); + translations(name, &f).unwrap_or_else(|e| panic!("{e}")); + let ops: Vec<&str> = f.used.iter().map(|o| o.name()).collect(); + println!("ops-gpu wgsl rules: {name}: rules 1-8 hold; integer operations used: {}", ops.join(" ")); + if kernel { + all.extend(f.used); + } + } + let ops: Vec<&str> = all.iter().map(|o| o.name()).collect(); + println!("ops-gpu wgsl rules: the kernels use {} of the suite's operations: {}", all.len(), ops.join(" ")); +} + +/// Rule 7 the other way: the semantics module evaluates every operation of the suite, +/// so a kernel operation the suite names is one the device is held to. +#[test] +fn the_semantics_module_evaluates_every_operation_of_the_suite() { + let src = Sources::shipped(); + let f = check(&src.semantics, false).unwrap(); + for op in wai_ops_gpu::semantics::ALL { + // The conversions u32(i32) and i32(u32) are bit-preserving, as bitcast is; the + // comparisons with > and >= are those with < and <= on swapped operands. + assert!(f.used.contains(&op), "the semantics module does not evaluate {op:?}"); + } +} + +/// The crate creates every module through `create_shader_module`, which keeps wgpu's +/// run-time checks, the division guards among them, on; never through the unchecked +/// form or with checks of its own choosing. +#[test] +fn the_crate_never_turns_the_translators_checks_off() { + let dir = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("src"); + let mut seen = 0; + for entry in std::fs::read_dir(&dir).unwrap() { + let p = entry.unwrap().path(); + if p.extension().is_some_and(|e| e == "rs") { + let text = std::fs::read_to_string(&p).unwrap(); + for (n, line) in text.lines().enumerate() { + let code = line.split("//").next().unwrap_or(""); + for bad in ["create_shader_module_trusted", "ShaderRuntimeChecks", "create_shader_module_passthrough", "create_shader_module_spirv"] { + assert!(!code.contains(bad), "{}:{}: {bad}", p.display(), n + 1); + } + seen += code.matches("create_shader_module(").count(); + } + } + } + assert!(seen >= 1, "no module is created through create_shader_module"); +} + +/// Each violation, planted in a shipped module, is refused by the rule it breaks. +#[test] +fn each_planted_violation_is_refused() { + let src = Sources::shipped(); + let ops32 = &src.ops32; + let anchor = " let v = A[t];\n switch P.mode {"; + assert_eq!(ops32.matches(anchor).count(), 1); + let plant = |code: &str| ops32.replacen(anchor, &format!("{code}\n{anchor}"), 1); + let cases: Vec<(&str, String, &str)> = vec![ + ("a floating-point value", plant(" let fl = f32(P.n) * 0.5;\n O[t] = u32(fl);"), "rule 3"), + ("an f16 value", format!("enable f16;\n{}", plant(" let h = f16(A[t]);\n O[t] = u32(h);")), "rule 1"), + ("a subgroup reduction", format!("enable subgroups;\n{}", plant(" O[t] = subgroupAdd(A[t]);")), "rule 1"), + ("an atomicAdd", plant(" atomicAdd(&F[P.flag], 1u);"), "rule 6"), + ("an atomic's result read", plant(" let old = atomicOr(&F[P.flag], 1u);\n O[t] = old;"), "rule 6"), + ("a workgroup variable and a barrier", format!("var wg: array;\n{}", plant(" wg[t & 63u] = A[t];\n workgroupBarrier();")), "rule 2"), + ("an unmasked shift", plant(" O[t] = A[t] << P.f;"), "rule 5"), + ("a clamp with run-time bounds", plant(" O[t] = clamp(A[t], P.lo_x, P.hi_x);"), "rule 5"), + ("a floating-point built-in", plant(" O[t] = u32(sqrt(f32(A[t])));"), "rule 3"), + ]; + for (what, text, rule) in &cases { + assert_ne!(text, ops32, "{what}: the plant did not change the text"); + match check(text, true) { + Ok(_) => panic!("{what}: the rules accepted it"), + Err(e) => { + assert!(e.starts_with(rule), "{what}: refused, but by `{e}`, not {rule}"); + println!("ops-gpu wgsl rules: planted {what}: refused: {}", e.lines().next().unwrap_or("")); + } + } + } + // And the shift rule reads the masks the kernels carry: unmask one of arith.wgsl's. + let unmasked = ops32.replacen("(a.y << ((32u - s) & 31u))", "(a.y << (32u - s))", 1); + assert_ne!(&unmasked, ops32); + let e = check(&unmasked, true).err().expect("an unmasked shift in arith.wgsl was accepted"); + assert!(e.starts_with("rule 5"), "{e}"); +} -- 2.54.0 (Apple Git-157) From 5a95542c515a9602016ac1847f103c393a549596 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 13:45:33 -0400 Subject: [PATCH 33/50] wai-ops-gpu browser: the semantics suite through the browser's WGSL compiler run_semantics holds the committed vectors to the reference compiled to wasm32 in the page and runs them, with SplitMix64 cases, on every adapter the page is offered; semantics_reference.mjs does the first half under Node, with no GPU. run.mjs serves wgsl-conformance and, under WAI_OPS_GPU_REQUIRE, requires both lines. Co-Authored-By: Claude Opus 5.5 --- wai/wai-ops-gpu/browser/index.html | 12 ++- wai/wai-ops-gpu/browser/run.mjs | 21 +++-- .../browser/semantics_reference.mjs | 26 ++++++ wai/wai-ops-gpu/browser/src/lib.rs | 80 +++++++++++++++++++ 4 files changed, 129 insertions(+), 10 deletions(-) create mode 100644 wai/wai-ops-gpu/browser/semantics_reference.mjs diff --git a/wai/wai-ops-gpu/browser/index.html b/wai/wai-ops-gpu/browser/index.html index 5d8d7fed8..c7c410b66 100644 --- a/wai/wai-ops-gpu/browser/index.html +++ b/wai/wai-ops-gpu/browser/index.html @@ -5,9 +5,10 @@

 
diff --git a/wai/wai-web/demo/platform_decode.js b/wai/wai-web/demo/platform_decode.js
new file mode 100644
index 000000000..91bfe0874
--- /dev/null
+++ b/wai/wai-web/demo/platform_decode.js
@@ -0,0 +1,168 @@
+// Platform decode capabilities in dispatch (extensions/platform-decode.md), in a page.
+//
+// For each AV1 floor object of the packaging corpus (WAI1 envelopes whose payload is SPEC
+// §5's AV1 framing): the query the reference reads from the payload (platformQuery), the
+// platform's answers to it (Media Capabilities decodingInfo, WebCodecs isConfigSupported
+// with prefer-hardware and no-preference), and a decode of every temporal unit through
+// WebCodecs with the configuration the query gives. Then the same codec family at a
+// broadcast size; then an HEVC Annex B stream the platform's own encoder writes, read by
+// the reference's query and decoded back; then the default order (platformOrder) over a
+// manifest of a learned entry and an AV1 entry, from the answers this platform gave.
+//
+// The report is left in window.platformDecode for verify_platform_decode.mjs to read.
+import init, { parse, platformQuery, platformOrder } from "./pkg-platform/wai_platform_decode.js";
+
+const lines = [];
+const say = (l) => lines.push(l);
+const info = (d) => d ? `supported=${d.supported} smooth=${d.smooth} powerEfficient=${d.powerEfficient}` : "none";
+
+/// SPEC §5's AV1 framing: n, h, w, fps_num, fps_den, then each unit with its length.
+function av1Units(p) {
+  const dv = new DataView(p.buffer, p.byteOffset, p.byteLength);
+  const n = dv.getUint32(0, true);
+  const units = [];
+  let at = 20;
+  for (let k = 0; k < n; k++) {
+    const len = dv.getUint32(at, true);
+    units.push(p.subarray(at + 4, at + 4 + len));
+    at += 4 + len;
+  }
+  return units;
+}
+
+/// Whether a temporal unit carries a sequence header OBU (type 1): the corpus floors start
+/// each closed group with one, before its key frame.
+function hasSequenceHeader(tu) {
+  let at = 0;
+  while (at < tu.length) {
+    const h = tu[at];
+    const ext = (h & 4) ? 1 : 0;
+    let size = 0, shift = 0, i = at + 1 + ext;
+    for (;;) { const b = tu[i++]; size += (b & 0x7f) * 2 ** shift; shift += 7; if (!(b & 0x80)) break; }
+    if (((h >> 3) & 15) === 1) return true;
+    at = i + size;
+  }
+  return false;
+}
+
+async function answers(q) {
+  const out = { decodingInfo: null, preferHardware: null, noPreference: null };
+  if (q.decodingConfiguration) {
+    const d = await navigator.mediaCapabilities.decodingInfo(q.decodingConfiguration);
+    out.decodingInfo = { supported: d.supported, smooth: d.smooth, powerEfficient: d.powerEfficient };
+  }
+  out.preferHardware = (await VideoDecoder.isConfigSupported(q.decoderConfigPreferHardware)).supported;
+  out.noPreference = (await VideoDecoder.isConfigSupported(q.decoderConfigNoPreference)).supported;
+  return out;
+}
+
+/// Decode `chunks` ([data, key]) with the configuration `config`: the frames output.
+async function decodeAll(config, chunks, frameUs) {
+  let frames = 0, error = null;
+  const dec = new VideoDecoder({ output: (f) => { frames++; f.close(); }, error: (e) => { error = String(e); } });
+  dec.configure(config);
+  chunks.forEach(([data, key], k) => dec.decode(new EncodedVideoChunk({ type: key ? "key" : "delta", timestamp: k * frameUs, data })));
+  try { await dec.flush(); } catch (e) { error = error || String(e); }
+  if (dec.state !== "closed") dec.close();
+  return { frames, error };
+}
+
+async function av1Objects(paths) {
+  let firstAnswers = null;
+  for (const path of paths) {
+    const bytes = new Uint8Array(await (await fetch(path)).arrayBuffer());
+    const env = parse(bytes);
+    if (env.capability !== "wai.video.av1") continue;
+    const payload = env.payload;
+    const q = JSON.parse(platformQuery("wai.video.av1", payload, undefined, undefined));
+    const a = await answers(q);
+    const units = av1Units(payload);
+    const config = { ...(a.preferHardware ? q.decoderConfigPreferHardware : q.decoderConfigNoPreference) };
+    const r = await decodeAll(config, units.map((u) => [u, hasSequenceHeader(u)]), Math.round(1e6 * q.framerate[1] / q.framerate[0]));
+    say(`platform av1 object: ${path.split("/").slice(-4).join("/")} codec=${q.codec} size=${q.width}x${q.height} rate=${q.framerate.join("/")} bitrate=${q.bitrate} decodingInfo=[${info(a.decodingInfo)}] isConfigSupported prefer-hardware=${a.preferHardware} no-preference=${a.noPreference} decoded=${r.frames}/${units.length} with ${config.hardwareAcceleration}${r.error ? " error=" + r.error : ""}`);
+    firstAnswers = firstAnswers || a;
+  }
+  return firstAnswers;
+}
+
+/// The same codec family at a broadcast size, through the same query form.
+async function av1Broadcast() {
+  const q = {
+    codec: "av01.0.08M.08",
+    decodingConfiguration: { type: "media-source", video: { contentType: 'video/mp4; codecs="av01.0.08M.08"', width: 1920, height: 1080, bitrate: 5000000, framerate: 30 } },
+    decoderConfigPreferHardware: { codec: "av01.0.08M.08", codedWidth: 1920, codedHeight: 1080, hardwareAcceleration: "prefer-hardware" },
+    decoderConfigNoPreference: { codec: "av01.0.08M.08", codedWidth: 1920, codedHeight: 1080, hardwareAcceleration: "no-preference" },
+  };
+  const a = await answers(q);
+  say(`platform av1 1920x1080: codec=${q.codec} decodingInfo=[${info(a.decodingInfo)}] isConfigSupported prefer-hardware=${a.preferHardware} no-preference=${a.noPreference}`);
+  return a;
+}
+
+/// The first SPS NAL unit (type 33) of an Annex B stream, as hexadecimal.
+function firstSps(s) {
+  for (let i = 0; i + 4 < s.length; i++) {
+    if (s[i] === 0 && s[i + 1] === 0 && s[i + 2] === 1 && ((s[i + 3] >> 1) & 63) === 33) {
+      let j = i + 3;
+      while (j + 3 <= s.length && !(s[j] === 0 && s[j + 1] === 0 && (s[j + 2] === 1 || (s[j + 2] === 0 && s[j + 3] === 1)))) j++;
+      return Array.from(s.subarray(i + 3, j), (b) => b.toString(16).padStart(2, "0")).join("");
+    }
+  }
+  return "";
+}
+
+async function hevcRoundTrip() {
+  const configured = "hvc1.1.6.L93.B0";
+  const [w, h, n] = [640, 360, 12];
+  const enc = { codec: configured, width: w, height: h, bitrate: 1000000, framerate: 30, hevc: { format: "annexb" }, hardwareAcceleration: "prefer-hardware" };
+  const es = await VideoEncoder.isConfigSupported(enc);
+  if (!es.supported) { say(`platform hevc encoder: not supported (${configured} ${w}x${h} prefer-hardware)`); return; }
+  const chunks = [];
+  let declared = "";
+  const e = new VideoEncoder({ output: (c, meta) => { const b = new Uint8Array(c.byteLength); c.copyTo(b); chunks.push([b, c.type === "key"]); if (meta && meta.decoderConfig) declared = meta.decoderConfig.codec; }, error: (x) => say(`platform hevc encoder: error ${x}`) });
+  e.configure(enc);
+  const rgba = new Uint8Array(w * h * 4);
+  for (let k = 0; k < n; k++) {
+    for (let y = 0; y < h; y++) for (let x = 0; x < w; x++) { const o = 4 * (y * w + x); rgba[o] = (x + 4 * k) & 255; rgba[o + 1] = (y * 2) & 255; rgba[o + 2] = (x ^ y) & 255; rgba[o + 3] = 255; }
+    const f = new VideoFrame(rgba, { format: "RGBA", codedWidth: w, codedHeight: h, timestamp: k * 33333 });
+    e.encode(f, { keyFrame: k === 0 });
+    f.close();
+  }
+  await e.flush();
+  e.close();
+  const stream = new Uint8Array(chunks.reduce((s, [b]) => s + b.length, 0));
+  let at = 0;
+  for (const [b] of chunks) { stream.set(b, at); at += b.length; }
+  const q = JSON.parse(platformQuery("wai.video.hevc", stream, 30, 1));
+  const a = await answers(q);
+  const r = await decodeAll(a.preferHardware ? q.decoderConfigPreferHardware : q.decoderConfigNoPreference, chunks, 33333);
+  say(`platform hevc encoder: configured=${configured} encoder-declares=${declared || "nothing"} derived=${q.codec} size=${q.width}x${q.height} coded=${q.codedWidth}x${q.codedHeight} depth=${q.bitDepth} bitrate=${q.bitrate} decodingInfo=[${info(a.decodingInfo)}] isConfigSupported prefer-hardware=${a.preferHardware} no-preference=${a.noPreference} decoded=${r.frames}/${chunks.length}${r.error ? " error=" + r.error : ""} sps=${firstSps(stream)}`);
+}
+
+function order(a) {
+  const manifest = { wai: "1.1", media: "video", intent: "display", target: null, renditions: [{ capability: "wai.neural.int_synth", kind: "bytes" }, { capability: "wai.video.av1", kind: "bytes" }] };
+  // The sink configures prefer-hardware when the platform accepts it, and otherwise
+  // no-preference; the answer it passes is for the preference it configures.
+  const webcodecs = a.preferHardware ? { hardwareAcceleration: "prefer-hardware", supported: true } : { hardwareAcceleration: "no-preference", supported: a.noPreference };
+  const av1 = { decodingInfo: a.decodingInfo, webcodecs, ownDecoder: false };
+  const o = JSON.parse(platformOrder(JSON.stringify(manifest), JSON.stringify([null, av1]), JSON.stringify([null, null]), undefined));
+  say(`platform order: entries=[wai.neural.int_synth, wai.video.av1] av1=[${info(a.decodingInfo)} webcodecs=${webcodecs.hardwareAcceleration}:${webcodecs.supported}] ranks=${JSON.stringify(o.ranks)} order=${JSON.stringify(o.order)} picked=${o.picked}`);
+  const budget = { class: "OnChipCounter", joules_micro: 41000, per: "frame", relative_ppm: 20000, window_us: 5000000, reference_sink: "reference sink: arm64 desktop" };
+  const ob = JSON.parse(platformOrder(JSON.stringify(manifest), JSON.stringify([null, av1]), JSON.stringify([budget, null]), undefined));
+  say(`platform order with a budget: ranks=${JSON.stringify(ob.ranks)} order=${JSON.stringify(ob.order)} picked=${ob.picked}`);
+}
+
+window.platformDecode = { done: false, report: "" };
+try {
+  await init();
+  say(`platform: userAgent=${navigator.userAgent}`);
+  const paths = await (await fetch("objects.json")).json();
+  await av1Objects(paths);
+  const broadcast = await av1Broadcast();
+  await hevcRoundTrip();
+  order(broadcast);
+} catch (e) {
+  say(`platform: page error: ${e && e.stack || e}`);
+}
+window.platformDecode.report = lines.join("\n");
+document.getElementById("report").textContent = window.platformDecode.report;
+window.platformDecode.done = true;
diff --git a/wai/wai-web/demo/verify_platform_decode.mjs b/wai/wai-web/demo/verify_platform_decode.mjs
new file mode 100644
index 000000000..926e43580
--- /dev/null
+++ b/wai/wai-web/demo/verify_platform_decode.mjs
@@ -0,0 +1,117 @@
+// Platform decode capabilities in dispatch, in a browser (extensions/platform-decode.md).
+//
+// Build the page's bundle first, from wai/wai-web:
+//
+//   cargo build --release --target wasm32-unknown-unknown --features platform_decode
+//   wasm-bindgen --target web --out-dir demo/pkg-platform --out-name wai_platform_decode \
+//     target/wasm32-unknown-unknown/release/wai_web.wasm
+//
+// then, with Playwright installed under PLAYWRIGHT_HOST:
+//
+//   [WAI_PLATFORM_BROWSER_CHANNEL=chrome] PLAYWRIGHT_HOST=/ \
+//     node wai/wai-web/demo/verify_platform_decode.mjs
+//
+// It serves wai-web/demo and wai/pack-conformance on 127.0.0.1, lists the AV1 floor
+// objects of the packaging corpus (WAI1 envelopes of wai.video.av1) as objects.json,
+// opens platform_decode.html in a headless browser and prints the page's report. It fails
+// on a page error, on an AV1 object that does not decode every temporal unit through
+// WebCodecs with the configuration the reference's query gives, on an HEVC stream the
+// platform's encoder wrote that does not decode back with the derived configuration, and
+// on an order that is not the one the answers give: AV1, which the platform can decode,
+// before the learned entry without a budget; the learned entry with a budget first.
+import http from "node:http";
+import fs from "node:fs";
+import path from "node:path";
+import { fileURLToPath } from "node:url";
+import { createRequire } from "node:module";
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const PACKS = path.resolve(HERE, "../../pack-conformance");
+const PORT = Number(process.env.PORT || 8798);
+const { chromium } = createRequire(process.env.PLAYWRIGHT_HOST || HERE + "/")("playwright");
+
+/// The AV1 floor objects: WAI1 envelopes ("WAI1", a u32 manifest length, the manifest)
+/// whose manifest's capability is wai.video.av1.
+function av1Objects() {
+  const out = [];
+  const packs = path.join(PACKS, "packs");
+  for (const p of fs.readdirSync(packs).sort()) {
+    const dir = path.join(packs, p, "package", "objects");
+    if (!fs.existsSync(dir)) continue;
+    for (const f of fs.readdirSync(dir).sort()) {
+      const b = fs.readFileSync(path.join(dir, f));
+      if (b.length < 8 || b.toString("latin1", 0, 4) !== "WAI1") continue;
+      const m = JSON.parse(b.toString("utf8", 8, 8 + b.readUInt32LE(4)));
+      if (m.model_requirement && m.model_requirement.capability === "wai.video.av1") out.push(`/pack-conformance/packs/${p}/package/objects/${f}`);
+    }
+  }
+  return out;
+}
+
+const objects = av1Objects();
+const ROOTS = { "/pack-conformance/": PACKS, "/demo/": HERE };
+const MIME = { ".js": "text/javascript", ".wasm": "application/wasm", ".html": "text/html", ".json": "application/json" };
+const server = http.createServer((req, res) => {
+  const url = decodeURIComponent(req.url.split("?")[0]);
+  if (url === "/demo/objects.json") {
+    res.writeHead(200, { "content-type": "application/json" });
+    return res.end(JSON.stringify(objects));
+  }
+  const prefix = Object.keys(ROOTS).find((p) => url.startsWith(p));
+  const root = prefix && ROOTS[prefix];
+  const f = root && path.resolve(root, "." + url.slice(prefix.length - 1));
+  if (!f || !f.startsWith(root + path.sep) || !fs.existsSync(f) || !fs.statSync(f).isFile()) {
+    res.writeHead(404);
+    return res.end("not found");
+  }
+  res.writeHead(200, { "content-type": MIME[path.extname(f)] || "application/octet-stream" });
+  fs.createReadStream(f).pipe(res);
+});
+
+let browser;
+try {
+  if (!fs.existsSync(path.join(HERE, "pkg-platform", "wai_platform_decode.js"))) {
+    console.error("no pkg-platform/wai_platform_decode.js; build it as this file's header says");
+    process.exit(2);
+  }
+  if (objects.length === 0) {
+    console.error("no AV1 floor object found under pack-conformance/packs");
+    process.exit(2);
+  }
+  await new Promise((r) => server.listen(PORT, "127.0.0.1", r));
+  const channel = process.env.WAI_PLATFORM_BROWSER_CHANNEL || undefined;
+  browser = await chromium.launch({ channel, args: process.platform === "darwin" ? ["--use-angle=metal"] : [] });
+  console.log(`browser: ${channel || "chromium"} ${browser.version()}`);
+  const page = await browser.newPage();
+  const errs = [];
+  page.on("pageerror", (e) => errs.push(String(e)));
+  await page.goto(`http://127.0.0.1:${PORT}/demo/platform_decode.html`, { waitUntil: "domcontentloaded", timeout: 30000 });
+  await page.waitForFunction(() => window.platformDecode && window.platformDecode.done === true, null, { timeout: 5 * 60 * 1000, polling: 500 });
+  const report = await page.evaluate(() => window.platformDecode.report);
+  console.log(report);
+  for (const e of errs) console.log(`page error: ${e}`);
+  const lines = report.split("\n");
+  const fail = [];
+  if (errs.length || /page error/.test(report)) fail.push("a page error");
+  const objs = lines.filter((l) => l.startsWith("platform av1 object:"));
+  if (objs.length !== objects.length) fail.push(`${objs.length} AV1 objects reported, ${objects.length} served`);
+  for (const l of objs) {
+    const m = / decoded=(\d+)\/(\d+) /.exec(l);
+    if (!m || m[1] !== m[2] || / error=/.test(l)) fail.push(`not every unit decoded: ${l}`);
+  }
+  const hevc = lines.find((l) => l.startsWith("platform hevc encoder:"));
+  if (!hevc) fail.push("no HEVC line");
+  else if (!/not supported/.test(hevc)) {
+    const m = / decoded=(\d+)\/(\d+)/.exec(hevc);
+    if (!m || m[1] !== m[2] || / error=/.test(hevc) || !/ no-preference=true /.test(hevc)) fail.push(`the derived HEVC configuration did not decode the stream back: ${hevc}`);
+  }
+  const ord = lines.find((l) => l.startsWith("platform order: "));
+  if (!ord || !/ picked=1$/.test(ord)) fail.push(`the AV1 entry was not picked over the learned entry without a budget: ${ord}`);
+  const ob = lines.find((l) => l.startsWith("platform order with a budget:"));
+  if (!ob || !/ picked=0$/.test(ob)) fail.push(`the learned entry with a budget was not picked: ${ob}`);
+  for (const f of fail) console.log(`FAIL ${f}`);
+  if (fail.length) process.exitCode = 1;
+} finally {
+  if (browser) await browser.close();
+  server.close();
+}
diff --git a/wai/wai-web/src/lib.rs b/wai/wai-web/src/lib.rs
index fada30dd4..74a2df2b3 100644
--- a/wai/wai-web/src/lib.rs
+++ b/wai/wai-web/src/lib.rs
@@ -159,6 +159,10 @@ pub mod quantum_qbom;
 // the separate `quantum_webgpu` bundle; the main bundle does not carry it.
 #[cfg(all(feature = "quantum_webgpu", target_arch = "wasm32"))]
 mod quantum_webgpu;
+// Platform decode capabilities in dispatch (extensions/platform-decode.md), in the
+// separate `platform_decode` bundle; the main bundle does not carry it.
+#[cfg(feature = "platform_decode")]
+mod platform_decode;
 
 // The job service's engine in the page: plan, run and sign a job in the tab, and
 // check any job's receipt there, the service's included. The IDE's bundle only.
diff --git a/wai/wai-web/src/platform_decode.rs b/wai/wai-web/src/platform_decode.rs
new file mode 100644
index 000000000..9cd1f7dd6
--- /dev/null
+++ b/wai/wai-web/src/platform_decode.rs
@@ -0,0 +1,56 @@
+//! Platform decode capabilities in dispatch (`wai::platform_decode`,
+//! extensions/platform-decode.md), bound for JS in the separate `platform_decode` bundle.
+//!
+//! [`platform_query`] gives the configuration a page asks the platform about for an entry
+//! (`decodingInfo()`'s and `isConfigSupported()`'s), read from the payload by the same Rust
+//! a native sink runs. [`platform_order`] takes the platform's answers and any energy
+//! budgets and returns the default order and the entry SPEC §7.1 picks. The page calls the
+//! platform itself; nothing here does, so the order is the reference's for those answers.
+
+use wai::container::ManifestV2;
+use wai::platform_decode as pd;
+use wasm_bindgen::prelude::*;
+
+fn js(e: impl std::fmt::Display) -> JsError {
+    JsError::new(&e.to_string())
+}
+
+/// The query for an entry of `capability` whose payload is `payload`, as JSON
+/// (`wai::platform_decode::query_json`); `rate_num`/`rate_den` is the presentation rate,
+/// for a payload that states none.
+#[wasm_bindgen(js_name = platformQuery)]
+pub fn platform_query(capability: &str, payload: &[u8], rate_num: Option, rate_den: Option) -> Result {
+    let rate = match (rate_num, rate_den) {
+        (Some(num), Some(den)) if num > 0 && den > 0 => Some(pd::Rate { num, den }),
+        _ => None,
+    };
+    let q = pd::query(capability, payload, rate).map_err(js)?;
+    Ok(pd::query_json(&q).to_string())
+}
+
+/// The default order over a `WAI2` manifest's entries (`manifest_json`), from the
+/// platform's answers and the energy budgets, each a JSON array aligned with the entries
+/// (`null` where none), as JSON (`wai::platform_decode::order_json`). `ceiling` is the
+/// deployer's ceiling on a budget's figure, in microjoules, if any.
+#[wasm_bindgen(js_name = platformOrder)]
+pub fn platform_order(manifest_json: &str, answers_json: &str, budgets_json: &str, ceiling: Option) -> Result {
+    let manifest: ManifestV2 = serde_json::from_str(manifest_json).map_err(js)?;
+    let arr = |text: &str, what: &str| -> Result, JsError> {
+        match serde_json::from_str::(text).map_err(js)? {
+            serde_json::Value::Array(a) => Ok(a),
+            _ => Err(JsError::new(&format!("{what}: not a JSON array"))),
+        }
+    };
+    let answers = arr(answers_json, "answers")?
+        .iter()
+        .map(|v| if v.is_null() { Ok(None) } else { pd::answers_from_json(v).map(Some) })
+        .collect::, String>>()
+        .map_err(js)?;
+    let budgets = arr(budgets_json, "budgets")?
+        .iter()
+        .map(|v| if v.is_null() { Ok(None) } else { pd::budget_from_json(v).map(Some) })
+        .collect::, String>>()
+        .map_err(js)?;
+    let rules = pd::Rules { budget_ceiling: ceiling.filter(|c| *c >= 0.0).map(|c| c as u64), ..pd::Rules::DEFAULT };
+    Ok(pd::order_json(&manifest, &answers, &budgets, &rules).to_string())
+}
-- 
2.54.0 (Apple Git-157)


From c47a58cca0824f0c9ae6ec316d6172dc22452e56 Mon Sep 17 00:00:00 2001
From: Transaction Science 
Date: Thu, 22 Oct 2026 13:46:18 -0400
Subject: [PATCH 39/50] wai CHANGELOG: the GPU tier's conditions, and platform
 decode in dispatch

Co-Authored-By: Claude Opus 5.5 
---
 wai/CHANGELOG.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)

diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md
index ed3812b63..7488fbc22 100644
--- a/wai/CHANGELOG.md
+++ b/wai/CHANGELOG.md
@@ -6,6 +6,61 @@ wire format may change and such changes are recorded here.
 
 ## v0.4.0 — current
 
+### GPUs: when `decode-equivalence` may be claimed, and WGSL's integer semantics on every adapter
+
+- **Claiming the tier on a GPU** ([determinism-tiers](extensions/determinism-tiers.md)
+  §5). A decoder claims `decode-equivalence` for output whose graphs ran on a GPU only
+  when every shader module that ran them is integer only (no floating-point type, so no
+  reassociation or fusion can change a result), uses no subgroup or quad operation and
+  enables no extension, has no result that depends on scheduling (one atomic kind, its
+  result unused; no out-of-bounds access), and is translated with the translator's integer
+  guards on: signed arithmetic through unsigned, guarded division and remainder, `abs` and
+  negation of the most negative value. Where the translator does not produce WGSL's
+  result, the module does not reach the operation: naga 30.0.1 passes shift amounts to
+  MSL, HLSL and SPIR-V unreduced and writes integer `clamp` as MSL's `clamp`, so every
+  shift amount is masked below 32 and every `clamp` has literal bounds in order. Before an
+  adapter runs a graph it passes WGSL's integer semantics vectors and the implementation's
+  probe; the claim names the adapter and the translator.
+- **WGSL's integer semantics vectors** (`wgsl-conformance/`). Every integer operation WGSL
+  defines on `i32`, `u32` and their two-component vectors, at the cases WGSL defines at run
+  time and MSL, HLSL and SPIR-V leave open, each result written from the WGSL text
+  (Candidate Recommendation Draft, 21 October 2026). Cases the kernels never reach are
+  marked `unguarded`: reported, not deciding.
+- **`wai-ops-gpu`.** Discovery runs the semantics suite on each adapter after the
+  arithmetic probe, and refuses an adapter that differs on a guarded case. Every run-time
+  shift amount in the kernels is now masked (`& 31u`) and the two run-time clamps are
+  `min(max(…))`; WGSL gives the same result either way, and the translated code is then
+  defined on every backend. `tests/wgsl_rules.rs` holds every shipped module to the
+  conditions on naga's IR and in its MSL and HLSL translations, with planted violations
+  refused; the browser page runs the suite through the browser's WGSL compiler and checks
+  the vectors against the reference compiled to wasm32. Measured on Metal, a browser's
+  WebGPU, Vulkan on two vendors' GPUs on Linux and Windows, and DX12 on both on Windows:
+  every guarded case equal, every unguarded one too, and the capability corpora decoding
+  with their graphs on the device to the CPU decode's bytes.
+
+### Dispatch: what a web platform says it decodes, before a learned reconstruction
+
+- **Platform decode capabilities in dispatch** ([platform-decode](extensions/platform-decode.md)).
+  A sink in a web platform queries Media Capabilities `decodingInfo()` and WebCodecs
+  `isConfigSupported()` with a configuration read from the entry's payload (for AV1, the
+  full codec string of the AV1 ISOBMFF binding from the sequence header; for HEVC, the
+  string of ISO/IEC 14496-15 Annex E.3 from the SPS), never from what an encoder declared.
+  `supported: false` makes the capability unsupported for that object; `smooth` and
+  `powerEfficient` only order the entries, and are never written as energy. The default
+  order, a deployer policy SPEC §7.1 allows, tries classical decode the platform marks
+  power-efficient, and learned decode that carries a qualifying energy budget (an
+  `OnChipCounter` figure measured on a reference sink, as energy-measurement defines
+  it), first; then smooth classical decode; then any other classical decode; then learned
+  decode without a budget. For a `WAI1` envelope, a learned capability without a budget is
+  not advertised when its fallback is a power-efficient classical decode (SPEC §4).
+- **Reference and vectors.** `wai::platform_decode`, with `platform-decode-conformance/`
+  (the order, the `WAI1` rule, and queries from packaging-corpus floors and an SPS a
+  hardware encoder wrote), and a `platform_decode` bundle of `wai-web` with a demonstration
+  page. In a browser on an arm64 desktop, every AV1 floor of the packaging corpus decoded
+  through WebCodecs with the derived configuration, and an HEVC stream from the platform's
+  own encoder, whose SPS states a level other than the one its declared codec string
+  repeats, decoded back with the codec string read from the stream.
+
 ### Packaging: each step on the fabric that does it with the least energy
 
 - **Steps and fabrics** ([packaging](extensions/packaging.md) §11.6). The computations of
-- 
2.54.0 (Apple Git-157)


From 244a715b35bf63d59520bd6c81dc5728ec789357 Mon Sep 17 00:00:00 2001
From: Transaction Science 
Date: Sat, 24 Oct 2026 20:00:56 -0400
Subject: [PATCH 40/50] wai: the energy order keeps non-selectable entries in
 place; the HTTP and pin corpora state their order
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

energy_order reorders only the entries SPEC §7.1 step 2 may pick, each into one
of their table places; a companion or refinement keeps its own, so where
nothing selectable moves the walk is table order. SPEC §7.1 says so.

HTTP (http-delivery §7 step 4): the client's select and fetch default to the
energy order. O2's pin cases walk the table's order, stated in each case as a
deployer policy; select_O2_default and fetch_O2_default are the default, which
picks AVIF before the learned int_mlicpp. http_verify.py's default order is the
energy order too (1057 of 1057 cases; the mutation shard 79 of 79).

The pin corpus's selection cases are about pins, so its runner walks the table's
order, a deployer policy (pin-conformance/README.md). wai-web's pick tests
follow the default order.

Co-Authored-By: Claude Opus 5.5 
---
 wai/SPEC.md                                |  9 ++++---
 wai/extensions/http-delivery.md            | 12 +++++++--
 wai/http-conformance/README.md             |  2 +-
 wai/http-conformance/cases.json            | 12 +++++----
 wai/http-conformance/http_verify.py        | 30 ++++++++++++++++++---
 wai/pin-conformance/README.md              |  6 ++++-
 wai/wai-rs/src/bin/wai_cli/http_vectors.rs | 18 +++++++++----
 wai/wai-rs/src/bin/wai_pin_vectors.rs      |  6 ++++-
 wai/wai-rs/src/container.rs                | 31 +++++++++++++++++++---
 wai/wai-web/src/lib.rs                     | 31 ++++++++++++++++------
 10 files changed, 124 insertions(+), 33 deletions(-)

diff --git a/wai/SPEC.md b/wai/SPEC.md
index f988bc226..deb48b1bf 100644
--- a/wai/SPEC.md
+++ b/wai/SPEC.md
@@ -2705,9 +2705,12 @@ A v1.1-aware sink MUST:
    sink. An entry whose payload digest does not match, or whose pin is refused, is
    skipped as if the sink did not advertise its capability, and the sink keeps the
    reason. Without a deployer policy, the sink walks the entries in §4's
-   energy order: an entry the platform answers supported and power-efficient
-   first, an entry whose capability is learned and carries no energy budget
-   after every other, table order within each. A deployer policy MAY reorder or
+   energy order: among the entries step 2 may pick, one the platform answers
+   supported and power-efficient first, one whose capability is learned and
+   carries no energy budget after every other, table order within each, each
+   taking one of those entries' places in the table; an entry step 2 never
+   picks (a companion, a refinement, a capability that is not dispatchable)
+   keeps its own place. A deployer policy MAY reorder or
    restrict the entries the sink considers; it MUST NOT pick an entry skipped
    for its digest or its pin.
 3. Read the corresponding rendition's bytes from the payload block.
diff --git a/wai/extensions/http-delivery.md b/wai/extensions/http-delivery.md
index 4d2e57775..ecd6ce74d 100644
--- a/wai/extensions/http-delivery.md
+++ b/wai/extensions/http-delivery.md
@@ -341,8 +341,9 @@ The procedure:
    [SPEC](../SPEC.md) §2's reader limits); apply §5.1; refuse a
    capability the variant's union does not list (`codecs_undeclared`).
 4. Select from the head exactly as [SPEC](../SPEC.md) §7.1 selects, deferring only
-   the component-digest test to the bytes. A deployer policy MAY reorder and restrict
-   the entries considered, as SPEC §7.1 allows. The result is the picked entry, the
+   the component-digest test to the bytes, in SPEC §7.1's default order, SPEC §4's
+   energy order. A deployer policy MAY reorder and restrict the entries considered,
+   as SPEC §7.1 allows. The result is the picked entry, the
    companions SPEC §7.1 binds to it, and the refinement components whose
    `refines.base` is its `id`. SPEC §7.1 offers an envelope's refinements only when every
    one of its components conforms, which the verified head's manifest decides: where one
@@ -1304,6 +1305,13 @@ figure within it, the choice is option 0 and the budget is not met (`unmet`): a
 fetches the least it can, and reports that the budget was not held. A figure past the
 options names none.
 
+What a budget governs is the figure the receipts state: the energy the producer spent
+making each option, already spent before the client asks. Choosing a lower option changes
+which figure is attributed to the client's playback; it saves none of that energy, and none
+of the network's, which is largely flat against the traffic it carries. What a smaller
+option can change is the client's cost in bytes, its decode work and, on a mobile radio,
+the radio's draw while it receives, none of which these figures carry.
+
 **Entry order.** Within a `WAI2`, the selectable entries whose capability the sink has
 are grouped by capability in order of first appearance; a group's options are its
 entries by component length (then table index), each option's figure the entry's. The
diff --git a/wai/http-conformance/README.md b/wai/http-conformance/README.md
index 535ebb12b..5ef7d4714 100644
--- a/wai/http-conformance/README.md
+++ b/wai/http-conformance/README.md
@@ -69,7 +69,7 @@ agree:
 | id | object | covers |
 |---|---|---|
 | O1 | `WAI1`, the pinned `wai.neural.int_mlicpp` vector of `wai-rs/tests/vectors/int_mlicpp/` | a `WAI1` head; a proof that covers the whole object |
-| O2 | `WAI2` image: that pinned rendition, AVIF, JPEG XL and PNG of the one picture it decodes to | pins: held, not held |
+| O2 | `WAI2` image: that pinned rendition, AVIF, JPEG XL and PNG of the one picture it decodes to | pins: held, not held, in the table's order (a deployer policy); and the default order, SPEC §4's energy order, which picks AVIF before the learned rendition |
 | O3 | `WAI2` video: AV1 at two rates, HDR10+ metadata bound to the higher by `companion_of_id` | range plans; a companion; tampering |
 | O4 | `WAI2` whose first selectable entry states no `sha256` | `component_digest_absent`: the whole object, the same pick |
 | O5 | a small `WAI1` | fetched whole (§5.4) |
diff --git a/wai/http-conformance/cases.json b/wai/http-conformance/cases.json
index 8d330faf0..5ca95d0b6 100644
--- a/wai/http-conformance/cases.json
+++ b/wai/http-conformance/cases.json
@@ -112,9 +112,10 @@
 {"name":"response_200_whole","op":"response","input":{"request":[1009,3593],"status":200,"body_len":53794,"envelope_len":53794},"expect":{"ok":[0,53793]}},
 {"name":"response_past_end","op":"response","input":{"request":[0,16368],"status":206,"content_range":"bytes 0-899/900","body_len":900,"envelope_len":900},"expect":{"ok":[0,899]}},
 {"name":"response_206_unasked","op":"response","input":{"request":null,"status":206,"content_range":"bytes 0-9/900","body_len":10,"envelope_len":900},"expect":{"error":"http_status_unexpected"}},
-{"name":"select_O2_held","op":"select","input":{"object":"O2","advertises":["wai.neural.int_mlicpp","wai.image.avif","wai.image.jxl","wai.image.png"],"held":["../wai-rs/tests/vectors/int_mlicpp/model.wmb"]},"expect":{"pick":0,"skipped":[]}},
-{"name":"select_O2_not_held","op":"select","input":{"object":"O2","advertises":["wai.neural.int_mlicpp","wai.image.avif","wai.image.jxl","wai.image.png"],"held":[]},"expect":{"pick":1,"skipped":[[0,"prior_not_held"]]}},
-{"name":"select_O2_png_only","op":"select","input":{"object":"O2","advertises":["wai.image.png"],"held":[]},"expect":{"pick":3,"skipped":[[0,"missing_capability"],[1,"missing_capability"],[2,"missing_capability"]]}},
+{"name":"select_O2_held","op":"select","input":{"object":"O2","advertises":["wai.neural.int_mlicpp","wai.image.avif","wai.image.jxl","wai.image.png"],"held":["../wai-rs/tests/vectors/int_mlicpp/model.wmb"],"order":[0,1,2,3]},"expect":{"pick":0,"skipped":[]}},
+{"name":"select_O2_not_held","op":"select","input":{"object":"O2","advertises":["wai.neural.int_mlicpp","wai.image.avif","wai.image.jxl","wai.image.png"],"held":[],"order":[0,1,2,3]},"expect":{"pick":1,"skipped":[[0,"prior_not_held"]]}},
+{"name":"select_O2_default","op":"select","input":{"object":"O2","advertises":["wai.neural.int_mlicpp","wai.image.avif","wai.image.jxl","wai.image.png"],"held":["../wai-rs/tests/vectors/int_mlicpp/model.wmb"]},"expect":{"pick":1,"skipped":[]}},
+{"name":"select_O2_png_only","op":"select","input":{"object":"O2","advertises":["wai.image.png"],"held":[]},"expect":{"pick":3,"skipped":[[1,"missing_capability"],[2,"missing_capability"]]}},
 {"name":"select_O3","op":"select","input":{"object":"O3","advertises":["wai.video.av1"]},"expect":{"pick":0,"skipped":[]}},
 {"name":"select_O7","op":"select","input":{"object":"O7","advertises":["wai.video.av1"]},"expect":{"pick":1,"skipped":[[0,"component_digest_mismatch"]]}},
 {"name":"select_O3_nothing","op":"select","input":{"object":"O3","advertises":[]},"expect":{"inert":[[0,"missing_capability"],[1,"missing_capability"],[2,"not_selectable"]]}},
@@ -135,8 +136,9 @@
 {"name":"fetch_O8_deadline","op":"fetch","input":{"object":"O8","fragment":"#n=46433&h=1009","advertises":["wai.video.avc"],"applies":["wai.video.lcevc"],"tamper":{"kind":"no_refinement"}},"expect":{"role":"base","pick":0,"verified_by":"head-proof","why_whole":null,"body_bytes":8844,"requests":4,"companions":[],"refinements":[],"abandoned":[1],"dropped":[],"skipped":[],"component_sha256":"e93f5c55dc5938a8cadd00477e4110d567d4a725b647a3cddf0c70c5e59dcd18"}},
 {"name":"fetch_O8_full","op":"fetch","input":{"object":"O8","fragment":"#n=46433&h=1009","advertises":["wai.video.avc"],"applies":["wai.video.lcevc"]},"expect":{"role":"base","pick":0,"verified_by":"head-proof","why_whole":null,"body_bytes":28844,"requests":4,"companions":[1],"refinements":[],"abandoned":[],"dropped":[],"skipped":[],"component_sha256":"e93f5c55dc5938a8cadd00477e4110d567d4a725b647a3cddf0c70c5e59dcd18"}},
 {"name":"fetch_O8_no_enhancement","op":"fetch","input":{"object":"O8","fragment":"#n=46433&h=1009","advertises":["wai.video.avc"],"applies":[]},"expect":{"role":"base","pick":0,"verified_by":"head-proof","why_whole":null,"body_bytes":8844,"requests":3,"companions":[],"refinements":[],"abandoned":[],"dropped":[],"skipped":[],"component_sha256":"e93f5c55dc5938a8cadd00477e4110d567d4a725b647a3cddf0c70c5e59dcd18"}},
-{"name":"fetch_O2_held","op":"fetch","input":{"object":"O2","advertises":["wai.neural.int_mlicpp","wai.image.avif","wai.image.jxl","wai.image.png"],"held":["../wai-rs/tests/vectors/int_mlicpp/model.wmb"]},"expect":{"role":"base","pick":0,"verified_by":"head-proof","why_whole":null,"body_bytes":16582,"requests":2,"companions":[],"refinements":[],"abandoned":[],"dropped":[],"skipped":[],"component_sha256":"5b2bf2dbd36a683d4a62292d1a179e695c511c4971be6859cec41cd980e4f971"}},
-{"name":"fetch_O2_not_held","op":"fetch","input":{"object":"O2","advertises":["wai.neural.int_mlicpp","wai.image.avif","wai.image.jxl","wai.image.png"],"held":[]},"expect":{"role":"base","pick":1,"verified_by":"head-proof","why_whole":null,"body_bytes":16582,"requests":2,"companions":[],"refinements":[],"abandoned":[],"dropped":[],"skipped":[[0,"prior_not_held"]],"component_sha256":"c56f9ab9a3b1df0bd650c3177bd85427f4a4be8fde82547219bcea4ec254162c"}},
+{"name":"fetch_O2_held","op":"fetch","input":{"object":"O2","advertises":["wai.neural.int_mlicpp","wai.image.avif","wai.image.jxl","wai.image.png"],"held":["../wai-rs/tests/vectors/int_mlicpp/model.wmb"],"order":[0,1,2,3]},"expect":{"role":"base","pick":0,"verified_by":"head-proof","why_whole":null,"body_bytes":16582,"requests":2,"companions":[],"refinements":[],"abandoned":[],"dropped":[],"skipped":[],"component_sha256":"5b2bf2dbd36a683d4a62292d1a179e695c511c4971be6859cec41cd980e4f971"}},
+{"name":"fetch_O2_not_held","op":"fetch","input":{"object":"O2","advertises":["wai.neural.int_mlicpp","wai.image.avif","wai.image.jxl","wai.image.png"],"held":[],"order":[0,1,2,3]},"expect":{"role":"base","pick":1,"verified_by":"head-proof","why_whole":null,"body_bytes":16582,"requests":2,"companions":[],"refinements":[],"abandoned":[],"dropped":[],"skipped":[[0,"prior_not_held"]],"component_sha256":"c56f9ab9a3b1df0bd650c3177bd85427f4a4be8fde82547219bcea4ec254162c"}},
+{"name":"fetch_O2_default","op":"fetch","input":{"object":"O2","advertises":["wai.neural.int_mlicpp","wai.image.avif","wai.image.jxl","wai.image.png"],"held":["../wai-rs/tests/vectors/int_mlicpp/model.wmb"]},"expect":{"role":"base","pick":1,"verified_by":"head-proof","why_whole":null,"body_bytes":16582,"requests":2,"companions":[],"refinements":[],"abandoned":[],"dropped":[],"skipped":[],"component_sha256":"c56f9ab9a3b1df0bd650c3177bd85427f4a4be8fde82547219bcea4ec254162c"}},
 {"name":"fetch_O1","op":"fetch","input":{"object":"O1","advertises":["wai.neural.int_mlicpp"],"held":["../wai-rs/tests/vectors/int_mlicpp/model.wmb"]},"expect":{"role":"base","pick":0,"verified_by":"whole-object","why_whole":"single_component","body_bytes":912,"requests":2,"companions":[],"refinements":[],"abandoned":[],"dropped":[],"skipped":[],"component_sha256":"5b2bf2dbd36a683d4a62292d1a179e695c511c4971be6859cec41cd980e4f971"}},
 {"name":"fetch_O1_not_held","op":"fetch","input":{"object":"O1","advertises":["wai.neural.int_mlicpp"],"held":[]},"expect":{"error":"inert","skipped":[[0,"prior_not_held"]]}},
 {"name":"fetch_O5_small","op":"fetch","input":{"object":"O5","fragment":"#n=251","advertises":["wai.text.zstd"]},"expect":{"role":"base","pick":0,"verified_by":"whole-object","why_whole":"below_one_chunk","body_bytes":251,"requests":1,"companions":[],"refinements":[],"abandoned":[],"dropped":[],"skipped":[],"component_sha256":"591f780863bd571c1b868efabdf64a30ff0734b22582dad3f89486d0a97663c1"}},
diff --git a/wai/http-conformance/http_verify.py b/wai/http-conformance/http_verify.py
index e28253049..e3d8ab5b8 100644
--- a/wai/http-conformance/http_verify.py
+++ b/wai/http-conformance/http_verify.py
@@ -314,6 +314,30 @@ def selectable(e):
     return e.get("role") not in ("companion", "refinement") and dispatchable(e["capability"])
 
 
+# SPEC §4, *Energy order*: the replicate classes of a learned capability, as the registry
+# export labels them; a learned capability whose export entry carries no `energy_budget`
+# goes after every other.
+LEARNED = ("neural-int-exact", "neural-entropy-exact", "neural-float", "behavioral")
+
+
+def learned_unbudgeted(cap):
+    c = REG.get(cap)
+    return c is not None and c["replicate"] in LEARNED and c.get("energy_budget") is None
+
+
+def energy_order(entries):
+    """SPEC §7.1 step 2's default order: the selectable entries in SPEC §4's energy order
+    (a learned one with no energy budget after every other, table order within each), each
+    in one of the selectable entries' places; every other entry in its own place. The corpus
+    states no platform answer, so no entry is put first for one."""
+    slots = [i for i, e in enumerate(entries) if selectable(e)]
+    ranked = sorted(slots, key=lambda i: (1 if learned_unbudgeted(entries[i]["capability"]) else 0, i))
+    out = list(range(len(entries)))
+    for s, r in zip(slots, ranked):
+        out[s] = r
+    return out
+
+
 def resolve_pin(cap, prior, held):
     if not isinstance(prior, dict) or "sha256" not in prior:
         raise SystemExit("http_verify: a pin shape this verifier does not read")
@@ -988,7 +1012,7 @@ class Session:
             self.to_rest("single_component", "base")
         else:
             entries = head["manifest"]["renditions"]
-            ordr = order(head) if callable(order) else (order if order is not None else list(range(len(entries))))
+            ordr = order(head) if callable(order) else (order if order is not None else energy_order(entries))
             pick, skipped = select(head["manifest"], ordr, adv, held_sets, lambda i, e: True)
             wanted = [(pick, "base")] + self.applied(entries, pick)
             nc = self.nonconforming(entries, wanted)
@@ -1085,7 +1109,7 @@ class Session:
             return
         entries = m["renditions"]
         pay = [envb[s:s + ln] for s, ln in head["components"]]
-        ordr = order(head) if callable(order) else (order if order is not None else list(range(len(entries))))
+        ordr = order(head) if callable(order) else (order if order is not None else energy_order(entries))
         pick, skipped = select(m, ordr, adv, held_sets, lambda i, e: payload_ok(e, pay[i]))
         comps, refs, dropped = [], [], []
         applied = self.applied(entries, pick)
@@ -3339,7 +3363,7 @@ def evaluate(d, objs, op, inp):
             h = whole_head(b)
             pay = [b[s:s + ln] for s, ln in h["components"]]
             adv, _, held, order, _, _ = sink_of(d, inp, objs)
-            order = order(h) if callable(order) else (order if order is not None else list(range(len(pay))))
+            order = order(h) if callable(order) else (order if order is not None else energy_order(h["manifest"]["renditions"]))
             try:
                 i, sk = select(h["manifest"], order, adv, held, lambda i, e: payload_ok(e, pay[i]))
                 return {"pick": i, "skipped": sk}
diff --git a/wai/pin-conformance/README.md b/wai/pin-conformance/README.md
index edd0fd855..081e7cf75 100644
--- a/wai/pin-conformance/README.md
+++ b/wai/pin-conformance/README.md
@@ -21,7 +21,11 @@ for every case:
   picks and the reason for each entry it skips (`not_selectable`,
   `missing_capability`, `component_digest_mismatch`, or a pin reason); when nothing
   is picked, the reason for every entry. Where stated, also the companions applied
-  with the pick, and the first component-role finding.
+  with the pick, and the first component-role finding. Selection walks the entries
+  in the table's order, a deployer policy SPEC §7.1 step 2 allows: the cases are
+  about pins, and SPEC §4's default energy order would walk a classical entry
+  before the learned ones that carry the pins, and reach no pin while it is
+  advertised.
 - `static.json` — the first finding a verifier makes about a manifest's pins
   without holding a parameter set (`prior_not_applicable`, `pin_malformed`,
   `tier_unregistered`, `supersedes_malformed`, `form_not_registered`,
diff --git a/wai/wai-rs/src/bin/wai_cli/http_vectors.rs b/wai/wai-rs/src/bin/wai_cli/http_vectors.rs
index e1ee7d1b6..f4ea976aa 100644
--- a/wai/wai-rs/src/bin/wai_cli/http_vectors.rs
+++ b/wai/wai-rs/src/bin/wai_cli/http_vectors.rs
@@ -487,7 +487,8 @@ fn select(c: &Corpus, input: &Value) -> Result {
     let w = WaiMulti::from_bytes(&env).map_err(|e| refusal_of(&RangeRefusal::HeadMalformed(e.to_string())))?;
     let order: Vec = match &sel.order {
         Some(f) => f(&h, &w.manifest),
-        None => (0..w.manifest.renditions.len()).collect(),
+        // SPEC §7.1 step 2's default order: SPEC §4's energy order, as the client's fetch.
+        None => wai::container::energy_order(&w.manifest, &wai::container::DispatchPolicy::energy()),
     };
     let advertises = &sel.advertises;
     let verify = &mut sel.verify_pin;
@@ -964,8 +965,14 @@ fn cases(objs: &BTreeMap>, extra: &mut BTreeMap>
     // select: SPEC §7.1 on the whole envelope.
     let video = json!(["wai.video.av1"]);
     let images = json!(["wai.neural.int_mlicpp", "wai.image.avif", "wai.image.jxl", "wai.image.png"]);
-    v.push(case("select_O2_held", "select", json!({ "object": "O2", "advertises": images, "held": [MLICPP_SET] })));
-    v.push(case("select_O2_not_held", "select", json!({ "object": "O2", "advertises": images, "held": [] })));
+    // O2's pin cases walk the table's order, a deployer policy (SPEC §7.1 step 2): in the
+    // default energy order the classical AVIF comes before the learned int_mlicpp, which
+    // carries no energy budget (SPEC §4), and the pin is never reached; select_O2_default
+    // and fetch_O2_default are that order.
+    let table = json!([0, 1, 2, 3]);
+    v.push(case("select_O2_held", "select", json!({ "object": "O2", "advertises": images, "held": [MLICPP_SET], "order": table })));
+    v.push(case("select_O2_not_held", "select", json!({ "object": "O2", "advertises": images, "held": [], "order": table })));
+    v.push(case("select_O2_default", "select", json!({ "object": "O2", "advertises": images, "held": [MLICPP_SET] })));
     v.push(case("select_O2_png_only", "select", json!({ "object": "O2", "advertises": ["wai.image.png"], "held": [] })));
     v.push(case("select_O3", "select", json!({ "object": "O3", "advertises": video })));
     v.push(case("select_O7", "select", json!({ "object": "O7", "advertises": video })));
@@ -1005,8 +1012,9 @@ fn cases(objs: &BTreeMap>, extra: &mut BTreeMap>
     v.push(case("fetch_O8_deadline", "fetch", json!({ "object": "O8", "fragment": frag("O8", Some(cov("O8")?)), "advertises": avc, "applies": lcevc, "tamper": { "kind": "no_refinement" } })));
     v.push(case("fetch_O8_full", "fetch", json!({ "object": "O8", "fragment": frag("O8", Some(cov("O8")?)), "advertises": avc, "applies": lcevc })));
     v.push(case("fetch_O8_no_enhancement", "fetch", json!({ "object": "O8", "fragment": frag("O8", Some(cov("O8")?)), "advertises": avc, "applies": [] })));
-    v.push(case("fetch_O2_held", "fetch", json!({ "object": "O2", "advertises": images, "held": [MLICPP_SET] })));
-    v.push(case("fetch_O2_not_held", "fetch", json!({ "object": "O2", "advertises": images, "held": [] })));
+    v.push(case("fetch_O2_held", "fetch", json!({ "object": "O2", "advertises": images, "held": [MLICPP_SET], "order": table })));
+    v.push(case("fetch_O2_not_held", "fetch", json!({ "object": "O2", "advertises": images, "held": [], "order": table })));
+    v.push(case("fetch_O2_default", "fetch", json!({ "object": "O2", "advertises": images, "held": [MLICPP_SET] })));
     v.push(case("fetch_O1", "fetch", json!({ "object": "O1", "advertises": ["wai.neural.int_mlicpp"], "held": [MLICPP_SET] })));
     v.push(case("fetch_O1_not_held", "fetch", json!({ "object": "O1", "advertises": ["wai.neural.int_mlicpp"], "held": [] })));
     v.push(case("fetch_O5_small", "fetch", json!({ "object": "O5", "fragment": frag("O5", None), "advertises": ["wai.text.zstd"] })));
diff --git a/wai/wai-rs/src/bin/wai_pin_vectors.rs b/wai/wai-rs/src/bin/wai_pin_vectors.rs
index 1fc7dee6e..ed105e8c7 100644
--- a/wai/wai-rs/src/bin/wai_pin_vectors.rs
+++ b/wai/wai-rs/src/bin/wai_pin_vectors.rs
@@ -258,7 +258,11 @@ fn run_selection(dir: &Path, c: &Value) -> Result {
         Value::Array(s.iter().map(|(i, k)| serde_json::json!([i, k.code()])).collect())
     };
     let mut out = serde_json::Map::new();
-    match m.pick(|cap| advertised.as_ref().is_none_or(|a| a.iter().any(|x| x == cap)), verify) {
+    // In the table's order, a deployer policy SPEC §7.1 step 2 allows: the cases' subject is
+    // the pin, which the default energy order (SPEC §4) would not reach while a classical
+    // entry is advertised before the learned ones (pin-conformance/README.md).
+    let table = wai::container::DispatchPolicy::manifest_order();
+    match m.pick_with(&table, |cap| advertised.as_ref().is_none_or(|a| a.iter().any(|x| x == cap)), verify) {
         Ok(p) => {
             out.insert("picked".into(), p.index.into());
             out.insert("skipped".into(), skips(&p.skipped));
diff --git a/wai/wai-rs/src/container.rs b/wai/wai-rs/src/container.rs
index 52a618edc..8fc3eadd6 100644
--- a/wai/wai-rs/src/container.rs
+++ b/wai/wai-rs/src/container.rs
@@ -3220,11 +3220,22 @@ impl WaiMulti {
     pub fn intent(&self) -> &str { &self.manifest.intent }
 }
 
-/// SPEC §7.1 step 2's default order: every entry index, in the energy order `policy`
-/// gives (SPEC §4, *Energy order*). Under [`DispatchPolicy::manifest_order`] it is table
-/// order.
+/// SPEC §7.1 step 2's default order: every entry index, the selectable entries
+/// ([`RenditionMeta::is_selectable`]) in the energy order `policy` gives (SPEC §4,
+/// *Energy order*), each in one of the selectable entries' table positions, and every
+/// other entry (a companion, a refinement, a capability that is not dispatchable) in its
+/// own table position: an entry that is never picked is not moved, so where nothing
+/// selectable is reordered the walk is table order. Under
+/// [`DispatchPolicy::manifest_order`] it is table order.
 pub fn energy_order(manifest: &ManifestV2, policy: &DispatchPolicy<'_>) -> Vec {
-    policy.order(manifest.renditions.iter().map(|m| m.capability.as_str()))
+    let entries = &manifest.renditions;
+    let slots: Vec = (0..entries.len()).filter(|&i| entries[i].is_selectable()).collect();
+    let ranked = policy.order(slots.iter().map(|&i| entries[i].capability.as_str()));
+    let mut out: Vec = (0..entries.len()).collect();
+    for (slot, r) in slots.iter().zip(ranked) {
+        out[*slot] = slots[r];
+    }
+    out
 }
 
 /// SPEC §7.1 selection over a `WAI2` manifest's entries alone, with no payload in
@@ -4100,6 +4111,18 @@ pub(crate) mod tests {
         ]);
         assert_eq!(energy_order(&m.manifest, &DispatchPolicy::energy()), vec![1, 3, 0, 2]);
         assert_eq!(energy_order(&m.manifest, &DispatchPolicy::manifest_order()), vec![0, 1, 2, 3]);
+        // A companion keeps its table slot: only the selectable entries are reordered.
+        let c = WaiMulti::new("video", "improve", Value::Null, vec![
+            Rendition::media("wai.video.int_hyper", "int_hyper", b"a".to_vec()),
+            Rendition::companion("wai.meta.hdr10plus", b"m".to_vec(), "wai.video.av1"),
+            Rendition::media("wai.video.av1", "av1", b"b".to_vec()),
+        ]);
+        assert_eq!(energy_order(&c.manifest, &DispatchPolicy::energy()), vec![2, 1, 0]);
+        let alone = WaiMulti::new("video", "improve", Value::Null, vec![
+            Rendition::media("wai.video.int_hyper", "int_hyper", b"a".to_vec()),
+            Rendition::companion("wai.meta.hdr10plus", b"m".to_vec(), "wai.video.int_hyper"),
+        ]);
+        assert_eq!(energy_order(&alone.manifest, &DispatchPolicy::energy()), vec![0, 1], "nothing selectable to reorder: table order");
         assert_eq!(m.pick(|_| true, accept).unwrap().meta.capability, "wai.image.jxl");
         assert_eq!(m.pick(|c| c.starts_with("wai.neural") || c == "wai.image.jpegai", accept).unwrap().meta.capability, "wai.neural.elic");
         let hw = |c: &str| (c == "wai.image.png").then_some(PlatformAnswer { supported: true, power_efficient: true });
diff --git a/wai/wai-web/src/lib.rs b/wai/wai-web/src/lib.rs
index fada30dd4..a6ca2fc3a 100644
--- a/wai/wai-web/src/lib.rs
+++ b/wai/wai-web/src/lib.rs
@@ -72,6 +72,11 @@ pub mod int_splat;
 // statevector hashes byte-identically to the native reference
 // (statevector-equivalence). Pure i64, no float, no ML runtime, no quantum
 // hardware — a quantum computation made a transportable, receiptable object.
+/// The energy figure every in-browser quantum demo seals: the unmetered marker
+/// (energy-measurement §2). A page reads no energy counter, so a demo states no figure,
+/// rather than an invented one; a reader shows it as unmetered, never as 0 J.
+pub(crate) const UNMETERED: u64 = 0;
+
 pub mod quantum;
 
 // Quantum-operations ATTESTATION (wai.quantum.calibration / wai.quantum.job) — the
@@ -908,20 +913,25 @@ mod tests {
         ]);
         let adv = ["wai.neural.int_mlicpp", "wai.image.png", "wai.image.avif"];
         let mut held = core::HeldSets::new();
-        // Not held: the pinned entry is skipped.
-        let (i, s) = core::pick(&m, &adv, &held).unwrap();
-        assert_eq!((i, s[0].1.split(':').next().unwrap()), (1, "prior_not_held"));
-        // Held: it is picked.
+        // The classical PNG first: the learned int_mlicpp carries no energy budget, so it
+        // is walked after both classical entries (SPEC §4, *Energy order*).
+        assert_eq!(core::pick(&m, &adv, &held).unwrap(), (1, vec![]));
+        // Only the pinned entry advertised: not held, it is skipped; held, it is picked.
+        let only = ["wai.neural.int_mlicpp"];
+        let s = core::pick(&m, &only, &held).unwrap_err();
+        let pinned = s.iter().find(|(i, _)| *i == 0).expect("the pinned entry's reason");
+        assert_eq!(pinned.1.split(':').next().unwrap(), "prior_not_held");
         held.insert("wai.neural.int_mlicpp".into(), vec![core::Held::File(model.clone())]);
-        assert_eq!(core::pick(&m, &adv, &held).unwrap().0, 0);
+        assert_eq!(core::pick(&m, &only, &held).unwrap().0, 0);
+        assert_eq!(core::pick(&m, &adv, &held).unwrap().0, 1, "held or not, after the classical entries");
         assert_eq!(core::check_pin(&serde_json::to_string(&pin).unwrap(), "wai.neural.int_mlicpp", &held).unwrap(), "ok");
-        // A damaged PNG payload no longer matches its digest.
+        // A damaged PNG payload no longer matches its digest: AVIF, the next classical entry.
         held.clear();
         m.renditions[1][0] ^= 1;
         let (i, s) = core::pick(&m, &adv, &held).unwrap();
         assert_eq!(i, 2);
         assert_eq!(s.iter().map(|(i, r)| (*i, r.split(':').next().unwrap().to_string())).collect::>(),
-                   [(0, "prior_not_held".to_string()), (1, "component_digest_mismatch".to_string())]);
+                   [(1, "component_digest_mismatch".to_string())]);
     }
 }
 
@@ -957,8 +967,13 @@ mod wasm_tests {
         let p = m.pick(adv.clone(), JsValue::UNDEFINED).ok().unwrap();
         assert_eq!(js_sys::Reflect::get(&p, &"index".into()).unwrap().as_f64(), Some(2.0));
         assert_eq!(m.companions_of(2), vec![3]);
-        // Holding the set: the pinned entry is picked.
+        // Holding the set, the classical HEVC base still comes first: the learned
+        // int_mlicpp carries no energy budget (SPEC §4, *Energy order*).
         let p = m.pick(adv, held("wai.neural.int_mlicpp", model)).ok().unwrap();
+        assert_eq!(js_sys::Reflect::get(&p, &"index".into()).unwrap().as_f64(), Some(2.0));
+        // Where HEVC is not advertised, the pinned entry is picked, its set held.
+        let no_hevc: Vec = ["wai.video.lcevc", "wai.neural.int_mlicpp"].iter().map(|s| s.to_string()).collect();
+        let p = m.pick(no_hevc, held("wai.neural.int_mlicpp", model)).ok().unwrap();
         assert_eq!(js_sys::Reflect::get(&p, &"index".into()).unwrap().as_f64(), Some(1.0));
         // A companion-only component is never presented as media.
         assert!(m.rendition(0).is_err());
-- 
2.54.0 (Apple Git-157)


From 2a8d45aa0d346bd611dac880f376ca5a2c77ce0c Mon Sep 17 00:00:00 2001
From: Transaction Science 
Date: Sat, 24 Oct 2026 20:00:56 -0400
Subject: [PATCH 41/50] wai: no modelled or zero figure shown as a measurement
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- The C settlement kernel graded every receipt measured, from hardware, by
  hardware_meter, whatever its meter; it now writes the grade and device the
  meter states. Its host harness's figures are constants: projected, from a
  simulation, by model_estimated (oer-receipts §2: an Estimator figure is
  projected). The Zephyr skeleton states projected and no longer seals a
  compute figure of 0. firmware_vectors.json is regenerated; both verifiers
  pass it.
- wai-web: the world demo seals the page's estimate labelled Estimator and says
  so on screen (label_page_figure, tested); the quantum demos seal the unmetered
  marker instead of invented constants, and their getters say a 0 is unmetered.
- The quantum studio shows a figure with its class, coverage and uncertainty;
  the quantum CLI prints the unmetered marker as unmetered (tested); the
  metering tools head a bracket as a bracket and print the marker on stdout when
  they seal it; a provenance total names the class it reads at (tested).
- energy-measurement §2.8 and §6 record which demos still seal an illustrative
  figure the page passes in.

Co-Authored-By: Claude Opus 5.5 
---
 wai/oer-conformance/firmware_vectors.json    |  2 +-
 wai/oer-conformance/settle/README.md         |  7 ++++
 wai/oer-conformance/settle/host_main.c       |  9 +++--
 wai/oer-conformance/settle/settle.c          |  2 +-
 wai/oer-conformance/settle/settle.h          |  6 ++-
 wai/oer-conformance/settle/zephyr/src/main.c |  9 ++++-
 wai/quantum-studio/src/main.js               | 10 ++++-
 wai/wai-quantum-cli/src/lab.rs               | 29 ++++++++++++--
 wai/wai-rs/src/bin/wai_meter.rs              |  3 +-
 wai/wai-rs/src/bin/wai_quantum_meter.rs      | 19 ++++++----
 wai/wai-rs/src/bin/wai_video_meter.rs        |  3 +-
 wai/wai-rs/src/bin/wai_world_meter.rs        |  3 +-
 wai/wai-rs/src/provenance.rs                 | 24 ++++++++++--
 wai/wai-web/demo/world.js                    |  8 ++--
 wai/wai-web/src/quantum_atom.rs              |  2 +-
 wai/wai-web/src/quantum_cal.rs               |  4 +-
 wai/wai-web/src/quantum_compile.rs           |  2 +-
 wai/wai-web/src/quantum_control.rs           |  8 ++--
 wai/wai-web/src/quantum_kernel.rs            |  4 +-
 wai/wai-web/src/quantum_mitigate.rs          | 12 +++---
 wai/wai-web/src/quantum_noise.rs             |  6 +--
 wai/wai-web/src/quantum_qbom.rs              | 14 ++++---
 wai/wai-web/src/quantum_qec.rs               | 16 ++++----
 wai/wai-web/src/world.rs                     | 40 ++++++++++++++++++--
 24 files changed, 177 insertions(+), 65 deletions(-)

diff --git a/wai/oer-conformance/firmware_vectors.json b/wai/oer-conformance/firmware_vectors.json
index c8080f437..508fa36dd 100644
--- a/wai/oer-conformance/firmware_vectors.json
+++ b/wai/oer-conformance/firmware_vectors.json
@@ -1 +1 @@
-{"oer":"2.0","draft":"0.1","source":"settle kernel host harness, 400 events","keys":{"ed25519:bench-node-01":"755c4cb9256ca7cdc4acfdc6cfeeda849017e5b9f9514e99191bd67e0b0d4276"},"vectors":[{"name":"v10 firmware chain from the C kernel","receipts":[{"oer":"2.0","receipt_id":"sha256:6e1a8c13aa286569c369e0320cdb5bcc6297ed68dd0160614c1d392f32648565","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5ea2a39f565cf2588f19cb5c05ffdb4e6e04155dd041eeea4651d60de5cc156e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.483598270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.233770e-02","shared_alloc_j":"2.411257e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5ea2a39f565cf2588f19cb5c05ffdb4e6e04155dd041eeea4651d60de5cc156e","served_from_record":false,"record_id":"r1","record_hash":"sha256:d6977fad9dc0b59a864f97c077ec0f08cc4fb309b34b3926961dea1290b1cf3e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86440},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822948e+01"},"chain":{"prev_hash":"sha256:0000000000000000000000000000000000000000000000000000000000000000","receipt_hash":"sha256:c21eb9142dc8424257cd048cd88ec388ab92ef1f21362f478dc7417489fc7403","signer":"ed25519:bench-node-01","signature":"72438e3fdbe01d8dd99703173f3d3ea46e6f2f0768d7776a74672d4c45c737cb97af35605583c0a97cf0661ba4e5c12abad094438e5281b2bacdd111ad6adf0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:36954065314408db7587bb35d4887df147c31eba6008dace969c07f01c62e0bf","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.336309080588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.804781e-02","shared_alloc_j":"2.268260e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":false,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820293e+01"},"chain":{"prev_hash":"sha256:c21eb9142dc8424257cd048cd88ec388ab92ef1f21362f478dc7417489fc7403","receipt_hash":"sha256:a7fe1060cf0c4e2951a665038a099cb6cac7db4b1201ef2acad99eb41ae5dc11","signer":"ed25519:bench-node-01","signature":"906b3c12e0c2e56164e463bf0ea122d87a513736692b67654aff2547f8b9ec45ee90d341772adae7cd703f51fad2fa0cd082e175915ed044479553afb5cd8d0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e88975b78122bdfd8bacf9d92ff043cdab4fbe59f8774ff119ad816970130dc8","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5d66d7e7446bb1cf9266702755e05743ab3805b0a13146038d40f354832fe6a1","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.447362070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.004085e-01","shared_alloc_j":"3.346950e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5d66d7e7446bb1cf9266702755e05743ab3805b0a13146038d40f354832fe6a1","served_from_record":false,"record_id":"r3","record_hash":"sha256:7bda35bf414431c9352b02f46600798bd137b25e0d035e028b4f360bba6d2d86","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86533},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.837189e+01"},"chain":{"prev_hash":"sha256:a7fe1060cf0c4e2951a665038a099cb6cac7db4b1201ef2acad99eb41ae5dc11","receipt_hash":"sha256:adc4487bae3ec69f7fe16daaf1f6d8c72272a0e4c7e7e75c3eb5ec1a3cefd727","signer":"ed25519:bench-node-01","signature":"b3c8c952030aea628a75c7e85a9483ef139f2efea77b5a7db0353ed9548f6c73f841df30c3378010d7b66492374448a7d1b6179b019e958524ebbe63671ba007"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:549eef26b7450771194f4f6a7792ba58c1d49b0a13df48b37966c2a338ff1515","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:000992060ac23f9a6b54bc2803d93971b95cb85a38feeb4e9d3559b2ffba116e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.153472570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.792273e-01","shared_alloc_j":"5.974244e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:000992060ac23f9a6b54bc2803d93971b95cb85a38feeb4e9d3559b2ffba116e","served_from_record":false,"record_id":"r4","record_hash":"sha256:075ab1ff59393c60da8559722711e3fa3b2c44a93c170ee6a918f85a4efabe5f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86633},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.862352e+01"},"chain":{"prev_hash":"sha256:adc4487bae3ec69f7fe16daaf1f6d8c72272a0e4c7e7e75c3eb5ec1a3cefd727","receipt_hash":"sha256:33c7abc14fc0df036bf29b2bf8f7291115315b3fa8859e249076b69d1f6ee1db","signer":"ed25519:bench-node-01","signature":"a72ff9dc9eeda6d249886b301a07ca5483961aaf2da0d217621c64d87c7917bf1a39bb87c81a828badcf232f0c21205ad6c2bf62f7fc47adda30ea1484144705"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:997d5b588c5cf2dfe8853231d24ae0d4d7f4308caa694577b192b486a23af0c4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:2b6cc99222f33d8a6ffd1cf22eee3fcfe52da5b3b9a2d9a735a73f65e5681507","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.410053370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.284481e-01","shared_alloc_j":"4.281604e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2b6cc99222f33d8a6ffd1cf22eee3fcfe52da5b3b9a2d9a735a73f65e5681507","served_from_record":false,"record_id":"r5","record_hash":"sha256:41c01d66b16234412c1fb58f3d033a7845b26bf4cb1994c3393a850130827581","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86704},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847884e+01"},"chain":{"prev_hash":"sha256:33c7abc14fc0df036bf29b2bf8f7291115315b3fa8859e249076b69d1f6ee1db","receipt_hash":"sha256:06a4d1fcfb2a9742b46f6e3ffab35cc35efeb47caef4363e98378940c27c722e","signer":"ed25519:bench-node-01","signature":"937ced02c04fe145df6e341b592b121a6c4dc2d511980200f2223e1a8a918067c780e51f53b4c6306f92c58f314783136aa6c7c14599a1e968f94b1c1a449809"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ffbdfe4084c99464ffb87723b1c2497b63b751adc564dd6626ac718e7c7eb4ad","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:373ee59b311333a4d8f4d4bc7c250e0ba6a4ad0e9dfd8983a4eca3ed32f1bca1","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.684671580588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.906801e-02","shared_alloc_j":"1.635600e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:373ee59b311333a4d8f4d4bc7c250e0ba6a4ad0e9dfd8983a4eca3ed32f1bca1","served_from_record":false,"record_id":"r6","record_hash":"sha256:ee5673b905a5f97c8fe89450dd3585c17e3f42d25310c21c2ec178fe0b0aff25","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86731},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.806092e+01"},"chain":{"prev_hash":"sha256:06a4d1fcfb2a9742b46f6e3ffab35cc35efeb47caef4363e98378940c27c722e","receipt_hash":"sha256:aa7164752e8bab34d5e6b2847152c2c3338bd514f35cd767b586aa56d9a78425","signer":"ed25519:bench-node-01","signature":"02a93b72a910d731dbdf34d1a906c9ba7c0954c2be11384d7cce4d27bd8fde77f53854be375570b367796320d5a3a9d347ae0181c8e93e084daad78f7641af06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bcce76cbe5672d14d5537139f3dc1b154826997ae8d567e3b1f7f9175b6815f4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:94d79b3b10abf3b32bc3605e889a76f62d12e9b856a159e6889a8170369dfc6d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.807003270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.691360e-01","shared_alloc_j":"5.637866e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:94d79b3b10abf3b32bc3605e889a76f62d12e9b856a159e6889a8170369dfc6d","served_from_record":false,"record_id":"r7","record_hash":"sha256:781e5562d76a8d14d316897ae18b4fd0e03f6e448e395a5a8562b43febb6786f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86825},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859835e+01"},"chain":{"prev_hash":"sha256:aa7164752e8bab34d5e6b2847152c2c3338bd514f35cd767b586aa56d9a78425","receipt_hash":"sha256:f7091101bf77603b76c41fe9bacd31ea9ec9bb74f6ec5b2c4941562953a6a783","signer":"ed25519:bench-node-01","signature":"8bd0b085dfed8bebd5e32b3737402f687c489c4e66564a5c08943916002c656da8d3343a743a65fd63d24d8f5b396853013a61f72d37d26f0227add8707d7206"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:470ca0b9763bfc13926ffc38fe1aace962bbfb96f3a2cc3a4e6d417a70c68c15","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.128474650588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.199438e-02","shared_alloc_j":"2.066479e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","served_from_record":false,"record_id":"r8","record_hash":"sha256:ae42ca1dddafc073a12617d3f2c47a5ae0d14b088c0d45326c5afe31fbd99357","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86860},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.816247e+01"},"chain":{"prev_hash":"sha256:f7091101bf77603b76c41fe9bacd31ea9ec9bb74f6ec5b2c4941562953a6a783","receipt_hash":"sha256:69614ec40ee9d1b7a1b82ec6e63c7ba95120a2eb8553cedf310604412b4f8e1e","signer":"ed25519:bench-node-01","signature":"76637fc1a103723d1cca9dd682f7f90f395b59c45f4fb332a51b045ba399ba7bc5b895944b556209a551cc8d32c3c52c28b8db0133bb3da7d2bd160e420ada08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0ad71e5d722156e08fedc025ca921c2372208fa593617923751b515970b46d5b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.898794770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.718095e-01","shared_alloc_j":"5.726984e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":false,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.860516e+01"},"chain":{"prev_hash":"sha256:69614ec40ee9d1b7a1b82ec6e63c7ba95120a2eb8553cedf310604412b4f8e1e","receipt_hash":"sha256:6723cb0bafe1faa3a259aa615d758dbd3ddca46fba5d83f683b70b5341e77886","signer":"ed25519:bench-node-01","signature":"48b7a3b1660132a5945f847c48ef706043ca32fd04a72b3c3f2d953e202e749eb95332137bde9bc12ac6223aedde2dba241f90e92bc6daf619d4a3edc5dbc20b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b6560c905e20ae5a01e4da72fc07a744c61ccffca81643d387d52e328d9b2814","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.336529070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.554328e-01","shared_alloc_j":"5.181095e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856166e+01"},"chain":{"prev_hash":"sha256:6723cb0bafe1faa3a259aa615d758dbd3ddca46fba5d83f683b70b5341e77886","receipt_hash":"sha256:651eba196ea2199643d90a0c7542a119161b50086c78a4938cbcc77d10c8a704","signer":"ed25519:bench-node-01","signature":"511e82a3540927f6338dd8dbb58a85b54e3ffc2e0e966773e9c0bb52ca86a84c2efe18c7e9eb9d8bed3e9c55b4a715754c55e6fc5cf752be04d9d2f00aa7ce05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a56a708b78c14f7acd08bd240b2271f3bef6b75030c705e46ba7e2653d0585ed","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ebfae6bebcb2216decc8a5f5248c809294a8c5e1a542d328eee0999e102630d0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.347019820588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"3.923355e-02","shared_alloc_j":"1.307785e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ebfae6bebcb2216decc8a5f5248c809294a8c5e1a542d328eee0999e102630d0","served_from_record":false,"record_id":"r10","record_hash":"sha256:928cde2a1820a04cc5cc97df8139b399f07faceab9496c37f6f9b2a0265ede1a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87063},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.796377e+01"},"chain":{"prev_hash":"sha256:651eba196ea2199643d90a0c7542a119161b50086c78a4938cbcc77d10c8a704","receipt_hash":"sha256:4b3a9b98c2f43f9e3acf56eb9a396c01dacd1c723511b967dda81bfcca36bd29","signer":"ed25519:bench-node-01","signature":"83743088fe8c1f4a59087c39cb1febd4ca7a7ec56e8e7479304a999bca10c2d66d3b8e4e59b4af29bf956fa07487fbaa936add51dbb0f7803e60d873048b1508"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:82b6610b31ba95792e807eb49f88fb530254bfd09efdce37aab51a9ef03d555d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:83e3ecffea2fc1d618c8e6a2b3989bbf71e691b703b087230e7c8df1a5eb2142","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.415323070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.577278e-01","shared_alloc_j":"5.257594e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:83e3ecffea2fc1d618c8e6a2b3989bbf71e691b703b087230e7c8df1a5eb2142","served_from_record":false,"record_id":"r11","record_hash":"sha256:6b20a68c63f066ea3b3730f453a658b9fedb04fdd68d05e5b26ebcb6db3b5af8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87151},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856802e+01"},"chain":{"prev_hash":"sha256:4b3a9b98c2f43f9e3acf56eb9a396c01dacd1c723511b967dda81bfcca36bd29","receipt_hash":"sha256:968009c7e370ecb7135d01f5f56bc40c4dd2f89feb255f0a2544cea36907568e","signer":"ed25519:bench-node-01","signature":"5a6b44041fe32337ea65f7644d67f01ebb66ad990ce1220acbd40e65e4b5c7e563577bec3fea70230c678e4bcd2d6df445704a7163ea8e1ad85c616ad6319803"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:120ccbde408d4d12b8eb35fef3bba448ca4392733f0f4bcec73557b800bb4e9b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:bb697fd6f8f128e857820859facf75e9f5686504c1ac81b8de52367d1ca1d83c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.131488870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.203346e-01","shared_alloc_j":"4.011153e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:bb697fd6f8f128e857820859facf75e9f5686504c1ac81b8de52367d1ca1d83c","served_from_record":false,"record_id":"r12","record_hash":"sha256:ab217fccaef6ef754ced70fbf224f661169fe7f7af2a3119a7e8009e8aac0e51","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87218},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.845051e+01"},"chain":{"prev_hash":"sha256:968009c7e370ecb7135d01f5f56bc40c4dd2f89feb255f0a2544cea36907568e","receipt_hash":"sha256:26ee08e02efd51004e0f7d08aa0b54acc57cfd91c719012dd6f19de6b233d723","signer":"ed25519:bench-node-01","signature":"5b433103fea04fa2eebbde1e03497ae4f4daf74d2112124ee563d234f0365f2994687f1351107235673505d516494b0aaac8fbfe9739cb24e0b98f8dfdba8b0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a8d54af104450c4149b4377e46228e688a8e1d93f7d8c2618a2edd1a1677b20d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:a8e321822bb7a103eee73415fa73a912b90c5f863fbec7633f2cb269013e7c16","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.788849270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.394810e-01","shared_alloc_j":"4.649367e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a8e321822bb7a103eee73415fa73a912b90c5f863fbec7633f2cb269013e7c16","served_from_record":false,"record_id":"r13","record_hash":"sha256:2b6453fee78877e034de88726e8e50ed7892dc1bc50372ca02e5bf255acd0ac5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87295},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851463e+01"},"chain":{"prev_hash":"sha256:26ee08e02efd51004e0f7d08aa0b54acc57cfd91c719012dd6f19de6b233d723","receipt_hash":"sha256:30c8b3a719c3b08f2798bdc888d5ec88256a1579edae44a670e3dcf59387c062","signer":"ed25519:bench-node-01","signature":"334408fe3081101332e878ff8c0d0bcd85210fd789aca6291dd97dacb2af35b73d1cd049570b1ae1952ee620014efb0f8f0fddff32f943d6b5efe9c5c55af700"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:84697811ff86a953baf645f0a7880b435a4e5fb19e9c82df084037ef7fc1a058","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:87fbc23294c2ec468634d4d2a29b0784ae6d1e65ac331af477e07c957fe523f0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.720151970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.010140e-02","shared_alloc_j":"1.670047e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:87fbc23294c2ec468634d4d2a29b0784ae6d1e65ac331af477e07c957fe523f0","served_from_record":false,"record_id":"r14","record_hash":"sha256:48bea2997a832f667907939cfa9908442a2f5ff3f43b4094978534a0c6825f0e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87323},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.806997e+01"},"chain":{"prev_hash":"sha256:30c8b3a719c3b08f2798bdc888d5ec88256a1579edae44a670e3dcf59387c062","receipt_hash":"sha256:cc4f751ff476eb391d01319d93ea0d3c659717a5abafe1b968981944b119afe0","signer":"ed25519:bench-node-01","signature":"3f065b94e1569b53e1dba3d098eabbf9c946290bc573df34eead4755d6062df29428e28bf6a526b02dd6ce73a6d719cf8922725035b2537554e3f7fddd150209"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e6bd47369797c138c81c7846a135f727a6f2924674efc7b6ed0b6ceb994f29b2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:cac3ec97ccbcc9911415dd1c3364a4e1be2862326ead2359d76fa0d81c5c2e41","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.863894430588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.428816e-02","shared_alloc_j":"1.809605e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cac3ec97ccbcc9911415dd1c3364a4e1be2862326ead2359d76fa0d81c5c2e41","served_from_record":false,"record_id":"r15","record_hash":"sha256:7ec6c4fc3832e69520a2be2769278ad36c6d32a8f6002ef431fe4b98142af0b6","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87353},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810482e+01"},"chain":{"prev_hash":"sha256:cc4f751ff476eb391d01319d93ea0d3c659717a5abafe1b968981944b119afe0","receipt_hash":"sha256:ebf70f1b77b547ed33684c6592ea5d7f74b755f369d4999ec16d8efe8a09492e","signer":"ed25519:bench-node-01","signature":"70bb37bd06e97da94417e6b52651cb9c985bb8c6565b4bf0d27bc87786beba077ad2c2285c2bda9219d6c2947d795614614bf94b59a87fc5788053ad879a1d04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:55134e0b1447145074b01f2b76ff02ac63a4397a4346530f08fa0fafa7ec5c21","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.214160970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.518687e-01","shared_alloc_j":"5.062291e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","served_from_record":false,"record_id":"r16","record_hash":"sha256:3227d5f5cdb47b0c636c60fce42fed733f0e84ce2c21552a8ea3164c96c9d710","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87438},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855158e+01"},"chain":{"prev_hash":"sha256:ebf70f1b77b547ed33684c6592ea5d7f74b755f369d4999ec16d8efe8a09492e","receipt_hash":"sha256:9910db0d9bf86a1e08d6b79751ce5ba891beabfa5846d61d9db198d7b8d6d39d","signer":"ed25519:bench-node-01","signature":"7a6a03ad91b62218150e4b39c3b15a79f7c2464d216f3e021d777ef99297a7a4ef5cf73d564598a9455bc4d504ad917cd405ec2adce48f5d2a18d458d32b240d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a569fc050d63f67bb18842d7d6e906cd8f16b75b3b02b94abe409e38163bb968","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:e496bb563eed03c5e50e65c2be033983e2af2129a553cc99debae35f3260187a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.581065130588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.517656e-02","shared_alloc_j":"2.505885e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e496bb563eed03c5e50e65c2be033983e2af2129a553cc99debae35f3260187a","served_from_record":false,"record_id":"r17","record_hash":"sha256:604c5863e2fa80431ff93bacbba273f238b81bbd89439c9049af8248095cb968","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87480},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.824620e+01"},"chain":{"prev_hash":"sha256:9910db0d9bf86a1e08d6b79751ce5ba891beabfa5846d61d9db198d7b8d6d39d","receipt_hash":"sha256:44a7d40f82e7648fc171ff9c0b58b8b70491876a96deb829a894470bdb1edae9","signer":"ed25519:bench-node-01","signature":"93e27475295439af6f156abeffbff806ee6bbcbd730dfae69a723f216959c7014687e7c3c5053952aee2f22273004d65031b45ae902ff0c3f5f30d308b19060f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:69d0d424d3048f54d0b9064a4708fb222b192cfb3982ba5b3da28be6ab9a86b5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:543b0438d15cea081a05c8bc2a7c7bab836d901528216ef19b14045909d3f014","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.887140700588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.409143e-02","shared_alloc_j":"2.803048e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:543b0438d15cea081a05c8bc2a7c7bab836d901528216ef19b14045909d3f014","served_from_record":false,"record_id":"r18","record_hash":"sha256:f9e30653053e655f209019f00250ef72005c3130e28ee7ef20aae8f6decd898f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87526},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829487e+01"},"chain":{"prev_hash":"sha256:44a7d40f82e7648fc171ff9c0b58b8b70491876a96deb829a894470bdb1edae9","receipt_hash":"sha256:b5b52ffa4dff36327ab30b60e0ecb842bb620bef1b76b8117a138618d24b53b4","signer":"ed25519:bench-node-01","signature":"47f5e7860688c55af2b4920428d2a7f35ed82f5729ad64ba6e1b28b40ad7b71314cb00cca96561db5916ed1174e1b2912a51d52104a6469adc9b53e540afbd05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8dfbfa90e924100b244eb053e6be1606e6f25f490458566f958414b3d5bffd95","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:37707e34da5b534c649a60fc1296acd8d8c186353bae88e9ebb88424890d7407","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.188702870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.374860e-02","shared_alloc_j":"2.124953e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:37707e34da5b534c649a60fc1296acd8d8c186353bae88e9ebb88424890d7407","served_from_record":false,"record_id":"r19","record_hash":"sha256:ceaddc848f74519f3ddcb0c7bdbaa3918285688fa67a526f304a1cd23cc6c39e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87562},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.817459e+01"},"chain":{"prev_hash":"sha256:b5b52ffa4dff36327ab30b60e0ecb842bb620bef1b76b8117a138618d24b53b4","receipt_hash":"sha256:78be9ccce248ef3a7c4051794fe908a90f92d1fb9bf86fdca6605320e6687be5","signer":"ed25519:bench-node-01","signature":"7b886ef596a349e4844b7c21f787ebcc2126a650df7a964b6d14f5b90fdcd957e5a0cdde4912455536a464634a1acf67c70d51fe80c23dec8179ad93104edb06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:caaa07e962a71396e45876d6cbb3baa8651058ad17b349f9ab8cbdb985382fcf","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:63943a4226d8fb42655215a97d92b7b39c4d83792db09fef2b659595697f2813","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.900554640588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.448207e-02","shared_alloc_j":"2.816069e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:63943a4226d8fb42655215a97d92b7b39c4d83792db09fef2b659595697f2813","served_from_record":false,"record_id":"r20","record_hash":"sha256:ebb83c4e09bb79ba1d2aebf3fadda6505898f02ee3617fa696cd7e86ea11763d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87609},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829688e+01"},"chain":{"prev_hash":"sha256:78be9ccce248ef3a7c4051794fe908a90f92d1fb9bf86fdca6605320e6687be5","receipt_hash":"sha256:ebc5b3fa27549c693a4eeff1b0063e3480ce38581381b285f3d5816e78e5bc65","signer":"ed25519:bench-node-01","signature":"6531d2109d425f74fcbce8240ad8ce5c03bccdb489edb7a95b662d9678595fb6777aec2c11a6c70e1908eb86a8eccbfc9642995b93a69d1c96661b07de7b7c07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c1cad1a5b1a9a82a576a97037d76b5071bd3da22cd8dbf5ee2615a739fc1df3c","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:678fe08a78a0cb3c662513b15302b138ce1354a79c85cb3644891a472d1730f3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"6.080976270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.771157e-01","shared_alloc_j":"5.903857e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:678fe08a78a0cb3c662513b15302b138ce1354a79c85cb3644891a472d1730f3","served_from_record":false,"record_id":"r21","record_hash":"sha256:079084a75b13903374430dbb22d3fb5c7d868e6b54c3fedf3534634e1cdc0d28","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87707},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861837e+01"},"chain":{"prev_hash":"sha256:ebc5b3fa27549c693a4eeff1b0063e3480ce38581381b285f3d5816e78e5bc65","receipt_hash":"sha256:3a65d86afa20b48ae0b8422dd60341a0bc92acc91370830fecd61e0ad0df9718","signer":"ed25519:bench-node-01","signature":"fe57d976e5b5b4a86a37763e20c714fdb66a4abb7a9964ea15a79c7ec145fa748a42d443bf51e0ddc520ec83d6d0fb729f5c6b524f2316946c1cd28da475390d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5fafa09c4cf6cd0f52cd7f6b3844e0e487f8f1057a00af3302cac1c239b6a854","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:af6e3f5337fa8c7c3e8c821840fa70047138fe84957d62d954f2d8aca1470b96","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.219555070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.520258e-01","shared_alloc_j":"5.067528e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:af6e3f5337fa8c7c3e8c821840fa70047138fe84957d62d954f2d8aca1470b96","served_from_record":false,"record_id":"r22","record_hash":"sha256:9063a9e7dc76b63ae3948bf18dbf7af9865ae1e78fa877c530e45e0bea3e1be3","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87791},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855203e+01"},"chain":{"prev_hash":"sha256:3a65d86afa20b48ae0b8422dd60341a0bc92acc91370830fecd61e0ad0df9718","receipt_hash":"sha256:3e2ff34a215e3f16535ff79894f88a11680c04f8d380d410945ada1c5632cc73","signer":"ed25519:bench-node-01","signature":"b82129c84aa6293170485b33f1ffd54433b8876a665cc8917b644548f5c1840a71de09170d54f1c869f339b4fe9d469ad32811f9342d52ef7e4715d989ab7a05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:074edd0da53357661552e698c67bf7e613f790ee0ad5879c598e76a2e19fa858","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:843d0ffb6136b8cb2bc9712d4d55ae5f149fd4716d6773cd5f2b57114afa7b5c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.752153270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.015970e-02","shared_alloc_j":"2.671990e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:843d0ffb6136b8cb2bc9712d4d55ae5f149fd4716d6773cd5f2b57114afa7b5c","served_from_record":false,"record_id":"r23","record_hash":"sha256:da71aa5188ea791e9566dc90cb37b6f2888b0d974936587c4654b082719822a9","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87836},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.827407e+01"},"chain":{"prev_hash":"sha256:3e2ff34a215e3f16535ff79894f88a11680c04f8d380d410945ada1c5632cc73","receipt_hash":"sha256:8fa5d4e792f2b1cad741287a2dc5fe34c5769eaccb3ff351c9564255cfa3dcb9","signer":"ed25519:bench-node-01","signature":"6549cd561567fdc9084536b668a50392b5a8cfb79e0e317add42dc8b7a8f4893a498c796d9978390b251fa5ff89d3836d5624e048ec75b7c10d0ca76ee776409"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:86b5a8546ff8f450fde081d672f52093ff9762c4521303bcdc478edca56bcf71","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:441d343ae7ce5bc22fef8578d70d16d57a6e30008eba1a33565b6e8c73e5f4c1","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.816303510588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.290194e-02","shared_alloc_j":"1.763398e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:441d343ae7ce5bc22fef8578d70d16d57a6e30008eba1a33565b6e8c73e5f4c1","served_from_record":false,"record_id":"r24","record_hash":"sha256:6a8a2b74fa3a07b4c1a3efe2be1167e8fa9ad6f2a88cd3ca3775ccdffd3aa998","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87865},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.809359e+01"},"chain":{"prev_hash":"sha256:8fa5d4e792f2b1cad741287a2dc5fe34c5769eaccb3ff351c9564255cfa3dcb9","receipt_hash":"sha256:b04b13098673d17de486c7d393767a50b86e935dee26e63a58914abc71bad502","signer":"ed25519:bench-node-01","signature":"592319c25f5fe1b14d5c81511b514200964e9e8ef0b3923cb2753b0364c210f33cf2db3f8ae1e6dbecb691f148f7e49005dbdb5bfd90c3bf9968d297baf31e0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:79cb657482057e5d96e4d9d5a75bcf90e36083d378fa2488e65bbd7af62eac93","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.686044970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.364867e-01","shared_alloc_j":"4.549557e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":false,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850521e+01"},"chain":{"prev_hash":"sha256:b04b13098673d17de486c7d393767a50b86e935dee26e63a58914abc71bad502","receipt_hash":"sha256:1702863a9a4188041bed738bd5ced2c64a99a66debeeeb758bf35affc88da542","signer":"ed25519:bench-node-01","signature":"38379ad6e0e6fda42b4e721f17c0ec792625ec00a724cfc750ac56141ebdcd6b956676786ae717d7a6336a79d139fc004cb4772f7835e40a805dbe909c93510f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:aea6f20f74ab15595ac6ffee3c4392e5c3df8fc898d24357598719b960248e32","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f1070bc76733cc042f615c8c46f0da8964f7b072195de00defc3becd95ac9c58","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.359775550588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.873128e-02","shared_alloc_j":"2.291043e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f1070bc76733cc042f615c8c46f0da8964f7b072195de00defc3becd95ac9c58","served_from_record":false,"record_id":"r26","record_hash":"sha256:6201b83c8fa51bdd9d68fab6860e3a0ac914bf9cbb10d6524751271fc0ec524a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87979},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820727e+01"},"chain":{"prev_hash":"sha256:1702863a9a4188041bed738bd5ced2c64a99a66debeeeb758bf35affc88da542","receipt_hash":"sha256:196157f3e5abcedabd249ddbde4ab96c984c20ed3b357d29dcdc474ebf72c9db","signer":"ed25519:bench-node-01","signature":"7c52979923280330de3aeffde1f48037aaa848bcfd6bd6bc53033e0cd114ad21e72d1e38199ce1e2e4cd93aa2f4431ce1422b4fbcd023aaaea16ce0aa1c19201"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:df34e7112e67faf9fab2289e507a1f536958a4bf05785dd31bb145a27f9a33fe","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:272c9d86aaf700789284bb8372a2da11c6d2899016b0aea1b9b930ae8725b372","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.275048470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.536422e-01","shared_alloc_j":"5.121405e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:272c9d86aaf700789284bb8372a2da11c6d2899016b0aea1b9b930ae8725b372","served_from_record":false,"record_id":"r27","record_hash":"sha256:c220d6e1378778daf5891a7e6b02c98189dfc2bdcfaa5148d9ee4272c2661772","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88065},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855663e+01"},"chain":{"prev_hash":"sha256:196157f3e5abcedabd249ddbde4ab96c984c20ed3b357d29dcdc474ebf72c9db","receipt_hash":"sha256:61322e2411e314f22466567f57cff83012c19db334a6d3c0318ba60b22bf4bca","signer":"ed25519:bench-node-01","signature":"ab2cecf8b42e2ad06c022c11d377d449ce98af3896a0e3061c4e49c7d93a2df7b1db1b4c3870f32f671bdf419e4ba32afba383c8bf122b0321cc261cc0da4c0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d6bf742de123ff6cecc777d705505e0378c6005bbe56c8f680dd4040a61cc010","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:63943a4226d8fb42655215a97d92b7b39c4d83792db09fef2b659595697f2813","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.221714820588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.383625e-02","shared_alloc_j":"3.127875e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:63943a4226d8fb42655215a97d92b7b39c4d83792db09fef2b659595697f2813","served_from_record":true,"record_id":"r20","record_hash":"sha256:ebb83c4e09bb79ba1d2aebf3fadda6505898f02ee3617fa696cd7e86ea11763d","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":87609},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834249e+01"},"chain":{"prev_hash":"sha256:61322e2411e314f22466567f57cff83012c19db334a6d3c0318ba60b22bf4bca","receipt_hash":"sha256:179513def3185924654e19ad010a15e1dcbc690be11fa2740df3f30ed7ab8c48","signer":"ed25519:bench-node-01","signature":"ef4d87e3ae3d236d6a9e5e40359afeb08d66337a58ed216dd0bf2ac93f5ddbd380a336c87d902a671eec0628846ed2b8cdcfbc9256aaf97e866e636224930800"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:566a5a82ce2004a7b1b6d641da7deb275a189f7aa442931b4ad4acba19118208","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:fe80b86dc90e86386ead4fb1e13dbea22c6bf076ee82b9ab7e59aa014dfac56a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.904837370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.137331e-01","shared_alloc_j":"3.791103e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fe80b86dc90e86386ead4fb1e13dbea22c6bf076ee82b9ab7e59aa014dfac56a","served_from_record":false,"record_id":"r28","record_hash":"sha256:165421441a750052156752c398c9e7e400c47d11957d7d5f3cba0767a0ec567b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88180},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842600e+01"},"chain":{"prev_hash":"sha256:179513def3185924654e19ad010a15e1dcbc690be11fa2740df3f30ed7ab8c48","receipt_hash":"sha256:ea0c3d78271036516dc902c563ba649807a346bad481f3e455dcf5b1571dc81d","signer":"ed25519:bench-node-01","signature":"11503ed58a3bce97e515d17088db08370ca60f309a4b325353827d459fa397c4382c11386761d5c49dde0a8a322b3fa1a7499f15dea498e9a6f048ae052c1c02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:741e8020d9f888bcef0857cc89921518ca3c6f8c895ad6d54b37aaad62e461c0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c05b2f88954eaf469ac8bbfcd4547bc6e74c41180cce4195cef4e40ecfc1095f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.341960890588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.733862e-02","shared_alloc_j":"3.244621e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c05b2f88954eaf469ac8bbfcd4547bc6e74c41180cce4195cef4e40ecfc1095f","served_from_record":false,"record_id":"r29","record_hash":"sha256:51530ece39ff4c2fc78ba1a6fab22f1e347ae5edeb5a985a31f2bd5bd10d6694","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88234},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.835840e+01"},"chain":{"prev_hash":"sha256:ea0c3d78271036516dc902c563ba649807a346bad481f3e455dcf5b1571dc81d","receipt_hash":"sha256:c3df9915e34f4c9a980609ac647c45ce43ac3470ccb859995668fe33221a9b67","signer":"ed25519:bench-node-01","signature":"a1b1fbb7c563de913fc54e773af8624b793b2fa330e4a4937d9e93361c156475ece105bed8d837ae2211eb202b20dee7cc5b4ffc2096d490b1878a6eaf36ac08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e772fb7bac37f0f8af1cb5fcca290b056912f3dec322cab66e293428971cee0f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:9ca88fa2ca1389cdb90b09bc8a2e8c6a5f0e5c9345cf31bef0e590680aa21c13","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.461151270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.255770e-02","shared_alloc_j":"1.418590e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9ca88fa2ca1389cdb90b09bc8a2e8c6a5f0e5c9345cf31bef0e590680aa21c13","served_from_record":false,"record_id":"r30","record_hash":"sha256:b5afc08bf4813bf683141ccecdea0708bececadd5028c162adfb5247d7fd01e4","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88258},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.799910e+01"},"chain":{"prev_hash":"sha256:c3df9915e34f4c9a980609ac647c45ce43ac3470ccb859995668fe33221a9b67","receipt_hash":"sha256:f447366aedd41baeb68ae5bbdb7239168226a6e276f86db6e72f49de667064d9","signer":"ed25519:bench-node-01","signature":"5203686abb165d3cad6e61e0e292d6d03ca5af367c617744b56276f1edac644a7f8e5c06fd750bd0f3d0ec7aa0282fc5430fabbaa7ecf8e7dbf37c1896fda105"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c61a62cf8a6928e3153e1b92e49b5f27eccf62f8f10962faf79c259943e5bd8d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.074848570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.769373e-01","shared_alloc_j":"5.897910e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861794e+01"},"chain":{"prev_hash":"sha256:f447366aedd41baeb68ae5bbdb7239168226a6e276f86db6e72f49de667064d9","receipt_hash":"sha256:986d957f47b9aa85d0d7fb0ab76dfe22a54a754745a5896f6feab9d112102a38","signer":"ed25519:bench-node-01","signature":"a0c7216ff4d6977394efa944a3a14f29ca6bd3286f06eb988868ae05f39352115c5ac94bbb5bf0eaf8af32c6e45b8554b03e8440e9a7337f99a6249c634ee708"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6a2e2bfd6ee9abda511acab48d8dba0dcf42dc7b5575bebb85a733ea56ca8732","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:b77ef8ce17572e60cd55a9745834934f154c1d52d767075c574f18f1d3d4d748","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.147329240588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.166967e-02","shared_alloc_j":"3.055656e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b77ef8ce17572e60cd55a9745834934f154c1d52d767075c574f18f1d3d4d748","served_from_record":false,"record_id":"r31","record_hash":"sha256:e17a4ccd8ba7177439ad54533820146198f394f78399d13767e88e53a70a5c46","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88407},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833234e+01"},"chain":{"prev_hash":"sha256:986d957f47b9aa85d0d7fb0ab76dfe22a54a754745a5896f6feab9d112102a38","receipt_hash":"sha256:c0017aa8f066f2d6572abe28ba406ec234849f98a0cde9b20a7b6cd0aa8af26c","signer":"ed25519:bench-node-01","signature":"072e2f3c14fe174caad4b378d1201384671c44e89d02fd5e0f8a8980f34ba497b73a7ba614d295aca070cf333f881891811afdc1ef16b71387aa50e853aafb0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:521498df082bc6a36d87cf10e31d6ab03d2a42715e088432812da08b91981d38","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.393715770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.570985e-01","shared_alloc_j":"5.236616e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856629e+01"},"chain":{"prev_hash":"sha256:c0017aa8f066f2d6572abe28ba406ec234849f98a0cde9b20a7b6cd0aa8af26c","receipt_hash":"sha256:b3c5ee73740b6591503788d44103287d01e6df45647b0dbe592c1559508f1152","signer":"ed25519:bench-node-01","signature":"75b3c7baccebd8620c32fc64e37855ef4fc7b2513f0312a8fc39bd0fd938dd07528f13404d9c4f6429f131693235d98d90c02d2b8d5ce748473b2c78f7fee001"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0b5401f6bf8bfb032fc7be3fbda470695a9acd297a9b1b98901e97cc0967442c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.798445360588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.150809e-02","shared_alloc_j":"2.716936e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","served_from_record":false,"record_id":"r32","record_hash":"sha256:15137fb9bb5c928e449c8d3e6b50b9ef1791b583f2bd04555aaf3a153e617bc5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88540},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828132e+01"},"chain":{"prev_hash":"sha256:b3c5ee73740b6591503788d44103287d01e6df45647b0dbe592c1559508f1152","receipt_hash":"sha256:407c37560fbf0c37ff9fe220408e93dbd354214551dbbb2d02e7543a79ea2307","signer":"ed25519:bench-node-01","signature":"9dab3d09edc657ceff1151a76902cb9940f7230a497c503948b837d5d61a50cf66c0a206eb1f50b599d3fd183bcfba8d93e49b8928fc6976b2174ea1055a360c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:cdad70301cb69229e6a2006b3743f2a2d36c93422334673fbe754e550903c0ef","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:38918dd8f55312dd4ef01adad024a47d010d9a3649ba108cc31f5e515e45f804","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.232700810588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.415624e-02","shared_alloc_j":"3.138541e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:38918dd8f55312dd4ef01adad024a47d010d9a3649ba108cc31f5e515e45f804","served_from_record":false,"record_id":"r33","record_hash":"sha256:c777d7f20123d1bd0cc3b9354425416201f01d95b67fa78468e09e0fc80d4d77","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88592},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834397e+01"},"chain":{"prev_hash":"sha256:407c37560fbf0c37ff9fe220408e93dbd354214551dbbb2d02e7543a79ea2307","receipt_hash":"sha256:2d03ea3ca250447bf40fec95bc09928b0c0c8b605d2911bdf98c29ad106531b2","signer":"ed25519:bench-node-01","signature":"d54472ba0e9e825de0d78ffdb03e0077e8852cf8f0be4bf79b6dd14a5239d67552f751a500c9750c5373c0890873098b7dcd6502b85cc7146e22424499039f09"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1b4f1f24e27f0d34d5184f135a8361c982ce1ce64de9461fefe973825c188f57","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.048873370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.880210e-02","shared_alloc_j":"2.960070e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","served_from_record":true,"record_id":"r8","record_hash":"sha256:ae42ca1dddafc073a12617d3f2c47a5ae0d14b088c0d45326c5afe31fbd99357","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":86860},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.831854e+01"},"chain":{"prev_hash":"sha256:2d03ea3ca250447bf40fec95bc09928b0c0c8b605d2911bdf98c29ad106531b2","receipt_hash":"sha256:79437647ab0e7b0a38080eb9cace98fd6bf8d16ccb1149c325f4ae5a23bcabcd","signer":"ed25519:bench-node-01","signature":"94e674d31def3667730c13a41e3020b342e6bf78b8a650913291eb3c353bcea43b2542861f89736521ff90ae3df3270d62d19b123a51998f890282b233ea4207"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:264a610e61ac064deaa335e2aac70ee5b2a6f51b6019932a16f8858549560d8d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:a5c65c1251df6b52b6e4a628d9d24fb1484cbf31edba89ca1f021a79d978cf37","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.170202470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.214622e-01","shared_alloc_j":"4.048739e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a5c65c1251df6b52b6e4a628d9d24fb1484cbf31edba89ca1f021a79d978cf37","served_from_record":false,"record_id":"r34","record_hash":"sha256:b5c7b68160c68bf409610e2b484bfa8d201823445b4f59c2037819d4f78ea6d9","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88709},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.845456e+01"},"chain":{"prev_hash":"sha256:79437647ab0e7b0a38080eb9cace98fd6bf8d16ccb1149c325f4ae5a23bcabcd","receipt_hash":"sha256:34576c950ba9235a9ce6fc3fee3104ecab91985a1b601b8e0579f16faf69cbb8","signer":"ed25519:bench-node-01","signature":"f09952930761a43b609f8f2732592e4df513a117abe67e06cf755d1a77fc461bfcac3691aa57e27837fcdf051467b6bde04b6a91c64c7b003029e6e1c5384204"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a7638436fcf67c116ee1da81062e6c38fb098ee64596cefeb8da4e16cf6a1084","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:995c74d71caf5d717ec1b1db854037a328e7922345dc61b3437aba12ed2a8eb3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.219992870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.229123e-01","shared_alloc_j":"4.097077e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:995c74d71caf5d717ec1b1db854037a328e7922345dc61b3437aba12ed2a8eb3","served_from_record":false,"record_id":"r35","record_hash":"sha256:cd15947d6e762274d30dce74db45517a670782a8e86371490bea5359d521155d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88777},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.845971e+01"},"chain":{"prev_hash":"sha256:34576c950ba9235a9ce6fc3fee3104ecab91985a1b601b8e0579f16faf69cbb8","receipt_hash":"sha256:a391376ae898fe42fd966bbf1fdd79e197462e3a0224a835d28d2584b75bc58e","signer":"ed25519:bench-node-01","signature":"acda8adfc6d0d57e508b67f3858eca76fea38b7725730f939a2c29657a484ce05ebe586874fd16bce18bc6fb69ce64b49281ec3b826ad4afdad69551c5fc0e05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:497309cfaa53c5bfcb94b868d848a06973b109af19eda7649700efc24312cff2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.304182570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.623830e-02","shared_alloc_j":"3.207943e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","served_from_record":false,"record_id":"r36","record_hash":"sha256:55a2b8e716a8eb9fda50c9c4ad876cf5d024f9ae99c0be4799b8f2121d94a546","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88830},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.835346e+01"},"chain":{"prev_hash":"sha256:a391376ae898fe42fd966bbf1fdd79e197462e3a0224a835d28d2584b75bc58e","receipt_hash":"sha256:ed7673d1f0f374022d9bb4cb0d5d668f52d36c2271740196befccd8ee67c9723","signer":"ed25519:bench-node-01","signature":"1132b9743051c37d7d75f4f8c670888190ea5318c65cd6c5dd3e22ca2b150e6de26ab675e1348c9798fdcd80dd414803f8f098bb4641d83a3542f10ad977ed00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d470e50a8ece7ba937be621cf7c2571b80f18fa463319fe85ac3d864d51f6ea9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:6a28d2adaac95bc3a2ea8c61107a5d0963c4e4bdcbd5093ef245a58cc8ad327f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.788573470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.685992e-01","shared_alloc_j":"5.619973e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6a28d2adaac95bc3a2ea8c61107a5d0963c4e4bdcbd5093ef245a58cc8ad327f","served_from_record":false,"record_id":"r37","record_hash":"sha256:4848c4434249834c11300558709c4263839533269cdc31662f67a1062cd0586a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88924},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859697e+01"},"chain":{"prev_hash":"sha256:ed7673d1f0f374022d9bb4cb0d5d668f52d36c2271740196befccd8ee67c9723","receipt_hash":"sha256:ed6154f7822f17805e3d7812e19b3709fbf3bbe5744bbefaa834e6e99cbe7a2b","signer":"ed25519:bench-node-01","signature":"e559f0a2299f5c54faafab76b6333ae338468cfd6ba7ede7bcb7ca77dbcf3076c74cf9a7651a76ab528da57da766364bf8e3b4d02f7c0dac5da5519ec227c301"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c976f4d2adf4d48745387932b97f81cb839d3b011cbca6f8a922123dfac18407","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:57d222a9b6821d1beda2ff0e08a18cffbef322c999e07cd13ed996e871aa136d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.808464070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.691785e-01","shared_alloc_j":"5.639282e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:57d222a9b6821d1beda2ff0e08a18cffbef322c999e07cd13ed996e871aa136d","served_from_record":false,"record_id":"r38","record_hash":"sha256:1af4ef5e3434b2a6ddc82b973a279d3791e488a6d302bf5ba8fc10a9079a16c2","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89018},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859846e+01"},"chain":{"prev_hash":"sha256:ed6154f7822f17805e3d7812e19b3709fbf3bbe5744bbefaa834e6e99cbe7a2b","receipt_hash":"sha256:40be440529b9296a908a53eda11a21f7ba12da43fa86064a8d46237561ba4208","signer":"ed25519:bench-node-01","signature":"d82b9b0a5b91f9cafce70c3b5a73ae3e742d87dc2dad46f5ed875f15e49929a4a955522b8df418220b5bfab7dd7f7c3ce78f8fe35d0ed3f81e6d3f5905657502"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:017e4da60d7da2c3a6a287a28f9ffe9155a60a6e5f99087a37d4525b495a5672","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9db2aac2012a48a242f2d34c7522134a296e612ec7ee0f355b4dd16eebff0f00","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.910973070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.139118e-01","shared_alloc_j":"3.797060e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9db2aac2012a48a242f2d34c7522134a296e612ec7ee0f355b4dd16eebff0f00","served_from_record":false,"record_id":"r39","record_hash":"sha256:cb164f9a8676b00635d914d154fc2daf17c61247b49ae2591fe859efff750556","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89081},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842668e+01"},"chain":{"prev_hash":"sha256:40be440529b9296a908a53eda11a21f7ba12da43fa86064a8d46237561ba4208","receipt_hash":"sha256:abfc9bfe39715d53258959e63dc0135002598f1b7a82a6948e320de00ece2c9b","signer":"ed25519:bench-node-01","signature":"80c11261f8b8100881fd3a27de229922bc13fa37952f99d9e0bc4f413d506c782d79c31323678f350a5b69d5974c433cd6f10e923321fdee1729a0b135620703"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:07f7fdca5af57efec62caa6106d91108104b120bce92251df065baba199ac95b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:b38cd1f33a130455853b4e6fce41ca504f4173d34ad1f99470b37673b5f8daad","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.080722670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.771084e-01","shared_alloc_j":"5.903613e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b38cd1f33a130455853b4e6fce41ca504f4173d34ad1f99470b37673b5f8daad","served_from_record":false,"record_id":"r40","record_hash":"sha256:51291ee97ebadde6d89c8d4fa2e638e63df1dad7d9b4204cf60a7cc2731225b7","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89180},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861836e+01"},"chain":{"prev_hash":"sha256:abfc9bfe39715d53258959e63dc0135002598f1b7a82a6948e320de00ece2c9b","receipt_hash":"sha256:bc34ea74d0543e78bdb66241b8ddea72f9c7fff7ba4e25bcd4d72a7d307c8026","signer":"ed25519:bench-node-01","signature":"0848c2805e5464c5d6c9ba7fd0550537b7354376434ff13aca6150fa3bf276b656953add5300c8a5857bf3de0dd74e5ddf5ec43ed1ec9a654794f3d669838806"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:88f634c7d5d41f7c1950db79f4d88ae6483e7fcd059ec29d7c46513b295013e7","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:b4e6cd21c0ba051d04aab9042e5e115c3bbe352ada582acaab628fc22dc8fd67","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.762752760588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.046849e-02","shared_alloc_j":"2.682283e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b4e6cd21c0ba051d04aab9042e5e115c3bbe352ada582acaab628fc22dc8fd67","served_from_record":false,"record_id":"r41","record_hash":"sha256:ec08e4e68798e0e921a233c9482a51b113bef41676e1d4170b7d18e1126a11ed","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89225},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.827574e+01"},"chain":{"prev_hash":"sha256:bc34ea74d0543e78bdb66241b8ddea72f9c7fff7ba4e25bcd4d72a7d307c8026","receipt_hash":"sha256:d99afd10465cb6796eca20bda8746e15f8ae118fc52f185a43465fc8b092728d","signer":"ed25519:bench-node-01","signature":"00e94f2aa47acba8011968a6300b10c73d44690918268a3c1250431e75febc2be55a072c96f569c6835911e8ec8bcccf941e077fafa68f81cebb3a20ff4ca308"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4f3e1d569895a2a3d0ecd8dfdf328a1c95d25a0771e92a533961d719c5e57d7b","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:9c89b9128168c614899065585aa1af0e9fde30a0cf82a9f112d769711fea702f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.481688430588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.315586e-02","shared_alloc_j":"1.438529e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9c89b9128168c614899065585aa1af0e9fde30a0cf82a9f112d769711fea702f","served_from_record":false,"record_id":"r42","record_hash":"sha256:3d102fb60f2f9058c08b27c0d67046777852bbbc14385558627d5b8d74b5d902","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89248},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.800516e+01"},"chain":{"prev_hash":"sha256:d99afd10465cb6796eca20bda8746e15f8ae118fc52f185a43465fc8b092728d","receipt_hash":"sha256:57a6be40a1f83f08e2a8f3a7b370db1f89f9081228c1b7dd8ab042804d5d2905","signer":"ed25519:bench-node-01","signature":"d47fb823e68c4e8a9ec17474a4e305b593354c82ae4908107632fe63b7f94ac3c9ffa47f2d5e756e3ee11f6662a537b1fd7ae5459ef7e95c9115679873eb4005"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c68f9556b513980ffd350de2c9f741c7036abb8a8f1f5ddd12c1be3e6216dd75","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.024818170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.463539e-01","shared_alloc_j":"4.878463e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853552e+01"},"chain":{"prev_hash":"sha256:57a6be40a1f83f08e2a8f3a7b370db1f89f9081228c1b7dd8ab042804d5d2905","receipt_hash":"sha256:e8902e69c22431d538f0c341ffef822eb1aef70ea6c417d716622ae78495ac33","signer":"ed25519:bench-node-01","signature":"9d0951e04f5116e50895e4bffb1c7ec73451c3aec5c4ecd53b241fbfc32607a2530472001536ec28812fcc7132b73d21bdedcdd161b15c16db6adfa60346cf07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2a4349414bf7c0ac0b034a33adab0bf7a7bf89ec9d413599502963ba4f39fadb","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:c07152cef374396b314cee5827193f70093e1aae2bc94f82384fea2c01b4f7d3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.082154170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.188976e-01","shared_alloc_j":"3.963253e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c07152cef374396b314cee5827193f70093e1aae2bc94f82384fea2c01b4f7d3","served_from_record":false,"record_id":"r43","record_hash":"sha256:ac347ee6d3e4ced19327ade920c78afd451bbdea6aad77145a03f74588ae7411","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89396},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844529e+01"},"chain":{"prev_hash":"sha256:e8902e69c22431d538f0c341ffef822eb1aef70ea6c417d716622ae78495ac33","receipt_hash":"sha256:5d1201ba3370f6f485ead72bd259d3dc0d905a3617d8369d5951bcfe6e61d841","signer":"ed25519:bench-node-01","signature":"892fa4a5b4bb91c5fd228935afb9d233334fb6dffac9dfb46c1c66864a36bdc10913ad58036aea6d511c44fb6b959c7b2ef40921984e6df37ba1b49f320fb20b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3f9ed8bf06db57ac248ca2a2f6b181c9e9e6eb4cb827f3f2fb2deaf1870adf10","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.538357370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.321851e-01","shared_alloc_j":"4.406171e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","served_from_record":true,"record_id":"r8","record_hash":"sha256:ae42ca1dddafc073a12617d3f2c47a5ae0d14b088c0d45326c5afe31fbd99357","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":86860},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.849130e+01"},"chain":{"prev_hash":"sha256:5d1201ba3370f6f485ead72bd259d3dc0d905a3617d8369d5951bcfe6e61d841","receipt_hash":"sha256:8daa0ccab7cf90a2215fd6531e6bd16da63ff803bf99770602fdba67a21090b2","signer":"ed25519:bench-node-01","signature":"267fca8af45eb10bcaaf36b6f79541fa46f042cedb6ddeb688e25f3d7190d27e3417668af319a0a2efb9114714933e98928c9478b5edc8fedbdd6a47f8e34e0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:40f3dc737f56cac114e0033621b8989612591bc72b6ce42efa7b2a2d96cae21c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.801191770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.398405e-01","shared_alloc_j":"4.661350e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851575e+01"},"chain":{"prev_hash":"sha256:8daa0ccab7cf90a2215fd6531e6bd16da63ff803bf99770602fdba67a21090b2","receipt_hash":"sha256:bc35c9607b746a530c9a9104392e87246a41fcadd2e3268cdc4db5979f76a438","signer":"ed25519:bench-node-01","signature":"4307d50222d1a5dec8770f66b3f89da197a0e1830714046041223de2199a50e24ed5f64ce93598e7b46dc69dc3d6c6a0e871f535e6a99b37cf622e21718d650a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a1e8a1eac967847f3c777e931967843a48d8fa4a7de55021274bdb3c469a2d90","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:0267ad62d64134b8622d4fb07cdbe888137deaca0fdee61e6b66d8bcb9076eaa","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.411046470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.576032e-01","shared_alloc_j":"5.253442e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0267ad62d64134b8622d4fb07cdbe888137deaca0fdee61e6b66d8bcb9076eaa","served_from_record":false,"record_id":"r44","record_hash":"sha256:2dc81090fa0017c427246a792fbc24bb499645f650fefb1ca4f4c43edfcfc62c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89635},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856768e+01"},"chain":{"prev_hash":"sha256:bc35c9607b746a530c9a9104392e87246a41fcadd2e3268cdc4db5979f76a438","receipt_hash":"sha256:5db6da41b47189863f42a8fc747fb11071c56abc2ef24a2138ec25f0b48d3c7a","signer":"ed25519:bench-node-01","signature":"1f40dae2767f6a9b51a01d446edef57ec739cb5b0e1c7726ddedf36657eeb86e5ea234e13f5e71437fb3f3bc6241a4a6964413a526927dd03ecd5ad90aee3708"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f2ed0759f393cfd59fa37d703ca0a0ae7ed1ae59dfff38626d21ae812bd31474","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:88e8063dab93d7c54c198faae564d37a45fdc05bf72a71091e28d81cdae5a7c3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.887696370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.423601e-01","shared_alloc_j":"4.745335e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:88e8063dab93d7c54c198faae564d37a45fdc05bf72a71091e28d81cdae5a7c3","served_from_record":false,"record_id":"r45","record_hash":"sha256:d92dd71fd24148fddada680ad1a17cf6468deccd43b4462625b8ea52c3e1b974","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89714},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852350e+01"},"chain":{"prev_hash":"sha256:5db6da41b47189863f42a8fc747fb11071c56abc2ef24a2138ec25f0b48d3c7a","receipt_hash":"sha256:1bc9a5c941b716c41d4e57cedf90c89241dadd68e810eaa55e821ae462d0a0d1","signer":"ed25519:bench-node-01","signature":"0ac98ad9bf9743f3bab4aaf1eedcf0519dd31aceb71034885a2b765ca4ea5fafdc291aff0302b55927680db6193578a641e2905a2e745a9b7b574624d8fc5d0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2f6595871956534e189f722dfffd7129cbce28e92b70d50edb356d524262fe9a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f30367cfef088d228eabb3c5ceba77659575040308761d05e591230a30803269","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.094973770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.775235e-01","shared_alloc_j":"5.917449e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f30367cfef088d228eabb3c5ceba77659575040308761d05e591230a30803269","served_from_record":false,"record_id":"r46","record_hash":"sha256:fe6835e89c8ab26581c38a4ee550689c1b113deb9b880a2f1d1ffc162dce4242","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89812},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861937e+01"},"chain":{"prev_hash":"sha256:1bc9a5c941b716c41d4e57cedf90c89241dadd68e810eaa55e821ae462d0a0d1","receipt_hash":"sha256:6ef6e23c5f477adf30cdc84d2b0c364a50b259af13cffee66d99d574f09ae00c","signer":"ed25519:bench-node-01","signature":"a2c6a8ccef646b7372427022840ed8b10c0a99eb91c0c1d4281866339517a0dd18334c0742220baf5b23139de1ed0f750cd28e694a5e1db346be279bad442e08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:20a74b1be059970dc5ebae4fcdbbd442cbf31041f3aede023ccc7fdef7d887ea","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:315c14e61b89addfef08fbfe1205125c8472164f9cdf669f157fc7fc338e586e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.505852000588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.385973e-02","shared_alloc_j":"1.461991e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:315c14e61b89addfef08fbfe1205125c8472164f9cdf669f157fc7fc338e586e","served_from_record":false,"record_id":"r47","record_hash":"sha256:0fd550875b4b6b51c231682f03b3c2c48dc7a447dd1adb4f3e7a8216e2d7428a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89837},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.801218e+01"},"chain":{"prev_hash":"sha256:6ef6e23c5f477adf30cdc84d2b0c364a50b259af13cffee66d99d574f09ae00c","receipt_hash":"sha256:1ac30acddb1af1bed7317e9341bed060f90cb1a302832c38595b4cd48348e637","signer":"ed25519:bench-node-01","signature":"e20d65866654f96d107ab62ac57a77528c3d4b25be38e741c8fadf469df8ddf0eddde7dd908849760ffc5eed8fcc7a51b193f5f7606aad4e149fc3fa7e27d908"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:171b9e6a1c7b56711613423cb155ceb75a2ea66c47cbc259ebc0894d0168a1e1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.469655950588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.193168e-02","shared_alloc_j":"2.397723e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822704e+01"},"chain":{"prev_hash":"sha256:1ac30acddb1af1bed7317e9341bed060f90cb1a302832c38595b4cd48348e637","receipt_hash":"sha256:4cc18f35b44a03b2920062658555ed18132eb7d5384d3adbf302db40262df887","signer":"ed25519:bench-node-01","signature":"110728b7e13f33d08d9506bfd07e16eb60eaaf585df3fb7aa353bed368f90bd48a45b30f20c68d3c7bd1aa3ecf1bc8940a8d524562c2a7ff6dd175b89590b808"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5f80fecdbfe27f845ef65bb866ef2d699d5182df574778ae891faea1d7f54c64","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.885786870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.714306e-01","shared_alloc_j":"5.714355e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","served_from_record":false,"record_id":"r48","record_hash":"sha256:758e76b23b821b7b7abe8ab30701ecd786d85e29d1f10de3aa4cbaab51519c59","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.860420e+01"},"chain":{"prev_hash":"sha256:4cc18f35b44a03b2920062658555ed18132eb7d5384d3adbf302db40262df887","receipt_hash":"sha256:ef8ecc2065d70278a76f508b724ccece5eaeed46daf61b7e74f74c70f953693b","signer":"ed25519:bench-node-01","signature":"f7d6b4e2d4395cff42a6cd57991335b1691b2051a8dcd2ad5f41d6fd2039a17015415b6b45028c979bf0e9c7437db19a9e605da937ebcfcc964ddc3a09142206"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:83d52a5313d0263656d60945339e06b2481a70b1af3e5e3e35b56e4acf9fe922","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.080251570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.188423e-01","shared_alloc_j":"3.961408e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":5,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844509e+01"},"chain":{"prev_hash":"sha256:ef8ecc2065d70278a76f508b724ccece5eaeed46daf61b7e74f74c70f953693b","receipt_hash":"sha256:c29237bcb149bdf347255a026d5c3d1bf5ac18b56815d7b3d3cf527bcc07f113","signer":"ed25519:bench-node-01","signature":"d184f5923903d7fbd0ba2ec98d5ae22a78fda9452555a4242030a40b0379decdc58c9e791b84d4ad8e9be40a1083dbe57a6cb4800de547b4fbe16be78bcba103"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1ddba6352c1d5305d249a9ad5d9fab3f8cd5fb041dd91520e75b23503af25b26","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.250726600588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.468133e-02","shared_alloc_j":"3.156044e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":6,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834638e+01"},"chain":{"prev_hash":"sha256:c29237bcb149bdf347255a026d5c3d1bf5ac18b56815d7b3d3cf527bcc07f113","receipt_hash":"sha256:5872911141ee428855dd17f3f75cbf38b1e9da2b262b082843270625ae0b1e62","signer":"ed25519:bench-node-01","signature":"e8302e05b9b10b730a14212b102be6f70b86c0da52dc7ab28f8b8c73eab048234c4fd52e4942fb3f5442361ecf9a52db22cabc8d91b76700926dde8b46826c0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7fe68dd828e7562ac93e42fb16f5a4c122323cd04aa2e1cf43dce7ec36f1d576","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:502158ddf55d90f0209666a2eb46153da936a272f75fa05532df59430c6bd719","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.930763300588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.623573e-02","shared_alloc_j":"1.874524e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:502158ddf55d90f0209666a2eb46153da936a272f75fa05532df59430c6bd719","served_from_record":false,"record_id":"r49","record_hash":"sha256:ca841ede8e002214c87afbf6deb073630c765097e8be069acec71ab82213f50b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90122},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.812013e+01"},"chain":{"prev_hash":"sha256:5872911141ee428855dd17f3f75cbf38b1e9da2b262b082843270625ae0b1e62","receipt_hash":"sha256:aad461f2788e61b6ecf9f6451f755839d306576c83171a7b0e94a697eef6c88a","signer":"ed25519:bench-node-01","signature":"b1f683c3e1d97934da83f687d8cf461ffe1420c9d107a658abe96521945a46d22842969e8e05da97964819c7c42caf20d65f9b0b00e19a72f23830d995b13d0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:67e7a00ea727d90abe79a860f96af1dae5933e0f0be3a4ee3e97fac3648457d9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:c05b2f88954eaf469ac8bbfcd4547bc6e74c41180cce4195cef4e40ecfc1095f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.632449520588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.667325e-02","shared_alloc_j":"2.555775e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c05b2f88954eaf469ac8bbfcd4547bc6e74c41180cce4195cef4e40ecfc1095f","served_from_record":true,"record_id":"r29","record_hash":"sha256:51530ece39ff4c2fc78ba1a6fab22f1e347ae5edeb5a985a31f2bd5bd10d6694","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":88234},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.825476e+01"},"chain":{"prev_hash":"sha256:aad461f2788e61b6ecf9f6451f755839d306576c83171a7b0e94a697eef6c88a","receipt_hash":"sha256:f90d449449e98d22d883ed12d1355256a299ab9dbe30527f7b117fa4ac93e219","signer":"ed25519:bench-node-01","signature":"7b6c63700d00faa8f674e80c0cec2ee334eb5a4757d8a5f22ea0625fa4946b90d66b6360e9a104470512a7982033c87a0639a34d697fd04ea2d483360454a706"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0492ebb2f7f8c814762718497a6cd89843a43ca8d12817d5960cf16da0894bef","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:6d5f6fefa14e96e9b333c9e2ca60b7b266ea9b478a3eea4101c6e5373b59c55f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.055458770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.763725e-01","shared_alloc_j":"5.879085e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6d5f6fefa14e96e9b333c9e2ca60b7b266ea9b478a3eea4101c6e5373b59c55f","served_from_record":false,"record_id":"r50","record_hash":"sha256:d65dc3a09f420051437a5a3451432378064e8b77fbcfe056620e935184cfe8b1","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90262},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861655e+01"},"chain":{"prev_hash":"sha256:f90d449449e98d22d883ed12d1355256a299ab9dbe30527f7b117fa4ac93e219","receipt_hash":"sha256:4b5dfd4e4cce4c86c30a54c4a7c0fbbb732729abf35b151442f7b68e3d129255","signer":"ed25519:bench-node-01","signature":"95096c6617b81cf1044443e14af8f9d86c21b104a367fd2f8f9716b551b0de89d975be933f910e1ff91586f1825bc5315c8e216b3d7a60498a9d06912d7f6c0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1faa2ffa8fc049343202ea8a1fcbb81af799b957a85db100e601a68170ab36dd","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.022647510588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.803824e-02","shared_alloc_j":"2.934608e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":false,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.831479e+01"},"chain":{"prev_hash":"sha256:4b5dfd4e4cce4c86c30a54c4a7c0fbbb732729abf35b151442f7b68e3d129255","receipt_hash":"sha256:f12d9bf13bcf11d9a64a07cfc4403b0c7fe1a08ed23e99f3c9676511fb512b73","signer":"ed25519:bench-node-01","signature":"c646415708542610cc255bec62b2a3860ed8db6544c6c5e60002538312325cff3c3805122c64f9e52f4d3d889c15347ef7b13936ee69d0534139611d0b441002"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:489f771cbc0377a0573cd309d5ee7efc159068d8747da5009afe2bdc609181af","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.762256970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.678327e-01","shared_alloc_j":"5.594423e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","served_from_record":false,"record_id":"r52","record_hash":"sha256:4b407241ed751d5065cf8c5d85ecd7c9cceb59ec65630b16476cef31225da9a5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90404},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859499e+01"},"chain":{"prev_hash":"sha256:f12d9bf13bcf11d9a64a07cfc4403b0c7fe1a08ed23e99f3c9676511fb512b73","receipt_hash":"sha256:ff204bd5232373aba6a7b275cb9045afd82ec953fe39c8688eeab598050cc75e","signer":"ed25519:bench-node-01","signature":"651a2fdfdb5d6a011f6ea214d3f50dca9a9cbeb606b1b0f8cc38b21ed34e0a6c21cd2c38ad3c1c44c29d212b007324348545146f3ead6beee9cddd96e09bd90d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:033281488664289066d049b479c4e32d17653fa2ab9dc3d5381dcc9120f8a0f9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:d4a6fb71a5a16c3ef8c4d405f5dba86c1f33c8d257865ae3f9d2bfe82f80bc8f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.476021770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.303695e-01","shared_alloc_j":"4.345651e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d4a6fb71a5a16c3ef8c4d405f5dba86c1f33c8d257865ae3f9d2bfe82f80bc8f","served_from_record":false,"record_id":"r53","record_hash":"sha256:129bc9adf2a45a6134151e76c45bd187f663f8b23d4a86fed40cf9949fe55abe","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.848529e+01"},"chain":{"prev_hash":"sha256:ff204bd5232373aba6a7b275cb9045afd82ec953fe39c8688eeab598050cc75e","receipt_hash":"sha256:0eca5bd1f7ff6b94502087eede5c1e015296e40ab0cb2f87d539c185c79019c0","signer":"ed25519:bench-node-01","signature":"4db2d60cd4c1e0648616c79631d6e028b877b4e02b8176c9cef23a436d3c0358e140913859e2e821341c51477dbd963e223ac1f9a98d49776a08186753ee0803"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a25c34b24004c790365323eb3f77565d92f9deb6a472321af84886c8a19bc1a0","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:fd4c1d8eeb1ba609a09e31334f8a9013c10158c6b9aefd227c5fd0e0dd2fa168","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.607928540588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.595897e-02","shared_alloc_j":"2.531966e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fd4c1d8eeb1ba609a09e31334f8a9013c10158c6b9aefd227c5fd0e0dd2fa168","served_from_record":false,"record_id":"r54","record_hash":"sha256:196c6d6a7abca2f5690d27b6af82392ec0d369a920c5643be69eed9816bf53af","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90519},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.825070e+01"},"chain":{"prev_hash":"sha256:0eca5bd1f7ff6b94502087eede5c1e015296e40ab0cb2f87d539c185c79019c0","receipt_hash":"sha256:fdac3e746fcf7baacb74a85845c9d39f8c0073105b7a5a3a1c6bdbd0ca3b1483","signer":"ed25519:bench-node-01","signature":"d2d1a88a98e6ca3fa313bc1fe63bfc2239bd71965735c4801f2144bd9a9ec7d9d90016c3bf8102ae35cbee1314883f044cf92ee6714ef43483e305241b57d705"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a89d32508fb2f87f4db7251c7c758dec9aac0b7cf6a501f33cfe9ad9221f5fc8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:0dc01ed37cced0f5820acbc15b5de7dc270ea65e7930a4cf889bdfa792199326","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.746504300588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.086903e-02","shared_alloc_j":"1.695634e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0dc01ed37cced0f5820acbc15b5de7dc270ea65e7930a4cf889bdfa792199326","served_from_record":false,"record_id":"r55","record_hash":"sha256:0bed3b60ade7437d367b332fdf54153cf19459ba204d432afdfdaf93acacebc7","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90547},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.807657e+01"},"chain":{"prev_hash":"sha256:fdac3e746fcf7baacb74a85845c9d39f8c0073105b7a5a3a1c6bdbd0ca3b1483","receipt_hash":"sha256:d3f25461ce3eb628c6fa4fd0a6407fa5a67cf8cc307b118d7c8646a42403d75c","signer":"ed25519:bench-node-01","signature":"838b9864b247367dc472490f0cc024d4adaf41f9b08db374b83f338bbc2509495d41d4e68e79a09adba69b1a0ad6f0c71a7ba1f009a97356cfdea2a5900d650a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:65e78a4a1075eab3d6723329e992cc17a60d286c155b530e971b2c9512b1e589","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:bab919bbfb3527533a2cad88cbd913bdaae65b411f59deffed79daa5ef8b9230","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.084238870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.480846e-01","shared_alloc_j":"4.936153e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:bab919bbfb3527533a2cad88cbd913bdaae65b411f59deffed79daa5ef8b9230","served_from_record":false,"record_id":"r56","record_hash":"sha256:2765ca317d2b162b4e5da0ac01e42a8e09673842b1223adbd71993f12fdaa814","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90630},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.854063e+01"},"chain":{"prev_hash":"sha256:d3f25461ce3eb628c6fa4fd0a6407fa5a67cf8cc307b118d7c8646a42403d75c","receipt_hash":"sha256:b8c4a3e67e570f6f3bb62ea36e0b245ca97883e208e29a825c751253806751f9","signer":"ed25519:bench-node-01","signature":"6b53d1dd8c1b48ce0a89fa9247bbf4dc2555898aa239294b6c892a08be6d1238d1c3882031144ec3a8722470a5f93452882c5fb5c5b64b4edb1d2a74cf0bb609"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f550f45a7c0e739e76bb04c4c1c9f09876244764717a18aa4f64156ab46a91bd","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:fbad157ba34331794cf5050bfec542d16e1f3924470fc53d5b8557ce96983c6d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.677950800588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.799853e-02","shared_alloc_j":"2.599951e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fbad157ba34331794cf5050bfec542d16e1f3924470fc53d5b8557ce96983c6d","served_from_record":false,"record_id":"r57","record_hash":"sha256:1431070f5ce2f957766ef5980bd5e7867760c31429a7aea428065e30871ff619","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90673},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826220e+01"},"chain":{"prev_hash":"sha256:b8c4a3e67e570f6f3bb62ea36e0b245ca97883e208e29a825c751253806751f9","receipt_hash":"sha256:a4225115a29f1558b84f9e4ad6e0d9b76528c9b11aabbae098a863bf3f4fec13","signer":"ed25519:bench-node-01","signature":"bab3a023a1bfe73dc797e79ff84448c2e4d64e559441e0dd9bd6a82b1cee9a0a392292f014c06cd36ca87ff050f81215ae6ff73736a0b3ec33beb446cd1fb407"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:678c4035a3c40182503012d6e96148210ea84dec48527ca0cf583174f3740fee","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:d4342c517cddd41c899d7b9a10713f0f335f15631294442b857cdb687d622a72","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.987144440588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.700417e-02","shared_alloc_j":"2.900139e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d4342c517cddd41c899d7b9a10713f0f335f15631294442b857cdb687d622a72","served_from_record":false,"record_id":"r58","record_hash":"sha256:1aea47eae375fe83228afb27f5082c4cf6f582b26c73c733558ffbd7ce1bf9ac","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90721},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830966e+01"},"chain":{"prev_hash":"sha256:a4225115a29f1558b84f9e4ad6e0d9b76528c9b11aabbae098a863bf3f4fec13","receipt_hash":"sha256:535b0ba5e68884b469a44d310808f37f688f525e6b6bc39048f76b74716cffd3","signer":"ed25519:bench-node-01","signature":"e201069b45c910e7320c9596830d3594a312f7451eaf3a80507fe5275bab63336671d543947309abf1b6a422ad620463a85bf16f4487d6e7a0f58cadc6e34d08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4d7dff94b6c8b56cd41a2c735764b096b29b26b6a7ccc8f2e42fb325e4547c31","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.961991270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.445240e-01","shared_alloc_j":"4.817466e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":true,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853006e+01"},"chain":{"prev_hash":"sha256:535b0ba5e68884b469a44d310808f37f688f525e6b6bc39048f76b74716cffd3","receipt_hash":"sha256:0044e5e7dd759dc6a4510013bff385c62c1246476e894ecd144c977d2b33544f","signer":"ed25519:bench-node-01","signature":"7cc2b540fd1b4c36cba6ead36b3bd0d395ce3b96764e001c61cc049735caec09882e723ce1c92e0f1b1a120c0a4cc8729906ea7f998cb8e10815259e6bd29602"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:529025aa87dd0759cf251bac7ad0a2f608c99a440a8e94589dce2f37c7acdf11","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:363a7aa5dce960db4334d9fb150b8e9170c93243393c0a7b73ac9e6d18693522","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.204946570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.516003e-01","shared_alloc_j":"5.053345e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:363a7aa5dce960db4334d9fb150b8e9170c93243393c0a7b73ac9e6d18693522","served_from_record":false,"record_id":"r59","record_hash":"sha256:a75b4228cd9bb81eefaf1ec78bf49d5712e456c32729771e7a0587af56df9938","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90886},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855082e+01"},"chain":{"prev_hash":"sha256:0044e5e7dd759dc6a4510013bff385c62c1246476e894ecd144c977d2b33544f","receipt_hash":"sha256:4485ccead8d75b220821447a175b6dd3f0a2cc20346c97c908c8b5c6c05a9413","signer":"ed25519:bench-node-01","signature":"f00db6b64b66533d99faccd4f43b4cb719e9aed0133a599e8da3419e5019c254dd7641f609a4974be60a59751eec3f75c9d94bd196d7d3d2f1437d9263be250e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:34a7763a52bcf4615ce123d4cc357a36a439d21e5d08e13a9bcb4e3f3c970aac","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:591bc02284e17c26a2b0835a79b31dd08d54443ff09ee36d35b60f30ddea70d0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.591416270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.628567e-01","shared_alloc_j":"5.428556e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:591bc02284e17c26a2b0835a79b31dd08d54443ff09ee36d35b60f30ddea70d0","served_from_record":false,"record_id":"r60","record_hash":"sha256:463547178c71dfc22ed6f6250b032d1a2cf446795536f7cb017e86cd968a315d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90976},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858192e+01"},"chain":{"prev_hash":"sha256:4485ccead8d75b220821447a175b6dd3f0a2cc20346c97c908c8b5c6c05a9413","receipt_hash":"sha256:0cdbeaf542ca9e04a76bfdc55c1971731dbfd100512c2ff32c707ff8a58e2c8f","signer":"ed25519:bench-node-01","signature":"586261a70a89b83b0e36242942532a5a0a0822bf10ae118e66a18cc876f9fc3e076affb85de7b55e836027372d685ca43555df4937a9994e1a456f9588f96b0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d038cb8bc93230e6eaa0a112e629281bd29d11cc47de213d97369b9ec17a5363","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.789236370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.103661e-01","shared_alloc_j":"3.678869e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":7,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.841295e+01"},"chain":{"prev_hash":"sha256:0cdbeaf542ca9e04a76bfdc55c1971731dbfd100512c2ff32c707ff8a58e2c8f","receipt_hash":"sha256:37238bcb99dd582daa4c48985366d593e01d796f5094002f27cebc081609243d","signer":"ed25519:bench-node-01","signature":"2dc41eb8dea36eb9567105938eebb1540158550b91d8b83a299df793b2c45cd745ef9b2bc2279761f20e8edf191b1c71fdf7312a0ccc313ea3850b92a9c4740c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2d7fd6f08d333bdaa56a60d39dd960587e0710190d95640580fe32db68b99b2c","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:661120dc456ec83861c110b710ff9ad71298352ce119f83ebb44589c06a502cd","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.398546260588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.898669e-02","shared_alloc_j":"3.299556e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:661120dc456ec83861c110b710ff9ad71298352ce119f83ebb44589c06a502cd","served_from_record":false,"record_id":"r61","record_hash":"sha256:872f8a99185cfa59e5b58b9f282fccfd91c114d1fd86b8e1a3fee1b183ae74c5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91093},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.836569e+01"},"chain":{"prev_hash":"sha256:37238bcb99dd582daa4c48985366d593e01d796f5094002f27cebc081609243d","receipt_hash":"sha256:aeb13d49b5ec9daa4f627fb2bb97c05b42aa2108d5270320a2a3dec44f64fb01","signer":"ed25519:bench-node-01","signature":"0058e0c66a6deabd2c9f11b058d9d200f4660573baa8b9e7876abf1deb5f96ac04965b49ad6352ba9de78f846d8bcb7fc3f6d79b62f75afa9c93dcb295364e05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3bb167803fe71212df09d46199bfaae251cf84cf369a2ea3b315d8beb55a9c62","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:b90bb86248e2952a0051e38c0fbaf3d6cbe1aaa4e1f830b4cb7d07b505c1d7aa","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.360968300588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.876603e-02","shared_alloc_j":"2.292201e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b90bb86248e2952a0051e38c0fbaf3d6cbe1aaa4e1f830b4cb7d07b505c1d7aa","served_from_record":false,"record_id":"r62","record_hash":"sha256:3a24ab302a720f69d345b7e6fa2cea2ef83ee0f23200fdd2299187b40d3ee87a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91131},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820749e+01"},"chain":{"prev_hash":"sha256:aeb13d49b5ec9daa4f627fb2bb97c05b42aa2108d5270320a2a3dec44f64fb01","receipt_hash":"sha256:48b555edf44b29f7e87c5700537bc314c6ac4170278ef5e73a2209aafe6eb5ad","signer":"ed25519:bench-node-01","signature":"b58fe498da87f0058c185408ab89b37b99dbc6a29b9fcdaa5b8f21502adebc4b6646cc80dbe5568c3eb455e4517b910d4742c5b3a365b08325842645c9defa0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9a7013b7da748641410d8fa4f61f0c6fded84c55ef3e844693b677978e8b6313","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.551524870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.325686e-01","shared_alloc_j":"4.418955e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":8,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.849256e+01"},"chain":{"prev_hash":"sha256:48b555edf44b29f7e87c5700537bc314c6ac4170278ef5e73a2209aafe6eb5ad","receipt_hash":"sha256:dd006db2affd418688d130393a36c03305085351ab1313eb5b0a5dd19037b53b","signer":"ed25519:bench-node-01","signature":"1215b4e6a2fcc37e166dddb06256bba3abc5b1f873e532631bfd64580dd416c2f0a244c1658cdea25ec00e94cce7529e1d81318b40a2f098c71206235e847f02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:931154858913552776d21efb34addee7cdc7c39fb7a9bd85aedfaedce325a97a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:0bea6cd650d108797f6adf95ce6eb98edb25d3145e447dbbe59044cdc1405e79","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.706580870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.079586e-01","shared_alloc_j":"3.598621e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0bea6cd650d108797f6adf95ce6eb98edb25d3145e447dbbe59044cdc1405e79","served_from_record":false,"record_id":"r63","record_hash":"sha256:5dd200f3ecd7d048283f28d812d78087bc75818e7bff5f5016a6a27a524cb1ef","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91264},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.840337e+01"},"chain":{"prev_hash":"sha256:dd006db2affd418688d130393a36c03305085351ab1313eb5b0a5dd19037b53b","receipt_hash":"sha256:cb5cf6bda19bc9c67bc8b841a6b5854f040c6bc24f3386039e28d0ce0e86d6ec","signer":"ed25519:bench-node-01","signature":"a15bfbcda4df2d6008c658d4f57988846358171734da6a2eedc824a2e3cf5bf672239e08bf5cd38c62bc62aa1523e80e72ebb848adef61f94e988ed8c6b26006"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8cf8b7c83882aa3f3c765925d56c4258dfdaa415ecf9448c49903350128aae72","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:12e1d500f4d5e2048a2cdfdedbab64ccfa35e492a4f9b1b1ac37e4dc345e25ab","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.952247040588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.686147e-02","shared_alloc_j":"1.895382e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:12e1d500f4d5e2048a2cdfdedbab64ccfa35e492a4f9b1b1ac37e4dc345e25ab","served_from_record":false,"record_id":"r64","record_hash":"sha256:e9736f295439f929d9571f2971626aef642c48fea5bf0e865ad97750f1766f5d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91296},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.812493e+01"},"chain":{"prev_hash":"sha256:cb5cf6bda19bc9c67bc8b841a6b5854f040c6bc24f3386039e28d0ce0e86d6ec","receipt_hash":"sha256:d4edece34e971e4ae8912988210fe5e1b5b91bff7b1bdc167e00bc03c705fcfd","signer":"ed25519:bench-node-01","signature":"3ef1423905e5d2262ff615475db09d4933d0d490c42e9256400fcfc477edd81e32f0fe6a21ecbbde83a96a2009a0b944e27061c8cd4e736522cdc5c14394d00b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0133d116536c04de616af595e7cb5f10dfdea5bcd11a6993b22e21152f4bff85","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.020463570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.753533e-01","shared_alloc_j":"5.845109e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":9,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861403e+01"},"chain":{"prev_hash":"sha256:d4edece34e971e4ae8912988210fe5e1b5b91bff7b1bdc167e00bc03c705fcfd","receipt_hash":"sha256:b7fe2a7542902ae5eba2b9dfdd289c94c53968cd98966e7ceb60d99dcaf20ac3","signer":"ed25519:bench-node-01","signature":"34ea5d2cd49e7bf120e15e09503a6d2eaab6833874570bf043964866dc6f5f63bb5f3f9d7ea79e58e3c771e0bdfb522c880ceffcfc4d88a1bc9df3c174706500"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:76849160a669ab1983deecde0607e3f36e0f8e46f7ab75f3f13a273292bfea0b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:b0387795c262bc1dc0024657e5c1142edf822e3c40aac8830124fa0b5b3be2bd","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.342859870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.823860e-02","shared_alloc_j":"2.274620e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b0387795c262bc1dc0024657e5c1142edf822e3c40aac8830124fa0b5b3be2bd","served_from_record":false,"record_id":"r65","record_hash":"sha256:889a7942bf27bd46a168b5aa4950578502099654dc4c41814fdcd5eae68fd01a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91431},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820415e+01"},"chain":{"prev_hash":"sha256:b7fe2a7542902ae5eba2b9dfdd289c94c53968cd98966e7ceb60d99dcaf20ac3","receipt_hash":"sha256:5c2ffbe184c243d265c07b9b91e500064bbdc0b44211334a50acf1453935a645","signer":"ed25519:bench-node-01","signature":"2595c3332d2601a0408b237d6d2c18b3c1ab75ea07e6ea506a90441a57d822bc6910d9c38e43861ea534853223568694b37abe796ef9faa122aeeacc620ae60c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c5098703f69654f925976ccbcf8578ff2b6b5839cb90bf121954a0163a56ab29","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.555321770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.618055e-01","shared_alloc_j":"5.393515e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":10,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857911e+01"},"chain":{"prev_hash":"sha256:5c2ffbe184c243d265c07b9b91e500064bbdc0b44211334a50acf1453935a645","receipt_hash":"sha256:04c3b42dd727929c605b8969501cadbc0db5c53faffae0627f39b9e6a6a55827","signer":"ed25519:bench-node-01","signature":"d0031f5aa0a4985e74e2673c8128383348e6b0a5913ccfa98d34f0d2670412d64f9f519f0013cc4bce7b6c1b9dd79f66fe8e0d5d181d75c37a146c8bf1cde00f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:de7636d28326da195c8ac5a4358d6b320c52518e913ef79ae0a012b4333d8d6f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:e794aeed80344416c0eea1f5479ecab56e92778ba0a1c0ad094b45481313cd95","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.596417470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.338762e-01","shared_alloc_j":"4.462540e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e794aeed80344416c0eea1f5479ecab56e92778ba0a1c0ad094b45481313cd95","served_from_record":false,"record_id":"r66","record_hash":"sha256:4a7445a0dd5e1f0e63f6753a999ae0815081d2b460fe1e9cb4f40874dc5fdf5b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91596},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.849682e+01"},"chain":{"prev_hash":"sha256:04c3b42dd727929c605b8969501cadbc0db5c53faffae0627f39b9e6a6a55827","receipt_hash":"sha256:7afe617bb2a61cd0fa2a87390dbd973ddf2af57deee09c118eabdba9a5f868fc","signer":"ed25519:bench-node-01","signature":"c29ffb15f327ab0fb1577d3d5e558e10648c1d45ced0e8219fabf94748cc9af5c9f3d96d38a8e4871f9b5a2d3da6873fa1ff01ab7f26d8494ad13ea889239804"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a8a9a89f5b4cd3fee1dee878c07dc927f65906c41a6139e7721a209dfff3060e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:434c21a52f0ec696ed9ace53a471ae38f5ade0437b95c87c88db4fdb7b5e41ba","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.084150070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.189558e-01","shared_alloc_j":"3.965193e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:434c21a52f0ec696ed9ace53a471ae38f5ade0437b95c87c88db4fdb7b5e41ba","served_from_record":false,"record_id":"r67","record_hash":"sha256:23efb9145121ff13e6bc533cec9c6f85c7a20b651f5ea4726d7cae63f5299534","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91662},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844550e+01"},"chain":{"prev_hash":"sha256:7afe617bb2a61cd0fa2a87390dbd973ddf2af57deee09c118eabdba9a5f868fc","receipt_hash":"sha256:f857fdde4884bba328f760cf2085e762410dbacd767980bb2a78bdba3ee973ff","signer":"ed25519:bench-node-01","signature":"381647d94af1fe33e13a5a8851917e79ec295e91515495977c6db7d22ecf26fe03d5dad34f6adc9a1987d7f0bbf81fccb1d14ce8f2790125fcdc240fcfb36602"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:319e948cb49a585e0ae5e21967705d4f4401be497b51caa8b934d6c4350f0407","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ce77866203f612a22e6657ca52065c2bca49b5c704e7cbe7bdbafc508469eb4c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.978070570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.449923e-01","shared_alloc_j":"4.833077e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ce77866203f612a22e6657ca52065c2bca49b5c704e7cbe7bdbafc508469eb4c","served_from_record":false,"record_id":"r68","record_hash":"sha256:0d5bff476d58de9e80883a299e1b4aa6d7b853a633916d6d74df6885e00c5534","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91742},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853146e+01"},"chain":{"prev_hash":"sha256:f857fdde4884bba328f760cf2085e762410dbacd767980bb2a78bdba3ee973ff","receipt_hash":"sha256:047ab26e565884e513363a542a1b1b190d52bdb95c43e576dfee8f6df8fecba2","signer":"ed25519:bench-node-01","signature":"ad796009f2cb6b11dfd84d44662d4cefd07a7db6d08e918bc792d3834c08818f24dbd3c8a1585bd0fe4b73a0efd9700d4bdbee78960a45d984e6eb6bf0dd1900"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:de2882b6d81a3febe499f96cc45cad48e8c0785d120b1596616f53c6139e059c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:2b6cc99222f33d8a6ffd1cf22eee3fcfe52da5b3b9a2d9a735a73f65e5681507","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.413520950588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.029668e-02","shared_alloc_j":"2.343223e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2b6cc99222f33d8a6ffd1cf22eee3fcfe52da5b3b9a2d9a735a73f65e5681507","served_from_record":true,"record_id":"r5","record_hash":"sha256:41c01d66b16234412c1fb58f3d033a7845b26bf4cb1994c3393a850130827581","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":86704},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821705e+01"},"chain":{"prev_hash":"sha256:047ab26e565884e513363a542a1b1b190d52bdb95c43e576dfee8f6df8fecba2","receipt_hash":"sha256:e833f0732b0eb23917b359c506ddf71569444dfe17a7d7f20128cd524c57d081","signer":"ed25519:bench-node-01","signature":"bdd0bc5b1afc0cf8461ce756ad456b5911d1d8cdedadfda18c27d50f911a172a205f1c4ecaa6a9da7648255a9f9c34869ed84b6781c8502f8de9206a39908d06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bf8ef4c58abdf97ca4628139cd7aa50c314aab160d1e69abac825fcf0432a398","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:f668b77f7f3629e1f6d16f8bcb2557fc93c50eff52cb1fe95b97faaa24e0e33f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.425684480588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.065091e-02","shared_alloc_j":"2.355030e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f668b77f7f3629e1f6d16f8bcb2557fc93c50eff52cb1fe95b97faaa24e0e33f","served_from_record":false,"record_id":"r69","record_hash":"sha256:4737f3cc94256274d0b12806b1ce485af87c89aca5c283031f546c111a344cca","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91820},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821923e+01"},"chain":{"prev_hash":"sha256:e833f0732b0eb23917b359c506ddf71569444dfe17a7d7f20128cd524c57d081","receipt_hash":"sha256:8758780ff3075294cec9ec9d85f53821eee5010f4f61562caddc4c2d8f4f3753","signer":"ed25519:bench-node-01","signature":"5aab2b8a9fd11ed4cdc570facac347ade7180caaa09f2cfe400e302209f3c61ab062b7641864da4e14bff3121d6b6cffe259a1c3dba8155568bbf0a8929a4d04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:eec305d5a502a28fb2b2be0a05e4a2fae1e722e90c1f30f866326efb313b2025","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:b4e6cd21c0ba051d04aab9042e5e115c3bbe352ada582acaab628fc22dc8fd67","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.922806290588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.600402e-02","shared_alloc_j":"1.866801e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b4e6cd21c0ba051d04aab9042e5e115c3bbe352ada582acaab628fc22dc8fd67","served_from_record":true,"record_id":"r41","record_hash":"sha256:ec08e4e68798e0e921a233c9482a51b113bef41676e1d4170b7d18e1126a11ed","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":89225},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.811834e+01"},"chain":{"prev_hash":"sha256:8758780ff3075294cec9ec9d85f53821eee5010f4f61562caddc4c2d8f4f3753","receipt_hash":"sha256:18d080476a8d8611001a47b4283c67058326ef0909b70b91fec0063282fd2337","signer":"ed25519:bench-node-01","signature":"04a4dc9a1446295103ddca4a4712f1b983dce20826e1be8f85df6a96f1e1999d83ef60e193fb2ceb0036015c6c368d96d5d75fc9d607c814c74ad9e8c9488803"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e7310711e16470c24f16b601f1687bc4b9cd1f46fc150de4d00da91ae490e084","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:da6c1c4573865ce511b7df4d41f5f959ab68783b07b6c0639a8a8c91d5c45886","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.357319260588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.865969e-02","shared_alloc_j":"2.288656e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:da6c1c4573865ce511b7df4d41f5f959ab68783b07b6c0639a8a8c91d5c45886","served_from_record":false,"record_id":"r70","record_hash":"sha256:cf9d27990b76e11ecf153a289490c37c752d1c033890b980325feb314f51a1e6","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91890},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820682e+01"},"chain":{"prev_hash":"sha256:18d080476a8d8611001a47b4283c67058326ef0909b70b91fec0063282fd2337","receipt_hash":"sha256:959deaaa1355ae0c2c42998746fbb563db88dfff532b9869e9c6fc0d18ebe801","signer":"ed25519:bench-node-01","signature":"a8a8fbdfa288016b9a5da3294f822902e6276f69b211b89f076fd9b6e56ba9558c2554b724fbb6fe079fdb60e5de8b66511b3a60f7290b5ddb4a2a62f9ac2d02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ba68788d055577a5998bc9673a648e506369ebbe470eaf0fbb0ab50b972907aa","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:efbb8d25a730016e7141c8a4385a30cc196c5b7f9d238b06f6213360fb3a4888","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.266697170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.533989e-01","shared_alloc_j":"5.113297e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:efbb8d25a730016e7141c8a4385a30cc196c5b7f9d238b06f6213360fb3a4888","served_from_record":false,"record_id":"r71","record_hash":"sha256:e6cede6feea99f953bb7617c1b457e0bd9cfe84fdff8b68ed36394aa9e7fc6a0","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91975},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855594e+01"},"chain":{"prev_hash":"sha256:959deaaa1355ae0c2c42998746fbb563db88dfff532b9869e9c6fc0d18ebe801","receipt_hash":"sha256:3be3681e053dba8b1b608c62ce74d38ee2af2fc87ed9778ec4f8df9f8053b660","signer":"ed25519:bench-node-01","signature":"7993b9b8f6378ef86b247d1cef8a4cc8b3fb82aec5a1851e9145941920508fdc8956b77f310db3e1861eff0e2151c8bde9634ad7c0b7b07a8f82362d9cf46407"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e3b20a6b6d0e9885786eec07d17697274fb8968147d00280152f274598f17e1f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:240fa5c9d924503df218a3b93037f774d98422886228c19146631e7a15c762f2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.381218560588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.848199e-02","shared_alloc_j":"3.282733e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:240fa5c9d924503df218a3b93037f774d98422886228c19146631e7a15c762f2","served_from_record":false,"record_id":"r72","record_hash":"sha256:1c0491bd8f3c600a0e6820c686b289036359762203e255ca5155c7746149dd8a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92030},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.836347e+01"},"chain":{"prev_hash":"sha256:3be3681e053dba8b1b608c62ce74d38ee2af2fc87ed9778ec4f8df9f8053b660","receipt_hash":"sha256:70e37a4a84cdc4f6710f0272351ad91702deacc7e4cd698370d47966615d7f4c","signer":"ed25519:bench-node-01","signature":"3308877edb7f4f7744efeec0b05d066425967422b2f8822940a5e8354f524397104cee955e7ba03aa3753edd4328bcc2f15af5e1d849e67b80eccdbeb5832c08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a3c4039a08ae9881db99185b1389e493915238cfb26ae9535d04149ee22b196b","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5aefa7348d80e639ad964174db0ac09ade23590bd0c9e27355a39fcf0342719b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.394042470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.571079e-01","shared_alloc_j":"5.236931e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5aefa7348d80e639ad964174db0ac09ade23590bd0c9e27355a39fcf0342719b","served_from_record":false,"record_id":"r73","record_hash":"sha256:e37a1496933f6eaf96da8faeac74a85811b847f9d3999c2033cfd5ab4181b858","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92117},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856631e+01"},"chain":{"prev_hash":"sha256:70e37a4a84cdc4f6710f0272351ad91702deacc7e4cd698370d47966615d7f4c","receipt_hash":"sha256:48f5631034400ea239c728a9163e7200d4eb135e874af2e6f071d52815362476","signer":"ed25519:bench-node-01","signature":"225006ba263f6fa75b07032b2d3ecd3573be74264c407d75b67c2f1057b461497ec5e6d9ddd30e005b86c5d0d07ba359da8f5cab43caec93e5bd829d1ad0e60d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6ebb9d992842906c5c332410670b15d099ab595dec49e451278a30497f542d10","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:300656a7d76a43a3659b5e523db3771511c201965d9f67c1a12732317c102177","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.166283270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.213480e-01","shared_alloc_j":"4.044934e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:300656a7d76a43a3659b5e523db3771511c201965d9f67c1a12732317c102177","served_from_record":false,"record_id":"r74","record_hash":"sha256:dd658335054ecb3f36bd7f2f6709e3a1ef958ea7aa8c944fa78fe328bd5fc514","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92184},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.845415e+01"},"chain":{"prev_hash":"sha256:48f5631034400ea239c728a9163e7200d4eb135e874af2e6f071d52815362476","receipt_hash":"sha256:2a33d888b98d88628bae530e5f64d5bc35722a97f347c8ba2e998732cd62aaa4","signer":"ed25519:bench-node-01","signature":"a4881e3b9e631570203b946212e122e503d252d5af64b9a7552412bb58c140b3673b561142da4f804ff7e646e8e3c419e78ce63e8f4661fa617da325ccf99c0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e32b34876ed0734efb93c6f2d90e3316df4f8bb284b4fe46ae38249b1db18364","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:759f9c148dbf8a7b035d1e93268b749afb1424af4fd1bbde4111057eade1779b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.697515900588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.856833e-02","shared_alloc_j":"2.618944e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:759f9c148dbf8a7b035d1e93268b749afb1424af4fd1bbde4111057eade1779b","served_from_record":false,"record_id":"r75","record_hash":"sha256:161fa68204d05ef88a53bb41d76f3c41877cfd04958985d50501bcb437f50720","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92228},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826536e+01"},"chain":{"prev_hash":"sha256:2a33d888b98d88628bae530e5f64d5bc35722a97f347c8ba2e998732cd62aaa4","receipt_hash":"sha256:f985cded683525550b3003708995e4a9804bc5d257799212f66da9c9bf701532","signer":"ed25519:bench-node-01","signature":"adc8047fd66b0be55235496ba7fd827c3df0e5f76738cf0a77602142161008a11aa6501f41d0f180a6d0a6ce28832ecf4b9b6afe5f397928af40ac1f61eea009"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9aaa66a2cb9f5b7ae8a337f59dc14514db632f1a9cef8869dbfb05ef994c8a04","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:07d0f7781bd69b6ac635e1588d83110921621d8756204fc2c7b3c233b482507b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.008959470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.458919e-01","shared_alloc_j":"4.863064e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:07d0f7781bd69b6ac635e1588d83110921621d8756204fc2c7b3c233b482507b","served_from_record":false,"record_id":"r76","record_hash":"sha256:3df84591717511ae8a017a9c9978292887c3bb7132e581683a991ccf699295cf","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92309},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853415e+01"},"chain":{"prev_hash":"sha256:f985cded683525550b3003708995e4a9804bc5d257799212f66da9c9bf701532","receipt_hash":"sha256:1d4f362ded5741969053e29692c04d8b769cb5346811c734005fbfd9d5cf7383","signer":"ed25519:bench-node-01","signature":"6e4607e400874b6461722f88d2f32e398cdc292764a080772573ec24153274bd866cbe89b15231cd2a6a80890f821fdba1ae06cefbe3b419bfa2247834b97d06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:80ebbd1a1f23c20b9bf0419a037e5085db78a926deeda162b3036699190f777a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:bcc91a4f025c63a02ead5e74a517af4b3d4f4d33b42c58e454808d418e1dca17","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.145077440588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.247787e-02","shared_alloc_j":"2.082596e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:bcc91a4f025c63a02ead5e74a517af4b3d4f4d33b42c58e454808d418e1dca17","served_from_record":false,"record_id":"r77","record_hash":"sha256:2d7abaabe1f61b7e178b1c4172edd84e057041061cdfd7ed3bce43f549854e5d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92344},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.816584e+01"},"chain":{"prev_hash":"sha256:1d4f362ded5741969053e29692c04d8b769cb5346811c734005fbfd9d5cf7383","receipt_hash":"sha256:cc743f3347e104616073a6b51680eda62bb9102bf5c12adc029a98a151cbd77f","signer":"ed25519:bench-node-01","signature":"9e5af652141e284248e822548fc99d490ec969de5a88eefc718d30f065943f5a53c86431336e7e4583c026e4df6d5f459606dd25574cdb594a69b5e8a5873900"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:387b247e7897fb4bbe6438c95c4584a77c60b2af65b1f3e4d6931a471960cc66","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f2d32adb3d6e01e7630860c636aab70ca928ed102a1cdf5fa6bb132eea96bb57","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.790521170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.686559e-01","shared_alloc_j":"5.621864e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f2d32adb3d6e01e7630860c636aab70ca928ed102a1cdf5fa6bb132eea96bb57","served_from_record":false,"record_id":"r78","record_hash":"sha256:cf2050c41d2d7d6e6e5c6ff019fe8027b184f84a42c71bf7285da24ca5d7c416","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92437},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859712e+01"},"chain":{"prev_hash":"sha256:cc743f3347e104616073a6b51680eda62bb9102bf5c12adc029a98a151cbd77f","receipt_hash":"sha256:c832723931db063362f6011f1a09c7599c479004944afee58511ba4b5a0412cb","signer":"ed25519:bench-node-01","signature":"429dc76cc782c6f077a72d2697a42bc3d576a9c7cf22b8721887a89ba960b394d727b97c02ff38b93c69a88fe5ca7628536abcdb1e90ea95385c4a7bf6200908"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2d5b2f15f4619bbc883070c0b3cfe31a64aa434842d9fea90c04863a45686e59","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.480347150588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.311688e-02","shared_alloc_j":"1.437229e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","served_from_record":false,"record_id":"r79","record_hash":"sha256:bc09a0b7aa34a4163a95cc14cba017fc4631050085f0f7aabbba0fffe37d0c86","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92461},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.800476e+01"},"chain":{"prev_hash":"sha256:c832723931db063362f6011f1a09c7599c479004944afee58511ba4b5a0412cb","receipt_hash":"sha256:4db5074f142583b8d9b1373d8e0cd9ef2c0b76ae2eff98a71cc524c4f3d49e60","signer":"ed25519:bench-node-01","signature":"0aaf28394c41f3bdf9dcbbbf8d18349400e2148100a188201912af665162b7de0f7c22e574c996e1bef6f6a9c21af7315dcb2d30e5b6c68c1058b0a88fafe80a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f0677e4d19797a8ecc9a6ab947af695f991299b5b22160a51db1e030f7a613d7","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:cfde747273a49efebd1335b7e318d6df510579a1af73818d9b0ccab8649bd5da","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.654524370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.646948e-01","shared_alloc_j":"5.489826e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cfde747273a49efebd1335b7e318d6df510579a1af73818d9b0ccab8649bd5da","served_from_record":false,"record_id":"r80","record_hash":"sha256:294a59fd6d83b5e352c393f18ce47c70f770d620978e092a24efdcec58049da9","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92553},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858680e+01"},"chain":{"prev_hash":"sha256:4db5074f142583b8d9b1373d8e0cd9ef2c0b76ae2eff98a71cc524c4f3d49e60","receipt_hash":"sha256:4d2aa452fc7d10aa562c5c3c2989528df9f80d269dbf08307790593a3fa959ed","signer":"ed25519:bench-node-01","signature":"6a97117d2e56d14e89fef0c5b0f3dcb076cc2c1211c08f6411b4183989ce952d87d291f51bd76cc5b5f5b868f9825596ad306e40f41a0a5c32ca31eaca857c0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e017c324ce4424a5c01e2d64d629d88b14fde5a8a1f54572eabb88ae59009733","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.688294880588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.917361e-02","shared_alloc_j":"1.639120e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":true,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.806185e+01"},"chain":{"prev_hash":"sha256:4d2aa452fc7d10aa562c5c3c2989528df9f80d269dbf08307790593a3fa959ed","receipt_hash":"sha256:b5e51a8a48212afcfbee81754584a3173ff2690aca2aaed8612535662ca1b515","signer":"ed25519:bench-node-01","signature":"9fc9c180a55c8b065789c68a4b8a37b3de20f852b8f2031eaa7219b8a30eeea432798b13be2f0d5c398a8982a8ae154d20abf3104efab7d68182293accb3c509"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fc1c77ec661175672bb2c8335b52db7eda882a17276f22ef0cb455f79825e667","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:310326ba6b9b9dbb0acacf16a065d18f85dff7a810d371e34f2a5949282c8060","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.515868980588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.327771e-02","shared_alloc_j":"2.442590e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:310326ba6b9b9dbb0acacf16a065d18f85dff7a810d371e34f2a5949282c8060","served_from_record":false,"record_id":"r81","record_hash":"sha256:2cd71ea7383e7c9a5450b5f889b9dd2e0fbe3f759d233eeb99d639b726aead5c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92621},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.823509e+01"},"chain":{"prev_hash":"sha256:b5e51a8a48212afcfbee81754584a3173ff2690aca2aaed8612535662ca1b515","receipt_hash":"sha256:3e924d5d69018b5849de350bdc26e280b28be9b297f64652de63d88e87b18d4a","signer":"ed25519:bench-node-01","signature":"96e72a4f6b4c6a45cc7eb36baf949d7cf8a9e2b3797a4648f108428b22bcef3b9ec842df2072c448429d45df3946944cd53777e10e032c8cf7aeb4e30110d509"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:cace132c5903bd862ecfb744d3c3af21314e8d0b907eef698701e58d267bf356","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.537503890588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.478162e-02","shared_alloc_j":"1.492721e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","served_from_record":false,"record_id":"r82","record_hash":"sha256:796c66db2245954b7f1adefe6ab2b746c6c40d34fdc7990c935f119ab41d0a56","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92646},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.802122e+01"},"chain":{"prev_hash":"sha256:3e924d5d69018b5849de350bdc26e280b28be9b297f64652de63d88e87b18d4a","receipt_hash":"sha256:9d4b2d140e64ebdcb5f61931d8f9cdede3e86c01d891100b44c077f809ba0bb5","signer":"ed25519:bench-node-01","signature":"519fd8af02acc8a3e085f2a67c12fb8d69c3bc240ce4732a4d2a1bdce6d4ff467981724d0ab498d3d33dafc6a6417970d050e75190801c3246623b5348b11700"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3f48148bac1df39218c0f9908ad34033469186640aab5fa930912f085bac5455","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.414569510588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.032724e-02","shared_alloc_j":"2.344241e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","served_from_record":true,"record_id":"r82","record_hash":"sha256:796c66db2245954b7f1adefe6ab2b746c6c40d34fdc7990c935f119ab41d0a56","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":92646},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821724e+01"},"chain":{"prev_hash":"sha256:9d4b2d140e64ebdcb5f61931d8f9cdede3e86c01d891100b44c077f809ba0bb5","receipt_hash":"sha256:991aae5ee79efdf0b1514158b3e1bc57cf50cc6682476f679c651801cb2058c3","signer":"ed25519:bench-node-01","signature":"a319dbc7ba016fb41760e8ee6efe86e8584b3af24771e8eeceb66e377d96be02196577198db25c0ed011d771d15f2b1c2f8fc4397caa83e47e9d5fe32c8d120d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e86873bac905f3ab0270d2d8bc92d968abbd7623758642a6d40fa6891b492282","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9c1ce546fd54a646e92397cdc5cf76c148f6186271155222ca123a7bdf8a1d26","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.156316790588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.193152e-02","shared_alloc_j":"3.064384e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9c1ce546fd54a646e92397cdc5cf76c148f6186271155222ca123a7bdf8a1d26","served_from_record":false,"record_id":"r83","record_hash":"sha256:330f6b390437308cf0919f8ef416bea8cae083616a13df679075c5f487499f7c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92736},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833358e+01"},"chain":{"prev_hash":"sha256:991aae5ee79efdf0b1514158b3e1bc57cf50cc6682476f679c651801cb2058c3","receipt_hash":"sha256:90376ab7613bc75c1d065cd1d6a6fa83b7d1d35756c16724c98519756a5c05cd","signer":"ed25519:bench-node-01","signature":"dfaecb647c998417dec5f2d303ff0c8d92efe9a20e3f79b3f4b68232fa695c42fea3d886f87e6ed217de9146e1137c2b6cfd17a9c8b66f3ca0c64c79310ff406"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f95b33c006208598504250efa7c810a563a9de08e8d0e6795a609191594ff124","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c7244af0135d986ac61fd14065b4dbf9cfe82021f3ab953ef526e57c3d5dc13c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.424703890588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.974862e-02","shared_alloc_j":"3.324954e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c7244af0135d986ac61fd14065b4dbf9cfe82021f3ab953ef526e57c3d5dc13c","served_from_record":false,"record_id":"r84","record_hash":"sha256:edffb575f2f440e1a650390567b95dc2fb1fa951fa2131a54d6af59ffb0fafb2","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92791},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.836902e+01"},"chain":{"prev_hash":"sha256:90376ab7613bc75c1d065cd1d6a6fa83b7d1d35756c16724c98519756a5c05cd","receipt_hash":"sha256:501a0d2055f91000926b14e311d4bc69e71a0202b4c615027cc540b191b3c658","signer":"ed25519:bench-node-01","signature":"f82af144027b4fd29ddaee0c7f1da2d837f951116fbdb734ca6185655f5926ba7ffd439dc2fe8b13c7d15d27347423e2fcf515cfc925be94b57f8943524df20e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0d0f12773a2823be165db79b49c327192331fdbe9568fc118e0e8d5207ae2a4f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4a83686302e8d2fa143a1640bef23180d38f6901a3483339dc56731a5ec0dd8b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.205822740588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.424717e-02","shared_alloc_j":"2.141572e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4a83686302e8d2fa143a1640bef23180d38f6901a3483339dc56731a5ec0dd8b","served_from_record":false,"record_id":"r85","record_hash":"sha256:c9793af69285f2eacdc92f59a34d7f225536f3da9a60fb88d6bb4c441b2730ff","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92827},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.817797e+01"},"chain":{"prev_hash":"sha256:501a0d2055f91000926b14e311d4bc69e71a0202b4c615027cc540b191b3c658","receipt_hash":"sha256:e68aa63158d02042d87ec156d24028a92d564ac3d396f0d63ce9de9ff2bc63d6","signer":"ed25519:bench-node-01","signature":"a13ab5a4413f499d0f7ab0845f52184894fc5ab3be7e4cddcc13c5c00262896000a27a4a33368b811e0fbe3c49aa1750936e5ff67599223a54aa83c460a72807"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:51c42072166dd19356bf1d0e4ccb82754149da18460dd12b2d21291a6ede581e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.504373570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.311953e-01","shared_alloc_j":"4.373177e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","served_from_record":true,"record_id":"r36","record_hash":"sha256:55a2b8e716a8eb9fda50c9c4ad876cf5d024f9ae99c0be4799b8f2121d94a546","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":88830},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.848803e+01"},"chain":{"prev_hash":"sha256:e68aa63158d02042d87ec156d24028a92d564ac3d396f0d63ce9de9ff2bc63d6","receipt_hash":"sha256:f22290586b35b8d40c77530ca46f5e79be9df1218ff155112b5a4fd13072a04f","signer":"ed25519:bench-node-01","signature":"503aab7fba24bcc7734b442b36175beeaed92ab2ba23890296ecfeddc69fa39f0a259fa502515f949b1ecf935073aaa12175fa6fa310fbc0b33e33bc836a0401"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a46c9c6854545611842df8a6677d377eb8b44958d8e8a8a2e680a35ff3f7a3a2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.135314060588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.131979e-02","shared_alloc_j":"3.043993e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","served_from_record":false,"record_id":"r86","record_hash":"sha256:f4c7f1ad01d2d813ad75c00cc45d65ed4551e2d7454324699de36187f53cf52d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92951},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833068e+01"},"chain":{"prev_hash":"sha256:f22290586b35b8d40c77530ca46f5e79be9df1218ff155112b5a4fd13072a04f","receipt_hash":"sha256:4b7f288f31795792ef3ca59aa00ffb56c1188449d9798a1d91646f26335b92f3","signer":"ed25519:bench-node-01","signature":"41f5b192ac3e902ad620623b6fbcb56da0db48994e5690df48ef7ea79b230b1f60910384b7c90a74949dac9e4f49cbc68fe1bd32f4bd978e39ca42063d328f05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:348fa1ece8407d9204f13a28c800cf311a6b5c0a17bd706b1ca61d020000e435","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:09fbec421a34061a20a3276b975bb72b854374ca4aca4b207ae8812da3d2f0bb","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.577765790588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.508052e-02","shared_alloc_j":"2.502684e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:09fbec421a34061a20a3276b975bb72b854374ca4aca4b207ae8812da3d2f0bb","served_from_record":false,"record_id":"r87","record_hash":"sha256:aa9718ebd78c6b8a8b47ae94fe1ce09edfaacd1dcea8b6e31c0e5d13626ac2be","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92992},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.824564e+01"},"chain":{"prev_hash":"sha256:4b7f288f31795792ef3ca59aa00ffb56c1188449d9798a1d91646f26335b92f3","receipt_hash":"sha256:8282bf81e21743e3bc43bd511bb3765a1b56aa6e549cd051855b2161207f4706","signer":"ed25519:bench-node-01","signature":"0b177af3aba067a0701e96997b64bed5bdb0d8074f178553b1707936bfe057fbff2061c408c6f3dfd17fb423db058599eee0411780648370d7f49f97b8aeaf0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:79f605fd6a9076ef338829719f97624d0052c75ed0998efb62f0c80c9b9077ea","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c4ec9682783effc085e9f772f3940379db07512d64795c0772c75dbfe45a2979","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.510416570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.313713e-01","shared_alloc_j":"4.379044e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c4ec9682783effc085e9f772f3940379db07512d64795c0772c75dbfe45a2979","served_from_record":false,"record_id":"r88","record_hash":"sha256:50f50674757fce66a6fd0cec5aec9517fca0922ad89d07963fb314068230323f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93065},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.848862e+01"},"chain":{"prev_hash":"sha256:8282bf81e21743e3bc43bd511bb3765a1b56aa6e549cd051855b2161207f4706","receipt_hash":"sha256:c542801744fa07698cb349e48bd4b314520e3835a12789f57c0003ee5aa675e1","signer":"ed25519:bench-node-01","signature":"1201fa489558aab24cbace79a83ff5a6b527f92a26d549f08d59605bb0d24dcc5bb8e1a8eb40a5f403d369cd2ad875c8f54969096c950aa09dfa79f979064809"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9b9a6d2f72646528b40fc6bb6634e98bc4e41c6f99c7027d729472edff4ef0ce","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:386c444bb8e68696b4deb7cee60d731f03a2706029e7d8dcae158d7d4a6222e0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.945342130588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.578656e-02","shared_alloc_j":"2.859552e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:386c444bb8e68696b4deb7cee60d731f03a2706029e7d8dcae158d7d4a6222e0","served_from_record":false,"record_id":"r89","record_hash":"sha256:89f4fd912a74245bed7adf41ae615b229d03b28a6bec94788cab2374837aa102","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93113},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830354e+01"},"chain":{"prev_hash":"sha256:c542801744fa07698cb349e48bd4b314520e3835a12789f57c0003ee5aa675e1","receipt_hash":"sha256:e9a0d71663f1f11b5ac3c87043f15e2812e5ad8edb4cf7bf98887747ebca3784","signer":"ed25519:bench-node-01","signature":"499104b871c3aa55cabaebe0be2d8f63ad9aa537fd5b134414f37911f065490275660aff8b28a533268790fb7eff4b18bc5515b8f80c5152296f9c25ce78d90f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bc85461665d0d54b16079986b1bd6a2720cf520671987f6d553f03479856dd3f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.947371470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.149719e-01","shared_alloc_j":"3.832396e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","served_from_record":false,"record_id":"r90","record_hash":"sha256:fbfb7b2e0c35a608c84403c695970a425790cfac9e71c7f2b3ab9eecb37cfc58","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93177},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843071e+01"},"chain":{"prev_hash":"sha256:e9a0d71663f1f11b5ac3c87043f15e2812e5ad8edb4cf7bf98887747ebca3784","receipt_hash":"sha256:1c665dacda1a2f321f7fa7b578c16c77afa4a11bf5c0746df341bcd2a84254f6","signer":"ed25519:bench-node-01","signature":"435002ffac1729f5532656f0ba931186cbf75e4b76c538d0fdd0a1f8fb1d796357323212e18d58d8ef190a4f49edeabeb4456b70a336aff600e0ca669ec45409"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:efab989014ee28a7ab2170c50b67500adbcf41cfb82da91d2e4c2b53bed74fb9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f98f8602394386ea5ab5f4f9c08208c54148d551cb84dca8d4c60da7a903bf68","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.739314470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.380382e-01","shared_alloc_j":"4.601275e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f98f8602394386ea5ab5f4f9c08208c54148d551cb84dca8d4c60da7a903bf68","served_from_record":false,"record_id":"r91","record_hash":"sha256:152f5c145aaa9babbf205a0bbf11f61185427adda91aee0f43747b1c278636ab","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93254},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851012e+01"},"chain":{"prev_hash":"sha256:1c665dacda1a2f321f7fa7b578c16c77afa4a11bf5c0746df341bcd2a84254f6","receipt_hash":"sha256:1aec6933b53b8b80e20795f9a049fe07fe8401642e40b6ab8de8dacd4590150a","signer":"ed25519:bench-node-01","signature":"1c3c031d896ab1c0d13fdb6b29adca5e7dd763436e1bf1b5f0b13d369d942362053cec0e6a5d5fb87551c491df66b880842ca65dca9ad64f56bba94553291f0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:988b97cdef6868d5ae202bb98490904a04e4fcd2de9dbb4f1f3bf53ed7e575c1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:5a7550a0055d59ccb3c4f9f1776480c59246751bc365995dd7e18001152fdb9a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.042322970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.468637e-01","shared_alloc_j":"4.895458e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5a7550a0055d59ccb3c4f9f1776480c59246751bc365995dd7e18001152fdb9a","served_from_record":false,"record_id":"r92","record_hash":"sha256:5425320317c148e50fd49b10f21d774508c9318918a524d77c244c49c4c8c85e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93335},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853703e+01"},"chain":{"prev_hash":"sha256:1aec6933b53b8b80e20795f9a049fe07fe8401642e40b6ab8de8dacd4590150a","receipt_hash":"sha256:fc3318f4000b69c658efe5d404e8b5372a5c6781e6cc99710a39180f479a00c3","signer":"ed25519:bench-node-01","signature":"1df766949339fd3b833ce607fc8c2e4bcb7f57e32380ce4731fda3c5e5c28a1d3be71818c2e33b8e83c412c6691c55ca5a1afb9dd554112ca2d17f55d2801400"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5ac0078efa868fd9662608fe10c32c1d6c18d0165c791b358761da24670ba365","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:8369c6ce22f5309b9167dbe73ed40554e89b1ea5b99ec31727e74624db510167","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.864239710588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.429814e-02","shared_alloc_j":"1.809938e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8369c6ce22f5309b9167dbe73ed40554e89b1ea5b99ec31727e74624db510167","served_from_record":false,"record_id":"r93","record_hash":"sha256:e8e9e5f6ed2d6b5f451405bb6a3e684250d79eb0cd120268cfead714d60e296d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93365},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810490e+01"},"chain":{"prev_hash":"sha256:fc3318f4000b69c658efe5d404e8b5372a5c6781e6cc99710a39180f479a00c3","receipt_hash":"sha256:90644e49b0dd3fb5f14c8e6253c4dee5aa7c658dd01e56a3b5475febeabe6c70","signer":"ed25519:bench-node-01","signature":"33cb1ed4b5a26114c9a75df2506bb468e94498d3d7f6e1d8dbcf2e8c5968f6d2aa8d907a4331ef98320c2bd5e808499480cc5a31f93351fef83f23eb664df103"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bb42476c2f0d2a00d83a4ec8ccae6a35a333206ec19966cc2a3686499e435e0e","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:e8d588c15f3a6ba2d18014a87cafd908d20d54409c84a8304cad13dcfeabcffc","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.764584570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.096480e-01","shared_alloc_j":"3.654933e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e8d588c15f3a6ba2d18014a87cafd908d20d54409c84a8304cad13dcfeabcffc","served_from_record":false,"record_id":"r94","record_hash":"sha256:01182ed57e39dc1234fe4b98ee374af539ed38996ae1fc493b068801f4458c83","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93426},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.841012e+01"},"chain":{"prev_hash":"sha256:90644e49b0dd3fb5f14c8e6253c4dee5aa7c658dd01e56a3b5475febeabe6c70","receipt_hash":"sha256:9182fb5fcb09529f679f758e2a0cdd17e036704d550560bd16e7d2b2bd363b74","signer":"ed25519:bench-node-01","signature":"2b6d3157784e1df8ba74cac4afffa95728173c87953a380023affe75762a2fcc1a8024269247a03b8e62b9739b7b61fdd687f16ca24e2311a4d6198bcb85b706"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8d2bb43a12ce8095e32b7502f4f51a4f6e292ebff6ded008bccc326194792610","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:2a1252ad9738cc7eaaaed1b70f61b805d45ec8615340f3472862343d3faf5552","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.435364180588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.180661e-02","shared_alloc_j":"1.393554e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2a1252ad9738cc7eaaaed1b70f61b805d45ec8615340f3472862343d3faf5552","served_from_record":false,"record_id":"r95","record_hash":"sha256:b9a3125948a2d9513c0e4b5fc000f3182fa351375359f307f3c0a06d8a1cc3c8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93450},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.799136e+01"},"chain":{"prev_hash":"sha256:9182fb5fcb09529f679f758e2a0cdd17e036704d550560bd16e7d2b2bd363b74","receipt_hash":"sha256:8535aebf2b0db6f295a506385f1ea9e1d25f96e439d84519b485b15f5350b85c","signer":"ed25519:bench-node-01","signature":"ef48f229f25a24345aefa7f997b5f1f71e8dbe7a1115ccf090e4d55e6a37aad5bf4ad3af10460c29c8d64121b6ac901378a92cec50d37817c678273738c04e02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0756628f7b18005fdb6ae8a19e19c4d0b9f8e6f4051be964bdfa11fbcdaac4b9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:0dc01ed37cced0f5820acbc15b5de7dc270ea65e7930a4cf889bdfa792199326","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.992760010588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.716774e-02","shared_alloc_j":"2.905591e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0dc01ed37cced0f5820acbc15b5de7dc270ea65e7930a4cf889bdfa792199326","served_from_record":true,"record_id":"r55","record_hash":"sha256:0bed3b60ade7437d367b332fdf54153cf19459ba204d432afdfdaf93acacebc7","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":90547},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.831047e+01"},"chain":{"prev_hash":"sha256:8535aebf2b0db6f295a506385f1ea9e1d25f96e439d84519b485b15f5350b85c","receipt_hash":"sha256:b25e2d40a08a86302e26ac74780b5739de1116f31292313b5809ab39a3a06248","signer":"ed25519:bench-node-01","signature":"9b6dbcc7c263e9fda8311c4d574f8676c3853ae8d9caea1038fd317ab3f7b66d493007327c29d0ddb41280827a5f754107b25302100e87727d18cb39b759ee0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a3a5e6a6eb3fe0ff602cbac41b980230029ff1afa3afbf9ab3bc00033cb383e3","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:2576d606f7686868001e756e697c1c0bd80ff210c28f9626a40a0206f8740c7c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.339872470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.555302e-01","shared_alloc_j":"5.184341e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2576d606f7686868001e756e697c1c0bd80ff210c28f9626a40a0206f8740c7c","served_from_record":false,"record_id":"r96","record_hash":"sha256:f00aabe082500c634f45bf066ce0068f4071b8e5e1dd87aa9215ff18846a0c09","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93584},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856193e+01"},"chain":{"prev_hash":"sha256:b25e2d40a08a86302e26ac74780b5739de1116f31292313b5809ab39a3a06248","receipt_hash":"sha256:3eb6f697291ab78f13dc9841c9b53dd4a30b1195919e16a2b07307850a91b5e5","signer":"ed25519:bench-node-01","signature":"1d541517137745718580505324221c2035d519b7abd901b67090001bae6977e69de43e2e37d6756e5889cfd01d5e5301cf1fb950fcd65946135369eb053e0a08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ed7519794785acb8864c691773d685b8b11034794ebdbd87467c5a8f0b311079","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:c6a5bde2c8cef5728623cc3d7d230d795042fe75b0bfcffd30613b27e1962cb8","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.557704370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.618748e-01","shared_alloc_j":"5.395826e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c6a5bde2c8cef5728623cc3d7d230d795042fe75b0bfcffd30613b27e1962cb8","served_from_record":false,"record_id":"r97","record_hash":"sha256:a60e24cabeff5c8fab82f98d83aab2a3dcd5519aa4324118de29747edbe02593","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93674},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857930e+01"},"chain":{"prev_hash":"sha256:3eb6f697291ab78f13dc9841c9b53dd4a30b1195919e16a2b07307850a91b5e5","receipt_hash":"sha256:399e8a7f799203ff54a02899b892e0cdb206763682c3d3819886799c406f1364","signer":"ed25519:bench-node-01","signature":"0dd2e094cd785362a434b99aa5dbf7a7e3af8a4576fb1cbc1cb2abeb1110ffcc4fa6b4a593ad2c8334d9a266ff867e655081bd9ffb94eba8b0e575fbcd81d90d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:df59c1928e148a7f4938fbbbacb9a5400d5db549115d187f5e17ffc0848a9bd8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.018734320588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.879805e-02","shared_alloc_j":"1.959935e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.813948e+01"},"chain":{"prev_hash":"sha256:399e8a7f799203ff54a02899b892e0cdb206763682c3d3819886799c406f1364","receipt_hash":"sha256:c94844f13954ca1578f0e997748a58a2c913ffaf067cd9153077b4e6dba38054","signer":"ed25519:bench-node-01","signature":"d55017b228d5636105fc40bc93dfb84708c927d8af3091f2b5260a7c01666cd96f7c1d98e0af8f99e9e4f3f0859db10dfef217724d4399dc139132182d55ca0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:aeb011e361cf454603733a8bab27504474fedb7567f195f75704444fdfd4708f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:f4f9852d4bb1ab8da33c1e53245115c7b7c35eeb04727089cfabb53b3bde5bc9","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.580811970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.042954e-01","shared_alloc_j":"3.476513e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f4f9852d4bb1ab8da33c1e53245115c7b7c35eeb04727089cfabb53b3bde5bc9","served_from_record":false,"record_id":"r98","record_hash":"sha256:1232c9646d1f56ec6c40694a4c36eff1bf0a8e1db0ef50e45b5ad0f73d8913bb","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93765},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.838838e+01"},"chain":{"prev_hash":"sha256:c94844f13954ca1578f0e997748a58a2c913ffaf067cd9153077b4e6dba38054","receipt_hash":"sha256:d50ca63956963fe591efa7ed7fb10bf863d84996485994a9efe8dab04f1eba25","signer":"ed25519:bench-node-01","signature":"ee736aca486e3d43b011733a9763c9337224587886009695b3b9d5e832af50fd9c10a8382fc31e9268ac57e85d3aa882df63479f3461899f085fee07e95a5d00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4876c30243ce9ba6d5bdfff240c760bd1332780f7b0c4b2157e922ccfc06e74b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:aef4bb6b5fe9ccb4e86032a47f27b234eace63aa374802947a1767a90c0a8464","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.288974620588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.579535e-02","shared_alloc_j":"3.193178e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:aef4bb6b5fe9ccb4e86032a47f27b234eace63aa374802947a1767a90c0a8464","served_from_record":false,"record_id":"r99","record_hash":"sha256:34c9f3f3e1e23a57db0a1c6a6a7ac46879665e16a919134e270f9bc17f8e0537","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93818},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.835146e+01"},"chain":{"prev_hash":"sha256:d50ca63956963fe591efa7ed7fb10bf863d84996485994a9efe8dab04f1eba25","receipt_hash":"sha256:02bd1cc8ec7c0242f2ab56029ec76e16d5dd58d30c1b3fc30b5d10965a780f44","signer":"ed25519:bench-node-01","signature":"05b73c7680757fa84dada366d295c317e7ec2ae3a864444406bdcca7965f712108f4ecc0b1318f5da1147b7e455621a0bdd5e2efaaeec6b1e605cad8b82e3e0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:55e41bc5872f1a551ffeb1910904deb44c6825b2843b09c81db0f82cc758a536","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.014017370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.169131e-01","shared_alloc_j":"3.897103e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":true,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843798e+01"},"chain":{"prev_hash":"sha256:02bd1cc8ec7c0242f2ab56029ec76e16d5dd58d30c1b3fc30b5d10965a780f44","receipt_hash":"sha256:eaecd65be5f4bac875da28a3c069266eb3b3ba20f3614824a5d5b2cf3b8d1322","signer":"ed25519:bench-node-01","signature":"e04f23d3245452789eeb987c946dba559e8731edd7814b9e45e9b4b207fa15fb7b6128d1009988c9b4f07fb8e071a45224b6cf1510fec2184d098f4f71190d0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:81a0f586c2a2b590e425fee901c357cb5f98d2298e7e3c753eca50117601f130","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:5c82a1e4bc712b34adb3610a3c1262f5e1d97d2d2ca195911dae28d81ed6322d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.170713100588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.235083e-02","shared_alloc_j":"3.078361e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5c82a1e4bc712b34adb3610a3c1262f5e1d97d2d2ca195911dae28d81ed6322d","served_from_record":false,"record_id":"r100","record_hash":"sha256:8359486ce6d26a37515b19330316a6d640dfcc0fc6ba21a93cd33cc763f289fd","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93934},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833556e+01"},"chain":{"prev_hash":"sha256:eaecd65be5f4bac875da28a3c069266eb3b3ba20f3614824a5d5b2cf3b8d1322","receipt_hash":"sha256:f6d60b09a89b50622a076e4167f372497e55c7fd0b53ec585c8b671d1c896348","signer":"ed25519:bench-node-01","signature":"963d75664d0a17f423d7bc964a23ddbd2ec2afd0a254f6b7b279205c0e13ab5dc17abc8315f4e2cb7148cfe6cbb5bdaff78312d78156d08003ec42b0e7c99808"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d6adeb7a02f7dbf69656a829c3acec757156e9bb0709599976a1318ffada7d58","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.347213680588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.836541e-02","shared_alloc_j":"2.278847e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","served_from_record":false,"record_id":"r101","record_hash":"sha256:423f6097e57e4c77557b0caed44714a3b731fb972ea1da097ee6162150ae2cb3","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820495e+01"},"chain":{"prev_hash":"sha256:f6d60b09a89b50622a076e4167f372497e55c7fd0b53ec585c8b671d1c896348","receipt_hash":"sha256:63ceeffeadb33cbcfdfbb74ef6987df6562154a4d728aa3b31dbe2c27b87abff","signer":"ed25519:bench-node-01","signature":"145afbf3752937767c5b10b560a904c6dd3c6e44774980ffa315cf3aa529ff11b16c7fe12a806ec4345b77fc8fc02b6feccc2877ed4fa229dd14691d3d038d04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9285a8dce237786eaf55dbb63be5b1821ec605bf6da26bf7cc179ae609d88863","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.063028270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.765930e-01","shared_alloc_j":"5.886434e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":11,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861709e+01"},"chain":{"prev_hash":"sha256:63ceeffeadb33cbcfdfbb74ef6987df6562154a4d728aa3b31dbe2c27b87abff","receipt_hash":"sha256:1031126852e24312e5a7e16a3334d84726688c0509b50275b23e074ae46bf3aa","signer":"ed25519:bench-node-01","signature":"a9347549f49b1cefe9717f5f071de300fd422d4000ff6d7f90500161bfd9cc134be7f1b39ce90875b5a989a395575fc067830036c15934aef6ea001208bd9f0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:250165da5eb68a8774e3cc8422937284df76114e6e8f69df01648c59e1ca0234","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:84dd48defb81097cfb6618f709c9a08f3583cb3227ad2e905c32c5666eecb9b5","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.731265070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.378038e-01","shared_alloc_j":"4.593460e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:84dd48defb81097cfb6618f709c9a08f3583cb3227ad2e905c32c5666eecb9b5","served_from_record":false,"record_id":"r102","record_hash":"sha256:591b07b7a6fc7ce0d358910e7e12565dd727646abc7f9044524cc47ed119d025","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94147},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850938e+01"},"chain":{"prev_hash":"sha256:1031126852e24312e5a7e16a3334d84726688c0509b50275b23e074ae46bf3aa","receipt_hash":"sha256:47cea22ed618ce03c880b20313717414f6ad4449cf4859b37e4234e11f727aeb","signer":"ed25519:bench-node-01","signature":"492c14d4c81f73e8d554801cfe0f3bfaee0a72ab189751fcb639bb8576924bafbf7811f6090ad99a5d136dd1dd2d4a1087e3a28cded8ae6b24d9836a7ac5f50b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f51930578cefdae13b455e5890e23387b26ed8ff623e67ce9847b4d5fc1bd6d9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.985000170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.160679e-01","shared_alloc_j":"3.868931e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","served_from_record":true,"record_id":"r82","record_hash":"sha256:796c66db2245954b7f1adefe6ab2b746c6c40d34fdc7990c935f119ab41d0a56","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":92646},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843483e+01"},"chain":{"prev_hash":"sha256:47cea22ed618ce03c880b20313717414f6ad4449cf4859b37e4234e11f727aeb","receipt_hash":"sha256:0cf3457a4392950210168a355080f2fd43910ffbab1e44ca534ec7ff085822e3","signer":"ed25519:bench-node-01","signature":"16fc36ca8abd34abd89290924b2d4e71ecc223ba923abf4bfac267a1b71c5ce9a6169cc0a51bfb5d7fc8433893781653b085e1947bb07d015a3d9f5cac99eb0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:557d7b48e33821766f47b722a22369c793d813793e498a82b06624e19457b75a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:e22d08cd71e4fe85157a117945884be41615af88796c53f606b47fa038bac18e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.239081870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.525946e-01","shared_alloc_j":"5.086486e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e22d08cd71e4fe85157a117945884be41615af88796c53f606b47fa038bac18e","served_from_record":false,"record_id":"r103","record_hash":"sha256:aef96891cde1778fd48eb935528ed4cc34cca76b6c77efba9276f1cf503d5bb9","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94296},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855366e+01"},"chain":{"prev_hash":"sha256:0cf3457a4392950210168a355080f2fd43910ffbab1e44ca534ec7ff085822e3","receipt_hash":"sha256:7bb493f2081fd0e117ca86a335027e11445963e60dd42c022d4522379b8e3dc9","signer":"ed25519:bench-node-01","signature":"be6ef7c7fdbb4b3eb9d208896a1be6a7498c634d8a3eb367df96f387271c02a935b64b220168c9fb142fae7f23e15dbdb8436b12756dcd236505234f7dc1a903"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9741cc673b447afa06a1f394653998139dad8ffad3469ce330f22201ef93e36a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:d72b56294d3317cd83e6e9ac76160ce7967610be483d2d4fec03730eae111c3f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.623812570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.638003e-01","shared_alloc_j":"5.460011e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d72b56294d3317cd83e6e9ac76160ce7967610be483d2d4fec03730eae111c3f","served_from_record":false,"record_id":"r104","record_hash":"sha256:294704c43530a35c5198aa215dc9b2be748cd6edafae3871155ee7b466c762d6","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94387},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858443e+01"},"chain":{"prev_hash":"sha256:7bb493f2081fd0e117ca86a335027e11445963e60dd42c022d4522379b8e3dc9","receipt_hash":"sha256:74e27bd36d8b29d1d3a7ebfb915570c98a12b8fa92aad4ab185b2d1da3f2d82b","signer":"ed25519:bench-node-01","signature":"87affe315d1837902ba02dcaa7cd2ad7b23c3deba40d3439386d073197f94c42a28c05d200f2b00b540bc4cc52e305fb5cf262de70db1ee83531988ea5731203"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6317af401c53d729038527fb72814a6ef0179209321cd1b2dbeb7b7e72669377","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.686308230588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.824196e-02","shared_alloc_j":"2.608065e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826356e+01"},"chain":{"prev_hash":"sha256:74e27bd36d8b29d1d3a7ebfb915570c98a12b8fa92aad4ab185b2d1da3f2d82b","receipt_hash":"sha256:5bf3a8a1c6fb14e5c8f24c4ec1058f076c915b6ddf5054bb6f806f4dbe1ce59a","signer":"ed25519:bench-node-01","signature":"0ec31ab609f427b995cd9ebb3eeed8a3aa07281c5bd9190814b675c45790e141fd4c423714bb4946859497bb628dc08ff028fcfdaaf3307115d01251c5014405"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d8d29f5863f0a9cd373ba091e60c8532eed975d4e7c2c47f993559d79300567d","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5169b6649ebf570c3dba87c73d16a22ab32c9b6bfadf7e3a2fd90d625b3ea944","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.975768110588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.754654e-02","shared_alloc_j":"1.918218e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5169b6649ebf570c3dba87c73d16a22ab32c9b6bfadf7e3a2fd90d625b3ea944","served_from_record":false,"record_id":"r105","record_hash":"sha256:a1240b56cbe7689f7a82efdf882a2748cef483c64cc181a4eafb1e21b91629f3","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94463},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.813014e+01"},"chain":{"prev_hash":"sha256:5bf3a8a1c6fb14e5c8f24c4ec1058f076c915b6ddf5054bb6f806f4dbe1ce59a","receipt_hash":"sha256:0ca0d66ab5412ae436d8a354a8e0cbd38d980f51f2356e58fdcba54d33f63d54","signer":"ed25519:bench-node-01","signature":"8ea3ba646a1087711e9363c857b32562fec3dc0e7172e4a7d140446528835129d7048a4c9631e4ffd8c04a8ee769d7a940b5d2a8bbe0f843d662d316f805050b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:275871bf33532c0212dcdac56cbdfbb6510ec4f8e98b6bdffea3665aebd8ad26","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:b01775f414fc8750ffb46d8e96e6535418e94e18e8042f473efeffc9b9317a0f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.214223160588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.449189e-02","shared_alloc_j":"2.149730e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b01775f414fc8750ffb46d8e96e6535418e94e18e8042f473efeffc9b9317a0f","served_from_record":false,"record_id":"r106","record_hash":"sha256:75e7961711cc95ab64084e8912e2fba65461ae4e408cb06df20ce54312bf169f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94499},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.817962e+01"},"chain":{"prev_hash":"sha256:0ca0d66ab5412ae436d8a354a8e0cbd38d980f51f2356e58fdcba54d33f63d54","receipt_hash":"sha256:5f1fb4ebe85bd1974918838f27408b71ea831a3f1653c425c5ff0f59b3943cb5","signer":"ed25519:bench-node-01","signature":"80e288e3fdf180e19707eb7ea1212f994b0bd9213f57e232dc92694d09125a2c3ec7d6fd0064a4a1d34aaf40227ba24983f3d295285877fdd0b965c92da7f305"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e6082f2e3030a2f747c720b3256748c06a2b941ecef6b0cc45f2f3f3510f2b49","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.433390070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.291278e-01","shared_alloc_j":"4.304261e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":12,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.848114e+01"},"chain":{"prev_hash":"sha256:5f1fb4ebe85bd1974918838f27408b71ea831a3f1653c425c5ff0f59b3943cb5","receipt_hash":"sha256:518e6f24a21b966255a60dc5dfb7913dbe5f5a3b9bb75504cd8d76397d3ebe18","signer":"ed25519:bench-node-01","signature":"ca879aeb6058658b7788cfe5a9271f009f1ac5e9d7d218ed6bc8edce88f8e1438a20e76fd2126db7822ee6e8b75e470b2ac249d037baa0bb6904207f80647408"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f1a4cd505ada38d7616c885c914f779e1ccfe6a3c43d9e1126badb79340d8df1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ee758a6881e98d0ade331c7e8dfde55cc7269a431806803d356bcc6eb9d5ab8c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.477326150588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.302888e-02","shared_alloc_j":"1.434296e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ee758a6881e98d0ade331c7e8dfde55cc7269a431806803d356bcc6eb9d5ab8c","served_from_record":false,"record_id":"r107","record_hash":"sha256:77571ea5c92a30d88122fbb2a87c2cf33b1c2b8e801ba35a330138d80bbee952","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94594},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.800388e+01"},"chain":{"prev_hash":"sha256:518e6f24a21b966255a60dc5dfb7913dbe5f5a3b9bb75504cd8d76397d3ebe18","receipt_hash":"sha256:ed479039a435eac24f0c439cf5f5fd83e46a5f8475d27b2c258524c1f5471918","signer":"ed25519:bench-node-01","signature":"cd7c6f1943cecdd6e9059ed526e3d7c709d67923be617ca21bc21569e2497398b157e24ef90022bddddf2636c5014798c3be89e02d5e9e6b26b37e7f23e9130d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:24596189eefa3b8061aa353b2814f8b0b64e2c6e0c9f019db11cadfaca7a0715","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:89d945088318077d9adfa27011c408370594902bdc04f815e39284b8a7e08d5e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.467522670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.592481e-01","shared_alloc_j":"5.308271e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:89d945088318077d9adfa27011c408370594902bdc04f815e39284b8a7e08d5e","served_from_record":false,"record_id":"r108","record_hash":"sha256:a9cfe644d0d2a4924809b9af0c0380774cb575f7c619ddc01d32c4551c7047fa","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94683},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857219e+01"},"chain":{"prev_hash":"sha256:ed479039a435eac24f0c439cf5f5fd83e46a5f8475d27b2c258524c1f5471918","receipt_hash":"sha256:af84fe3add202da93b07623a7dafc83e4e0f391803bcbaf889737f7818fb5a85","signer":"ed25519:bench-node-01","signature":"22080253f8329bce9ae0c2f7ee43001790517331ad6da4baf9fd7621516193c53d82e3bfda7a4deb2f36674a840bfa580fbc5d9a812653f1300541ebfcf8ce00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ee9038cb4410e17875f15d021c2ee224ddbd373c1f6feb2a902c2d3f59eaf73f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:aecc00f40acfd5e31b4c34fab60b8afce96daadbfa7765a3a8bde8aaa6bc8981","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"6.145881770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.790062e-01","shared_alloc_j":"5.966872e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:aecc00f40acfd5e31b4c34fab60b8afce96daadbfa7765a3a8bde8aaa6bc8981","served_from_record":false,"record_id":"r109","record_hash":"sha256:b8f1a5ec110373dd7284ed864c4a7369da6faed9b4e69e92383014b23de4455c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94782},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.862298e+01"},"chain":{"prev_hash":"sha256:af84fe3add202da93b07623a7dafc83e4e0f391803bcbaf889737f7818fb5a85","receipt_hash":"sha256:5da3309c3781d5edb1aa744e31dd3dae950ef2e5a85fc399394b6899a0ea141e","signer":"ed25519:bench-node-01","signature":"059e9f80dbf78a83e897236e00c217a1ddbea4931e737f89f6b25586b7b0dd42fd7f4e5a12a5839b4a401a697ed354b6bc5c4c024f2d0f23d0e50a5ecdba6a08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:05637a6deb636642845b2c32c687bb567dfd01139c42cff520da58f78178b66b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.286307710588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.659144e-02","shared_alloc_j":"2.219715e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","served_from_record":false,"record_id":"r110","record_hash":"sha256:f6dd6a74403115e1c6321158ee0e6cc71d2baddb71cdaf06b97875ebcdd7c920","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94819},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.819353e+01"},"chain":{"prev_hash":"sha256:5da3309c3781d5edb1aa744e31dd3dae950ef2e5a85fc399394b6899a0ea141e","receipt_hash":"sha256:c173bf8b8605ba8bd01f7b4c3d83abceb1d85f78eae0f786f3ce9f2eeb6abb82","signer":"ed25519:bench-node-01","signature":"c2d315db5937ce69a808a5958b812a1978ad3918093fa0457fec2b3bb877623903f7d7018be57b0985bbe5e843e43617637adab208e6a500a757a9a792605e0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ddbb69b01e8d37c343b5ced74e71d87cf339462baad7ccce3358ac405dfbf053","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4989e6fd9d5b4a543eca9f0afbdce0f6043a8a567826de22f9d1d6cdf9c96ba3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.810268960588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.185239e-02","shared_alloc_j":"2.728413e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4989e6fd9d5b4a543eca9f0afbdce0f6043a8a567826de22f9d1d6cdf9c96ba3","served_from_record":false,"record_id":"r111","record_hash":"sha256:d8bfa89db54a7cb2b693911af839302ff4d4df5f5af9fe8701008caf6fab5fbb","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94865},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828315e+01"},"chain":{"prev_hash":"sha256:c173bf8b8605ba8bd01f7b4c3d83abceb1d85f78eae0f786f3ce9f2eeb6abb82","receipt_hash":"sha256:63be9a1fe9228d1f0ff863df9bc847efac332ba1b1b24733b776cf6d3eba39b2","signer":"ed25519:bench-node-01","signature":"8aadad8c07a1a86151b9a62454d192b1b2b38850c083b3e890fc0add267b53e18d410de19c8046563ca5a5ddbcfff53be3bc14eadedfa8018216e107c6b3fe0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c758e239f79493707c4095588cd2aee3932a40cb812fbc73aeb6e30ddabdf5fb","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:6b4490d57878c284cca57315f4304f2b4835d387d5d5db8a92ab2484c9fa0431","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.124572870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.492593e-01","shared_alloc_j":"4.975310e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6b4490d57878c284cca57315f4304f2b4835d387d5d5db8a92ab2484c9fa0431","served_from_record":false,"record_id":"r112","record_hash":"sha256:cd4491456bb360c3a6922f8481ca63bb66a8a69256e11f24857c42c8ad8a6c9e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94948},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.854406e+01"},"chain":{"prev_hash":"sha256:63be9a1fe9228d1f0ff863df9bc847efac332ba1b1b24733b776cf6d3eba39b2","receipt_hash":"sha256:779e598ed5673ff3ab6fc7a1040f7002561276a1a52214c4544bdbfa710e45c6","signer":"ed25519:bench-node-01","signature":"d052300c7b311f98ea206ab2a3f4b268b318cca0804743cf0ec13cf8717c773682d313eb7e3a11c57ad6a5f19fea2df77713f8d6970564257113c3690ec3cd0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:404033d6cece331424a2b4c355c6ef4bb2b2d6143e3ff1e8a8d171cf497fe19d","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.068597080588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.937651e-02","shared_alloc_j":"2.979217e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":false,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.832134e+01"},"chain":{"prev_hash":"sha256:779e598ed5673ff3ab6fc7a1040f7002561276a1a52214c4544bdbfa710e45c6","receipt_hash":"sha256:cff101eb866c01232b60a40d981a70576d022dff851f6ed2538d4b7b8126fee2","signer":"ed25519:bench-node-01","signature":"00df272d1ae1854a7db78f845560fe4fae462bb2bf8dae50bd974ea08087e71fb3cc9b17408e33f20bff7e1dfd21216c09b26d5375d9d436aef9b3f8cd952903"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:920ae4ed1bb7458b9243adf4d904f3b9d76400f7d8c2b86479238d617c0b5e1b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.587734770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.627495e-01","shared_alloc_j":"5.424984e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","served_from_record":false,"record_id":"r114","record_hash":"sha256:11b74bcd9d0099b86cba50d647a39fde7bbd69fff8ab977726c7de08af14d90d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95088},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858164e+01"},"chain":{"prev_hash":"sha256:cff101eb866c01232b60a40d981a70576d022dff851f6ed2538d4b7b8126fee2","receipt_hash":"sha256:5d4353a864e23189b56064057501845c3b2b3db7e160081d58fb4c408009267d","signer":"ed25519:bench-node-01","signature":"3ef0aedb76c004452b7e7f73b1e84171ad3caf387fc850fb45c38281966b37e47dde38b1658fff1880564f4254b754ef26962c2908aa5afeb485419967143c0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:03fa3227775322a5b0b837a9ff2818748311617189719f2e971c87f07f95f7b8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:cdac90b356105bbfc2ec1d2b6f50d290b09c8a4ff2cd746ce6c64fa30a02d707","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.704321470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.661452e-01","shared_alloc_j":"5.538175e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cdac90b356105bbfc2ec1d2b6f50d290b09c8a4ff2cd746ce6c64fa30a02d707","served_from_record":false,"record_id":"r115","record_hash":"sha256:c62537567e03c8a763bc87285d422000262f517b16685c29b27681c136f63680","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95180},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859060e+01"},"chain":{"prev_hash":"sha256:5d4353a864e23189b56064057501845c3b2b3db7e160081d58fb4c408009267d","receipt_hash":"sha256:5efeb3df4d1b8210b86813f78854e5da79c82ed85b0e3a313b77f7fa93473cba","signer":"ed25519:bench-node-01","signature":"8c247e613ed384a86d7a5d5f9913e729c076a4cb9ead39c99f9885c3ee06dd5cbc8a319079238a6cbc37b3b5119a8c1b497eee67dfc8c49ba54e0ce5838ecf0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f21cfc73729608c6197fa19917124b787f3d634cbb3fc4b1f9d9b2f7d08e3fc6","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9840140a39c47ebfcdda27e664a72009daffa1d975d005450a100350849daa10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.877794270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.469300e-02","shared_alloc_j":"1.823100e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9840140a39c47ebfcdda27e664a72009daffa1d975d005450a100350849daa10","served_from_record":false,"record_id":"r116","record_hash":"sha256:cae152c7d4ea4f178ff00a0ff86fd15535bff763a0dee1b34393c0e8844e4431","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95210},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810805e+01"},"chain":{"prev_hash":"sha256:5efeb3df4d1b8210b86813f78854e5da79c82ed85b0e3a313b77f7fa93473cba","receipt_hash":"sha256:74ef96501408aa1b5e19fabd535873e47cdeff75a62a6a924a33494a0ef5cc7a","signer":"ed25519:bench-node-01","signature":"93070e133c426f55537589e3e806faad4b82a8ccb50417bb3e7e1d5866183571b6f8c9bda38c5e54939818fc376f5b1cadf396243f5f5988a206c7c0fc351c03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0190a6eba978c30bb74dd16f49e159f8984f25d06a16907abb3b002b26ee29fa","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.177974380588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.343611e-02","shared_alloc_j":"2.114537e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","served_from_record":true,"record_id":"r110","record_hash":"sha256:f6dd6a74403115e1c6321158ee0e6cc71d2baddb71cdaf06b97875ebcdd7c920","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":94819},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.817245e+01"},"chain":{"prev_hash":"sha256:74ef96501408aa1b5e19fabd535873e47cdeff75a62a6a924a33494a0ef5cc7a","receipt_hash":"sha256:6e189435506a0f25b7a5fa92a67a1e8d68b8d638f72250a240070e1c7d1e351a","signer":"ed25519:bench-node-01","signature":"c36213453244fcfe1b77f2421bea4952621eef629eb842ed74157a090430a228064615d6ed7b4abb69fee9d282533d042439eafe0d453568c4fae22a52f14e0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ac7dfa79934786a2ec13340920bf7c321fed3dfe883609609c34ad36a29210f5","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4bacccbd030089bf80d971373b0c6e1988aa64c65713385608eff33f6b6c3fa1","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"6.161324470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.794559e-01","shared_alloc_j":"5.981865e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4bacccbd030089bf80d971373b0c6e1988aa64c65713385608eff33f6b6c3fa1","served_from_record":false,"record_id":"r117","record_hash":"sha256:a2a58e4fc14af72c8ba522771efd92b053cef9f2c23c65d6ace3e833c366ba0f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95345},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.862407e+01"},"chain":{"prev_hash":"sha256:6e189435506a0f25b7a5fa92a67a1e8d68b8d638f72250a240070e1c7d1e351a","receipt_hash":"sha256:1644b10e3a008d49608b0b344f2feabf1115fa995fddf835de6dbbc85dc93824","signer":"ed25519:bench-node-01","signature":"2200d21a0361b5cad50c0478ba79556d3516ea63976adb9fba3d3f772b7f630ea9d44ce5589423bc51ae5eaeb18bc5c1c071ef0f1715f967a5fb30eaa5053007"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:23fd68897c06ac30ab34372a26b7f21ae61e47738f591d994d64b53af68085d2","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:6b9150cfbd8233226dad54e0c15876c5b819e8d9aff9a0c429350e52edb80cd5","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.743164250588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.077168e-02","shared_alloc_j":"1.692389e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6b9150cfbd8233226dad54e0c15876c5b819e8d9aff9a0c429350e52edb80cd5","served_from_record":false,"record_id":"r118","record_hash":"sha256:2c020a77fe4fc20b037e754251c6e89ad9270b5fc37be61f416f735022799a4c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95373},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.807574e+01"},"chain":{"prev_hash":"sha256:1644b10e3a008d49608b0b344f2feabf1115fa995fddf835de6dbbc85dc93824","receipt_hash":"sha256:c05cfb65844951d42d6cf3c6b9f50b1519a3f62aa2fd2fe0b5b4a46e38aa8239","signer":"ed25519:bench-node-01","signature":"7211e6fee386dacf1c80fc38c7252c44ab007216a3a82b78c584776171252ea1b8874bb8fdbcf3198637ec15bd2986ea29c1aa21d5de91e2dd62727de2e64104"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3416b525cd91c40ccb2723b3765402ea3f59352cd79699b2bc6cb5d32e69a764","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c5acc45aa021fd76b694dadbc084a3aa9a1107f5957329ada1989fd9a13fd849","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.870503920588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.448065e-02","shared_alloc_j":"1.816022e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c5acc45aa021fd76b694dadbc084a3aa9a1107f5957329ada1989fd9a13fd849","served_from_record":false,"record_id":"r119","record_hash":"sha256:6b7084145defec11a27bbed72264c0f691eb1c3a8766ba9ffc91fdae40296056","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95404},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810636e+01"},"chain":{"prev_hash":"sha256:c05cfb65844951d42d6cf3c6b9f50b1519a3f62aa2fd2fe0b5b4a46e38aa8239","receipt_hash":"sha256:1fe9097be2dde0e372a206f09a5afea1ef03d173af92d550b469e7451e9b84ea","signer":"ed25519:bench-node-01","signature":"f6b11c913acc643852475d831727ff92d657d9a7e80606f6c004dea819ed6d15d7b2d3c91f18b7de3d07a5bc172e3c88bac0b10279d9368363a4af6394ac1d0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:82085539e4a7dcad7907eb1ad5b3dbbfb908ea5cfc46e8d7cfc0c3490fb309b8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.433089370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.291191e-01","shared_alloc_j":"4.303969e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","served_from_record":true,"record_id":"r36","record_hash":"sha256:55a2b8e716a8eb9fda50c9c4ad876cf5d024f9ae99c0be4799b8f2121d94a546","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":88830},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.848111e+01"},"chain":{"prev_hash":"sha256:1fe9097be2dde0e372a206f09a5afea1ef03d173af92d550b469e7451e9b84ea","receipt_hash":"sha256:d0f218e6dedb5ae66ba3728c117b24e808dce486ca43455df874b4693981678b","signer":"ed25519:bench-node-01","signature":"1999ed1eac4840becdf4d80a8bdb971ac61dd71f2d45eba4de661cb62f873ead8bdff005367fbd8ad66c6efc49a4f86915f57082db1ec6f24c43d15e4c5c8509"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:067c8cd6bd6edab8743cdf74c41fef4f6015b8701776d108544459f0b97b889c","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5f91097cca77d5e974cab038a9e8b2caca452bee5ee33d9a3521ac39eff904a5","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.506501150588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.387858e-02","shared_alloc_j":"1.462619e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5f91097cca77d5e974cab038a9e8b2caca452bee5ee33d9a3521ac39eff904a5","served_from_record":false,"record_id":"r120","record_hash":"sha256:26334d4bf554a3017e915c24887f5ae1279d450f9c1db25a77d7ac4bafb3ab64","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95500},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.801237e+01"},"chain":{"prev_hash":"sha256:d0f218e6dedb5ae66ba3728c117b24e808dce486ca43455df874b4693981678b","receipt_hash":"sha256:720eb9403e8b7ffcc96ce7f59706b3a90167c4faea270cb36de429b41e29aefb","signer":"ed25519:bench-node-01","signature":"3f1e2ed3ffc296dea6c4d22c5738ed1bebb454f2534777ac9966827c7fe7f988d2773993c8da395f3a53b6bad643041005c58c20b745cc219e77347b1c996303"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b4f7ae4ff250294fc7455cbe62eacecbf637ff45bbf56904a346981f57ec5942","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.374695580588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.829201e-02","shared_alloc_j":"3.276400e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","served_from_record":true,"record_id":"r90","record_hash":"sha256:fbfb7b2e0c35a608c84403c695970a425790cfac9e71c7f2b3ab9eecb37cfc58","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":93177},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.836263e+01"},"chain":{"prev_hash":"sha256:720eb9403e8b7ffcc96ce7f59706b3a90167c4faea270cb36de429b41e29aefb","receipt_hash":"sha256:1ca48b7f6dac88920a331971029285bb0e63cc0004dcb11b996ccf1a8c598404","signer":"ed25519:bench-node-01","signature":"cf97d3c772cab40d6bcbc33e19d9a02e0511fc1216e52bd7bfee7ba22732ec6683a65564e13cb2d963e1819a9ee396779a7c7938cc0b2cf1583dbc305952ec09"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d908b6a0641e55b5e348ab059851f8d1782aa175ab95f0a2ae507919ca2bb686","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.993129970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.163047e-01","shared_alloc_j":"3.876824e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","served_from_record":false,"record_id":"r121","record_hash":"sha256:68c00c9152f36db8ef49fff21c928ac679e7a92a748171b7d820e16b09fa9a05","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95619},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843571e+01"},"chain":{"prev_hash":"sha256:1ca48b7f6dac88920a331971029285bb0e63cc0004dcb11b996ccf1a8c598404","receipt_hash":"sha256:ca8f6f47eea128900befe47d3cd11eaae6f7d4db091c22535e41e66ef0db32d4","signer":"ed25519:bench-node-01","signature":"9e508a719cde3b24e345ebd552d922b4c7a974fbc2a6eb3eb7fee7e48e530b289378f0fc7b3687194557a33d4a845778f4b7212571972b45625da359a3b4ba0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:adfaa71c3a5d296789196628833fc4bfa245b89eefec538631d912e7b9bc9c47","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.542265580588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.492031e-02","shared_alloc_j":"1.497344e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":13,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.802256e+01"},"chain":{"prev_hash":"sha256:ca8f6f47eea128900befe47d3cd11eaae6f7d4db091c22535e41e66ef0db32d4","receipt_hash":"sha256:e6893d1c2f346e423bda386cd7e87e44c19a2cf759e7c292c8568f9178dac8d2","signer":"ed25519:bench-node-01","signature":"b0ede22cc916080a06b85f305fa9b8774d865251a3e60f50f299dc98aea160cd5fb851052a3730345b2a0cf2937eda7284661dbb634bc624cffd804a0bdbac0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7c35b2effdd07515b0ab5c1bc3ff72ac8f43f8dfb3db34209e13bd95df043171","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:302c7be4003ea0a217fb6534c49ada5bd8b011724c713672aaf7c5e4bdb42d69","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.060985770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.765335e-01","shared_alloc_j":"5.884451e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:302c7be4003ea0a217fb6534c49ada5bd8b011724c713672aaf7c5e4bdb42d69","served_from_record":false,"record_id":"r122","record_hash":"sha256:9ac3a5bfa31bc2d23bd91ee39dce78613d4d0c9378a264c1c2db444a00d60f04","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95742},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861694e+01"},"chain":{"prev_hash":"sha256:e6893d1c2f346e423bda386cd7e87e44c19a2cf759e7c292c8568f9178dac8d2","receipt_hash":"sha256:74d5a8d6975a348bee9d5accee97ac7c0ab6250f32fb5f53a80acb7499992f2e","signer":"ed25519:bench-node-01","signature":"38ae604f342330fad65368dde6343cfa9337f66447ad7faf85bb3e53e4ae65c5ce42d8f3cec7bd209553342db58c6a6e1bfc2dac5faa0e93ad03ab8f7f80110a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f7c8f4880e0b9c6f813a4f43bd2dcd22ab7fdc3fc13b08d8fc4cedadb9b01111","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:e0b57d9c257ac8c9907ed3e56a0c407357f932bf26e1660d0d88a96cc06b6aa5","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.066074070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.475555e-01","shared_alloc_j":"4.918515e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e0b57d9c257ac8c9907ed3e56a0c407357f932bf26e1660d0d88a96cc06b6aa5","served_from_record":false,"record_id":"r123","record_hash":"sha256:a3ac743663700a41fae36cf62c8a17ebc0f28a4b8d5ec23c4f7061f777ba7db6","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95824},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853907e+01"},"chain":{"prev_hash":"sha256:74d5a8d6975a348bee9d5accee97ac7c0ab6250f32fb5f53a80acb7499992f2e","receipt_hash":"sha256:eac8e6d3f06632d238a3886b839cb7e02f77c9e90df9fef4b6d5b5bb4b2c2ae5","signer":"ed25519:bench-node-01","signature":"cc46a3a4b1719290c8c590d3781b06d2ad5e20ae8ea8f760d05562822ca6721d462e5ab7567ecf36f6c46c262c05ae74c9af2d912d135d2df240a5616312ba0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:89d7121f788e360a284f28a8c7f4127625b686dc7903ab59f1d34dbf5e6cb42b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:88c439bb9d426fb9727a854109492c31b2cbe45e6061fb213c1131f86d0a5280","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.868486150588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.442188e-02","shared_alloc_j":"1.814063e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:88c439bb9d426fb9727a854109492c31b2cbe45e6061fb213c1131f86d0a5280","served_from_record":false,"record_id":"r124","record_hash":"sha256:8810d4c5f141497c4aba7d3a9b00ca77492003fe0e235e6d347a73b851966316","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95854},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810589e+01"},"chain":{"prev_hash":"sha256:eac8e6d3f06632d238a3886b839cb7e02f77c9e90df9fef4b6d5b5bb4b2c2ae5","receipt_hash":"sha256:ac491506f757f7914173a1962a8b960e1989afae70cb29ccb6c52ddef55c82fd","signer":"ed25519:bench-node-01","signature":"c06c5db8eadf68923eb5c04348eb8548eff56e73a2e9c9db6f74b08cb76e9e8bd3b934911060540ca5106798d1ca56a6858a33e0ff0e48b1317cadf29ea88202"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1089074239cf4fa878828fcde18a277e8c10f8afb8c23ba355413fcbc9559545","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.637015970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.350587e-01","shared_alloc_j":"4.501956e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850064e+01"},"chain":{"prev_hash":"sha256:ac491506f757f7914173a1962a8b960e1989afae70cb29ccb6c52ddef55c82fd","receipt_hash":"sha256:ae7ec1cebda494fc6180e0e2261b7c3d1f02ea2db414cabb0d81f8fd563c9ed4","signer":"ed25519:bench-node-01","signature":"efac0c4ab337a9e4ba86c1c7782df24f868c954d1c863d11d11cab0787fdbc7a2e7d4ecd6d07c31c9b8a8b3e510a7143b33c1205deed3dbe233a1c8cc4779d00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c710a40142fb43889c280413ee093637ed1037d238697ba621f662c03ee8415d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:0267ad62d64134b8622d4fb07cdbe888137deaca0fdee61e6b66d8bcb9076eaa","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.260250170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.240849e-01","shared_alloc_j":"4.136164e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0267ad62d64134b8622d4fb07cdbe888137deaca0fdee61e6b66d8bcb9076eaa","served_from_record":true,"record_id":"r44","record_hash":"sha256:2dc81090fa0017c427246a792fbc24bb499645f650fefb1ca4f4c43edfcfc62c","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":89635},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846383e+01"},"chain":{"prev_hash":"sha256:ae7ec1cebda494fc6180e0e2261b7c3d1f02ea2db414cabb0d81f8fd563c9ed4","receipt_hash":"sha256:078fef21fe5d728704ebc2b4926f485ff165d084fbda710c785542ebfae62e3f","signer":"ed25519:bench-node-01","signature":"0b711cc9d534dd9e18e6149a1c997e4821e1c779ed86281b8708318248291522fec5a9bcc31c3fed34d195f061e265d3c1cc55fff41c0a2905dd8274bf20a10a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b130cf7842a19b18319b9add6bb0dc5060ef9ad216a6355f26b990a5830ac769","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.780741570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.683710e-01","shared_alloc_j":"5.612367e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","served_from_record":true,"record_id":"r90","record_hash":"sha256:fbfb7b2e0c35a608c84403c695970a425790cfac9e71c7f2b3ab9eecb37cfc58","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":93177},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859638e+01"},"chain":{"prev_hash":"sha256:078fef21fe5d728704ebc2b4926f485ff165d084fbda710c785542ebfae62e3f","receipt_hash":"sha256:3e1a2e4e22d1617ded30a4ccad8f6d15983a10e99a94658de6f9035ce4a99ab3","signer":"ed25519:bench-node-01","signature":"fbecad1158421a7984974442fdf78264e79ad03f53814d3ff9d06f6836fb5f39a8cc0c05166f548e13fa84118795c41348f7a0b156a19fb6968c9c11bcdca802"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:70bba41c2cf1fc8699b5423e0ade587bd430860cb7fd7c6d3a53bdb3ee252729","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:f1070bc76733cc042f615c8c46f0da8964f7b072195de00defc3becd95ac9c58","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.609363370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.051271e-01","shared_alloc_j":"3.504235e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f1070bc76733cc042f615c8c46f0da8964f7b072195de00defc3becd95ac9c58","served_from_record":true,"record_id":"r26","record_hash":"sha256:6201b83c8fa51bdd9d68fab6860e3a0ac914bf9cbb10d6524751271fc0ec524a","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":87979},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839183e+01"},"chain":{"prev_hash":"sha256:3e1a2e4e22d1617ded30a4ccad8f6d15983a10e99a94658de6f9035ce4a99ab3","receipt_hash":"sha256:a7b1a94c06bc87324f49b040d53f12cb3c3ff1301f79336f38d7de993f547289","signer":"ed25519:bench-node-01","signature":"ab9348a31ed035948e52fcb097a96bf8db66afc15825ba89d50d210d8d0a135f1b6f29bcf67cd917e55d9a7df7ad585fe8ab564806579a7d922ce45307775204"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5ab364e3ed9615c6850625c72c015df04d76bee72dcf295b2a44316cc17526f1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.294868470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.250932e-01","shared_alloc_j":"4.169774e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","served_from_record":true,"record_id":"r121","record_hash":"sha256:68c00c9152f36db8ef49fff21c928ac679e7a92a748171b7d820e16b09fa9a05","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":95619},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846735e+01"},"chain":{"prev_hash":"sha256:a7b1a94c06bc87324f49b040d53f12cb3c3ff1301f79336f38d7de993f547289","receipt_hash":"sha256:d602c20ebc39e7ca64cc353563bc3a8e3c86143542e233a066121e76b44bd8e3","signer":"ed25519:bench-node-01","signature":"e2439b8fa04855e3759b348c5921867dee15ad4e9369cd82ac4ae9aeb13b9977233d19030e1a405d992767fce67f9ed14a8fa4fdd87f168e2e3a2086cf67ad04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:238d48d3630f29cba9043c10e0ee17e5ee7236a1ac855ab91df5533eb7550e72","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:344d3310dbfdbc5554f4e978fbb9c3cab5e5c766c52065d101623da328d5d32f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.069670570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.476603e-01","shared_alloc_j":"4.922009e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:344d3310dbfdbc5554f4e978fbb9c3cab5e5c766c52065d101623da328d5d32f","served_from_record":false,"record_id":"r125","record_hash":"sha256:73f33501edac9805401499a023668668b69810bb94a2b4a0edfb58c0848c0a13","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96302},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853938e+01"},"chain":{"prev_hash":"sha256:d602c20ebc39e7ca64cc353563bc3a8e3c86143542e233a066121e76b44bd8e3","receipt_hash":"sha256:0760142f98cb6b186093eaed11286d73f00c2daae58064ba0c09131135684c6b","signer":"ed25519:bench-node-01","signature":"f7b14a1da6206d471cf84c532d37458f20ed4941a18c7508d11791b0cb83d245085cd7d389164521854cfc0761c69a2b66ee093621874419055a59c12ff18a0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:546fe1708b4c2b5a709ec2259768156278d7806f03ee3ae7676008dc19e1f5c8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9014e65fe138b28393ccb3d8d284ed537952a969e7a21268271f523fa7af84ed","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.944221670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.440064e-01","shared_alloc_j":"4.800214e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9014e65fe138b28393ccb3d8d284ed537952a969e7a21268271f523fa7af84ed","served_from_record":false,"record_id":"r126","record_hash":"sha256:21c082b273e8dd3bf225ba9f6c5875d948da0df81a2224d3b8400cf7a1969a41","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96382},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852850e+01"},"chain":{"prev_hash":"sha256:0760142f98cb6b186093eaed11286d73f00c2daae58064ba0c09131135684c6b","receipt_hash":"sha256:c3f09e34aef0dcf4cd204a9ad0ed2f6b1b58497ba52c9714391764407460f74f","signer":"ed25519:bench-node-01","signature":"7612dfce195726b4d7963ef1a406008c2299eaa931fa833f4fb9ac5edccc85936c214b7f4107003dcfef361f6fa144579cd2fb33605bc61c4cb2275d6719060e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6301fd7b8e61b443cf33b18d5fb3ff5462d5cfb8246c9b2faac5ec03a26f6241","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.690199970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.366077e-01","shared_alloc_j":"4.553591e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","served_from_record":true,"record_id":"r48","record_hash":"sha256:758e76b23b821b7b7abe8ab30701ecd786d85e29d1f10de3aa4cbaab51519c59","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":89972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850559e+01"},"chain":{"prev_hash":"sha256:c3f09e34aef0dcf4cd204a9ad0ed2f6b1b58497ba52c9714391764407460f74f","receipt_hash":"sha256:2821ee5645cc09636ae68ab0cd1da8ce9d960ad29a6993c8737c5b63b10bdb86","signer":"ed25519:bench-node-01","signature":"70aff562752280fb06988317705b6560c6b5842a5130caa67eeb53ccc4d46a76f1ce167e8ae67034dcccb208355a98c70af3739e07b3c6c6bcb85632dfc5690a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:54555a5d767c6fc2369615027a4ae6606131cdfeaac358c4c1db4efb29fdf626","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:000992060ac23f9a6b54bc2803d93971b95cb85a38feeb4e9d3559b2ffba116e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.119823670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.174240e-02","shared_alloc_j":"2.058080e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:000992060ac23f9a6b54bc2803d93971b95cb85a38feeb4e9d3559b2ffba116e","served_from_record":true,"record_id":"r4","record_hash":"sha256:075ab1ff59393c60da8559722711e3fa3b2c44a93c170ee6a918f85a4efabe5f","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":86633},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.816070e+01"},"chain":{"prev_hash":"sha256:2821ee5645cc09636ae68ab0cd1da8ce9d960ad29a6993c8737c5b63b10bdb86","receipt_hash":"sha256:af1df96902c110d48d14c5ba486ddf508ce904612c9d499447a14ebeed1bc127","signer":"ed25519:bench-node-01","signature":"b4522cce952f64bbf6ee3637fcd74f7944ad22a05d8889b42ae7fb5ced7a00b5fad2c1304461c7a5efb7bf65db866f3f9a405245b09aece17006604adbd7a10e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:138c125ff1cdd35346992d9fe8157082984a5c0aad586094187343dc853072cb","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.933153900588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.543163e-02","shared_alloc_j":"2.847721e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","served_from_record":true,"record_id":"r48","record_hash":"sha256:758e76b23b821b7b7abe8ab30701ecd786d85e29d1f10de3aa4cbaab51519c59","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":89972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830173e+01"},"chain":{"prev_hash":"sha256:af1df96902c110d48d14c5ba486ddf508ce904612c9d499447a14ebeed1bc127","receipt_hash":"sha256:2a4ce3e14ef5d07610d35f5818976041e79ce8a9b9364e2abb3ae6b7bc542fb3","signer":"ed25519:bench-node-01","signature":"bd5cf19903bd56ce7d69bbd254ec4131819c7e4b003e6c4fff57cab516a3c0cea855031d142b9f84150fd2d7e0d9b38b43169ee4d2a10f8294ece976fd0de206"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f2bec8e620f5e0576a51f6c4a798e47b3e1554b08f2ec9e00645dffb4c2d3ce3","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:05f17fd121a463594b61b4cdcf207aaa369bbb2761e582ce36c12da3375fc3c3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.957449770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.152655e-01","shared_alloc_j":"3.842183e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:05f17fd121a463594b61b4cdcf207aaa369bbb2761e582ce36c12da3375fc3c3","served_from_record":false,"record_id":"r127","record_hash":"sha256:1e50dbf0ebd87cb9ea72df72adda520521f02f0b407b8a6eda9651b7dc8ee1ed","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96603},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843182e+01"},"chain":{"prev_hash":"sha256:2a4ce3e14ef5d07610d35f5818976041e79ce8a9b9364e2abb3ae6b7bc542fb3","receipt_hash":"sha256:f1fb212491078db394672a89cd9625de02579cb97160989ba6ac5bcaa7d11a99","signer":"ed25519:bench-node-01","signature":"649d2ed5487aacc6bd5713ddf788194a46e79898049a522725125dc527d93a64a4ae83f864789c66164a37e96576780ee148d6f73c3780c4a08032b60d926103"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:710758fb03dcebc66e1258bd309b3e0efc3811f8a33c1b5ecd9c8d09c79f36f7","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:22d862b92bd310f94f74a536a6cc12299c62e5300c99188e9a681064fa11c842","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.774582770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.099392e-01","shared_alloc_j":"3.664640e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:22d862b92bd310f94f74a536a6cc12299c62e5300c99188e9a681064fa11c842","served_from_record":false,"record_id":"r128","record_hash":"sha256:eaa58fea9504d48a0ac9926993328ee3c5c080598ba54964f458828e629429b8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96664},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.841127e+01"},"chain":{"prev_hash":"sha256:f1fb212491078db394672a89cd9625de02579cb97160989ba6ac5bcaa7d11a99","receipt_hash":"sha256:41162542cfc1451bff801be3edc86022eaca94c41d1b6d96e8cf57bf8fe56e03","signer":"ed25519:bench-node-01","signature":"5fdfc3f7cf65d9cf2c6f714ca510b119d99e4891f5ed62ef763cea5ab094ef8d6eeb792d5df6f14d36108f2d1ac561217339b8814fda21807f9fba238b6fac01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f8e34bf3388aafd3c0952bbffe607a315eae889ccd10d52ee53ee311e238d65e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.181214970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.265670e-02","shared_alloc_j":"3.088557e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833699e+01"},"chain":{"prev_hash":"sha256:41162542cfc1451bff801be3edc86022eaca94c41d1b6d96e8cf57bf8fe56e03","receipt_hash":"sha256:5c8d0bb006038b8fd279e8bcfd1bb7a52a28df616ecea762f9532205334286f0","signer":"ed25519:bench-node-01","signature":"a1980007c315e309c2ce90e18540dae496ac4fa15bed419c4cf1c2b85b20122eaf985f09ca68a01defc6cc4ecda21c2b2fbf692884a1a0a3d9834a848391da0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:09bbbc5f0bad49b33d0cdac89df68dcb58602f08e670db6daf0af4df09440f3f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:027206174fe3afe55662ff7e197cef4bcc261b706aae20ce6b70fce316d50652","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.341953480588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.821221e-02","shared_alloc_j":"2.273740e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:027206174fe3afe55662ff7e197cef4bcc261b706aae20ce6b70fce316d50652","served_from_record":false,"record_id":"r129","record_hash":"sha256:3973d0d461d9700f87560bc96f89beeed15a78eb890105429322b237a1944a31","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96754},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820398e+01"},"chain":{"prev_hash":"sha256:5c8d0bb006038b8fd279e8bcfd1bb7a52a28df616ecea762f9532205334286f0","receipt_hash":"sha256:f874a443b0316ed0f737b729262c9ef17281c65b84dad867f4ae242d376c22f6","signer":"ed25519:bench-node-01","signature":"9e129420066eb0ffd52c857a3dc750bab6e2c62c761d8557a0030a6a2a35a0d7a4df7e975d82317f2b2698bcd15e2625e63e74f0d3566c5a4e3eaa19ea15060b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ce08d7a1768fdd1c318bb0e67923afc4a669c063c0672c9d2c158bb86267dfde","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:86bfaf5eec3f3155eb596fba26eb284381cc8e76ceb08cf882275e1d5f13b293","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.056331390588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.989312e-02","shared_alloc_j":"1.996437e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:86bfaf5eec3f3155eb596fba26eb284381cc8e76ceb08cf882275e1d5f13b293","served_from_record":false,"record_id":"r130","record_hash":"sha256:37fe0768c1cc09003bcfc277835e7b0bc6d2bd6cf7d43f51e2861794774b36cf","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96787},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.814749e+01"},"chain":{"prev_hash":"sha256:f874a443b0316ed0f737b729262c9ef17281c65b84dad867f4ae242d376c22f6","receipt_hash":"sha256:2b2d299566ccf43002de7647b551f5d7ac8b9d8f7dc037f3a39f480ba1b46e3e","signer":"ed25519:bench-node-01","signature":"5015b773303103011a9ecffc786ae96ef834da16ce6f3ae741bcef708c86f6fc9bf5443cefaba38ba240538d49eb20bde5acf57a4cd34eea16d4f5fb533b5805"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5d24cf951f4372e4bd6e1b5da04274eae80e810cc40328010f179aa62336d129","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:681cb2a577ff523b7cd6ddb96943d8e946678ec479213c4ae937a17caab6ab20","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.256311470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.239702e-01","shared_alloc_j":"4.132340e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:681cb2a577ff523b7cd6ddb96943d8e946678ec479213c4ae937a17caab6ab20","served_from_record":false,"record_id":"r131","record_hash":"sha256:453ac78ed3d5d6197b0a142bdb15bb4dcefc6b07f068f596579c173fea5425ad","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96856},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846343e+01"},"chain":{"prev_hash":"sha256:2b2d299566ccf43002de7647b551f5d7ac8b9d8f7dc037f3a39f480ba1b46e3e","receipt_hash":"sha256:b893b9b7a2f47f70a4fd1fa36bfc86f9d4b20366bf4bfd7614258c9b98c41153","signer":"ed25519:bench-node-01","signature":"5bbd0a1c301799cf5592e80fdb343539282ce8c19b7120ca5cec1b1e80f502ac725693354eace1d9847563e50c767a04d353a763ece8eb3cf055c441a11adc0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f3bec7c6a1296c42bfcf38e7bc8fa8cfa2e3d62774f15d19746b1e9e4c621725","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:cad30f2c6d0d2fedf44ec59d6ee99ebbbcde9e90ccbdaeccb878fdb153546be7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.223698370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.389410e-02","shared_alloc_j":"3.129803e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cad30f2c6d0d2fedf44ec59d6ee99ebbbcde9e90ccbdaeccb878fdb153546be7","served_from_record":false,"record_id":"r132","record_hash":"sha256:089786c3138124ce2fc63d613bb7ef2f34abbd2827adc8dbc87070b5d46e38f4","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96908},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834275e+01"},"chain":{"prev_hash":"sha256:b893b9b7a2f47f70a4fd1fa36bfc86f9d4b20366bf4bfd7614258c9b98c41153","receipt_hash":"sha256:2584e2b77e37141696b2772b7e6b075ca4b25bc0ee075db154367491a908a922","signer":"ed25519:bench-node-01","signature":"44d5454849f7c839337b6d43c5009f534af627339094b161325a2949bc5556fa569a97ab4e5aceb1d61200e75eb868f22fe54d76eadb7720cb41c7db11014f0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c161add882eb379d18a816e6eea62196480ead9165d1ae3683f798b203c87150","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:04e5a26940894add6708ef236b673662643062f46a51261d7761552a16d9d3f3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.431442970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.081870e-02","shared_alloc_j":"2.360623e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:04e5a26940894add6708ef236b673662643062f46a51261d7761552a16d9d3f3","served_from_record":false,"record_id":"r133","record_hash":"sha256:a9389697697389d73dad1887641596c51077b6e1c7d3f0a261ab71de4aa95e88","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96947},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822026e+01"},"chain":{"prev_hash":"sha256:2584e2b77e37141696b2772b7e6b075ca4b25bc0ee075db154367491a908a922","receipt_hash":"sha256:3bb2007f6f1e981c430e16cf27c7a9b7193065aa1b2dd64cdd7497ad769152a4","signer":"ed25519:bench-node-01","signature":"7e5a9fd81c5c529b103db2a1a4c0c86c6728f7d708f0a1b71dd9b6e2bb7aa33adb322e0876b88fa27cb16f8e717204ce28b8d1d4163600224fd6a1be1daffb0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7f67235eda8d38c4d2d1c78d98167482a2ae4a6b7401bf85ce53cfe395c68d19","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.272358200588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"3.705893e-02","shared_alloc_j":"1.235298e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":14,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.793901e+01"},"chain":{"prev_hash":"sha256:3bb2007f6f1e981c430e16cf27c7a9b7193065aa1b2dd64cdd7497ad769152a4","receipt_hash":"sha256:5f7b68f43266a42f7486fc983c4eb531ea4adbf1df0bf366bd6449a1c2352d78","signer":"ed25519:bench-node-01","signature":"299e9af2f92cd17f5e332ca76f289dda18fe1fe92f3c2a4c3cf463bdfab54cae7d694e849cb8886deba528261aee2916c2d899f57438d657b583ac95ca101501"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a9f3052a50bbdd2d215ad0fefbb5b5196b13abdf8b2e22d2702228e5e3ca7e84","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:03edf452ec745a0b3af013d4ab01c43d27b32aa4bc66d762434da2276860728b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.835831970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.408494e-01","shared_alloc_j":"4.694979e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:03edf452ec745a0b3af013d4ab01c43d27b32aa4bc66d762434da2276860728b","served_from_record":false,"record_id":"r134","record_hash":"sha256:1eaf869c648c717dbe12a425c2b4c4f73b3164632d0832f313965d75c85131a2","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97046},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851887e+01"},"chain":{"prev_hash":"sha256:5f7b68f43266a42f7486fc983c4eb531ea4adbf1df0bf366bd6449a1c2352d78","receipt_hash":"sha256:fded0e023fbf8efa11f688504558db54094031cb0208d6a630c78b2bb49bc9d0","signer":"ed25519:bench-node-01","signature":"35a4cea7bcfdade61a09fae03fef18346bd8d0463b994b6ecd4d47b605f4843646c1f17ba52a8dfdb70b8eaa43e416c3e1e395803020a4a9df84501cfd03ef01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9e45bc0f795315669e4a4423d2f8de5b3e0bed436acff9d1b27f73d654a3a6f3","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:cdcf8e35c696111fe372178b7a84c92bcc0a341f50b1b9945d5272081b4a00a3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.797145370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.688488e-01","shared_alloc_j":"5.628293e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cdcf8e35c696111fe372178b7a84c92bcc0a341f50b1b9945d5272081b4a00a3","served_from_record":false,"record_id":"r135","record_hash":"sha256:85cf70bde7b030469e1b64d167e864ff94e5633a81fb5aff67ce6dc9ac3de15f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97140},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859761e+01"},"chain":{"prev_hash":"sha256:fded0e023fbf8efa11f688504558db54094031cb0208d6a630c78b2bb49bc9d0","receipt_hash":"sha256:744f01bf7002bf1c884a5f77c69b0d958e1337db7072a48f1970c9eeab76ec6c","signer":"ed25519:bench-node-01","signature":"200e8497c794285556ba4d8464fbcd85772841af5bc8bd4079f001f0a27a652026a2c9d5fc11f003785cc71fa620ffe8a7f34ea28176f4382ff82edf9f007500"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d8da01a4de8f780771b523fc3fbc47366932199406808c0fd1bd6de01ba848c1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.401590470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.994920e-02","shared_alloc_j":"2.331640e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","served_from_record":true,"record_id":"r16","record_hash":"sha256:3227d5f5cdb47b0c636c60fce42fed733f0e84ce2c21552a8ea3164c96c9d710","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":87438},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821490e+01"},"chain":{"prev_hash":"sha256:744f01bf7002bf1c884a5f77c69b0d958e1337db7072a48f1970c9eeab76ec6c","receipt_hash":"sha256:f154675a5a2c75faff731d1e48741ea419cc114ed8a5b054fe428951171e78f4","signer":"ed25519:bench-node-01","signature":"dfeeda2c322bb0b63e8c043acd7f212b6ffcfa54444e1f15e44a1949b51c37a2c4445a5bc3a78e4cb15319d519029054b69353add15fcd73000f04bc6b079d0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ee9b5cd5e9af501a465ee23f2f6713c54dc4c416595aab2ba059f64e4894a15e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.876957900588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.466863e-02","shared_alloc_j":"1.822288e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","served_from_record":true,"record_id":"r114","record_hash":"sha256:11b74bcd9d0099b86cba50d647a39fde7bbd69fff8ab977726c7de08af14d90d","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":95088},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810785e+01"},"chain":{"prev_hash":"sha256:f154675a5a2c75faff731d1e48741ea419cc114ed8a5b054fe428951171e78f4","receipt_hash":"sha256:f36f4578619f905640d3422d70cd287b0d8d623fc5022082bd1cfa9b656e7fbd","signer":"ed25519:bench-node-01","signature":"5a600cf318db0abf1ca8ee8ae19c59a42b661699d2f03997c3320e2660c471a37e721e04ce64f778beb8b430b814f5898fee03a6050af132d026bdc887053300"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6bbce160b4108a29ac0ba3eee675aec361c72c6812fc15cfec9ea390f8aa6c1f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:56f31403b6c262597065ff99fdabb3aa51f06ce20ce0c64fd757c16c6e472db8","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.465685770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.009422e-01","shared_alloc_j":"3.364740e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:56f31403b6c262597065ff99fdabb3aa51f06ce20ce0c64fd757c16c6e472db8","served_from_record":false,"record_id":"r136","record_hash":"sha256:0318622c533e421c87be0377c00731d4271381f35987fd09e34cd5b39d2e5820","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97265},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.837419e+01"},"chain":{"prev_hash":"sha256:f36f4578619f905640d3422d70cd287b0d8d623fc5022082bd1cfa9b656e7fbd","receipt_hash":"sha256:c064f8b09f11aed15cea7affe02d3ec0f849cfb340c609b7737747202883bb29","signer":"ed25519:bench-node-01","signature":"1b1b141b74d5f59358223af9fef7e9e91a61b3de5b322472b6e7213268d76997f7d9a39496ce4ba95e6215c904409f64824b9fd43b6f4cf6162ecfcd57e30509"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5d0eb4e8bb0802552939cb8d0eecb027e890e020f9ebe38629f1fff7c329991a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:6325a64e3e9f740e0d177e5e9f7b218e54860498e001b826bb4e3639a52aaaa5","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.867156680588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.438311e-02","shared_alloc_j":"1.812770e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6325a64e3e9f740e0d177e5e9f7b218e54860498e001b826bb4e3639a52aaaa5","served_from_record":false,"record_id":"r137","record_hash":"sha256:e55df1f2bfa366faf645c4ab431709a7e106a7dc746b0c10e77cee9e554ba116","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97296},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810558e+01"},"chain":{"prev_hash":"sha256:c064f8b09f11aed15cea7affe02d3ec0f849cfb340c609b7737747202883bb29","receipt_hash":"sha256:def3ce0e8b12ff251f22fe270c3e8265aeefb1ccf28ecd1c37d61e16557485b1","signer":"ed25519:bench-node-01","signature":"fd2b8a96a25ee8a5b497234958af38a5aae061ba3aeef85b0239d2d9a893ac163095cdaa1e1c1692ba2fb058c810d50efc8b547951cbbead9f5835fd0339b509"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:18a45e705a7097076de6f206b3ef80002781b8d0db63b81a1beed83620c512f2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:142b07d7db8dea0bfc67c9f5eba2082dd565d65695dc5376e1da98af2000ce32","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.744887070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.673268e-01","shared_alloc_j":"5.577559e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:142b07d7db8dea0bfc67c9f5eba2082dd565d65695dc5376e1da98af2000ce32","served_from_record":false,"record_id":"r138","record_hash":"sha256:b8568107518bc92108538b5ebd929fe1e56291edc5730e993dcfd7e8e1d3bc7d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97389},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859368e+01"},"chain":{"prev_hash":"sha256:def3ce0e8b12ff251f22fe270c3e8265aeefb1ccf28ecd1c37d61e16557485b1","receipt_hash":"sha256:9f07332c548d369cfc0ec30c1bdbfbf74930846a5a2628fdb30f5232441f73e3","signer":"ed25519:bench-node-01","signature":"f0468fdc4c5ef2fa7cfbb47815c54ea0658f390b593d346309b6297d26f1e423737f384d09f4bfe7d896d65a732b55962ab1b500dee6cf63b5aa87edd5ad5409"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:771c1de53ef279a05c983adaa54715243e36be8470c1ee7bf40d2dba41af8367","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:6f37d45f68c8e63262b6f5238005c8e712494dcf15281951ed02eb9edcbdd749","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.536379970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.612537e-01","shared_alloc_j":"5.375125e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6f37d45f68c8e63262b6f5238005c8e712494dcf15281951ed02eb9edcbdd749","served_from_record":false,"record_id":"r139","record_hash":"sha256:454ce54f131e6c17e307228a92563feae01df8d8774033129589310b7a521a49","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97478},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857763e+01"},"chain":{"prev_hash":"sha256:9f07332c548d369cfc0ec30c1bdbfbf74930846a5a2628fdb30f5232441f73e3","receipt_hash":"sha256:cf218edb06c429725b7b6875d632526fe2fd645df36df8f9d513e0dd0d0718a5","signer":"ed25519:bench-node-01","signature":"fac865013d25cd4394d8f9e1603f2fe9c15e4f5b661c5337d6521289e2f6d0d1a9917fd4f0617f4630d55d3a5f1d19eaa41b969bd8b4bcfcb768c000dcd00a06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:29566bd726c1f6cda2e1a2c8e6525d764f2dcd0d3aa8de2effb9f9d60cb16bad","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.626844970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.638887e-01","shared_alloc_j":"5.462955e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","served_from_record":false,"record_id":"r140","record_hash":"sha256:9f4054b5d15ac16ce0b79b780e5d8bf8b428262e4fd2a332ec366dce24f89c41","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97569},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858466e+01"},"chain":{"prev_hash":"sha256:cf218edb06c429725b7b6875d632526fe2fd645df36df8f9d513e0dd0d0718a5","receipt_hash":"sha256:07594058e8c78eb2c9793dcafbc29f506b020126041bc04c7c27a0d042215b32","signer":"ed25519:bench-node-01","signature":"d8904857925d10a12128920fa9bea7cf536ca61392ac52a9c4e0558363f14556b12cef74c6e5c36e9a5de14e1b60516b4ad66b53ecfa5f46b2aad352c1fa3a0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:eb292d10e44281a4afc5e886063b9f48c57af9ba5b2942e4954e493f399c8776","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:d3980a53696b36e807ddd7a77cf4eea828b8b43bd22c99f8d5ccb8925f32d248","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.910994970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.139124e-01","shared_alloc_j":"3.797079e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d3980a53696b36e807ddd7a77cf4eea828b8b43bd22c99f8d5ccb8925f32d248","served_from_record":false,"record_id":"r141","record_hash":"sha256:d249e71c0217b0b5db7e4d57b641b81686c1268b36bc8427cb39c3cba8fdfe50","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97633},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842669e+01"},"chain":{"prev_hash":"sha256:07594058e8c78eb2c9793dcafbc29f506b020126041bc04c7c27a0d042215b32","receipt_hash":"sha256:89c5cddc96557a3e90a6a7ed71d2566fce170132480602544a8a1f0bb21dbb1b","signer":"ed25519:bench-node-01","signature":"e3f5998d32bb21fd1ee46838c16051b9715a6374f64081e6386a21ac686fe7ec8d6ab47ee8e7e3d9a7a01fe89747569fbce903c5c15ecec8e8c765c5ebdccc05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5666007134f987eb398603f8ac7bec6f356dee29740fb2ede9ef97df05e7bfd8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.501481920588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.285865e-02","shared_alloc_j":"2.428622e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":15,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.823260e+01"},"chain":{"prev_hash":"sha256:89c5cddc96557a3e90a6a7ed71d2566fce170132480602544a8a1f0bb21dbb1b","receipt_hash":"sha256:0a4949d1bd0e481ddf9a987d4b0bc6138b33d263c1b3f107263675c90850c692","signer":"ed25519:bench-node-01","signature":"77efc55a088098bf84301948a4cff45de44dc89ae2c18403987f994ebeed7b6558e7f749aa06b6b7efce2ee5faf373267f7e89a272521235600a4f1fc17b420f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2318eb3771d059b2bd58456d4d09d7957e00c2b472048fe91948069373f6ff97","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.087835670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.481894e-01","shared_alloc_j":"4.939645e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":16,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.854093e+01"},"chain":{"prev_hash":"sha256:0a4949d1bd0e481ddf9a987d4b0bc6138b33d263c1b3f107263675c90850c692","receipt_hash":"sha256:9af4ce96c670b8659866d21b115f10f0cee35b22fe614a8640117d07f219e6e6","signer":"ed25519:bench-node-01","signature":"beb90671667dfa8f09903aa3b00ed63485ea1be66212d65bc8210c504d748503625716f6431119c1d30044ef1a9b1555e2ce428d3ca9a9b76098fce7eb52b00e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:00ea4221e663bbfd56226403caad9e9562e644747d47b1a68b26a652ed22c0d0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:76aa44f7b0b3b872eb243bcd0ed8bc9038d6779900791ddcf365d5805e743a5f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.413599670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.285514e-01","shared_alloc_j":"4.285047e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:76aa44f7b0b3b872eb243bcd0ed8bc9038d6779900791ddcf365d5805e743a5f","served_from_record":false,"record_id":"r142","record_hash":"sha256:dba5353f14cbe283a3df3bc0429b4d0da6169a5533118250370697129a4c0c9f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97827},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847919e+01"},"chain":{"prev_hash":"sha256:9af4ce96c670b8659866d21b115f10f0cee35b22fe614a8640117d07f219e6e6","receipt_hash":"sha256:5c1aec8a28a5ac91d36bd4a44f0c086c55a5ef9a59ff13b43fe25f8fcdb22054","signer":"ed25519:bench-node-01","signature":"820f7bc3ebedb2e05db9e7f97aa7db8261536e34f18eecc701c3927cb654daa59fbb68e093b8f99789ee6327366ae94a1b5d17ebe5bc53ce57e6852b95f96006"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:42c70dac30ebdb262ba4cd190c1cc1056956beeb96bde9888d7c237486ed643f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ba80a0c5a96893e7ef50727233d32223b0c47e4bb8ba733fa50ffc6d22ca525e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.259629370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.531931e-01","shared_alloc_j":"5.106435e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ba80a0c5a96893e7ef50727233d32223b0c47e4bb8ba733fa50ffc6d22ca525e","served_from_record":false,"record_id":"r143","record_hash":"sha256:bb5d62f458af5184d4385803ff272ef274caf2d58506c1d9705af4a8e8e7a6cf","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97912},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855535e+01"},"chain":{"prev_hash":"sha256:5c1aec8a28a5ac91d36bd4a44f0c086c55a5ef9a59ff13b43fe25f8fcdb22054","receipt_hash":"sha256:9ffe14f08584c31646370bf5877230711fd681a6914acd8efdde37b3e6923d97","signer":"ed25519:bench-node-01","signature":"d4b2887f66a3e91ddc1d3784cf117678a68223da6d85428220a1f405f36973c7073e5af3dd638c8ccdefa99736118d36d18975f7857f74afef2931d314882e01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9f0d95a71029c0d0955d9efa28d1aefcb4a9ca330545be4bffbe89070c4bbe55","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:37e980e4882227a96e675fb441e1820f1abf8da0fd3d4073eefc5fa35288e5c0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.933263570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.145610e-01","shared_alloc_j":"3.818699e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:37e980e4882227a96e675fb441e1820f1abf8da0fd3d4073eefc5fa35288e5c0","served_from_record":false,"record_id":"r144","record_hash":"sha256:4ad8fcdd7c640b807dcf3b6cd1b1c4e1b0089f8da66acb84a15e3d1f937e755d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97976},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842915e+01"},"chain":{"prev_hash":"sha256:9ffe14f08584c31646370bf5877230711fd681a6914acd8efdde37b3e6923d97","receipt_hash":"sha256:7814b735cde0fb8db57d1b81999cdf270d33a0885182aa20d93efafdcb72bf5f","signer":"ed25519:bench-node-01","signature":"2b0b05e0dcf87f40b4c777fc0afbea642839f146efedc6cb564cf08abe448dd805ce9cf625c1b126c37331f4e1a33b4d6347059229aa3c09858607e355f0f203"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:033d7ff0b8de3a6386c0f5424c196dbb1b27fe51b574aa1160707ba5a945365a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:aee17b375980a589f30f158391737b2322f308485b57b59896ead820ac93fcac","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.355661570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.559900e-01","shared_alloc_j":"5.199668e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:aee17b375980a589f30f158391737b2322f308485b57b59896ead820ac93fcac","served_from_record":false,"record_id":"r145","record_hash":"sha256:5dc901d65611b741e61f91ed0c13cd82936b5458adcd335f9fe4223bea9abb0e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98062},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856321e+01"},"chain":{"prev_hash":"sha256:7814b735cde0fb8db57d1b81999cdf270d33a0885182aa20d93efafdcb72bf5f","receipt_hash":"sha256:11da37e94bc9a86cbe96a40d8909a948d86b3ca81c79492f238f0274109a21dd","signer":"ed25519:bench-node-01","signature":"0b1e266e634711d5ad7a1181a6501a860bd3ef2860041d1e51cd80cbf284a2b75aca24ab8247abee18f4b58e020265f837caa15878cc2fc4c71a22ea07907a06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:aa2f0e264d1651df11ecde8a5e41602577faf2ff6a1621c431d328c8116c5f95","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:6fb90bf22cf47ebb829244b6eb2a2c3c6103a367b5355ca78f592dd35b9c656b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.964765070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.446048e-01","shared_alloc_j":"4.820159e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6fb90bf22cf47ebb829244b6eb2a2c3c6103a367b5355ca78f592dd35b9c656b","served_from_record":false,"record_id":"r146","record_hash":"sha256:5c886813efb4150f34d433b2651ae9e8a0582f095c8f30364f1b2e063418957a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98143},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853030e+01"},"chain":{"prev_hash":"sha256:11da37e94bc9a86cbe96a40d8909a948d86b3ca81c79492f238f0274109a21dd","receipt_hash":"sha256:81e83a027a1d219044843558cb0a5700b20bb32706ffb50cd9d363e983cb04d6","signer":"ed25519:bench-node-01","signature":"556a10d5ac3ae9c4e195b862a4275da2a491184620856ad56cddf917f544d9a6fe176766337a60eba429d2aa83ae04a79bc456cee6ac2049695a8788bcd7dc07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8c6054fde720d835c7ea92ebc7e63b1d4cb56b52f408fdb263beb1d72b5ef9be","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:ce77866203f612a22e6657ca52065c2bca49b5c704e7cbe7bdbafc508469eb4c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.658697270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.065640e-01","shared_alloc_j":"3.552132e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ce77866203f612a22e6657ca52065c2bca49b5c704e7cbe7bdbafc508469eb4c","served_from_record":true,"record_id":"r68","record_hash":"sha256:0d5bff476d58de9e80883a299e1b4aa6d7b853a633916d6d74df6885e00c5534","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":91742},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839773e+01"},"chain":{"prev_hash":"sha256:81e83a027a1d219044843558cb0a5700b20bb32706ffb50cd9d363e983cb04d6","receipt_hash":"sha256:1b0eaabc1e0f4f613ea22a5a13a4d7aa3cb7fbf12253e67d1c7b9bc53d29eae0","signer":"ed25519:bench-node-01","signature":"3a6b63b510331bcffd043207bcdac657a339b35b3c81efab5e885bbc607283649d72bb256657ef485c8d326eba0f1e894991c7a328d1503c7e3a8befe41a4702"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b9fea2213f3e699d81ea1793ad0320783c7de662f8f52a977f66f8abc043e79a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4dcde1b30c97bc371abad9179f7d079831c59c3860d7df8b175517cfcde56244","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.540643810588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.399924e-02","shared_alloc_j":"2.466641e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4dcde1b30c97bc371abad9179f7d079831c59c3860d7df8b175517cfcde56244","served_from_record":false,"record_id":"r147","record_hash":"sha256:9be1d3ba2c48c0b1a0e413c83fbf5d2439b4ad805429ccab8cdec9ac45f26389","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98243},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.823934e+01"},"chain":{"prev_hash":"sha256:1b0eaabc1e0f4f613ea22a5a13a4d7aa3cb7fbf12253e67d1c7b9bc53d29eae0","receipt_hash":"sha256:db9f33184c6ce65c8b5bf5182f3f419b969e34d803dbe4fce95220dd4ee79708","signer":"ed25519:bench-node-01","signature":"1edb3773d092174f91fa912e4c9b70d0287109278ae032453b27e66f6a360a8d917a2567f8c0ba45728e6bc1c82a9e45e947f1a969178361bf679fcfa4ecb401"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6ec0b9cebaeac70aff5c6dde2436783245029ae924b77853da64f2b5ba48fb26","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:516b5691b6e66826019f65c73831fd8628d3333ec153968bae02509709ddcf3e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.006231390588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.843382e-02","shared_alloc_j":"1.947794e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:516b5691b6e66826019f65c73831fd8628d3333ec153968bae02509709ddcf3e","served_from_record":false,"record_id":"r148","record_hash":"sha256:446e2b9c1246d98af321b2f2043129b3e339731bcda7e9648d7a8f577370cbd8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98275},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.813678e+01"},"chain":{"prev_hash":"sha256:db9f33184c6ce65c8b5bf5182f3f419b969e34d803dbe4fce95220dd4ee79708","receipt_hash":"sha256:18d5ee32e626ab2be8b6d9a8542bbf9877d8cb3a5a1f06c9242934edc74b2967","signer":"ed25519:bench-node-01","signature":"361f1804f09ad76fc47de5d4b6a2d1ca39e2753746d027184e3964bd10ce0e1ee5ccead16f284c9bef283ac4309ad37c472a48fbe45b56c965502fa8bc33f303"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:457c382928c1a5a74a58c7bb413573f0a1172de37fbc853d702a58d21bda5eb8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.862983270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.125140e-01","shared_alloc_j":"3.750468e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","served_from_record":false,"record_id":"r149","record_hash":"sha256:5766de1b0954020a4a5f70be2b1e114504615839e2365bda98f7b248fac792b6","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98338},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842132e+01"},"chain":{"prev_hash":"sha256:18d5ee32e626ab2be8b6d9a8542bbf9877d8cb3a5a1f06c9242934edc74b2967","receipt_hash":"sha256:28560a98fe244244b20f51e458250f0f4479c7c0b5af475a5183c373e1bae812","signer":"ed25519:bench-node-01","signature":"c718d2bd8861164d1ba1664e3d1f44030eba1d71e5b331f5b041a62432f2445b85198cd1aeb991e096e634a492178f1fa82ca35fbfeffa7cf2df405805db0902"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8d7c3c9d53ae474024e83e636553d860cfbaca7bfed50dcb30c80f0948fb6c1b","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:01b2122aa76c492f0e26f4d0d8113e3058a9c0a42add4d988081cc48760f2f78","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.833080140588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.339057e-02","shared_alloc_j":"1.779686e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:01b2122aa76c492f0e26f4d0d8113e3058a9c0a42add4d988081cc48760f2f78","served_from_record":false,"record_id":"r150","record_hash":"sha256:ae74bf005f5c035d71c5d30e1da593c8b9d94e1ed5d6aed3a574303d1e62002a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98367},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.809758e+01"},"chain":{"prev_hash":"sha256:28560a98fe244244b20f51e458250f0f4479c7c0b5af475a5183c373e1bae812","receipt_hash":"sha256:632da487ab99f931aa9778fd5d21de07cc41fc2528ff8f2f198e032bbced79de","signer":"ed25519:bench-node-01","signature":"f6396cf7de4effd2bd0aeacd0b7e5b8c4c9cca2aba741b63af0268b5211e76dc955d92b310bc13c25b170da56021aceb6232620990540ac6410dfd17373da802"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0e31f185bf267e2fa41e10a70df85d291cea561b8047882520ab1ce2048c065e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:6fb90bf22cf47ebb829244b6eb2a2c3c6103a367b5355ca78f592dd35b9c656b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.501810770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.019945e-01","shared_alloc_j":"3.399815e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6fb90bf22cf47ebb829244b6eb2a2c3c6103a367b5355ca78f592dd35b9c656b","served_from_record":true,"record_id":"r146","record_hash":"sha256:5c886813efb4150f34d433b2651ae9e8a0582f095c8f30364f1b2e063418957a","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":98143},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.837869e+01"},"chain":{"prev_hash":"sha256:632da487ab99f931aa9778fd5d21de07cc41fc2528ff8f2f198e032bbced79de","receipt_hash":"sha256:b0a3656e16350aa6522e2134e856e5ad342409551e7dc311e5969dc08525adeb","signer":"ed25519:bench-node-01","signature":"de1d15b1bb1b13f3b32177de783e9fec9038c161e33481f48f477836f9600bd38883e102956e57cb66fe89cac36ae8475569cd6a2891ceaecb8b8803c7efd40c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4a77ef2e0cfbff0f3d5ef1378edb049cb861abce982dc7b3a11bf4f6546f144f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:ba80a0c5a96893e7ef50727233d32223b0c47e4bb8ba733fa50ffc6d22ca525e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.884411670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.422644e-01","shared_alloc_j":"4.742146e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ba80a0c5a96893e7ef50727233d32223b0c47e4bb8ba733fa50ffc6d22ca525e","served_from_record":true,"record_id":"r143","record_hash":"sha256:bb5d62f458af5184d4385803ff272ef274caf2d58506c1d9705af4a8e8e7a6cf","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":97912},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852321e+01"},"chain":{"prev_hash":"sha256:b0a3656e16350aa6522e2134e856e5ad342409551e7dc311e5969dc08525adeb","receipt_hash":"sha256:e841b23ce757c1c7f882ac811de1ec1fe41f682b61a98ec2b94f6ba682b49e9a","signer":"ed25519:bench-node-01","signature":"a87260112e61d8fffda695b37cd386e2564a056cf07ec7c2216d77b7afbed5debca169cb9ee7aae364c3c6921c18cb0df10342b0c5cad9a8e9d4f27ccd085b05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6e30af9df0ca2c04cd0617aa6d59359ab4b8f25938b6c541184dd3839f4a25f0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c91460ada6ccfa92b02cddd2a5dc938fbfd3c5aedf6140e6d4f383451527fa10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.455850070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.006558e-01","shared_alloc_j":"3.355193e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c91460ada6ccfa92b02cddd2a5dc938fbfd3c5aedf6140e6d4f383451527fa10","served_from_record":false,"record_id":"r151","record_hash":"sha256:117e876cb526fd957b88e6c2010c855d7752e302ab52168495f179b43c694ddd","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98559},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.837295e+01"},"chain":{"prev_hash":"sha256:e841b23ce757c1c7f882ac811de1ec1fe41f682b61a98ec2b94f6ba682b49e9a","receipt_hash":"sha256:c1c11915a52439cbe125716af46404cfea860d50b2d372794d8e2e3eb31bc768","signer":"ed25519:bench-node-01","signature":"0b07fab2d01548c139363c06897cf983bf55a9f01cc73f3af60121a769cf5162e177e350ff7ad724b1ad1f96df84d268c4d2b3de90bf8dc8cc404ee960c9720e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6da19a8f1f5bec0ec482996aac5f91fe5937e0560d5c0bfd0fe5ebb361340f7a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f19bc2892427342b6a94dc67637059edcc9e4ffdbe0f27bbec3ee1262358377a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.899879740588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.446247e-02","shared_alloc_j":"2.815416e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f19bc2892427342b6a94dc67637059edcc9e4ffdbe0f27bbec3ee1262358377a","served_from_record":false,"record_id":"r152","record_hash":"sha256:bb475a21de25accc6e85b3a0ed7d33a3c188194e19601341d92c525474ef9e59","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98606},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829678e+01"},"chain":{"prev_hash":"sha256:c1c11915a52439cbe125716af46404cfea860d50b2d372794d8e2e3eb31bc768","receipt_hash":"sha256:41b540e48356ca55e6bbc13067c7b3fdce68da644326663b6ff1fa677a41bfbe","signer":"ed25519:bench-node-01","signature":"afde89c8511474c11ce0d30c6059bd1683635d41df7628f23e82c46d5d8fc0d29ba9018b4553ef0d0f5e3a18d1cecd49a1f8f2893b1747fb404575f7557ea40b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:86bf5a06904d8e38b7fad62e8bd2d0fa6878249b6e7d39ec86c52a10290c9a76","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:fbad157ba34331794cf5050bfec542d16e1f3924470fc53d5b8557ce96983c6d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.930168970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.534470e-02","shared_alloc_j":"2.844823e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fbad157ba34331794cf5050bfec542d16e1f3924470fc53d5b8557ce96983c6d","served_from_record":true,"record_id":"r57","record_hash":"sha256:1431070f5ce2f957766ef5980bd5e7867760c31429a7aea428065e30871ff619","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":90673},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830129e+01"},"chain":{"prev_hash":"sha256:41b540e48356ca55e6bbc13067c7b3fdce68da644326663b6ff1fa677a41bfbe","receipt_hash":"sha256:493b814132a8d79d2047f30487bb9cb70361d87a7b63f004f5007717f22c17f8","signer":"ed25519:bench-node-01","signature":"b6720b722dea7b9fe942ba038426a7c212223c67263a4458577c6e13235c3b333c833bd2b12918ea2b6db1c33e7a5da2521c34ace1195655a26668a947a5080a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ca9d033bc4dcf379b042349f2b7b9cef87287fab7910f57b7b63effc75189752","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:4eca99b1aa9b7cc02d93253fcbd8b042a8f2a308065e37f5971da74e7223ddae","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.638265570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.642213e-01","shared_alloc_j":"5.474043e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4eca99b1aa9b7cc02d93253fcbd8b042a8f2a308065e37f5971da74e7223ddae","served_from_record":false,"record_id":"r153","record_hash":"sha256:2613989d0144d77d40c7ec837263f215cd6d6e55f78b5e67fc05f5fe9aad9c1f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98745},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858555e+01"},"chain":{"prev_hash":"sha256:493b814132a8d79d2047f30487bb9cb70361d87a7b63f004f5007717f22c17f8","receipt_hash":"sha256:3977c4ff1a29e9b293bd980bc65c394cb9eebde48ee82ee80de9e0fb4d90ebc9","signer":"ed25519:bench-node-01","signature":"f09cfb0e1c1a8fa2dd70bfe6dbc7c13cae63b51504ba6d76a1caccf5a2617ba53949a1656b04ffee7d0f78a2f83d6c347df1f3b1d5ed8a8626eae2f43e6bbb0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e28e725506760e79271acff4b4f12a629aa761785774ab221813dcffd523047c","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:50c404d36b19c3fdef88459eb0d2411aea6815b2d9ae84aea272390b347ccc47","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.856612970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.123284e-01","shared_alloc_j":"3.744281e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:50c404d36b19c3fdef88459eb0d2411aea6815b2d9ae84aea272390b347ccc47","served_from_record":false,"record_id":"r154","record_hash":"sha256:0d807272575aebacc8110755f47ff2419f15a4b779f8b181661addfc68f0e0cd","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98807},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842061e+01"},"chain":{"prev_hash":"sha256:3977c4ff1a29e9b293bd980bc65c394cb9eebde48ee82ee80de9e0fb4d90ebc9","receipt_hash":"sha256:6d063273270038dce95f06cf91f980172c09278bd4c83a2881cf5cf96682892f","signer":"ed25519:bench-node-01","signature":"5ddb1206c3db6c202622a413c70d5bf5bbda27c7d1a62f89f080e44a4848df1621acaef461ca4732ceafc848843d05a9978dc78d0ccde86d7e24b13f3e07d906"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7423be6ecaf6c56d40a1567a18b389a73788b1b7a9628629f8b2cc1676337f44","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5f670babc0d5143c2f85eeafc483373c44b95de221f254f409287881280efd20","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.878564570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.420940e-01","shared_alloc_j":"4.736467e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5f670babc0d5143c2f85eeafc483373c44b95de221f254f409287881280efd20","served_from_record":false,"record_id":"r155","record_hash":"sha256:825dd5461528372aef6cc6608a77dd47ae331db510e0c2729b3f5a6080765a28","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98886},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852269e+01"},"chain":{"prev_hash":"sha256:6d063273270038dce95f06cf91f980172c09278bd4c83a2881cf5cf96682892f","receipt_hash":"sha256:b9cb389d8b91ea5f8e28757dc4b0d0750ee40d7df0a456c1c6441326324d1a99","signer":"ed25519:bench-node-01","signature":"9805b2c217193de99440572b90ec64b2cf641919d9326794aa9c56d410ef54fe3905e04d91e0094bf8d183477e54d6f7a1e616ca46afd235c94671f1f6b2dc02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a5780fcae2e513f4480fffc8007446a8aa07758214c0aead35791f8059614aa0","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.173731010588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.331244e-02","shared_alloc_j":"2.110415e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.817161e+01"},"chain":{"prev_hash":"sha256:b9cb389d8b91ea5f8e28757dc4b0d0750ee40d7df0a456c1c6441326324d1a99","receipt_hash":"sha256:9584505afb3ec113a48000817ad93a0d3245b9115e3be01ebce437af8020d611","signer":"ed25519:bench-node-01","signature":"031b04da7900d46b795fdcb53cfbe8461760b41ec125b6dd54b1c58a7fa4aa4648c642330ae5de8b3eeb04e997c614f7de405ceaa73495aa955325aee257020e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6bc6dc6e456ccb6e97c16d591b0c43e1c2eef6c814b66c0b1c86118ae778475d","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:f70b4758637322ee4d79b8a5f7b81ae70da5a6c8a9c3a9e8023f55d285f1b3d9","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.266768040588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.514847e-02","shared_alloc_j":"3.171616e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f70b4758637322ee4d79b8a5f7b81ae70da5a6c8a9c3a9e8023f55d285f1b3d9","served_from_record":false,"record_id":"r156","record_hash":"sha256:1a770e35eb1b8f8b37420bbfced6c945727df460cd8325620308562bddc169bb","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98974},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834852e+01"},"chain":{"prev_hash":"sha256:9584505afb3ec113a48000817ad93a0d3245b9115e3be01ebce437af8020d611","receipt_hash":"sha256:32da75e8eea55a900f46ee5932e24c315ee093622aade8e84dbb967ea353e8f0","signer":"ed25519:bench-node-01","signature":"98fe761c7dbfd9b8d16bd7be1f58230f05e65056cde32515a1772ca0c2fe14b5249b152b84dcacb9e8cfb966573f8c37d42f8624663942cae82e06bd61d46e05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e9e8cf47cb734b244b452af4c0e04135d3a99f5c027261b3bbd4a68d73a71614","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.610198070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.634038e-01","shared_alloc_j":"5.446793e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","served_from_record":true,"record_id":"r101","record_hash":"sha256:423f6097e57e4c77557b0caed44714a3b731fb972ea1da097ee6162150ae2cb3","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":93972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858338e+01"},"chain":{"prev_hash":"sha256:32da75e8eea55a900f46ee5932e24c315ee093622aade8e84dbb967ea353e8f0","receipt_hash":"sha256:fef1088656f4bb1be1c924adb2937d1eb44d2ccbe7b18a6118a3f757b31af10d","signer":"ed25519:bench-node-01","signature":"dad502ba8148926842418e87d3edcb063dc8176ac39da066269ff4c6b67ee6f51f08caf3b015a9eb3eed93d801c062b45a56fc089dc43038419c9e0778ffd508"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e19c6fef9ee5ac24f65b645e4ec2b1b7a431c91626805bf9db72b4ff1b58ad63","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f64acee0744f6cb5b0186d8df86be984d0d6ad9ef0872d7c68ec46d52b0594b4","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.726943170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.376779e-01","shared_alloc_j":"4.589264e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f64acee0744f6cb5b0186d8df86be984d0d6ad9ef0872d7c68ec46d52b0594b4","served_from_record":false,"record_id":"r157","record_hash":"sha256:1d8203a5b8d3c9c81b0b23660d61289652ea34929007e17f0ee585d806a9d580","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99141},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850898e+01"},"chain":{"prev_hash":"sha256:fef1088656f4bb1be1c924adb2937d1eb44d2ccbe7b18a6118a3f757b31af10d","receipt_hash":"sha256:4ccf4e0ae34e2125b6bd95f4da03c707fbe4f5470c20aa1ddc9801eac762546e","signer":"ed25519:bench-node-01","signature":"12bec0d1d9773f3c5bdf3d30c372fd6cea8cdb8a1725efbd44d3959616a044f8e6e32ad841cd5a5623fbb3ae339f08f615361ef778ab46322c07728c575bd304"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:abb16dac32b17f04b5fba82fca281dc90b8af567f8f52bc7c08e4b56cce6b1ab","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.240213770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.526275e-01","shared_alloc_j":"5.087585e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","served_from_record":true,"record_id":"r149","record_hash":"sha256:5766de1b0954020a4a5f70be2b1e114504615839e2365bda98f7b248fac792b6","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":98338},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855375e+01"},"chain":{"prev_hash":"sha256:4ccf4e0ae34e2125b6bd95f4da03c707fbe4f5470c20aa1ddc9801eac762546e","receipt_hash":"sha256:600c2ce4faedab858d04058b336190e2414399482e280525b991817cb6e73685","signer":"ed25519:bench-node-01","signature":"e554962c80071fa0036aec7dfade4516c540bac7fb9e4ea2e59b848ed98054a7c6c51cd8315d65b1753c03e36444a6fe0b766eb92d726b376a88e3436a173706"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5b6a49207a6a593e27c6386c7ebb46907495b51c6b0e7bb6cc5e244bbd8bf613","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:7fbe0bb7487a415754e1d2db8aa8e75c9a958e18764a14b62dbb6702a827d546","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.701286870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.369306e-01","shared_alloc_j":"4.564355e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:7fbe0bb7487a415754e1d2db8aa8e75c9a958e18764a14b62dbb6702a827d546","served_from_record":false,"record_id":"r158","record_hash":"sha256:88abfffb4c90cecda00ea3901c3e4e41126603241b96d66c18153f54bf999e3c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99302},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850662e+01"},"chain":{"prev_hash":"sha256:600c2ce4faedab858d04058b336190e2414399482e280525b991817cb6e73685","receipt_hash":"sha256:b635930c5b818ef302b64d544283d4f9c4c681f8af89f064ccbf0360e3d76318","signer":"ed25519:bench-node-01","signature":"0592f3be02014740df3d36efb0241b353b1b4cf7dba6cbe5ec306ae25376c67872389f79c496a4d23b757a0c9ed02caf2efc88928a8c3bc3f226f52365d02303"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5de05efc61ad0220f8a34a415a76e72a07cf787228c7a17b2ab50ea367390222","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:3c9feb0b662a0c417a55ec5751b1c501d1d315c1d204379045c2e004b8c5c875","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.862335220588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.336895e-02","shared_alloc_j":"2.778965e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3c9feb0b662a0c417a55ec5751b1c501d1d315c1d204379045c2e004b8c5c875","served_from_record":false,"record_id":"r159","record_hash":"sha256:1c1dcd4d20b2916ec8891938b92c85b6711a814628df4ca4b2ae748dea597e96","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99348},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829112e+01"},"chain":{"prev_hash":"sha256:b635930c5b818ef302b64d544283d4f9c4c681f8af89f064ccbf0360e3d76318","receipt_hash":"sha256:e13edc9b903fed2f183b0a5ea910a150f4976fd1c035140a460891a3122dc31b","signer":"ed25519:bench-node-01","signature":"112bd768bd3dae7314fe40fcf4827734f565f47cf84a49d3e3a82c865a58f005ead73cbd560baf49aa37da13c6bb09db25f9ae7e1f540781033c258d3ca2d60f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7a19f37f7cf90f5b951d4c6ddcde1cd7fa18a10f54d7c5880d94844d69494266","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:236ec770245fbae01fc58a6e26be276f26c092cfb0289d628034a105e4a34f85","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.791852570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.104423e-01","shared_alloc_j":"3.681409e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:236ec770245fbae01fc58a6e26be276f26c092cfb0289d628034a105e4a34f85","served_from_record":false,"record_id":"r160","record_hash":"sha256:9321df311783dc3660a7863b6fd15f6cfbc1f324a0bc0b1ba11a648c91e751a5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99410},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.841325e+01"},"chain":{"prev_hash":"sha256:e13edc9b903fed2f183b0a5ea910a150f4976fd1c035140a460891a3122dc31b","receipt_hash":"sha256:4e42e5f0a53819eccb0801623ee8633a4d3ef7eeec1817298cdec3d6f360d715","signer":"ed25519:bench-node-01","signature":"e4dde47a57f6b433ced3861e1c423de02624a833fd524e953c9313549e583b234a27e9675104edf0c16119bbb8bab949d23f702d336d274cd409fd10acc2870c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:acd2a9a976ac161d8472c348095083e7a0bf94ef88397481954eea121de6e7ff","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c70c4f1cfbf7f3e80ab7fd116b69405e0071bb46bac6a04135010096235a99f3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.051613980588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.975571e-02","shared_alloc_j":"1.991857e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c70c4f1cfbf7f3e80ab7fd116b69405e0071bb46bac6a04135010096235a99f3","served_from_record":false,"record_id":"r161","record_hash":"sha256:0eee3e2f9d255e1ee0143cff2061e9ca2f87125468fc3d082061511ccd760deb","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99443},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.814650e+01"},"chain":{"prev_hash":"sha256:4e42e5f0a53819eccb0801623ee8633a4d3ef7eeec1817298cdec3d6f360d715","receipt_hash":"sha256:ebd6055e50ef01bb4e45af1c73184d50d55f22ff06e9ff8984ed30bd6bc67c35","signer":"ed25519:bench-node-01","signature":"18941a38683478b9b615d056bc48fcd338704ec0ff5f155e08c1134e436b5472ca9da9f5b59602e55ed33753ab3c81872b02a8d2e48499386abbd79284cc170a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:84882cfd4ae28c0a45ecabf3c119ead0e30d52d365342ce9fd2f0ff097b95810","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:866985a43c4aafecdce84de12bb2720fdf4130adc7633c396da10fde78f100b5","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.815610310588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.200804e-02","shared_alloc_j":"2.733601e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:866985a43c4aafecdce84de12bb2720fdf4130adc7633c396da10fde78f100b5","served_from_record":false,"record_id":"r162","record_hash":"sha256:880b13f80c7c7fa2c1283b860a108e20c7f711860c652dfe5c00e77bffe73369","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99489},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828397e+01"},"chain":{"prev_hash":"sha256:ebd6055e50ef01bb4e45af1c73184d50d55f22ff06e9ff8984ed30bd6bc67c35","receipt_hash":"sha256:5eee1a16ba09bfaedb6062859e1488323c3d3193ebae0fc5f8de1df6370fadcb","signer":"ed25519:bench-node-01","signature":"6965d2b0a3762fdda2422632944c8bf084d660441ca51097b7ae4f77287787686c99e19cfc05b58d1902a776e561ce8eebcf171adddc6a38f55e82839f5a2101"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f443a5ebd3c29e806b9d4deda698b146e0b851266563e1dafe71475afc2df989","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:315c14e61b89addfef08fbfe1205125c8472164f9cdf669f157fc7fc338e586e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.489472130588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.250886e-02","shared_alloc_j":"2.416962e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:315c14e61b89addfef08fbfe1205125c8472164f9cdf669f157fc7fc338e586e","served_from_record":true,"record_id":"r47","record_hash":"sha256:0fd550875b4b6b51c231682f03b3c2c48dc7a447dd1adb4f3e7a8216e2d7428a","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":89837},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.823051e+01"},"chain":{"prev_hash":"sha256:5eee1a16ba09bfaedb6062859e1488323c3d3193ebae0fc5f8de1df6370fadcb","receipt_hash":"sha256:8712b1bfe4b52c2dee676e45741659e63f6b9564a59892e226c3a0416ef4a556","signer":"ed25519:bench-node-01","signature":"3e6395c543529cbbadb2412c850d739ec2649fabc4e1ede46fab8279e0b5f7080f584e44ce771cc697ab826f09d56ada818e99d91a49943bcb932b135ce3140c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:aa4368eb6f690bb8d8904a64233e12c5a692987e6cb2112f1145e5b65303e80d","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:fc270faed1a038462ee17ad9afe5fc830b173f58fbcb6f74f25d11dab82a9b32","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.855172830588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.316026e-02","shared_alloc_j":"2.772009e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fc270faed1a038462ee17ad9afe5fc830b173f58fbcb6f74f25d11dab82a9b32","served_from_record":false,"record_id":"r163","record_hash":"sha256:55d7006368260ff33a8ae09ff2417f7f1d0da3508ee64f75ee6bd30ca5cdde9c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99575},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829003e+01"},"chain":{"prev_hash":"sha256:8712b1bfe4b52c2dee676e45741659e63f6b9564a59892e226c3a0416ef4a556","receipt_hash":"sha256:2a0f8c3153b7f7c51e0d2ac8cdcbebd7105de1fce263f88ae5ad2e1d9b15ccc5","signer":"ed25519:bench-node-01","signature":"c5ee784ff7895512ea286848ce97e7ac85b83a53030e86b5ec2018f853f4eeb698767a80d34622119d835de3d06b3046f7280f3cc8088e31fae652969ff0f30a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:67e7dfeca60505de3ec825766dcaaf1f31500eefd121332cf725b7efa0475648","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f8045743fa59e45d492212b7ce6a4d2284e391e9ee89332c8f878260e18e5039","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.739944070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.671828e-01","shared_alloc_j":"5.572760e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f8045743fa59e45d492212b7ce6a4d2284e391e9ee89332c8f878260e18e5039","served_from_record":false,"record_id":"r164","record_hash":"sha256:55019fedb126a29d3ebc3f8263b658b03b7383301022eefbc39786aa0e5dba4a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99668},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859331e+01"},"chain":{"prev_hash":"sha256:2a0f8c3153b7f7c51e0d2ac8cdcbebd7105de1fce263f88ae5ad2e1d9b15ccc5","receipt_hash":"sha256:c00bce677a59e6a1d36bea33eda85bdbc38d335f93b3e3b3adae471bbf72ffae","signer":"ed25519:bench-node-01","signature":"42ebe02a35926d9bf26278bfbbe37ca2f0838ba02b3280cbe767a80f0823d440aa3b2e974c5a4f819b56201552d7d2f73365fe77672b03409fc2383d91fa7304"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:cb3ebdf7306facbe4aa264e84273a239828b4d1e918508a137dab8ef8bcfbb69","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:d44df2bf4fb54c72ad6469a023b0b46e6be12079545ed3c2ae2aa38fe0e4f661","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.711192670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.372191e-01","shared_alloc_j":"4.573970e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d44df2bf4fb54c72ad6469a023b0b46e6be12079545ed3c2ae2aa38fe0e4f661","served_from_record":false,"record_id":"r165","record_hash":"sha256:93d60ae60910aaf517d5d8e5bec8fd928a58f1c6062aeca94522befa93e9f409","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99744},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850753e+01"},"chain":{"prev_hash":"sha256:c00bce677a59e6a1d36bea33eda85bdbc38d335f93b3e3b3adae471bbf72ffae","receipt_hash":"sha256:878d5b4e589032caf7a5f09b87f772868c332166d02336d84fbf450da33a3fa3","signer":"ed25519:bench-node-01","signature":"1bf32e67d2fb042340078dc78d4d8b2b09a7ef35ad998fd4accdf8311ddd67c726a306ea69e21542405ae5afaf9f529375acd33a5573638789bcf66e97819702"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:10d225d9c22f8f492d01f6d3beee7280c03eb49aa89126e6a15d3060e37642b7","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:c5feb99768a5f6dafcf10e73e5dd3b71a0e485e646e80369868257c8982b6ed8","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.059306260588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.997969e-02","shared_alloc_j":"1.999323e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c5feb99768a5f6dafcf10e73e5dd3b71a0e485e646e80369868257c8982b6ed8","served_from_record":false,"record_id":"r166","record_hash":"sha256:54c1aadc016d06670b52cd4f03e23ecfed3d60b12b9851403854ae26ea04b3e3","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99777},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.814812e+01"},"chain":{"prev_hash":"sha256:878d5b4e589032caf7a5f09b87f772868c332166d02336d84fbf450da33a3fa3","receipt_hash":"sha256:f6576380197b3de95624a6c1f7ad80b9b8611767010042e0de446dc2d901da70","signer":"ed25519:bench-node-01","signature":"9258a2df0184acdffd2502af56c9a60c8ca5b3430d479713a2d6dc9ca3d6cc5c122a476d9c2676c73922a1c86f81032bfc5a3054a9df01c0155a5e5faac9660a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4986d461c7be0acc1620a0d661f17ab7955957b6abebba882d28de8f65868e4e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:1d7a6cc8581b38a163cf95aa00c0875a71db7a0206c9b19ddf52698710a36ab6","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.856013770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.705635e-01","shared_alloc_j":"5.685449e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1d7a6cc8581b38a163cf95aa00c0875a71db7a0206c9b19ddf52698710a36ab6","served_from_record":false,"record_id":"r167","record_hash":"sha256:662e905b120455ce12ca9cb913fcab615ec01d3a25a2885731785f1a0ef429de","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99872},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.860200e+01"},"chain":{"prev_hash":"sha256:f6576380197b3de95624a6c1f7ad80b9b8611767010042e0de446dc2d901da70","receipt_hash":"sha256:4032a85af9c65972c4da8005c2ad38951c59b7f675fc8568c0a0eeade9262183","signer":"ed25519:bench-node-01","signature":"b1349463e4349061bea03f49d278d23378e27a93c957123351ff052032e28bcc0b90d65efe92c5f9d53d8daf934892a1b3dc2ea7d0d5558d2fef1e98bd74760d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:baf21585a85eb9510c8d192f12cbb79d53ca2ac80f6fb93ea6d2d4cd592e218b","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:b35fdcce6b0deeb13607ea6ac07486b5e54843dcb842e6c100c5251a428ff403","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.783951070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.684645e-01","shared_alloc_j":"5.615483e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b35fdcce6b0deeb13607ea6ac07486b5e54843dcb842e6c100c5251a428ff403","served_from_record":false,"record_id":"r168","record_hash":"sha256:f49b1b0a613d8df73a042252b167239cd8fbe8fa5b9fbd238a190ee26024cd09","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99966},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859662e+01"},"chain":{"prev_hash":"sha256:4032a85af9c65972c4da8005c2ad38951c59b7f675fc8568c0a0eeade9262183","receipt_hash":"sha256:a40ac0d2eaded177580b8b2507c64f71314fdf5bf32dbd34dc2a3facb9e515ba","signer":"ed25519:bench-node-01","signature":"4235e69c7357041c010a7f31a62d37c009b005799519cb42955b5791aa600a400f9d16c41625953129cba1b8fca09252f75b3a0b7c61fa1065c01579b9fb4f09"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:35388ff90b1819c356c2bf6c9ea53c40ed8d557390bdaa17516b18511bf19537","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.432438740588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.172147e-02","shared_alloc_j":"1.390716e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","served_from_record":false,"record_id":"r169","record_hash":"sha256:5899c1861eccac089cbe133fab945d22b0598b0f2365e10cd70a29f4a5f57eee","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99989},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.799048e+01"},"chain":{"prev_hash":"sha256:a40ac0d2eaded177580b8b2507c64f71314fdf5bf32dbd34dc2a3facb9e515ba","receipt_hash":"sha256:558c12a72254e6a81876e7bce21ba5e56ffc4dead2faa08d6f1d221f7b0ec886","signer":"ed25519:bench-node-01","signature":"a7c9c9da45f679c343ea21ea0280e1e027ec52051cf041afbac83c2bf671994c6f404e10ad1ec634c61d5751d70fb10a6b595e94090d450f6e9eb76cc0d5bc00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8b5bd9595e3da4a81bae632e37068f4a1c09a8bcd35a4078563f3ca616f41454","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:8130c76217d2e109b9e876d67a30cce4f6ada330eaf9ceab951621f8d960e66c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.103609870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.195226e-01","shared_alloc_j":"3.984086e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8130c76217d2e109b9e876d67a30cce4f6ada330eaf9ceab951621f8d960e66c","served_from_record":false,"record_id":"r170","record_hash":"sha256:6e363cc5d16869d08c527dce0b693e3e67dd357e3e7f729f2679293c80572d30","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100055},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844757e+01"},"chain":{"prev_hash":"sha256:558c12a72254e6a81876e7bce21ba5e56ffc4dead2faa08d6f1d221f7b0ec886","receipt_hash":"sha256:d7cabdceaed05ee042a9a5adaf53f61f54478685e870d4a504f4c7c6c2d731f8","signer":"ed25519:bench-node-01","signature":"c4cdf6c39923144873c83d356088cf39dba1c1969afb5268019199fccb5bbeb4632564f041c0e7100bf3aee2dd42195b499789958ffc948ab010ed40aaeb340d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2174e90d630b7e1eb5eb192eb14c5fe5bdc8661d8ae87c14524758eb9838c69b","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:8d2ad364f746f7e5890037cb0de73c8c0800284c36b0693f37f9781bbdda230a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.165812590588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.220802e-02","shared_alloc_j":"3.073601e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8d2ad364f746f7e5890037cb0de73c8c0800284c36b0693f37f9781bbdda230a","served_from_record":false,"record_id":"r171","record_hash":"sha256:7addd716918ddea88f258c0f0d90f73f55eb5816a1eef57c529d84c173aff8f8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100107},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833489e+01"},"chain":{"prev_hash":"sha256:d7cabdceaed05ee042a9a5adaf53f61f54478685e870d4a504f4c7c6c2d731f8","receipt_hash":"sha256:49bdc035c4800a667700b169f8b404131f2b8a0a718cdc4c7107a0c3bcc15600","signer":"ed25519:bench-node-01","signature":"99d02cd45d8706b838441e777afa4d703b5e7793a9ba851216b28d585d7f64c5f42ba230727799f9c064276ad6d618622f9392fc3be59c5a18e9679c5b60e502"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:30d99372b5a3bfebe915f5f437f616ac11b8f5bbed5a243d8d7e6964907c60b2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:d96ead6b9efeba477a485f30879290174c4379502931ddb2e2e517c5180a0925","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.606521110588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.679184e-02","shared_alloc_j":"1.559728e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d96ead6b9efeba477a485f30879290174c4379502931ddb2e2e517c5180a0925","served_from_record":false,"record_id":"r172","record_hash":"sha256:cafdcc7d790145457efa80142436d61051d2a2d116b8aac7c163f7885dc83f93","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100133},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.804029e+01"},"chain":{"prev_hash":"sha256:49bdc035c4800a667700b169f8b404131f2b8a0a718cdc4c7107a0c3bcc15600","receipt_hash":"sha256:b564d8fa3d48a298300b3ef9069bb4dfcea3756256ed5729daa99635c3517b09","signer":"ed25519:bench-node-01","signature":"3ef648f83bbde3c0f8e7183cb2d9755c50f42607c61512aad1d2cb4239d7a30b11342f76020d3d7b37cf255760f4a38b519024cdc097a43d40a5291625ce270d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c33182f1b0178cbe49789d86b9afe1ebbdfa14335d383d9c0356b3497fe0d28f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.870773170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.127409e-01","shared_alloc_j":"3.758031e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","served_from_record":true,"record_id":"r52","record_hash":"sha256:4b407241ed751d5065cf8c5d85ecd7c9cceb59ec65630b16476cef31225da9a5","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":90404},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842220e+01"},"chain":{"prev_hash":"sha256:b564d8fa3d48a298300b3ef9069bb4dfcea3756256ed5729daa99635c3517b09","receipt_hash":"sha256:6ea55850305812b3c05b91d8273574265b7380a9c197fd584266f110dc26ddde","signer":"ed25519:bench-node-01","signature":"03d7fd09be726a7cb1a770f8b6076ced4f0d56b09e5457ccf6a0c2c599d2fd0575588ced74932b2a88999ca544cb25f753de82156f52cdf09014e563254d570b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ba04ebfd222ff7742c7b2a7f909887db061ddcdae9b6590ab6aee417bbfc1852","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.045176470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.956820e-02","shared_alloc_j":"1.985607e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":17,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.814513e+01"},"chain":{"prev_hash":"sha256:6ea55850305812b3c05b91d8273574265b7380a9c197fd584266f110dc26ddde","receipt_hash":"sha256:9bc201a40218f925652a573817000d76a469a705f3088f5cc1615bef8ace3028","signer":"ed25519:bench-node-01","signature":"ef8deece0d5e58dc9a3a09042c58e5b547c52ece73e9424b1bdc280ef6b7e655bac4724ac3613c4134feb6ffa94c315af194089fd3e789dc2852cd9971965401"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:150ead064c7da5c9d524bbdef9565822c7cab916a6fe1340223ba64e60905e4a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.409006070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.575438e-01","shared_alloc_j":"5.251461e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856752e+01"},"chain":{"prev_hash":"sha256:9bc201a40218f925652a573817000d76a469a705f3088f5cc1615bef8ace3028","receipt_hash":"sha256:c28e7ca349982ec30a7ed8c39f988e638c4492b7108a315c507676f1e83739b7","signer":"ed25519:bench-node-01","signature":"df36fa84d9f626b99a569e797312835b4b01510d92a2e98a3bca21c4855544f0c000fada7f0fc16d7d115bbe23fd8febb60bc74cb99ffef7b4cc65e4da65850e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:68409babca1527dc0f590ffe379b8f0f3ee6b21e9e9b9b16e39d5b48faad14f7","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:db77ddfc23a61c07ebd5b655bce57cf0a257f4cd3183666ef84c4bd52ecdd2fd","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.624563470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.638222e-01","shared_alloc_j":"5.460740e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:db77ddfc23a61c07ebd5b655bce57cf0a257f4cd3183666ef84c4bd52ecdd2fd","served_from_record":false,"record_id":"r173","record_hash":"sha256:428d5f7f69ba9cbe1bb4ff54361b4953bead5fab38b14d6ff9d6c93c1c9a16dc","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100407},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858449e+01"},"chain":{"prev_hash":"sha256:c28e7ca349982ec30a7ed8c39f988e638c4492b7108a315c507676f1e83739b7","receipt_hash":"sha256:cfc96e298179f9393b956e6706d327f1cbac660f3bc183c29670f5ea6366bd18","signer":"ed25519:bench-node-01","signature":"094c546b7c08bde0d1307802304c5b84556144fe80b86b6244abe4e93f06aa33fe159dced3ed8a96ec6682ae25a2971ea286ee74b8f35fdff3a48f884ba5350e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:cc02866235fd2c84b4c26343d52f7b774345a2db1c63b6af125542dd0e943021","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.876185870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.128986e-01","shared_alloc_j":"3.763286e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","served_from_record":true,"record_id":"r169","record_hash":"sha256:5899c1861eccac089cbe133fab945d22b0598b0f2365e10cd70a29f4a5f57eee","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":99989},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842280e+01"},"chain":{"prev_hash":"sha256:cfc96e298179f9393b956e6706d327f1cbac660f3bc183c29670f5ea6366bd18","receipt_hash":"sha256:ffb2b1a089d5ec53e3fc699a826c638c551457d1f4099b79691802e2184ea69a","signer":"ed25519:bench-node-01","signature":"1de333818c41cde8c85083f86cfdf933315883ebe219319291cf6099936efb30787812e2a59662eadb96d4cabfceef04ddabde55b710deb7c21f82e8cddfc30e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3d17f2922215bf8b28356affd48b6e55cc5fd9e73ad24d1f34d87fe252d39425","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.900545140588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.448187e-02","shared_alloc_j":"2.816062e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","served_from_record":true,"record_id":"r169","record_hash":"sha256:5899c1861eccac089cbe133fab945d22b0598b0f2365e10cd70a29f4a5f57eee","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":99989},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829688e+01"},"chain":{"prev_hash":"sha256:ffb2b1a089d5ec53e3fc699a826c638c551457d1f4099b79691802e2184ea69a","receipt_hash":"sha256:3565c8f753f656b168b24d28c1e9bdab9c95896076385f2498f9fdc94db650d3","signer":"ed25519:bench-node-01","signature":"f68c17038b85c38484a6441b2f0a852b720279dbf1d9f5e0713d8bd33bf48a90d402d8aa9371dd2add57efdf90ecf14c98b180213d4a692d241481b2eaa5d209"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f06fdce450fed61e054a644f768f67198835f110d8f1d0f5a556542317571290","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.298176410588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.693714e-02","shared_alloc_j":"2.231238e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":5,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.819578e+01"},"chain":{"prev_hash":"sha256:3565c8f753f656b168b24d28c1e9bdab9c95896076385f2498f9fdc94db650d3","receipt_hash":"sha256:59085f87690fd8387ba1825da13d001329ed8bd9d3768673a86666bb091a2b9d","signer":"ed25519:bench-node-01","signature":"15906291ab7ba4ac7f1191d0c1879a889acaf36c42e6302db3e39083213e147cc4c0bbc7f06b67c45aee7c87f5b6ad34be2430125d17399913b15a5af5396d0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ec29909531ef41325683ccf7d514f845be089150dbc7506958130c6e73624af4","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:08ba4fe6512d0d94de19c3932e3bff09728b6ede0b1838ff5091c9850170a516","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.859063570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.415260e-01","shared_alloc_j":"4.717534e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:08ba4fe6512d0d94de19c3932e3bff09728b6ede0b1838ff5091c9850170a516","served_from_record":false,"record_id":"r174","record_hash":"sha256:eaa4a62989bed6ee6bcfd5b2b25c5e289680ee3d6ca1245e29d8f5f7ddcef673","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100632},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852095e+01"},"chain":{"prev_hash":"sha256:59085f87690fd8387ba1825da13d001329ed8bd9d3768673a86666bb091a2b9d","receipt_hash":"sha256:ed6083cd16696c6daeaecd9b4934f8d0f47f78402524fa0b9aa84bb9ec53828c","signer":"ed25519:bench-node-01","signature":"2c81e3c1cc9f2fa6c0e0c7096be04d82911f09d1cd856bb16eefb24c992bde1531847605f9d2bacde45091005cee88da0e91f192a81b16a7f2f4241bd431f804"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:479d909b79581afd6f96f882ccd734b64d9fea4e86cb6a989b68906a9b52df1b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.639073440588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.686617e-02","shared_alloc_j":"2.562206e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":18,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.825585e+01"},"chain":{"prev_hash":"sha256:ed6083cd16696c6daeaecd9b4934f8d0f47f78402524fa0b9aa84bb9ec53828c","receipt_hash":"sha256:c7c708ba6c5002975dc2c33fec67a0eb1310e41b0fd325c0ddc27053ff1a4a42","signer":"ed25519:bench-node-01","signature":"9a378145a0c48cc7077f8075226e06dfb10c6deddb219d8b677fb8be745ab335c68a9034afbb2f3d3c85ef9e3d88de0fc9724b73804f75c2302db2f2d38cbb02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:15a825e2fd240359fd7e61919473d5643e08df2eca7fa2ba1641be1e2d3888d9","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4a81192758d20335e6b34c2b4afb8aaa03ec6ab7edae4b92d5689ea56bac885f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.796344870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.396993e-01","shared_alloc_j":"4.656642e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4a81192758d20335e6b34c2b4afb8aaa03ec6ab7edae4b92d5689ea56bac885f","served_from_record":false,"record_id":"r175","record_hash":"sha256:48f838770d2511a296324b709391e778375bc774b0eb200fd362f8ffe9eb37d3","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100753},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851531e+01"},"chain":{"prev_hash":"sha256:c7c708ba6c5002975dc2c33fec67a0eb1310e41b0fd325c0ddc27053ff1a4a42","receipt_hash":"sha256:5fa2792ad0d9df90536da3009aa69795e39b1e374183240e5a6a38d41dae4cb2","signer":"ed25519:bench-node-01","signature":"b462e1020d46a579ff651ae7e423fa4b69d849ecd2d66034c4458c39d0ec8b21a9c6283d05b7ac99e090beba6f4fc40c3396b407621625e0d876d6f86ee46406"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:877795c51398d5be57aef3709768b83743ffa03b24327eb0a57a435f6d3eb5a1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.996269470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.163962e-01","shared_alloc_j":"3.879872e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","served_from_record":true,"record_id":"r140","record_hash":"sha256:9f4054b5d15ac16ce0b79b780e5d8bf8b428262e4fd2a332ec366dce24f89c41","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":97569},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843605e+01"},"chain":{"prev_hash":"sha256:5fa2792ad0d9df90536da3009aa69795e39b1e374183240e5a6a38d41dae4cb2","receipt_hash":"sha256:c08e8ffb0e3781837591beb137e3fd9f068786295708624f3e5225c0b4195e02","signer":"ed25519:bench-node-01","signature":"6bb69bbe0eec56e25858ba36dbeb729e0edcd715931b4cd65e86e16e3dc25a1158ec7b6f93563ce897f90f3616567c0ef1a90fd31e53fcc89baf161555ee210d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:89a8f97b56b3a046f82bb78ea324401c216ccc609a6a8c66d1e66b67bdc05dde","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:aa7e52c298df874051c6d2a872415cc2dfe3f707b7195b21777823f81a44483a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.937106670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.437991e-01","shared_alloc_j":"4.793304e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:aa7e52c298df874051c6d2a872415cc2dfe3f707b7195b21777823f81a44483a","served_from_record":false,"record_id":"r176","record_hash":"sha256:7bf93cbada79514e2ab3a1dbd6db984b2d1e94b7358d0302980d39056e338b91","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100897},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852787e+01"},"chain":{"prev_hash":"sha256:c08e8ffb0e3781837591beb137e3fd9f068786295708624f3e5225c0b4195e02","receipt_hash":"sha256:fd5f2ab01bb65da16207eabab89a5f97c3de7b1bd9e22ac50c39654459af8757","signer":"ed25519:bench-node-01","signature":"a928bae10a81ffecb2f8c5c3660e86043fbc4372bb94e73608bbec462a44b18fa15136633b1188ecf8a35b06d31835e9ea4f459ce1b1d24f78f633c8131fea0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0edc545886baadd43250f608d1150bf022509fc5e2771e8e3e63b53414cb7b4a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.441080680588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.109941e-02","shared_alloc_j":"2.369980e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":6,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822198e+01"},"chain":{"prev_hash":"sha256:fd5f2ab01bb65da16207eabab89a5f97c3de7b1bd9e22ac50c39654459af8757","receipt_hash":"sha256:f1d060e55a5fb4ac85513dd8fd691432b6e0e4bf580376e55d3fc28b85ad6acc","signer":"ed25519:bench-node-01","signature":"2cffa8355a1268bf9e17af6ddef4ee3aa7e66a1617362758898954e770160c938fb0f60f845bd48de4c75101a469ff2c59535b93f0181c68cd72953a4c5ebf02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b3bed908f437449d7219db3c97abed02b7f5a6df5dc4466718dde7985d822df4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.836931090588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.350282e-02","shared_alloc_j":"1.783427e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":7,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.809849e+01"},"chain":{"prev_hash":"sha256:f1d060e55a5fb4ac85513dd8fd691432b6e0e4bf580376e55d3fc28b85ad6acc","receipt_hash":"sha256:56501fce299dfa08433f384be88e31594ce61ed2363cd98f2d943ba0dc45698a","signer":"ed25519:bench-node-01","signature":"8aad4b9183998eb638a52ee01173aef8bae9996f0773a118823688e18bbb209b9be8d4bb95afde31f4f71135d24f068436d14bc5bce8bdba54f8fbcccf4c4304"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5e564179e38e4e536dfa75eef338c3aa51b64631ba9d72e712824ee4a2406871","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.394740960588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.974969e-02","shared_alloc_j":"2.324990e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","served_from_record":true,"record_id":"r149","record_hash":"sha256:5766de1b0954020a4a5f70be2b1e114504615839e2365bda98f7b248fac792b6","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":98338},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821366e+01"},"chain":{"prev_hash":"sha256:56501fce299dfa08433f384be88e31594ce61ed2363cd98f2d943ba0dc45698a","receipt_hash":"sha256:56f406f3ed8be82d7e391c01d705697c8f11d91fc8d42a39e5ee3325d2e01d92","signer":"ed25519:bench-node-01","signature":"7eb7fb30ed7c19283ce7b797decdca32ac44875b327d41dae0b865288368cab3c8ff5790d94075676f0f2cb71ced2483f9a09924dd3a7e92d5ab17ac77a66308"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a70ed014b009167d11dfba79ca72336974096fbf1538f4f7bc03760735beef57","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:939bcc1943febcebbe225a53f2decad409bea62e86017712d04d92893c520ed4","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.689609870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.365906e-01","shared_alloc_j":"4.553018e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:939bcc1943febcebbe225a53f2decad409bea62e86017712d04d92893c520ed4","served_from_record":false,"record_id":"r177","record_hash":"sha256:5ca6219c907c8faf0a3357d950c4e0c3f4e11971260ff63baebacb89eb4ef47b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101081},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850554e+01"},"chain":{"prev_hash":"sha256:56f406f3ed8be82d7e391c01d705697c8f11d91fc8d42a39e5ee3325d2e01d92","receipt_hash":"sha256:222e84c770f840d1c8be3d60f7ca26b9fcce1c60237ed059de71ef6dde4ecbb9","signer":"ed25519:bench-node-01","signature":"6c024858197dcec89da86c91f6c1b3f1da92937020cb5f7cc30461f438f16dc0b9a8d89931de8c9ae0870e0509e44d6f04f16a820cb0b4395e0f3a61425b9104"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0a00fc916d087e1e97e7f178f0e5b16debfd2299682a75288fcdf8d59ff4e6f5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.485718800588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.239953e-02","shared_alloc_j":"2.413318e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822985e+01"},"chain":{"prev_hash":"sha256:222e84c770f840d1c8be3d60f7ca26b9fcce1c60237ed059de71ef6dde4ecbb9","receipt_hash":"sha256:51233af5f0c90b6ad9de56a0dde46c4e40a936ee89d30b0a99271b580380eb07","signer":"ed25519:bench-node-01","signature":"904147c65af4bafbc82599e12ba17776a892dc728904302e9b9c2fb909c9544cb66718afb96dd0d3b9b94f801621f62028b1feee05bd4e8aadbe63a5d1325500"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a64a9516636de24230b0522c673c44dc9d78cb5ed944899a7520e4302f0905e3","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.049145970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.761887e-01","shared_alloc_j":"5.872956e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":19,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861609e+01"},"chain":{"prev_hash":"sha256:51233af5f0c90b6ad9de56a0dde46c4e40a936ee89d30b0a99271b580380eb07","receipt_hash":"sha256:0f80b9eb70bbb94443ada3d627123a7fd7f6d357d61a62cdb1770ac6c7129133","signer":"ed25519:bench-node-01","signature":"752322cf78be11c08ddb02faea2133b7633e65bf7105ee076c7615d0658d909a7a22c247c7821db96b0f2223941fee5047ac29ce361876bc046fb9139da98b09"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:901dba6a575dd9e1a367acb47300a593cf7511dda83021cd27eae47a799210d8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9e61930db681a8926fd28a93fc21fc78d349459ebf95dbc889666f26e6a9511a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.404329230588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.002896e-02","shared_alloc_j":"2.334299e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9e61930db681a8926fd28a93fc21fc78d349459ebf95dbc889666f26e6a9511a","served_from_record":false,"record_id":"r178","record_hash":"sha256:a1a0f595b5d51aa70120ec1a80c5fc0e81f1a214da0ec256ad9def5334859d87","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101258},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821539e+01"},"chain":{"prev_hash":"sha256:0f80b9eb70bbb94443ada3d627123a7fd7f6d357d61a62cdb1770ac6c7129133","receipt_hash":"sha256:bb530ab4e4f4791221ee14415572472beac5064f27c6ba09562ff383a6fec769","signer":"ed25519:bench-node-01","signature":"0f7b76877c47b1137051ef54b51312d4d40f8b5f902803f45cf1458a3a02203ced39950d9eedb6be7cdcb55d156c0cfcda2b5e7e4769e5907a9dc6b7269a3403"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4bde394d34904b35b08a12c7ea6a586d4748b8c0902cd3cdde0edab69c0a9c17","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.928505510588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.529624e-02","shared_alloc_j":"2.843208e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":20,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830105e+01"},"chain":{"prev_hash":"sha256:bb530ab4e4f4791221ee14415572472beac5064f27c6ba09562ff383a6fec769","receipt_hash":"sha256:509254ef43e4986289db998fcdaa4fe5d65ba18152fbae12ed030ce245120d68","signer":"ed25519:bench-node-01","signature":"a39a64cd94aa04bbce547e7e31e6fdfed981b11869017f9e3a19fdf5180d3b4e0e8c2d641eda23a27f3bde48b1dfb7c0f4079b19b0237ab4d469a3a735459002"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a04e96ff84a0ccd7ca4e07f78f643d4a144c58b39af7f90635db05e523309b37","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:dde0d98cce82f3e04b6a435643bf0cc5ed3dcc0a2d028483e907de961a087012","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.147485170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.790529e-01","shared_alloc_j":"5.968431e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:dde0d98cce82f3e04b6a435643bf0cc5ed3dcc0a2d028483e907de961a087012","served_from_record":false,"record_id":"r179","record_hash":"sha256:f73ccbf34b88bb5a57be810d850e09eb29717763615d3ffc5e484ea1a988386d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101405},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.862310e+01"},"chain":{"prev_hash":"sha256:509254ef43e4986289db998fcdaa4fe5d65ba18152fbae12ed030ce245120d68","receipt_hash":"sha256:a9f87f85bda83782f522e0fecfea1858118c748db48644af66d8e100fb4059c2","signer":"ed25519:bench-node-01","signature":"9fcc2d21798af24e33ff5a716ffe7eb22e06301ad136352ad22aac410530e8c10f26c0a269376957f258b4cbe9818883b89f2b2b182601434de3461e598ecc0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:01bfdbdb0645e1f53cb18fb1f6023c208cfa85b47fc6b0c033e56b3e4a42a1cf","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:83e3ecffea2fc1d618c8e6a2b3989bbf71e691b703b087230e7c8df1a5eb2142","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.205853610588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.337434e-02","shared_alloc_j":"3.112478e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:83e3ecffea2fc1d618c8e6a2b3989bbf71e691b703b087230e7c8df1a5eb2142","served_from_record":true,"record_id":"r11","record_hash":"sha256:6b20a68c63f066ea3b3730f453a658b9fedb04fdd68d05e5b26ebcb6db3b5af8","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":87151},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834034e+01"},"chain":{"prev_hash":"sha256:a9f87f85bda83782f522e0fecfea1858118c748db48644af66d8e100fb4059c2","receipt_hash":"sha256:b447fd40f35322c980231f1f48ad8a860432e352e8ee24a513611b2ca4cf43b8","signer":"ed25519:bench-node-01","signature":"b6d28247889698564d9fd1ee7141ad190bb399c2d1406587afdd3e181972432ca0380cfb019dd325032cced6fbcb7bfe9030a764797ebb4966dff6dbe76bf200"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fcb01cc6388247dd3024be0ca988c8bb0cf17e9a3ce3d10fbbd5ecc0cbee21c1","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:7bb669efc7ef54a75650b800b852a682c0dea2c379850992581df1a10e149544","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.671227200588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.780263e-02","shared_alloc_j":"2.593421e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:7bb669efc7ef54a75650b800b852a682c0dea2c379850992581df1a10e149544","served_from_record":false,"record_id":"r180","record_hash":"sha256:403f6d0e4437c5e42111e960540a82e7276119588bfc95dc6655dad691a118b0","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101500},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826111e+01"},"chain":{"prev_hash":"sha256:b447fd40f35322c980231f1f48ad8a860432e352e8ee24a513611b2ca4cf43b8","receipt_hash":"sha256:19e74be4f94724c0ea2a293988a9df78fa6c72c9c8fd1477cb0c7d06b87f7b96","signer":"ed25519:bench-node-01","signature":"b0ba9ca372b780c93aab24dac1174af6e71a313ba383d2ac85db6bcd7718ce72f70df576819ebf73e4a727fc68305a6449166ee93afb67f2b00eb95d9a06bc02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b96470042c7aeb00d6b9b830cfa21504177585809c96ae14203e01ad0f7315cf","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.791106380588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.216811e-02","shared_alloc_j":"1.738937e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":8,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.808752e+01"},"chain":{"prev_hash":"sha256:19e74be4f94724c0ea2a293988a9df78fa6c72c9c8fd1477cb0c7d06b87f7b96","receipt_hash":"sha256:db274586136e9f9a68302de189e2d9ddd27a1acfb5128df1eacca479550f5eae","signer":"ed25519:bench-node-01","signature":"7176f73542eb1bbb373f163c7431043d59a7d164f99af46d99b6ecf01d72cb5c6f4df882e5d526c06b09046e7b9ad588079307ebf938116dcd97e982217b8c07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fead3c6b9572c36eb60444ea4770534636a8061ae510f2eaf9024cf9b4f6eac3","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:74c49c22905ea62e5a5f211dc5f47a895129ef8a84de0b3ca3c06e98b014cb87","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.718266270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.082990e-01","shared_alloc_j":"3.609966e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:74c49c22905ea62e5a5f211dc5f47a895129ef8a84de0b3ca3c06e98b014cb87","served_from_record":false,"record_id":"r181","record_hash":"sha256:b1537750aa8348ab7774307378f00565f63286c681001b65f15089a6d399f2a7","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101589},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.840474e+01"},"chain":{"prev_hash":"sha256:db274586136e9f9a68302de189e2d9ddd27a1acfb5128df1eacca479550f5eae","receipt_hash":"sha256:7f1bc82d2fb2927a19fef23c5012f17c13d7b429a7c77c91d808a17e37ead5d5","signer":"ed25519:bench-node-01","signature":"afae718e42a11090847d4788c8f992ce3277f84045066a14f37207ce2cb2ad14f640b1847c8a14ef2cef5f40e7b587c102924e542fe0902b201f548c82273601"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:47a164eb973c0cace2298d052807f95a8084ec841b2052ba5dfcbd7dcb17450e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.822095170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.219690e-02","shared_alloc_j":"2.739897e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":9,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828497e+01"},"chain":{"prev_hash":"sha256:7f1bc82d2fb2927a19fef23c5012f17c13d7b429a7c77c91d808a17e37ead5d5","receipt_hash":"sha256:f766233af47e6dd8cf155ba9b8e610601e742356d4e1b03a865f099955038bee","signer":"ed25519:bench-node-01","signature":"6cb630a2f01e6e5b961fa87f17080bf268a4cefbbc0a21fb007ee5c2723707d86529c80e7cd53e6e42f8071acde3dcdd49536d7c793344f2ca55ecb027d70501"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c2862e4732c98fc82aa79306f800c93155e90414be4ad62931ed4aaf7f0a281e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:eeefeeffb8a0a9fb80a5cbf1e129d37dde0b471996c98ef784b3e99073afef89","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.127378170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.202149e-01","shared_alloc_j":"4.007162e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:eeefeeffb8a0a9fb80a5cbf1e129d37dde0b471996c98ef784b3e99073afef89","served_from_record":false,"record_id":"r182","record_hash":"sha256:e6730dbf4bd9c99c50a65a979c748bf21cf2c1c88f8a74ffac8071aba2134018","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101702},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.845007e+01"},"chain":{"prev_hash":"sha256:f766233af47e6dd8cf155ba9b8e610601e742356d4e1b03a865f099955038bee","receipt_hash":"sha256:bdc9016ef2e17d133d089e17a0e87e31a473a8c17841982c4e7720567e5d7e76","signer":"ed25519:bench-node-01","signature":"0bba3b99d43935993708eef0c36f6ba4fa0ccb2c4c59fc4d935b4288202d39d5733a306328e25e813a1e6b829484cb407337bb96aa4c985f1e0f92f636aa0605"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:668f1e7fe193cde9ac6464c65fdd0fb373438dafd52fd23058e09646b6ee6a88","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.939454190588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.648892e-02","shared_alloc_j":"1.882964e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":21,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.812208e+01"},"chain":{"prev_hash":"sha256:bdc9016ef2e17d133d089e17a0e87e31a473a8c17841982c4e7720567e5d7e76","receipt_hash":"sha256:ad68ceeb0b2cbdd732ff71581cffd5b813c64d27e8daa27743edfbedc52b4ff6","signer":"ed25519:bench-node-01","signature":"91407469907713769373f73a1f5cf9b6952026f3a8471ac906a87fc512d36dcb1ce1068ace2da825d8d0328754185ca641d3f3c654a3af70d403c6355ae7e60b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9a17b64c79f0d77e6179c4734d7eb9727864f000d40ffec5f2738a115e9b4f92","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:aef4bb6b5fe9ccb4e86032a47f27b234eace63aa374802947a1767a90c0a8464","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.733738070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.378758e-01","shared_alloc_j":"4.595861e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:aef4bb6b5fe9ccb4e86032a47f27b234eace63aa374802947a1767a90c0a8464","served_from_record":true,"record_id":"r99","record_hash":"sha256:34c9f3f3e1e23a57db0a1c6a6a7ac46879665e16a919134e270f9bc17f8e0537","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":93818},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850960e+01"},"chain":{"prev_hash":"sha256:ad68ceeb0b2cbdd732ff71581cffd5b813c64d27e8daa27743edfbedc52b4ff6","receipt_hash":"sha256:585c4356855f60ff8c92e9ba19c186c60f61ec6e4489f385a873fe1a0f8c0b32","signer":"ed25519:bench-node-01","signature":"058c49fc627f750032dc97a29d613024465614f984baa8069e1dd4cd6f00feac816c33526a54254c6e0bbfab9c53dcc10e087976b6d7d87b43d27e7382809800"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c0bf85e7b393badfe60eabb62b84b5e9a7ea74220e590f4e395245d98de31f6a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:2150f93d600bfc917a75a44cc4db64793b61221b87f3d053e9c25c37953e88d6","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.717553500588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.915193e-02","shared_alloc_j":"2.638398e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2150f93d600bfc917a75a44cc4db64793b61221b87f3d053e9c25c37953e88d6","served_from_record":false,"record_id":"r183","record_hash":"sha256:4e28008d705ccde7d238a7ebeb481fdbe2513661785f9c1fc4b33b230d7b9589","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101854},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826858e+01"},"chain":{"prev_hash":"sha256:585c4356855f60ff8c92e9ba19c186c60f61ec6e4489f385a873fe1a0f8c0b32","receipt_hash":"sha256:077bd7b22dccf1c675413b4370b48fbe871695fee1c3758301c8390ac31acdf2","signer":"ed25519:bench-node-01","signature":"a9cebd31205b3363f1522db8bd7b07240da7cc16a82a3c1a8c963ce912c5afda875c16c98bfef136a54896126ad91eebdfb52589e0eba445bfee963a57a44501"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c4332c4ded44f423947f793a8e47ed4e38d7e7a4a10f75a47eb415146fe774bf","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.419695800588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.047653e-02","shared_alloc_j":"2.349218e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":10,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821816e+01"},"chain":{"prev_hash":"sha256:077bd7b22dccf1c675413b4370b48fbe871695fee1c3758301c8390ac31acdf2","receipt_hash":"sha256:78ffde7333c63d32d3c6b86ae5e1c830ae8c2c3cc803c8984a9eb8048f4035c6","signer":"ed25519:bench-node-01","signature":"3207308f1d4cc4c128e970fdff4893162dd4fc21b18957dcf2c854fea39632bda17489711bfd8aeb69ba5d27a941d7f48d208c095c393d66e5a7fafa653e5201"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:212c29794fc185f8ded08ab15d928376386601ba0eedd38f529614ca9c55df02","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.914355270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.722627e-01","shared_alloc_j":"5.742089e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.860631e+01"},"chain":{"prev_hash":"sha256:78ffde7333c63d32d3c6b86ae5e1c830ae8c2c3cc803c8984a9eb8048f4035c6","receipt_hash":"sha256:cae3c14c6a6fcc9fe5e2b404aa9173ffb421d6e23bdfa174de99a510fe1ee7c7","signer":"ed25519:bench-node-01","signature":"70cd8a866b8d856bb368f71f9b9bb94be05ad387e9b560146daa13604ef2600ec6b32096c334d7600d63a7668da249f2bdd4f78d339837f946352caf8291b704"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:96f7d1baf98b1f55034c4337a9723c20dab5e20795a15e8b0e2148e0c3a10d19","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:6f37d45f68c8e63262b6f5238005c8e712494dcf15281951ed02eb9edcbdd749","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.382546800588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.939453e-02","shared_alloc_j":"2.313151e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6f37d45f68c8e63262b6f5238005c8e712494dcf15281951ed02eb9edcbdd749","served_from_record":true,"record_id":"r139","record_hash":"sha256:454ce54f131e6c17e307228a92563feae01df8d8774033129589310b7a521a49","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":97478},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821144e+01"},"chain":{"prev_hash":"sha256:cae3c14c6a6fcc9fe5e2b404aa9173ffb421d6e23bdfa174de99a510fe1ee7c7","receipt_hash":"sha256:e105deced4779cbe68fe4593d3d0425cbfd5bcd83e9480f3de71c856390002c4","signer":"ed25519:bench-node-01","signature":"60dcae4582c4044fbd034b8ddc19f4b27f78885b22ab2c69d9955efa214ecb4f88e658e80bad7b8ccd0efe4a8885861d68f35c43ead4c4707bb2ef7dd9e2c10c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9e40fb9ff926224a67be4e61b46e1b3985e213defdde9d96c6298f4bb84834ff","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.247088190588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"3.632292e-02","shared_alloc_j":"1.210764e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","served_from_record":true,"record_id":"r110","record_hash":"sha256:f6dd6a74403115e1c6321158ee0e6cc71d2baddb71cdaf06b97875ebcdd7c920","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":94819},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.793030e+01"},"chain":{"prev_hash":"sha256:e105deced4779cbe68fe4593d3d0425cbfd5bcd83e9480f3de71c856390002c4","receipt_hash":"sha256:f12c9f701ac0d0716a769a3742d39500ef885263b4a27fb70e9c136fe730e7ec","signer":"ed25519:bench-node-01","signature":"ecb75ed6636a7d283185370209909ababaed06ece5ae66760f82e17958205921d280a6f396b39c1655f284c2affb0c6dd04b7515fbfef438de31f81e38dffb01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e35bb038389c942a2cda80ee130e7bc06a1fe06b696a3d7aa674fb97c3ca2d49","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.546879870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.615596e-01","shared_alloc_j":"5.385319e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":22,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857845e+01"},"chain":{"prev_hash":"sha256:f12c9f701ac0d0716a769a3742d39500ef885263b4a27fb70e9c136fe730e7ec","receipt_hash":"sha256:6f4737767ce1623abad0b9a379e745b8bcf50ad0eca5e1a55f4c824ea86f8f92","signer":"ed25519:bench-node-01","signature":"c1062d878902f564b6f66f4031002414e15c313dd4756f5443c6009aa65a81283fc8671edffb7e16213fe0b8a17baccf1cca702db16938cd4150a9957093fe0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fd247f32499ef56cccf72fc7ffdcd8185dcf6a38efa093e9808b8325ba2db34c","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.683865290588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.817072e-02","shared_alloc_j":"2.605691e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","served_from_record":true,"record_id":"r90","record_hash":"sha256:fbfb7b2e0c35a608c84403c695970a425790cfac9e71c7f2b3ab9eecb37cfc58","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":93177},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826316e+01"},"chain":{"prev_hash":"sha256:6f4737767ce1623abad0b9a379e745b8bcf50ad0eca5e1a55f4c824ea86f8f92","receipt_hash":"sha256:3580eb45412c23c6d32f6305a4d6bcac784d45996d26d543aab8d29bdb7c4b74","signer":"ed25519:bench-node-01","signature":"21efc129fa56d1935ad658ca53aa639376bdc6c0741202cb92a9f01c7d8b39250c5ffbabf5ffb8a11ce43af77ca17583e16a8a676cebdb0ca02b8aef39ef3202"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9f881273212c19cfe66812205b7b9a569a21a7bddfe053107eefc8a4acb448c2","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:06da72ce846abf2c5eadd2aab2f18cd1e5565999fe71c40809bc145b7d50dc5f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.881000770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.712912e-01","shared_alloc_j":"5.709706e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:06da72ce846abf2c5eadd2aab2f18cd1e5565999fe71c40809bc145b7d50dc5f","served_from_record":false,"record_id":"r184","record_hash":"sha256:c1a685f8a2cffa8d705d2523d9448795f00aad5329ec6e82e3e893126f2a5955","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102276},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.860385e+01"},"chain":{"prev_hash":"sha256:3580eb45412c23c6d32f6305a4d6bcac784d45996d26d543aab8d29bdb7c4b74","receipt_hash":"sha256:7d8678e17060c16576c41bae78eaac8225dc5aa37919d94abba5149a521f4ff4","signer":"ed25519:bench-node-01","signature":"21be7366ffce46c338b6d05d7d7b1042b7c51acf13a43a95b18b09e0b0d6410108c3b13c0a82bf8565237fe0c503a94667251bd7bc473f555b45a23af5d9870d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:27b4db9d1e9fbfee8f5b98859587c601f7910a4f4c3b94e89257bafd1c34c9b3","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.665134770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.067515e-01","shared_alloc_j":"3.558382e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":23,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839849e+01"},"chain":{"prev_hash":"sha256:7d8678e17060c16576c41bae78eaac8225dc5aa37919d94abba5149a521f4ff4","receipt_hash":"sha256:2450a9d6004a8a845410f6b58866c7bd6d09a4aa4e7910a7f87071cd23fe57da","signer":"ed25519:bench-node-01","signature":"41ca802ce91885076b33319a929f33ddc0701031c1e29067b01a6c4d73fb313a45614bd64d1f18214cae1fbcf4208409a5de1f65cf7cddd40acf05b10769e20b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a9e9df53f26e662cb6caa1d7a113117c08c3b159f92687edc4406b9dbc968e6e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.556658670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.618444e-01","shared_alloc_j":"5.394813e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","served_from_record":true,"record_id":"r32","record_hash":"sha256:15137fb9bb5c928e449c8d3e6b50b9ef1791b583f2bd04555aaf3a153e617bc5","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":88540},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857921e+01"},"chain":{"prev_hash":"sha256:2450a9d6004a8a845410f6b58866c7bd6d09a4aa4e7910a7f87071cd23fe57da","receipt_hash":"sha256:04a1fac0010d69395eabd9c996419880fa3939e3734bf4e091659330c63414d8","signer":"ed25519:bench-node-01","signature":"0291d0a027b5e109bf789653bac2dc7f6af7e6bd8dbf0407ec56a1172fb28fb8b23b8d60cebdca483cce5ab3566331ac102a1f6257400502d003409228790d02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f7f21ab3d5a90bced0560dabf0e7490ebf9e86cab8b29d839dd262421e88d4f8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:e794aeed80344416c0eea1f5479ecab56e92778ba0a1c0ad094b45481313cd95","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.597988600588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.654333e-02","shared_alloc_j":"1.551444e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e794aeed80344416c0eea1f5479ecab56e92778ba0a1c0ad094b45481313cd95","served_from_record":true,"record_id":"r66","record_hash":"sha256:4a7445a0dd5e1f0e63f6753a999ae0815081d2b460fe1e9cb4f40874dc5fdf5b","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":91596},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.803797e+01"},"chain":{"prev_hash":"sha256:04a1fac0010d69395eabd9c996419880fa3939e3734bf4e091659330c63414d8","receipt_hash":"sha256:ead6fb39721c14315d4ad9d29ec2275fcde958dfa52a5e346d87c303d1b42b42","signer":"ed25519:bench-node-01","signature":"bceb905efec64e518bffd3697ca9afe993ad8de729a36708c2a875360328ab2dc7b7a079211e1f64a06068e1a34223456024a66d4747e257dca7ca1c093e3f08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c9b247f7d228e46defddd052d85a025bc8def3a978e8a556282a5dbcde906565","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"6.012013670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.751071e-01","shared_alloc_j":"5.836903e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861342e+01"},"chain":{"prev_hash":"sha256:ead6fb39721c14315d4ad9d29ec2275fcde958dfa52a5e346d87c303d1b42b42","receipt_hash":"sha256:e6633cb5576910764fc49788acb1aa67db2dd578c88bd530b9b11d877bc9c547","signer":"ed25519:bench-node-01","signature":"16b70067fee2b17b3f15611c98ae53655ab400313e198cf810eafe9f7a529bfe8207900b02da6cf9ee90f0437cef050b965f1ddf19b7c1d0e4286ffcaa02ea03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e973f0b05faba566abb1bab79fc2e302c34d2720f8c4a66eb47acd8ccafa8d9d","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:961b391b8b2d819e0bd5384c0a093e3fd737cd0e8652383fbf8ce86df8e6087c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.933632470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.436979e-01","shared_alloc_j":"4.789931e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:961b391b8b2d819e0bd5384c0a093e3fd737cd0e8652383fbf8ce86df8e6087c","served_from_record":false,"record_id":"r185","record_hash":"sha256:49133790eae82117e95b6a876b150e1f15a86bedb7281462fc137a57da8113a7","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102628},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852757e+01"},"chain":{"prev_hash":"sha256:e6633cb5576910764fc49788acb1aa67db2dd578c88bd530b9b11d877bc9c547","receipt_hash":"sha256:42c1d7e3f35c1d0b82e4255e3016a7e040d1b3e2bf77f7a5a869cc347cb84d02","signer":"ed25519:bench-node-01","signature":"11ebdfc7b90219d6f95f94a7d238e04c21cc75801907441a7a304dc4face3634abda39fe7d071dbfa0c9632105eb96c11fd1fb53fa6fcf9df381f32a4b796e02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ed4910ac7d983ea9ad657c555a0f44acf85a99af63dbcd5b294c85d6be73ba42","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:ec9fbd4b6ba63997cedebf8eb7b1b1602733679e70bdb87aab8f6499ba1da719","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.488157070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.247050e-02","shared_alloc_j":"2.415683e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ec9fbd4b6ba63997cedebf8eb7b1b1602733679e70bdb87aab8f6499ba1da719","served_from_record":false,"record_id":"r186","record_hash":"sha256:063ca65efcb4564ac19d9538bbf48ede3028be096a4bc56e6455938f1308d89b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102668},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.823028e+01"},"chain":{"prev_hash":"sha256:42c1d7e3f35c1d0b82e4255e3016a7e040d1b3e2bf77f7a5a869cc347cb84d02","receipt_hash":"sha256:173cd328e70bfd592535c4c334bb55656538cdf81442629d51f8277a85f093b6","signer":"ed25519:bench-node-01","signature":"99def4a4f7f6143400f915a7966f9dec1693693176b0c7e23f457cc10f7d48ff428be5e823a87c8b83c6cf36fb638a10cb2cb44fcc7a4c15408dd7b3d1472200"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d2f536608cbc42e7c86ede74c24f1bf70a0b9554488b5f69656fe9fa174bcab4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:fb1c565303b1f155c6b39c6428631346c93ae7a3c34300d38606c842ae111be3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.269335380588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.609711e-02","shared_alloc_j":"2.203237e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fb1c565303b1f155c6b39c6428631346c93ae7a3c34300d38606c842ae111be3","served_from_record":false,"record_id":"r187","record_hash":"sha256:06b8ad0835c0538b19f8eb3cc08b5879ef7c91cc15fb8e0cb469f3d6993151db","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102705},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.819030e+01"},"chain":{"prev_hash":"sha256:173cd328e70bfd592535c4c334bb55656538cdf81442629d51f8277a85f093b6","receipt_hash":"sha256:8206886fea4fa04cae048e0b4b55ca3a6da6c7825862332879205f1d5cc6c576","signer":"ed25519:bench-node-01","signature":"89c6849be98cb526f2379de6108464479dec5381edf1396bd52d3339b12ecb93a2af91c4e61596c79a900f7c816db6d6bfd692012c86397ed879b41e1b51af05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c6d215257edc1f702c69f7a6147e588975348b5c9c8ca283e187ce6908ad6d58","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:cf49fda430355241c258ed4f604d062793a1e809eb06aa62b8eef4d5827b6660","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.295092580588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.684731e-02","shared_alloc_j":"2.228244e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cf49fda430355241c258ed4f604d062793a1e809eb06aa62b8eef4d5827b6660","served_from_record":false,"record_id":"r188","record_hash":"sha256:32291a0cdf58073a8750b8c60bec5e703cf330fa32c2e9373894cf939de88063","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102742},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.819520e+01"},"chain":{"prev_hash":"sha256:8206886fea4fa04cae048e0b4b55ca3a6da6c7825862332879205f1d5cc6c576","receipt_hash":"sha256:9fec9754003a1936ad09a1194a575818b075d20888880291b9fa39c331648fd4","signer":"ed25519:bench-node-01","signature":"71b24466d9db2c9daa488e5cb2aa6616bf5ab0a216d9b430a60624ea358661b698d4b8215d3e9dc65f6dee73f8796c9f2a34d78c50ada1a5cb66653463740603"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8c7659db6155e12461c0aee3bd022aec9caf8e0e1149a7444696d85c5506ca38","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:6737e600363f218f40dd3069f95f5dbf3c4db57424119bd7c1736a5be5cc70bb","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.735307160588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.054289e-02","shared_alloc_j":"1.684763e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6737e600363f218f40dd3069f95f5dbf3c4db57424119bd7c1736a5be5cc70bb","served_from_record":false,"record_id":"r189","record_hash":"sha256:4f8f182ed08fc41d0c234ac00c3a69d21dfa85483b6ce8f6e2e05fb0357d2c59","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102770},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.807378e+01"},"chain":{"prev_hash":"sha256:9fec9754003a1936ad09a1194a575818b075d20888880291b9fa39c331648fd4","receipt_hash":"sha256:04a28a04b2acf226a5bd34613a9e6dd72480802b5344231f18151d07963f6522","signer":"ed25519:bench-node-01","signature":"2ef78059936731f0e4702b7a6ec48bff3c16ac9dad192b2320ca260373372af6f6e1296a90210cc05ee5dcf551f09b99f0b03694a516f7b4d52789ed7d0abb0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:65d6307fb2039122e2030eccc00eeefc46bbb8c052bcd7624f147080dbaf5e64","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:82766587876a39fe044dc0896677a505d5e5def45b21bf32bcd3f0e2ed269ba2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.996150530588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.814026e-02","shared_alloc_j":"1.938009e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:82766587876a39fe044dc0896677a505d5e5def45b21bf32bcd3f0e2ed269ba2","served_from_record":false,"record_id":"r190","record_hash":"sha256:9022b949bef7cd8e3ea890d1b16f7bd5de5dcec0b037250f70de83aa5d99a0ee","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102802},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.813459e+01"},"chain":{"prev_hash":"sha256:04a28a04b2acf226a5bd34613a9e6dd72480802b5344231f18151d07963f6522","receipt_hash":"sha256:36fece5a93eb1b34ba1b958cae103104ca9fdcc9c67ae8b35f1e8416caa3954e","signer":"ed25519:bench-node-01","signature":"ab9da91f61cfd25bb7802ea4cd4995e7fe36d76d23a8cacc1e85759a749358684d3ea4ab0448c6c3fb90b1e5104680b7361cbb57ed7959f71aff5c26b5fcbb0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3011de5b2b1fb19b5d7e52829812868b986d5f401f593336114084e95a4befed","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ff23910fa778fac032c85c6568bb998c19a986333ffceece66d612ff672c1782","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.671451170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.651879e-01","shared_alloc_j":"5.506262e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ff23910fa778fac032c85c6568bb998c19a986333ffceece66d612ff672c1782","served_from_record":false,"record_id":"r191","record_hash":"sha256:42989b8189f68d0082e7dc055e36045d4dae926032e445277b02f4e4bf70ae96","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102894},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858809e+01"},"chain":{"prev_hash":"sha256:36fece5a93eb1b34ba1b958cae103104ca9fdcc9c67ae8b35f1e8416caa3954e","receipt_hash":"sha256:3e819b2ece1f47054fb08a7d10b923b3fb8a8e72c09ae8ff49bd471637d78878","signer":"ed25519:bench-node-01","signature":"61dbbf67787889a1fead93bf881cc792eab8454dd0613c2120b52127bdaf2bc869ab77d6651e784dbcaa2083bb03bfdc426826f293bda9db27a08d6f8da28601"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0ea0be824e8b2557c8b97cef77319d168ee75377c0713c1c9a58d5706f3328b7","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:9840140a39c47ebfcdda27e664a72009daffa1d975d005450a100350849daa10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.954071370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.151671e-01","shared_alloc_j":"3.838903e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9840140a39c47ebfcdda27e664a72009daffa1d975d005450a100350849daa10","served_from_record":true,"record_id":"r116","record_hash":"sha256:cae152c7d4ea4f178ff00a0ff86fd15535bff763a0dee1b34393c0e8844e4431","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":95210},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843144e+01"},"chain":{"prev_hash":"sha256:3e819b2ece1f47054fb08a7d10b923b3fb8a8e72c09ae8ff49bd471637d78878","receipt_hash":"sha256:f66e7164ef934afa1e56fc67221c401fcd22f4c5abc9ea4d86a7e9d2761ba7f1","signer":"ed25519:bench-node-01","signature":"186cf574460b0f24b359f7f621d590d8e368ffb57b196086dc48ef4a393ec354b4c50158511da2856e0cc3822cbf21a250a25aafe68b721466c475ce4d3c0e0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ea2b996e1af70cdb66f2fd9c0a4b1e91fc03f573cb6662a7d7a42a85b3c0f336","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.642050370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.060791e-01","shared_alloc_j":"3.535970e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","served_from_record":true,"record_id":"r82","record_hash":"sha256:796c66db2245954b7f1adefe6ab2b746c6c40d34fdc7990c935f119ab41d0a56","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":92646},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839575e+01"},"chain":{"prev_hash":"sha256:f66e7164ef934afa1e56fc67221c401fcd22f4c5abc9ea4d86a7e9d2761ba7f1","receipt_hash":"sha256:f0978180ae6317ca2595af7d6598f322a2fd4606bb93696cb939e66f3d00c37e","signer":"ed25519:bench-node-01","signature":"ee1ea11e2ff4919c9884522ec030af30028282147441ddce0f30d3230fb27409ce8405e6527bf9d1c50b34ff040b3a0cb6b5b6e6e46453c15ef20395a2e07f09"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:50de89039b2099624066fa37a9e3d24d98b747fac433521d04b4a0d447cac2dd","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:01322a812d2397397876595f6fc2be45dfeeed256b674f70accd6e3354059fb0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.265983190588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.512562e-02","shared_alloc_j":"3.170854e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:01322a812d2397397876595f6fc2be45dfeeed256b674f70accd6e3354059fb0","served_from_record":false,"record_id":"r192","record_hash":"sha256:40484c28a799866871a4cab4dbe55a3d6fd9ec71b583e6c548b4598113b0ba5a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":103070},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834841e+01"},"chain":{"prev_hash":"sha256:f0978180ae6317ca2595af7d6598f322a2fd4606bb93696cb939e66f3d00c37e","receipt_hash":"sha256:497efb03124c166186fdaa16be5595069e70ab771477b4b3683544a0b5e9fcdd","signer":"ed25519:bench-node-01","signature":"1a023ec6f2e1aff57fb462f2b6a3182864b771204afabe9ff3e4979184d938e7090014a20b112011828843c2dac92b072dfa6907ce72361f9b57940e71066e01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7d8747b6b816bd4a2861edfcb5b38967963f3dc11592a74427af7e5969b36ac4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:2576d606f7686868001e756e697c1c0bd80ff210c28f9626a40a0206f8740c7c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.886637470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.423292e-01","shared_alloc_j":"4.744307e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2576d606f7686868001e756e697c1c0bd80ff210c28f9626a40a0206f8740c7c","served_from_record":true,"record_id":"r96","record_hash":"sha256:f00aabe082500c634f45bf066ce0068f4071b8e5e1dd87aa9215ff18846a0c09","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":93584},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852341e+01"},"chain":{"prev_hash":"sha256:497efb03124c166186fdaa16be5595069e70ab771477b4b3683544a0b5e9fcdd","receipt_hash":"sha256:ebc70cb06292537d6f3bf62b9e61b07bfe713968a0526e67560b571ba59155df","signer":"ed25519:bench-node-01","signature":"64f3dfe8f6c0e4f5ca4bf55be6841552979d690dd90db8d81ec62b9541584f2453bb041091aa723d5394823afb5a49b22c6920224a408d4f2c966e7dd8c98d06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1b35c01674fd4453faaa8bac44aa0ae738fcfef5cfcb7a4e982e2e71ec00eb45","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5d7d5d259b708cde975291235fd292c65d84bcd5067333476c61256be72dec9a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.133356050588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.213648e-02","shared_alloc_j":"2.071216e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5d7d5d259b708cde975291235fd292c65d84bcd5067333476c61256be72dec9a","served_from_record":false,"record_id":"r193","record_hash":"sha256:840505972c746322dc68ab9977015f384d40ba56fbaffb45f6863c0f12436098","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":103183},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.816346e+01"},"chain":{"prev_hash":"sha256:ebc70cb06292537d6f3bf62b9e61b07bfe713968a0526e67560b571ba59155df","receipt_hash":"sha256:1b05e49c6f967db0c8c70acfbe81db2bb4a4c7ca7f6a31d6402e3ebfa22ebdcf","signer":"ed25519:bench-node-01","signature":"6ea26b9825476ec996e951e6465f08d71af65fec08b0e27b749dab4bd43f2aa7865c5dc6432ecf476a630ab206b35d500e7e65010b09a44b2f28371569cdb80d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ce27e6e2de835cef46f35d5231f205f36cdbfbd8a4a6a944ee1a9a943062bf6a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:a24555e7692044ccfaca766108abaf92a0eb3d523943bebf7d2eceb3f7cb2593","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.736082570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.379440e-01","shared_alloc_j":"4.598135e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a24555e7692044ccfaca766108abaf92a0eb3d523943bebf7d2eceb3f7cb2593","served_from_record":false,"record_id":"r194","record_hash":"sha256:769afc3e9e13947b6471a42ee0ab2a4a3cf94438feafe0b3757017530fe9743a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":103260},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850982e+01"},"chain":{"prev_hash":"sha256:1b05e49c6f967db0c8c70acfbe81db2bb4a4c7ca7f6a31d6402e3ebfa22ebdcf","receipt_hash":"sha256:191cefdcfbe98b9d26ad79a0044dd0c21d8793fd50765b9c3db133dcf1f1ffc9","signer":"ed25519:bench-node-01","signature":"64e9fb56c936dbcceafd303b955e7bfa2d9a6cc74c2794e896de90068be593e7302b43ebd73e1df44eba69d65730c0f1523f45bf1eebb1033819cd74dee67709"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ec51835b26c9e6d6f9f5bc6023541ffb91f0d9bf8d053a382bda29b39d4da133","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:76aa44f7b0b3b872eb243bcd0ed8bc9038d6779900791ddcf365d5805e743a5f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.951834470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.442282e-01","shared_alloc_j":"4.807605e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:76aa44f7b0b3b872eb243bcd0ed8bc9038d6779900791ddcf365d5805e743a5f","served_from_record":true,"record_id":"r142","record_hash":"sha256:dba5353f14cbe283a3df3bc0429b4d0da6169a5533118250370697129a4c0c9f","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":97827},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852917e+01"},"chain":{"prev_hash":"sha256:191cefdcfbe98b9d26ad79a0044dd0c21d8793fd50765b9c3db133dcf1f1ffc9","receipt_hash":"sha256:c421913c0d654a7db86b208a86f3068ce469c6d15ce187aa4a02ea5392328a14","signer":"ed25519:bench-node-01","signature":"e5261ad071e977c0732fcb58ea70a7d21a239d4f80fd9f55fdffee8dc53158e1fa948df3595eb74913b4d7d6efa3cc7eecca62b348c6d4cdb4caa52d92e89500"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b5269b5a913027d2c40a78de1ca776a95a68abb6c473d84ac4cf91b6c840dd1b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:3c9feb0b662a0c417a55ec5751b1c501d1d315c1d204379045c2e004b8c5c875","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.938949970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.147267e-01","shared_alloc_j":"3.824222e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3c9feb0b662a0c417a55ec5751b1c501d1d315c1d204379045c2e004b8c5c875","served_from_record":true,"record_id":"r159","record_hash":"sha256:1c1dcd4d20b2916ec8891938b92c85b6711a814628df4ca4b2ae748dea597e96","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":99348},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842978e+01"},"chain":{"prev_hash":"sha256:c421913c0d654a7db86b208a86f3068ce469c6d15ce187aa4a02ea5392328a14","receipt_hash":"sha256:bbfa0ba5946d8182ab27d68ea162945deecac377b0dba398713b0a080f496c2a","signer":"ed25519:bench-node-01","signature":"70e736eef6cbc5dfa51bbb840f2ab75e0a8d34c9eae93930775b26e9bd60f232aa7a15b950c87e53691b7ab049958440720e315b96d2c391410c1e9742d7f10a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b94ce5147c1dfe8fd7d282ccd28df54737aec70f88035608bbceb631baec8621","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.985444870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.743333e-01","shared_alloc_j":"5.811108e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861150e+01"},"chain":{"prev_hash":"sha256:bbfa0ba5946d8182ab27d68ea162945deecac377b0dba398713b0a080f496c2a","receipt_hash":"sha256:7f6962a5dd1dbd049e487cbbbe30ef55417aecc6e13bf7732e7c3eadf6f1cb56","signer":"ed25519:bench-node-01","signature":"1c6f23fa2d43ef4932b1ec27eb9c32b449f37fc68a2476ffab76be13f4baea15ff40f589f420a9933287ecec08e33a7e1c9c10a0de46288e5a88f811470de402"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:83217aef524a2f2baeca87346acf35ec27c67c8828a7a0ab3543fea8e7963de7","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.817721580588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.294331e-02","shared_alloc_j":"1.764777e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":true,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.809393e+01"},"chain":{"prev_hash":"sha256:7f6962a5dd1dbd049e487cbbbe30ef55417aecc6e13bf7732e7c3eadf6f1cb56","receipt_hash":"sha256:fa0f176183b8bfa4a7ed5670260d90cad295f0d134f4c6e6ebc71b173143c335","signer":"ed25519:bench-node-01","signature":"992d724055071364fe78592e50ec39f934bff9b727f8a48017240e9f8a8d18c11881a675604e2f74a677423f42716accba8569a9d76bf3da4fb64f2c22e13402"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b636aa270b1b43fdf70e51851dbbe38525c9641e4aff4606e2a14696c8ecbcac","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:4f997e150ba0259c9622fba72c9ccf1420961b0c877fe9ea6bd0e046da32ddee","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.723181370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.084421e-01","shared_alloc_j":"3.614738e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4f997e150ba0259c9622fba72c9ccf1420961b0c877fe9ea6bd0e046da32ddee","served_from_record":false,"record_id":"r195","record_hash":"sha256:760baeef735194d5233072d12e4f2bcd5592c5f0243f50e90391d710d5f1a97c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":103590},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.840531e+01"},"chain":{"prev_hash":"sha256:fa0f176183b8bfa4a7ed5670260d90cad295f0d134f4c6e6ebc71b173143c335","receipt_hash":"sha256:8405d52b80cf61644dcced1dc26cea63f8d81f931543c3daf296113975e0ac88","signer":"ed25519:bench-node-01","signature":"63d1d316dd73581e4395a1a72e04dc3c3f1b046417f66f13b985b33984844893cb0671b65cc819c1c584d53c2408abd050c3c82bd1ba2191c644323b1382b70f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:92d53878d2f8ca317fb78c5b6b6aba48e70f910d136bc338c137d621751dca03","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.616163870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.635776e-01","shared_alloc_j":"5.452585e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":24,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858384e+01"},"chain":{"prev_hash":"sha256:8405d52b80cf61644dcced1dc26cea63f8d81f931543c3daf296113975e0ac88","receipt_hash":"sha256:96b2155c4d0df3c2006ae003a2304d15cb3558feea8ccdbe433844dda057d633","signer":"ed25519:bench-node-01","signature":"1607f0ebb2356e2f32da5415e7b732412966b2742abed45baeb09623673017d85455e27e825e9e74c5ac16e06ad32ff6a0583fe03ff73fe5d552d62e2f146f08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bd27c4d4f2b28cbbc7c017981f2a201aa0f2ec05c6e233209b134b8e0af76621","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:e22d08cd71e4fe85157a117945884be41615af88796c53f606b47fa038bac18e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.120469870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.200136e-01","shared_alloc_j":"4.000455e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e22d08cd71e4fe85157a117945884be41615af88796c53f606b47fa038bac18e","served_from_record":true,"record_id":"r103","record_hash":"sha256:aef96891cde1778fd48eb935528ed4cc34cca76b6c77efba9276f1cf503d5bb9","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":94296},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844935e+01"},"chain":{"prev_hash":"sha256:96b2155c4d0df3c2006ae003a2304d15cb3558feea8ccdbe433844dda057d633","receipt_hash":"sha256:5897bde6e482e1574e00c533138dfb47895b28c2fe893b2a16a41aff6fbc9a84","signer":"ed25519:bench-node-01","signature":"540ff3b9305a1bddfe09bc3f5461d9a392b606ca0c8b8d1ebbe786ece2097eeece61abd888c645352165de8ab76d07ca4f715471aec528c8d37f11c4902c1e04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:315ed718208c9001cb444ad435a31b2f0da7ff4b49f9e23c3d94aacef61e5a4c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9eba0993d20b4fcc833a8898898639838baa8bda656cef4206d45b329bb3ab0a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.193493600588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.301433e-02","shared_alloc_j":"3.100478e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9eba0993d20b4fcc833a8898898639838baa8bda656cef4206d45b329bb3ab0a","served_from_record":false,"record_id":"r196","record_hash":"sha256:65bff66ef8b35f4cd7df93a868f5fbe8666319d402cfaecf38b1ee526518ab31","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":103800},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833867e+01"},"chain":{"prev_hash":"sha256:5897bde6e482e1574e00c533138dfb47895b28c2fe893b2a16a41aff6fbc9a84","receipt_hash":"sha256:ed298239ad65c9392f96ca186cab58e4beaca9d2827938853ee9fcab4f57c550","signer":"ed25519:bench-node-01","signature":"aff12c4aab743becc72bf11253d098768e34e254443ca1fbcc17d04c7acb1faa4a8d1c7d509faaadb9ae563e31a58a78b0b54cccaa9f3d4d72fbe7fdd64b610f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6295a03a102beb4b8bec696a547b781e2957ff7e258e410e1eef0b32ace90858","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.736094970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.670707e-01","shared_alloc_j":"5.569023e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","served_from_record":true,"record_id":"r32","record_hash":"sha256:15137fb9bb5c928e449c8d3e6b50b9ef1791b583f2bd04555aaf3a153e617bc5","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":88540},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859302e+01"},"chain":{"prev_hash":"sha256:ed298239ad65c9392f96ca186cab58e4beaca9d2827938853ee9fcab4f57c550","receipt_hash":"sha256:696beca6666281ffdffa1ea84fb497087239ebf5853a3eb99a9b77268a74a7dc","signer":"ed25519:bench-node-01","signature":"21d0259e119fc1b8373ef6dede219cbdd35a30a0a1704c4b6bbb53953d88d0559a1cb7e9f7f76b09d4547bb7ff95bb49ab609da5cbfef8579b29e2da6e7f1509"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0041c40432ce724f559c7ea6da47fa9438ec6e0d55cce3e6171dbd22fe5b4840","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.356435970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.268864e-01","shared_alloc_j":"4.229546e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":5,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847353e+01"},"chain":{"prev_hash":"sha256:696beca6666281ffdffa1ea84fb497087239ebf5853a3eb99a9b77268a74a7dc","receipt_hash":"sha256:5a8372fcde2193bc305e84f11a2d8719d23d2063a009ce28bc3250d43ceb67ed","signer":"ed25519:bench-node-01","signature":"870d40b5dbd19013b3a8eb4e1a705c71596df509c34faedd21546b2449d3038f11c45593b7f572ae04367f7f9cfd4d4cc9d7a11b9a7f04184ac123e3f943c002"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ecb2e11777cc75668629fd21765619c3b019efac84370f8ea2ce5f6a0aa91077","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:db77ddfc23a61c07ebd5b655bce57cf0a257f4cd3183666ef84c4bd52ecdd2fd","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.840494670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.701114e-01","shared_alloc_j":"5.670382e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:db77ddfc23a61c07ebd5b655bce57cf0a257f4cd3183666ef84c4bd52ecdd2fd","served_from_record":true,"record_id":"r173","record_hash":"sha256:428d5f7f69ba9cbe1bb4ff54361b4953bead5fab38b14d6ff9d6c93c1c9a16dc","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":100407},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.860085e+01"},"chain":{"prev_hash":"sha256:5a8372fcde2193bc305e84f11a2d8719d23d2063a009ce28bc3250d43ceb67ed","receipt_hash":"sha256:69df03be7d910ad1d4a1ad27ef409d0f65fda72f9bff516adc868285736db779","signer":"ed25519:bench-node-01","signature":"52ad94b46f94bd15e75f106fba8546a2c9f34c9c16daa42832c8672ab54b418b30ec6ec80a3a9a8da8e8422fab42b17f55d0d44b612b00ac7b763acc63b1aa09"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f9e90907134381e4abe433c7590064636a67a143faebaf2d672d8cf8d52ea327","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:9014e65fe138b28393ccb3d8d284ed537952a969e7a21268271f523fa7af84ed","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.938281230588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.558096e-02","shared_alloc_j":"2.852699e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9014e65fe138b28393ccb3d8d284ed537952a969e7a21268271f523fa7af84ed","served_from_record":true,"record_id":"r126","record_hash":"sha256:21c082b273e8dd3bf225ba9f6c5875d948da0df81a2224d3b8400cf7a1969a41","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":96382},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830249e+01"},"chain":{"prev_hash":"sha256:69df03be7d910ad1d4a1ad27ef409d0f65fda72f9bff516adc868285736db779","receipt_hash":"sha256:5b592b9936e8a7f44434ae01c29d7b60fc45ed4fa21c1b6e14052a6cfd7c72cf","signer":"ed25519:bench-node-01","signature":"53b8b2bc734d137bbf5973a34ece85d29a208f780226e4f04c8a330dd108b49774ac16008b92ec601240d75fb69983952892efb881384f95a0a52c089e724d07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3c68b0259ab1d6e7067d797e03a7e3292732a00c943afa4aeb70d7be61e5ceda","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:efbb8d25a730016e7141c8a4385a30cc196c5b7f9d238b06f6213360fb3a4888","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.366221510588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.804524e-02","shared_alloc_j":"3.268175e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:efbb8d25a730016e7141c8a4385a30cc196c5b7f9d238b06f6213360fb3a4888","served_from_record":true,"record_id":"r71","record_hash":"sha256:e6cede6feea99f953bb7617c1b457e0bd9cfe84fdff8b68ed36394aa9e7fc6a0","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":91975},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.836154e+01"},"chain":{"prev_hash":"sha256:5b592b9936e8a7f44434ae01c29d7b60fc45ed4fa21c1b6e14052a6cfd7c72cf","receipt_hash":"sha256:68c446b233068ea5486c7a0779a47fb57487c2ab78baf4d7600d2cdb83c7e29a","signer":"ed25519:bench-node-01","signature":"2e5a9df903de9579bec2a6f0cd774561fbadea540b269eb15b686f5f6623e91397abe136a629bf7ba3955bc072154205d3c9c3e8a7a0207705c30f71c8e8160b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5379a35f24eac489ed1ee376b035ef1c601ab38ee1a132404281723c33719979","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:c5acc45aa021fd76b694dadbc084a3aa9a1107f5957329ada1989fd9a13fd849","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.735409130588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.054586e-02","shared_alloc_j":"1.684862e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c5acc45aa021fd76b694dadbc084a3aa9a1107f5957329ada1989fd9a13fd849","served_from_record":true,"record_id":"r119","record_hash":"sha256:6b7084145defec11a27bbed72264c0f691eb1c3a8766ba9ffc91fdae40296056","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":95404},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.807380e+01"},"chain":{"prev_hash":"sha256:68c446b233068ea5486c7a0779a47fb57487c2ab78baf4d7600d2cdb83c7e29a","receipt_hash":"sha256:e153570d87b771f9dd3e1c2a2127d5ac1d31c29a6c3acb5c79ce736b7252c250","signer":"ed25519:bench-node-01","signature":"888b81b3c5979d161b787c351b241996a88c4603095b10f7280fa31b6b31f298ffe7e3558809b73691cfd64c052579d8764ae0e53d6faabc46f701fbf4586009"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6f794493bd3072eadfa201757b95febd8b5d5daf841a3eec68199c7a6ebe7ff7","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:3866c5ef26acc8497fff0ba0c7f2411032b993655623b854d09ef997309076c9","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.401322460588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.081519e-02","shared_alloc_j":"1.360506e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3866c5ef26acc8497fff0ba0c7f2411032b993655623b854d09ef997309076c9","served_from_record":false,"record_id":"r197","record_hash":"sha256:a9587af204c6f3a521c8368d0166284790a3c1dfa4e6af1ac5cad821d07db907","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":104210},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.798094e+01"},"chain":{"prev_hash":"sha256:e153570d87b771f9dd3e1c2a2127d5ac1d31c29a6c3acb5c79ce736b7252c250","receipt_hash":"sha256:b801e92b21178b217bae1d9621c9cf1523591dc9b084c75e3fe1430fd7c00f5f","signer":"ed25519:bench-node-01","signature":"ef83a7286e4168b8ea93155e457b01ea137dc8abb48241bdbe97a813d11d4e373ccebb7ee91899d0785ea4b5a45bac1d155d58bac589f64e7859d1c215eaf70d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b6eec6af8397e53665e8a627fe008aae64a65e9dc891091082f75dc8503de791","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.529333770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.610485e-01","shared_alloc_j":"5.368284e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":true,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":5,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857707e+01"},"chain":{"prev_hash":"sha256:b801e92b21178b217bae1d9621c9cf1523591dc9b084c75e3fe1430fd7c00f5f","receipt_hash":"sha256:f180550c40dd34a3c443cd3266c6c1911c5c62b78953cc19f3184ed3249135d2","signer":"ed25519:bench-node-01","signature":"6f4bf0668e911ccb6fd578137eaaa2cf0b083332f6a022e36d118a276b4c4b2b2af5409c42231d4278dbe31f427b51593c59ccca7a8be137815ebaff3773c301"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6476fc54fb37fb37c6b067df5ef00f51296de4aa8b56c10376cbe2cdb921f408","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:b5166dc9434ae553a99bc73fc4c5eff59caa50ac572d538e05455c4f40710854","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.264130470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.241979e-01","shared_alloc_j":"4.139929e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b5166dc9434ae553a99bc73fc4c5eff59caa50ac572d538e05455c4f40710854","served_from_record":false,"record_id":"r198","record_hash":"sha256:b90a7016e1efd8b5896062d62c394805f30d5be1f7aba2c5d26213e5576ed571","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":104369},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846423e+01"},"chain":{"prev_hash":"sha256:f180550c40dd34a3c443cd3266c6c1911c5c62b78953cc19f3184ed3249135d2","receipt_hash":"sha256:adead99a0077e6aa38c78f0f9f92811b328c5dee307b5c8f618edbd94c22e6d6","signer":"ed25519:bench-node-01","signature":"d02acc19cd797050289e999904f6c2f8257aeb4996e52893213c55cb8de43a6163c38845bda33ddfaebd8da379fece3882263a5410ff7fd9ecc20125b78e3c04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3100cb9990617bdce6b068fd6367ffb10ac9ac0ba2aa661b0cbdc61c46860aad","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.997557970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.164337e-01","shared_alloc_j":"3.881123e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","served_from_record":true,"record_id":"r101","record_hash":"sha256:423f6097e57e4c77557b0caed44714a3b731fb972ea1da097ee6162150ae2cb3","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":93972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843619e+01"},"chain":{"prev_hash":"sha256:adead99a0077e6aa38c78f0f9f92811b328c5dee307b5c8f618edbd94c22e6d6","receipt_hash":"sha256:548df3eb1d6878faed3eb35ee63b4a3900cdba9dc161306e633aa89708b72f02","signer":"ed25519:bench-node-01","signature":"61a82826320f66ecf856ad0cd5a7d20bfdb91c9bdfa70b5150a815bdb4c24f5c717f91c6760f7bffab1de6110cd64b402f068618e4ff5a00da84fdf7dee1420b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ffe8f6156b5c939d3f06da531ccded8b80f87f6af0537edd4ab9504b4046a099","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.140585590588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.147332e-02","shared_alloc_j":"3.049111e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","served_from_record":true,"record_id":"r114","record_hash":"sha256:11b74bcd9d0099b86cba50d647a39fde7bbd69fff8ab977726c7de08af14d90d","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":95088},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833141e+01"},"chain":{"prev_hash":"sha256:548df3eb1d6878faed3eb35ee63b4a3900cdba9dc161306e633aa89708b72f02","receipt_hash":"sha256:7a85baa97020dfdf72a01c5498907e3775eb1ae4b2179bf2f43a6f1c8398bb85","signer":"ed25519:bench-node-01","signature":"b47e6dae4c5f3bc0da484c1eda23f1516ca0771d5a687d557c07537aef48eec2d27d3dd95287f98e649fbeaa016949ea24d61e2761a4bb3adcfcec2cbda5500c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9a38c1c871c4bde52a7a80541c2abab952659e5bedcff24fc011d5874676f5a2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.057845870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.181896e-01","shared_alloc_j":"3.939655e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","served_from_record":true,"record_id":"r86","record_hash":"sha256:f4c7f1ad01d2d813ad75c00cc45d65ed4551e2d7454324699de36187f53cf52d","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":92951},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844270e+01"},"chain":{"prev_hash":"sha256:7a85baa97020dfdf72a01c5498907e3775eb1ae4b2179bf2f43a6f1c8398bb85","receipt_hash":"sha256:e97d4818890906fa04bc4f35d9e4d529100f68af222d9d1c0d49b26afe5930fa","signer":"ed25519:bench-node-01","signature":"8d690824f874182cf2c87fac5d8e92884e811e693b889ae8ff46bd4c0fb4b1c967bb55697e4f3bdbd84e54a7823f86fe1113aa451c93c9eef39952a39c44130f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9d2af851cb371f92efde68e979b8a629587b75000ae62a0becc8ee4f6779a9ee","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.269802200588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.523693e-02","shared_alloc_j":"3.174564e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":25,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834892e+01"},"chain":{"prev_hash":"sha256:e97d4818890906fa04bc4f35d9e4d529100f68af222d9d1c0d49b26afe5930fa","receipt_hash":"sha256:20cb844b6b382ff0ad59ad3553ef290401ea0f77006793a6cb0a735e09250654","signer":"ed25519:bench-node-01","signature":"16cb74d7b27cebaca06c8b3e69ffb5b0ed59594999315f5586a9325ed5f81a4a6198f65550b63549e4d77e846167b563616b206190dc9b1f43fa8310280b0504"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:000e84735df9a97f04df8d1eef2ce177de26030db0b4040077bcc6baf3c9485e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.863434010588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.427474e-02","shared_alloc_j":"1.809158e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","served_from_record":true,"record_id":"r16","record_hash":"sha256:3227d5f5cdb47b0c636c60fce42fed733f0e84ce2c21552a8ea3164c96c9d710","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":87438},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810471e+01"},"chain":{"prev_hash":"sha256:20cb844b6b382ff0ad59ad3553ef290401ea0f77006793a6cb0a735e09250654","receipt_hash":"sha256:220b4bd99984bc6473e7401948ebbe567463e27b8d45c41173306d4e3c6ceeb8","signer":"ed25519:bench-node-01","signature":"d700e08d133bc7fd998d9da198c286dd9ff1397e4dfe2dd07875792334a4c7f2ca213b8c36bb10130bfd9bf033430fb166b28b6defe5255bff85f9c411b98d00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:95a30002e53525f28f1348aeedb556f1a7936eb6cb8debc7b24e048902da63d0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.242835970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.235777e-01","shared_alloc_j":"4.119257e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","served_from_record":true,"record_id":"r140","record_hash":"sha256:9f4054b5d15ac16ce0b79b780e5d8bf8b428262e4fd2a332ec366dce24f89c41","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":97569},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846206e+01"},"chain":{"prev_hash":"sha256:220b4bd99984bc6473e7401948ebbe567463e27b8d45c41173306d4e3c6ceeb8","receipt_hash":"sha256:ead9abb425910f2d9dd63558a52979b2d227d2aad043ac2ae12a08224980ee6e","signer":"ed25519:bench-node-01","signature":"797fb527e5d8efc012b031163cf9efd2b8cf9050fe09633f798674bc0b94228eee7388ee3dc6995dc9c3c226a51ed169c99c9287c3aff90f36840a833233ae00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:23e3ad86c12fa2ea2c169217e6876dd340a79a6c52b934444fa1d691c26fe257","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:bba012d917b3f176c43c75c1babeca7aed6998ab35cfaa4885e98ab27b59ad9a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.331857070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.261705e-01","shared_alloc_j":"4.205683e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:bba012d917b3f176c43c75c1babeca7aed6998ab35cfaa4885e98ab27b59ad9a","served_from_record":false,"record_id":"r199","record_hash":"sha256:8d7f87e7a41047265d2e6447c0d8a25de641b35df2e2d21646634d01125516b6","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":104772},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847107e+01"},"chain":{"prev_hash":"sha256:ead9abb425910f2d9dd63558a52979b2d227d2aad043ac2ae12a08224980ee6e","receipt_hash":"sha256:3679502698f05fc9495b71e6d9c5b032d971104e7076cf3c117eeb2e87f72b0b","signer":"ed25519:bench-node-01","signature":"a62b4c386adf49fdd3f50d3fdaec622568df033ddd47fc347188f47cbfa64c84f5a7b5e8ee9ed03c15c3bcc2a0f09242de3c186ba9ee1e9b093dad4af5b14001"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:eac023f46152a1ce3ccb90e0cd43a348e86fe9aeae1eca2359db3f3fe9133289","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:3456548300328438389e70210979fd21b35f4518a9be8525a35e94da571b0bc0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.551039370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.517580e-02","shared_alloc_j":"1.505860e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3456548300328438389e70210979fd21b35f4518a9be8525a35e94da571b0bc0","served_from_record":false,"record_id":"r200","record_hash":"sha256:e101abd24d9ab038fa0aad937b49cf50562849e82002bbcb6d20322b2d9a91d5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":104797},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.802502e+01"},"chain":{"prev_hash":"sha256:3679502698f05fc9495b71e6d9c5b032d971104e7076cf3c117eeb2e87f72b0b","receipt_hash":"sha256:6cf5f3e0de15b930311f3cfddc3e9c1198e4a1aceca8e039df1a708fae1ffd17","signer":"ed25519:bench-node-01","signature":"b0ecd529f08262d301881b7767f24f092ff4cbc519f75564cba233daa6890b55f24071ee4f017d07561c90f27f017aa2272e44db279363c78808d82a1e3aac07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:80c565d47e7656e95d29a27afb6139c1f215a08da9c07cc801f3c3a1cf65dc38","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.296656350588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.601908e-02","shared_alloc_j":"3.200636e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":26,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.835247e+01"},"chain":{"prev_hash":"sha256:6cf5f3e0de15b930311f3cfddc3e9c1198e4a1aceca8e039df1a708fae1ffd17","receipt_hash":"sha256:9a33ad7d510114b45e764aee98c9882457235bcb0536ad883a8fd3a461aed276","signer":"ed25519:bench-node-01","signature":"94c3c191d6081f43e1fd8556f2c5f3c0f449cf0957e5e5bf67b4fdf9d2fe9b11c2424cb394bf6bc84203f51af9aae6773a21a9fe64ce7e623b13889eb1800800"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4515e1b7c79b620a9a984c7833202c6222b7e359f624e797855aa669d8eacbc2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.620412370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.345751e-01","shared_alloc_j":"4.485836e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":true,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":6,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.849908e+01"},"chain":{"prev_hash":"sha256:9a33ad7d510114b45e764aee98c9882457235bcb0536ad883a8fd3a461aed276","receipt_hash":"sha256:270bd2ccb0ef47548c4529e39e5b14806760dc78760c437243f566df8758d928","signer":"ed25519:bench-node-01","signature":"4e50745e764f3e2cada17d4103438b59f1a6021d73c654ab66f9dbf742b1f4944162da413d921499bcb42cfc10ed88ed754d3a348a5c9d2e37f781bc1c904a03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d5128248346d55ec4614d780487a67a85d5e4518f743152ce0f3bd75f04888bd","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:aa3a99583306b739abdaacd39acd1f489f74cd82d0c356afe5edf2662711b7a6","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.492233170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.599679e-01","shared_alloc_j":"5.332264e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:aa3a99583306b739abdaacd39acd1f489f74cd82d0c356afe5edf2662711b7a6","served_from_record":false,"record_id":"r201","record_hash":"sha256:89794de1f433bbcf6a3a57b0d7a7bf8c10c7369c10c1032cadbbf2fc06c6c24f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":105014},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857415e+01"},"chain":{"prev_hash":"sha256:270bd2ccb0ef47548c4529e39e5b14806760dc78760c437243f566df8758d928","receipt_hash":"sha256:abda3ef771a59ead343fb1a605297eecd4d0e81f473fdf2ed40b485461152f48","signer":"ed25519:bench-node-01","signature":"fda2e2432438a1645a7cac092d8cbe9ee44296fe874d26a3de503c3091f11d82407732a2cdbcf4290713c33fbfef5cf907905cee6d473131e7929fb6b2b55d07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ae090a2d19f17e086278c62e91b5bbfd05e33bb3f3abb4b0101cd317acc50247","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:6859d67dc7b9683a4f1fd9f5b965aefd8a22140e5fde07807360dc5e54dc6198","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.526457270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.609647e-01","shared_alloc_j":"5.365489e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6859d67dc7b9683a4f1fd9f5b965aefd8a22140e5fde07807360dc5e54dc6198","served_from_record":false,"record_id":"r202","record_hash":"sha256:1d775bdc298dd7321ee6032a2a8a0ed3c4adc6d72767d47e7368e96f78503e8b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":105103},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857685e+01"},"chain":{"prev_hash":"sha256:abda3ef771a59ead343fb1a605297eecd4d0e81f473fdf2ed40b485461152f48","receipt_hash":"sha256:d6d26e41e088176b75f9a028e401268cd9cb91f6b53910816818704d37c554e5","signer":"ed25519:bench-node-01","signature":"4994655bdcf5a729df233100858a3c78159f97f71c22d515c01f3be0d9d8a7797eb7dbc3d1901b03451cf8fa66c50db6d6f85f788d5cf31de4ac2173fb66160c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:511953c552940116eb147853d09104396f317e81b991898cd5da37862f41ea2f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.278335740588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.548547e-02","shared_alloc_j":"3.182849e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":27,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.835005e+01"},"chain":{"prev_hash":"sha256:d6d26e41e088176b75f9a028e401268cd9cb91f6b53910816818704d37c554e5","receipt_hash":"sha256:3c4332c89c88d2ccec4e8b55d86144fbe75a07b39a99f03d86934cad2461fbea","signer":"ed25519:bench-node-01","signature":"fab8b62781271cf61928d9352dabf8dbae6f310b004a50cfdf5be424461da067670d75b71b9a0631adad965a81cde5200944cd6495c44b4e9f78439e59bd1f03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5bff2c5f8c1099d95bd9e9a5f0c20a765332b831e965a3dd11769299e02972cd","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4d67eec84284925c3bb3e94c48c11e1e415e5b4bf6c82676bdb63f70afc5dbdf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.480818300588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.225673e-02","shared_alloc_j":"2.408558e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4d67eec84284925c3bb3e94c48c11e1e415e5b4bf6c82676bdb63f70afc5dbdf","served_from_record":false,"record_id":"r203","record_hash":"sha256:a7fbe335dff33f69fee2d2e8815ea76f439ac151592deb654339ff7695d5290b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":105196},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822899e+01"},"chain":{"prev_hash":"sha256:3c4332c89c88d2ccec4e8b55d86144fbe75a07b39a99f03d86934cad2461fbea","receipt_hash":"sha256:84b30836012971b275235ddf84618cd4022dd4b1c33051db33a323ee09bf4b10","signer":"ed25519:bench-node-01","signature":"fdc62af02c167d8c48ff409bd5460c5a5ebec489ba82997d83f2a1b3ddf1c13146b604ae163fe78eaaa4ab4692149d3bdd34f406381ba3b7e9788d1c1b2c4c08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b5210fb970c16ccc61f67c902f6dd158f13bf4186b11824f2f8f02a82285552a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:c056ecb36876fe2bda74fc48b7a32f777323cbaf6519fabddbf28ac0a87c2b68","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.263496540588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.592697e-02","shared_alloc_j":"2.197566e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c056ecb36876fe2bda74fc48b7a32f777323cbaf6519fabddbf28ac0a87c2b68","served_from_record":false,"record_id":"r204","record_hash":"sha256:7eade093335c3d832fabe272cd4af5e8030103d1d890d55ae6297f10d0a4a812","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":105233},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.818918e+01"},"chain":{"prev_hash":"sha256:84b30836012971b275235ddf84618cd4022dd4b1c33051db33a323ee09bf4b10","receipt_hash":"sha256:6753e77b901113e7e878d4cc8116be2db88ba3e56531a74274714fe9b6cde02f","signer":"ed25519:bench-node-01","signature":"86567487bc58a41a09d6a4bfe3bfc2e23456cf6dea6b827af8538c42cdfbde1cb5ad93ca8120ba55349086097e692db64220c1f31d42b9ac6b8b1c4b0ce1aa04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:eb209481ec723000d8d356a2716093e9663e134b61e0165e8da572cdc6e289a4","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.641929070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.060755e-01","shared_alloc_j":"3.535850e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":6,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839573e+01"},"chain":{"prev_hash":"sha256:6753e77b901113e7e878d4cc8116be2db88ba3e56531a74274714fe9b6cde02f","receipt_hash":"sha256:69ec1e7c6d24b0907ed63c42380f1f042e79614f7cb2dba9d5a2263d74605c22","signer":"ed25519:bench-node-01","signature":"ac360746784cdb2590250bf8fa26cd508e1273ef79d003d99fb10c405c5bdee86a90a9eef4776bd192e8a5ffbf2012bcc84f158490e07df7ec5c42b045d45806"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f1ad50488d716887a3607e790c9495b5e688a078897da86aaecbaf90da0c10c7","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.296707860588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.602059e-02","shared_alloc_j":"3.200686e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","served_from_record":true,"record_id":"r121","record_hash":"sha256:68c00c9152f36db8ef49fff21c928ac679e7a92a748171b7d820e16b09fa9a05","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":95619},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.835248e+01"},"chain":{"prev_hash":"sha256:69ec1e7c6d24b0907ed63c42380f1f042e79614f7cb2dba9d5a2263d74605c22","receipt_hash":"sha256:ffc4d46f0d838feec9334bd57d30f93ee9a8f056417f1f96926c6b941cf6e5dd","signer":"ed25519:bench-node-01","signature":"91c4230adf3a652300a5d6838fee8d16244a92e6695e9a9f99beba557cb1d7f17fc3b6c46a23df0402b3b58569df69c5c8d154469c1a6c74a7ca80845e09d806"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:54f5def4519a0c70ae6f77bdb3124afd6808f04ec08a0a2c72554d6a5bbd2cb4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.651352570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.354763e-01","shared_alloc_j":"4.515875e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","served_from_record":true,"record_id":"r32","record_hash":"sha256:15137fb9bb5c928e449c8d3e6b50b9ef1791b583f2bd04555aaf3a153e617bc5","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":88540},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850198e+01"},"chain":{"prev_hash":"sha256:ffc4d46f0d838feec9334bd57d30f93ee9a8f056417f1f96926c6b941cf6e5dd","receipt_hash":"sha256:77e3799039b0e4563b148d3d85fbed54271be9067ca21a7ddbbf5f92cd3dcd48","signer":"ed25519:bench-node-01","signature":"e8387e75bda70afcfcb7c4e1ebc312c074d836ac1f402c59301ef74765314b1e3947cac768dc7d424048c5485458892bafa7d8e564f0dd1a2718b31f61a67707"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c47e74fa03558a26b14c4364aa489b4ccb97a84bad64bf51a8412f604373a18e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.981181370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.742091e-01","shared_alloc_j":"5.806971e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","served_from_record":true,"record_id":"r149","record_hash":"sha256:5766de1b0954020a4a5f70be2b1e114504615839e2365bda98f7b248fac792b6","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":98338},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861119e+01"},"chain":{"prev_hash":"sha256:77e3799039b0e4563b148d3d85fbed54271be9067ca21a7ddbbf5f92cd3dcd48","receipt_hash":"sha256:1a9295af0ef9cf22bcfbd39ca870d7ef633e0a6e76eb93ec52087cccfa02d899","signer":"ed25519:bench-node-01","signature":"9d0c2e6389a6119245ddff9646152c8b914943093576b7f998057068214385432c506c7c18d8ac3ae4448393f853b863171ea2e578930ba91943140a2236ca0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5ab48da047cd2c57facb3bce6b60f385b991b15313297acf0ab21d2612e79e91","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ad278d6c144d6ba6abe0909ec13f4571697719ce7fc2ad60ad49fcd7a7a482af","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.353131470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.267902e-01","shared_alloc_j":"4.226340e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ad278d6c144d6ba6abe0909ec13f4571697719ce7fc2ad60ad49fcd7a7a482af","served_from_record":false,"record_id":"r205","record_hash":"sha256:d643090525613536443e5203b6a3ac0bd59f2203ab2d995b188f3c70e4eb8b05","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":105588},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847320e+01"},"chain":{"prev_hash":"sha256:1a9295af0ef9cf22bcfbd39ca870d7ef633e0a6e76eb93ec52087cccfa02d899","receipt_hash":"sha256:c6d0f9c795f2aa4366ffc0ff3e8202882be137154413612fa29d8576daeab7cc","signer":"ed25519:bench-node-01","signature":"35f6e653b34092ca8b12fce7ea76b920242d5ce1875234c5384cfc01c7364eceeffd7fd04fcbfb26c4fdfc1d50579349c9b7658426bf7259c22f79a8cfb30904"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:613e20c603c9c8671d4d233499c16730d1e7ee0c196329c718cd254b1cb15c89","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.679718050588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.892378e-02","shared_alloc_j":"1.630793e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":11,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.805964e+01"},"chain":{"prev_hash":"sha256:c6d0f9c795f2aa4366ffc0ff3e8202882be137154413612fa29d8576daeab7cc","receipt_hash":"sha256:a05f23bd8552605008a71c868003efab4ad99990170a6d582f1021ad27623466","signer":"ed25519:bench-node-01","signature":"27669da3c9e6a4d661e4eea74b1d4983ab93a15a75bd904b025ccf95a110ded5c77c6253e205c062cce9cd75f620b268117cff65aefac6c8d36c315e28e76000"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6d9921357676bfd0927533c3385aa4fc19e0042e19491be3b0b1e50d66b8907e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.143795770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.789455e-01","shared_alloc_j":"5.964849e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","served_from_record":true,"record_id":"r79","record_hash":"sha256:bc09a0b7aa34a4163a95cc14cba017fc4631050085f0f7aabbba0fffe37d0c86","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":92461},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.862284e+01"},"chain":{"prev_hash":"sha256:a05f23bd8552605008a71c868003efab4ad99990170a6d582f1021ad27623466","receipt_hash":"sha256:b53cd0867bb1bd52672d854c31fd9230a1a97b4afaa7c5c7762ad4442de177e4","signer":"ed25519:bench-node-01","signature":"b6621792af186c56a391232361edad25bfff91b69a783a46ea1808c0ed3e4893e78d15ee6397c775ca5532c246bbfd014315fa6a14df7fb0473b0420828d600e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a691bffc612e7404c84958d9b72e523c8126bb9f199fc7cd41366b4718eb63f6","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:01322a812d2397397876595f6fc2be45dfeeed256b674f70accd6e3354059fb0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.669593870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.068813e-01","shared_alloc_j":"3.562709e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:01322a812d2397397876595f6fc2be45dfeeed256b674f70accd6e3354059fb0","served_from_record":true,"record_id":"r192","record_hash":"sha256:40484c28a799866871a4cab4dbe55a3d6fd9ec71b583e6c548b4598113b0ba5a","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":103070},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839902e+01"},"chain":{"prev_hash":"sha256:b53cd0867bb1bd52672d854c31fd9230a1a97b4afaa7c5c7762ad4442de177e4","receipt_hash":"sha256:8e9f5ad45c386626c92d91ae2467b337e8f0d20cd3071afa19e98ba8e44583a3","signer":"ed25519:bench-node-01","signature":"481dca7adc2b9d2d5dcb60936f18b571d1e566919741e4a964d8824b6b1b5a9b2092ab393bd84e98dd5daba578fbc7a4077da461f3ba4d67698c0bd7d7d6240e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:cbf54ed93631f07402fd854141974bf45534386d4d3a0e61a10c487c52ca91bc","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.366997930588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.894166e-02","shared_alloc_j":"2.298055e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","served_from_record":true,"record_id":"r101","record_hash":"sha256:423f6097e57e4c77557b0caed44714a3b731fb972ea1da097ee6162150ae2cb3","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":93972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820860e+01"},"chain":{"prev_hash":"sha256:8e9f5ad45c386626c92d91ae2467b337e8f0d20cd3071afa19e98ba8e44583a3","receipt_hash":"sha256:0972266a45c8461e1b6ae8b378b39afdc9b33370479293d0eafba6fbc4a0accc","signer":"ed25519:bench-node-01","signature":"f4dfa77fe18709d14c568d3a4b97271101cecef75c90beb8c3392c71fbc72a06f43dcb90b15da317cd6e8529b80fecafde74ebeb507254fe2c365f7ebb78020e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:09d2091bbd1857daa59b4235ab4e4cf65894ace755fd184021c2f19eff9fef50","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:88c439bb9d426fb9727a854109492c31b2cbe45e6061fb213c1131f86d0a5280","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.678305770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.653875e-01","shared_alloc_j":"5.512917e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:88c439bb9d426fb9727a854109492c31b2cbe45e6061fb213c1131f86d0a5280","served_from_record":true,"record_id":"r124","record_hash":"sha256:8810d4c5f141497c4aba7d3a9b00ca77492003fe0e235e6d347a73b851966316","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":95854},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858862e+01"},"chain":{"prev_hash":"sha256:0972266a45c8461e1b6ae8b378b39afdc9b33370479293d0eafba6fbc4a0accc","receipt_hash":"sha256:892ee29c6c2d286075828bf1a43aed0cedc24a598d2b45d0047e333702c3d5b1","signer":"ed25519:bench-node-01","signature":"a3e5ed7a1581f0af09c600cfdff5a858abb2abdf95086d63c2d00776427e86caf7a6f5c9dcc10ead338df27f420b67e4fc9880a40c3d2e7e019edebc4166ea0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ff9d682e3aa8388862259100c317f3ad4478caf6ff34891812c5ba0d2ce771b6","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ca5a91e5d506197e8fd03430940a49a994c86f3b3a599cc7e4a9870d1e7d01af","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.389808770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.278585e-01","shared_alloc_j":"4.261949e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ca5a91e5d506197e8fd03430940a49a994c86f3b3a599cc7e4a9870d1e7d01af","served_from_record":false,"record_id":"r206","record_hash":"sha256:19456274dd21cd7aea78df75b7ec9ea8c08a0d61a1ea01ffc3e53e30bc1df55a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":105975},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847685e+01"},"chain":{"prev_hash":"sha256:892ee29c6c2d286075828bf1a43aed0cedc24a598d2b45d0047e333702c3d5b1","receipt_hash":"sha256:1de6ade84fcfa6337f19f3f7624793dafb4e3c23c89c1d48eaee843227e1c982","signer":"ed25519:bench-node-01","signature":"2df6a0d0d5ab12c4d3c79787cab28bee9b26fd53a4bd3883699b4778821d70531cd2da4a34845b216c83aa7cdaeba803cefdd415b384e7898f1d88816f43770b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:28b308e4c9f4842df4e76c22431ca47b5334a80a2ee39f4436ba65be8ab74a3e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:22769860872a040f92d81d780c3ead33f2c4c4693a6cbead116dbb27f5fa9744","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.103564310588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.039504e-02","shared_alloc_j":"3.013168e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:22769860872a040f92d81d780c3ead33f2c4c4693a6cbead116dbb27f5fa9744","served_from_record":false,"record_id":"r207","record_hash":"sha256:5a6bb37262aae8f484c97f8c237688921af54a7e9327e0017efb559f1fefb32c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106025},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.832626e+01"},"chain":{"prev_hash":"sha256:1de6ade84fcfa6337f19f3f7624793dafb4e3c23c89c1d48eaee843227e1c982","receipt_hash":"sha256:83fdfa283cead94f8930d89b4850b53bead17ec0dd4835ecbf7f37c854897b84","signer":"ed25519:bench-node-01","signature":"2d41fdc1fa7e8f37263f9977bf2c787a755902fbbbaa2c3716734e5a45c6c94e6aef8363beaeb9c111d52e4281ae09733639d3629f8106b6708dc0441e79930f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8031dcdac3819fd88e131bac0bb4674ad3f2ad2abc3a5321593de9e1f8c826eb","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.462801570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.008583e-01","shared_alloc_j":"3.361942e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","served_from_record":true,"record_id":"r16","record_hash":"sha256:3227d5f5cdb47b0c636c60fce42fed733f0e84ce2c21552a8ea3164c96c9d710","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":87438},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.837383e+01"},"chain":{"prev_hash":"sha256:83fdfa283cead94f8930d89b4850b53bead17ec0dd4835ecbf7f37c854897b84","receipt_hash":"sha256:bc9a819f3d20ad7a353b8660c9d48500470372874023ab018fb4588094fa3966","signer":"ed25519:bench-node-01","signature":"ecadc86f916226b235973c709ecb6a2b5989de2e7a2822941454432c1021ab6c54316106f891022558d15607bb944b707d4137287c6c1652a1559f0334c4bf02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a7a8951eee966de0dc4f8ed31bb1a349efae5dcf298a8aab9ae61d2b58a2f64c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ae1bd322166290226b5e955743760d82a71c20a05d416ba0d87c429bf3b0e67c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.732154770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.087035e-01","shared_alloc_j":"3.623450e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ae1bd322166290226b5e955743760d82a71c20a05d416ba0d87c429bf3b0e67c","served_from_record":false,"record_id":"r208","record_hash":"sha256:4cf11433ab6977a2ac8947a58a09cceeac5185eae933577c35ed820cf35f9858","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106142},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.840636e+01"},"chain":{"prev_hash":"sha256:bc9a819f3d20ad7a353b8660c9d48500470372874023ab018fb4588094fa3966","receipt_hash":"sha256:cb08c9aba1458d04d3637d4c99551643c38d57be312a73c82cfa860d34f7d6ba","signer":"ed25519:bench-node-01","signature":"d1c3d6f82496ebb42ae4bbf2403e7d83468638b1aac1386b10bb2a760e050272d650453f51d318aaef5b59e1e4509ac9dec6842e8f582c0ff6d0caf3875db40c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4956530e912527719c9cabbcc459448ff1a629592159347d7a5c5ac71d2b11e7","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:271f588ed020b0df063f75c100e10889f916ea364da298472b41f291ce3aced4","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"6.045886270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.760937e-01","shared_alloc_j":"5.869789e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:271f588ed020b0df063f75c100e10889f916ea364da298472b41f291ce3aced4","served_from_record":false,"record_id":"r209","record_hash":"sha256:2b89900c783e7267aa332c6004646ff104ee4665364f3348ac32d22a6d65b3c8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106239},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861586e+01"},"chain":{"prev_hash":"sha256:cb08c9aba1458d04d3637d4c99551643c38d57be312a73c82cfa860d34f7d6ba","receipt_hash":"sha256:f6d3f8c8b0669612cd450deb73eed43264b11c7a2f99cbecc5f420033f5faa24","signer":"ed25519:bench-node-01","signature":"21195f5cafeba7061a90690d621e29a7e9ea1980df0269d80ed0602da9c02229e741bfaab443de65bff5860ee5d3aa1309b5de624cc3510b9fab5927181e4a09"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c1f697ebed2c22fd12fefe7177848102c892ea1d2a9494d0876ca40416cb85b5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.552110340588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.520707e-02","shared_alloc_j":"1.506902e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","served_from_record":true,"record_id":"r82","record_hash":"sha256:796c66db2245954b7f1adefe6ab2b746c6c40d34fdc7990c935f119ab41d0a56","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":92646},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.802532e+01"},"chain":{"prev_hash":"sha256:f6d3f8c8b0669612cd450deb73eed43264b11c7a2f99cbecc5f420033f5faa24","receipt_hash":"sha256:53fb8f21f0a46940737b4f7a4468ba346de8cfeaf0c8e6bf948f5251e173b177","signer":"ed25519:bench-node-01","signature":"14864333e9816106496b4c3509ac9636f40a2c9cbee43d43b8bfa1f7f71c5956f2c8b10a64bcfe144fbc8d97296c65e344b335a9f35bb310916045d3956c580a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f6a171f2193c1b7a8ed37c356f92f0046e656ae029b8379de1551439f4a4e6dd","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:e6c836824528ac426cdb6b50379dc03e4effab0776267dceb4a9467298b81afa","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.137637530588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.226126e-02","shared_alloc_j":"2.075375e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c836824528ac426cdb6b50379dc03e4effab0776267dceb4a9467298b81afa","served_from_record":false,"record_id":"r210","record_hash":"sha256:eae3e92bc62f3b9f7bf2a1fbfe14437a480490257a1de5c1360f27af17d456c5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106299},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.816433e+01"},"chain":{"prev_hash":"sha256:53fb8f21f0a46940737b4f7a4468ba346de8cfeaf0c8e6bf948f5251e173b177","receipt_hash":"sha256:d6986de590f17aac2055705225c713164d7318955e3a91cd65947c46bb1710b6","signer":"ed25519:bench-node-01","signature":"4ffd3d04f866e0ecb2c5d1e0e4e35d3819a303bd078e32b6cb646a71f6f5fee74a7414e0df81a49169ec04f27a3edef18497732e28dd1d439626bf97e5999301"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4ce66a502489a3191678e233bc8f468951f567579aac3997cb49f035a8521eba","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:60819bd34d50fbc46bd50d2e6a28d1071281bcc7ba2a6e42827c0b97a375501a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.681627770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.654842e-01","shared_alloc_j":"5.516140e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:60819bd34d50fbc46bd50d2e6a28d1071281bcc7ba2a6e42827c0b97a375501a","served_from_record":false,"record_id":"r211","record_hash":"sha256:326fe839fbc052fcbbaace0955045b8e9548d1b1a2367de71664c84292601155","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106391},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858887e+01"},"chain":{"prev_hash":"sha256:d6986de590f17aac2055705225c713164d7318955e3a91cd65947c46bb1710b6","receipt_hash":"sha256:635f17ce81d1fec42a0fbff6777b815336b9ecdc9834dce4d317da457e0c43d4","signer":"ed25519:bench-node-01","signature":"8f868d5edb671ef64fd7477ef2a67198c580d821745463e4d774ba466c8566a67d0fff2db46646561b6cf1f88109b15687bca200082a7795ec1c979a194e8007"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ef8eba9471e430f4a9554bbef375e0dc44411a830299263b289cc941ec48f67e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.278551470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.537442e-01","shared_alloc_j":"5.124806e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":28,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855691e+01"},"chain":{"prev_hash":"sha256:635f17ce81d1fec42a0fbff6777b815336b9ecdc9834dce4d317da457e0c43d4","receipt_hash":"sha256:e4d2caaa36a4c892b32dcccbcac66997446de36f8537f70a7e12417a249469b3","signer":"ed25519:bench-node-01","signature":"26ae98068048e77fbb605aa1f5693224b8cd194fb85c163f143b27f032fb462d41e28984df939fef8eb24ce63a3b23d5a8cad236c7c7a1516c0861f3a05c7501"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:72093ca38cd80cb27897db7ff374d90d027511e1217f020ada6ede86b4dfa803","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:3f46492cfe2688a378181ff75608c51194302a2ff04d9ef4bef928052ea3e3ff","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.889612970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.132897e-01","shared_alloc_j":"3.776322e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3f46492cfe2688a378181ff75608c51194302a2ff04d9ef4bef928052ea3e3ff","served_from_record":false,"record_id":"r212","record_hash":"sha256:60ee6ef118725f54dbc5ef230f88bf30ffc27e8814c85b70966d9b57a47cdfe5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106539},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842431e+01"},"chain":{"prev_hash":"sha256:e4d2caaa36a4c892b32dcccbcac66997446de36f8537f70a7e12417a249469b3","receipt_hash":"sha256:24a7a1b6ca427acfa2566dae939eca53f095794a76b75bedaea79755aa397c22","signer":"ed25519:bench-node-01","signature":"0ec5c8a2f4c968679eea48a9528b1eefd6ef205ed0bc21b6a46dec3833fe57dac758caeb14875d16b7ac13dbe2fd6b63d545778549eaf8b222ab66c332dceb0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4c9852518a94a216f81bd8224aca84fbece843d642f4e2a34004a8bfeda8b29a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:05f17fd121a463594b61b4cdcf207aaa369bbb2761e582ce36c12da3375fc3c3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.317045670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.548654e-01","shared_alloc_j":"5.162179e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:05f17fd121a463594b61b4cdcf207aaa369bbb2761e582ce36c12da3375fc3c3","served_from_record":true,"record_id":"r127","record_hash":"sha256:1e50dbf0ebd87cb9ea72df72adda520521f02f0b407b8a6eda9651b7dc8ee1ed","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":96603},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856007e+01"},"chain":{"prev_hash":"sha256:24a7a1b6ca427acfa2566dae939eca53f095794a76b75bedaea79755aa397c22","receipt_hash":"sha256:bb9a8e8a3bad370e9826690c774ee698c33cb3d0f14a9e7ffc31d7d7845eb664","signer":"ed25519:bench-node-01","signature":"f2df858ae09d99e5d45e1f82630b1ed1ad3a31335c92306557108e51c9ca0d94c0532bf2b0e8cc0da077323618e92708c54ae85a92771a59d8f337cc04541508"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:576c0e94287d5f482f30e87e9027eed75c7d07702e0220afaa382b113779d110","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.837664660588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.265039e-02","shared_alloc_j":"2.755013e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":12,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828736e+01"},"chain":{"prev_hash":"sha256:bb9a8e8a3bad370e9826690c774ee698c33cb3d0f14a9e7ffc31d7d7845eb664","receipt_hash":"sha256:b5aeef1070b92d16599cdb0dcadfc56a108c93fa4c4d53d3c0c23a05cfd34192","signer":"ed25519:bench-node-01","signature":"4580b93071fbe6827266e8de8265bc2c07bb722e9ed3c330d4a5497f182625c1422eef66f91472debef77c3f35c9d04cf4c4c764566928e2fe1db2cc62fd7b0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:df10ff0495826d6392fcfadf4f722798775826ba680c07d6b815b486f2dd6742","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:1df06120a16dbc38a7af778f018c793b4b17283e0dbf1c7c323acdebc5cc84bc","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.668600700588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.772613e-02","shared_alloc_j":"2.590871e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1df06120a16dbc38a7af778f018c793b4b17283e0dbf1c7c323acdebc5cc84bc","served_from_record":false,"record_id":"r213","record_hash":"sha256:0d08b83c68c630d9a4052eb243a2d31fcf8d2fdcef073f254de81ee857a1c54d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106715},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826068e+01"},"chain":{"prev_hash":"sha256:b5aeef1070b92d16599cdb0dcadfc56a108c93fa4c4d53d3c0c23a05cfd34192","receipt_hash":"sha256:deeb8cdd911bf67ba96521da158385a80f561a798553c5ee3219783888836740","signer":"ed25519:bench-node-01","signature":"e7756cdaa694302eaa3f6c3c4cefe6b9a6d87b132884d058fc8659f7c0a5616b44bf3a160840ad94190c63c1ed1377dff136570487cb7ed924d88152787af206"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5d49f6dbbd7940cd607e942d4c24304859c0ef0039dc47b96279f3f325b0c3b4","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:356be222ab6f98d66c50ea3341980d4f6f2a51649f3224f583bfae59b72d0db0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.404356670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.282821e-01","shared_alloc_j":"4.276071e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:356be222ab6f98d66c50ea3341980d4f6f2a51649f3224f583bfae59b72d0db0","served_from_record":false,"record_id":"r214","record_hash":"sha256:a54be28cd844e5c6173e1a69e56ae5337bb2747b5cba91d01406258a70cf4297","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106786},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847828e+01"},"chain":{"prev_hash":"sha256:deeb8cdd911bf67ba96521da158385a80f561a798553c5ee3219783888836740","receipt_hash":"sha256:13be9e52af9624577d5770a135dea13b937ac73ec0a1ef225b653efe6cdde804","signer":"ed25519:bench-node-01","signature":"4b9e7fcca25fd7305da7edb218396ca401e648adda6dde83b589482aa1fb54063a93052a2e65f981b98363d163d6dee86dee21b49bbf7f1d567909ae899f0708"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4c8d30d84e56fce57ebb7f52b2e3b9c7fb5e769a03ae126c5b848d06ff6fe5b5","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:2e6bcce24324c6413e1841fbf4ccf83ba8447651cd6d25ab70dc545d67dbecf2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.791519070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.104325e-01","shared_alloc_j":"3.681083e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2e6bcce24324c6413e1841fbf4ccf83ba8447651cd6d25ab70dc545d67dbecf2","served_from_record":false,"record_id":"r215","record_hash":"sha256:9d207aefa9a4ec9effb4b333b2299d142396ddfe0877209d6f6c30066f2ac439","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106847},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.841321e+01"},"chain":{"prev_hash":"sha256:13be9e52af9624577d5770a135dea13b937ac73ec0a1ef225b653efe6cdde804","receipt_hash":"sha256:3191623c04e379e97e901261eb5e11112a4d835a10642bb2c8b3e34c5a6ded07","signer":"ed25519:bench-node-01","signature":"917f40ac774b0f76b8c3188d8f884ec3754b9132d851aa16866f9fddc3c81d95060eb84d71d1670eedcd9569e359b7af9bf236a15a5feccb816631e6f4325e05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bf16d760c700dc728bf74ac02d827ae03977d6d018b51b4bdc00ba55e9db42ef","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.641395080588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.693381e-02","shared_alloc_j":"2.564460e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":5,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.825623e+01"},"chain":{"prev_hash":"sha256:3191623c04e379e97e901261eb5e11112a4d835a10642bb2c8b3e34c5a6ded07","receipt_hash":"sha256:9205f4c1f74cb70c3f2c3c188d6f97c924fcfb3ddf97066fb59f93768d573f85","signer":"ed25519:bench-node-01","signature":"8567303922c1f279b4152281a0fc68b040aa4d295ccd5aa1555d27faf540c43b0eb0a8441ff309b03cddfc83b85609a6413ace8524e9f3ca36f7c4184a210c0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6963c7001a20371d1648c4ce71b125bcc236bb7971f2ffa7bea7170ad687d0fb","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:59687be2cc0728f45be3c434049504371152803c7205e95ceed1d12f1291f24c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.621060590588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.721532e-02","shared_alloc_j":"1.573844e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:59687be2cc0728f45be3c434049504371152803c7205e95ceed1d12f1291f24c","served_from_record":false,"record_id":"r216","record_hash":"sha256:1a022d7f3acd2db563eda7d9e8eb6f06781f728325975d78045d9061257f383a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106916},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.804420e+01"},"chain":{"prev_hash":"sha256:9205f4c1f74cb70c3f2c3c188d6f97c924fcfb3ddf97066fb59f93768d573f85","receipt_hash":"sha256:f0d8d3239ce98b12e82d92988e4cbd4d5a3363c7e47873a4c959f60834e326b2","signer":"ed25519:bench-node-01","signature":"18d5db22b1b895ef52b69d34ae2ca511c4c59ac22d94eced6f7ff4cdb25967676d14115ea345eef6bd20c90dc83c810682369f468e207022a595a520682ee10a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:049b1e21a0f8020c9301ba7d537f353179a4e17ff0a94ada671bf285a60b99fd","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.078132170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.770329e-01","shared_alloc_j":"5.901098e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":6,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861817e+01"},"chain":{"prev_hash":"sha256:f0d8d3239ce98b12e82d92988e4cbd4d5a3363c7e47873a4c959f60834e326b2","receipt_hash":"sha256:1a6955da31fe30749e784ff77d706339fd95cf6e1d0670df966f44cd61d0e305","signer":"ed25519:bench-node-01","signature":"c564eb00c941a11f1ea250da63ed344b6c1b7d1b4f70b3d15afd4826843c3212b05d847887d488f9f901c3b54ed647ffcc4fbc3a30482477836bfbe28c7db70b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c9e0435fa270d635929adee11cde0755fe41f396c26cc67e7f6756f995557ead","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:c70c4f1cfbf7f3e80ab7fd116b69405e0071bb46bac6a04135010096235a99f3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.923646790588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.602852e-02","shared_alloc_j":"1.867617e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c70c4f1cfbf7f3e80ab7fd116b69405e0071bb46bac6a04135010096235a99f3","served_from_record":true,"record_id":"r161","record_hash":"sha256:0eee3e2f9d255e1ee0143cff2061e9ca2f87125468fc3d082061511ccd760deb","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":99443},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.811853e+01"},"chain":{"prev_hash":"sha256:1a6955da31fe30749e784ff77d706339fd95cf6e1d0670df966f44cd61d0e305","receipt_hash":"sha256:cd51561275f2d40bd9854174dc0a7dcdb41db53af6f866f37c03eec3447d79c6","signer":"ed25519:bench-node-01","signature":"1bfefefeba2876ec5e268f395d274e8a7961c82aa57004b38e4b579f184e016f638a1ca26f8359690831cfa01023e102be46aaa3da9dc66cbd2deae794a7b702"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:cc5a9c93efde28878d38e8be751f95be96707386fa045f3797e7091913aead6e","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:7d4b002421433b01f9b0f76611fdfe099ed2e63b43deefa28e7ced76e9250528","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.185180490588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.364592e-02","shared_alloc_j":"2.121531e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:7d4b002421433b01f9b0f76611fdfe099ed2e63b43deefa28e7ced76e9250528","served_from_record":false,"record_id":"r217","record_hash":"sha256:bb6c7c697001ab7319d3ab4805f790d349ac7819aa2b0111a2fc4e53e86df0da","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107081},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.817389e+01"},"chain":{"prev_hash":"sha256:cd51561275f2d40bd9854174dc0a7dcdb41db53af6f866f37c03eec3447d79c6","receipt_hash":"sha256:39bb043be866829e9b1a5ff53e2112db949d08a2ca1fb2c6f7653cef698b885b","signer":"ed25519:bench-node-01","signature":"9f58741284572ee007d5adbf700001d262a51459ac10e172b1ca4e3aef32021545d16edde56d21eb7502af9f3a97513272440b349eae44c0f07ea5d333938b0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5cf656ca06e4dd110902a6e31b19f633b547e6363f85045d55007ece0952a3b1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:08823a9dcbef015dbdc1c8f4ff977078de0a188d0ec0e08e1dd7110840697ec1","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.451719970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.296617e-01","shared_alloc_j":"4.322057e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:08823a9dcbef015dbdc1c8f4ff977078de0a188d0ec0e08e1dd7110840697ec1","served_from_record":false,"record_id":"r218","record_hash":"sha256:a991e298adae8c66d805d3d89e32efdd54a3ce90c6c70ec908ff52d75a762ad9","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107153},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.848293e+01"},"chain":{"prev_hash":"sha256:39bb043be866829e9b1a5ff53e2112db949d08a2ca1fb2c6f7653cef698b885b","receipt_hash":"sha256:c9c40f96c266e3c1074254af73f4ad4b6aec2e071504e9fb4995a7a62db7b6ae","signer":"ed25519:bench-node-01","signature":"eda8940d89a879f9a14649244adc1b9a575e2dc7ca9e03b6a0a87bfde10c30a79cf470ca055b5077370091a41650a9928abe8062a27bb13a87f2f792d815d20b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a5fc05d80474f83262d1ff0ba68f31b014d6387f0af1a999f7b261cee5ef6da5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:a72d68eaba06ec4e6c963da103c9b0dc45ab7886ddc6983bfa2adda3429d7c9c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.026687370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.172821e-01","shared_alloc_j":"3.909404e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a72d68eaba06ec4e6c963da103c9b0dc45ab7886ddc6983bfa2adda3429d7c9c","served_from_record":false,"record_id":"r219","record_hash":"sha256:2b049211714704c8a911e2a2f5044079ee8b7ed2e7ba64eaa0b22014ca14d7b7","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107218},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843935e+01"},"chain":{"prev_hash":"sha256:c9c40f96c266e3c1074254af73f4ad4b6aec2e071504e9fb4995a7a62db7b6ae","receipt_hash":"sha256:60a31ea3aa7b8fdb3b30c3df863e213526698260222680447803e6fcca870bc7","signer":"ed25519:bench-node-01","signature":"a47a6ee1ff037fdcf89f25712aca1060d06a31e96b24a1d1eb9badbc3f1b2c02685f5da5e3e721c9a45eb179eb54a037b7caa76059f0d118d71bf446cc6a6802"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4a55bdec9e5196711816cf5f1071f24f2d5b9d365b2b6c2f3f5aba03b877f83c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:d72b56294d3317cd83e6e9ac76160ce7967610be483d2d4fec03730eae111c3f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.814680670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.402334e-01","shared_alloc_j":"4.674446e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d72b56294d3317cd83e6e9ac76160ce7967610be483d2d4fec03730eae111c3f","served_from_record":true,"record_id":"r104","record_hash":"sha256:294704c43530a35c5198aa215dc9b2be748cd6edafae3871155ee7b466c762d6","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":94387},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851697e+01"},"chain":{"prev_hash":"sha256:60a31ea3aa7b8fdb3b30c3df863e213526698260222680447803e6fcca870bc7","receipt_hash":"sha256:f27958bacf41a4544639c33997062cd28dd61eb31f8811153efeeb0d57f9baa2","signer":"ed25519:bench-node-01","signature":"f09bef35230ca730b83171c9ff762e4e522403565c8b3408a4a446386bd6cfd91069379326e5bbfe98ffb60f6b4be89f920b26322fb4647e02d8bd581787a304"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:edf4025fd7484b4eaf2f52753089ee544779a8d0841c0e124c3281fe5954f533","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:baea2e2ddc1e7402abc1dea416e792b9abb0db4212cd13a3bb45db038aef7c4d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.414865560588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.946199e-02","shared_alloc_j":"3.315400e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:baea2e2ddc1e7402abc1dea416e792b9abb0db4212cd13a3bb45db038aef7c4d","served_from_record":false,"record_id":"r220","record_hash":"sha256:5f0cfeddc9bd5eb0e631234b4d30877950e8da2235e5c6f0548fc2c58a7150ef","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107351},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.836777e+01"},"chain":{"prev_hash":"sha256:f27958bacf41a4544639c33997062cd28dd61eb31f8811153efeeb0d57f9baa2","receipt_hash":"sha256:4d60d5d84e9cdad95a5471e54ad01190b4a7e64245115dd3d962c5887d9afe9f","signer":"ed25519:bench-node-01","signature":"300a126a277579f52e8609f2252631267eb4a65a4cfe86a8156d115a05552dd3576b69bff9b760fa02867a656c47a235977c0746166d3e59ec5f5b87a1cb4e09"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:46bbe8507b985d572051e28a2435286f4b1840a2ee5376a832ac3018b6de234a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:a6c3f0d042a4ba209dda645c248347eb145cd28fc446dd789ef491d9befd9217","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.892878850588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.513228e-02","shared_alloc_j":"1.837743e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a6c3f0d042a4ba209dda645c248347eb145cd28fc446dd789ef491d9befd9217","served_from_record":false,"record_id":"r221","record_hash":"sha256:752c502aba28361bc552cd9f49410cd5df1940ef919265abbf795571cd2edeb8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107382},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.811152e+01"},"chain":{"prev_hash":"sha256:4d60d5d84e9cdad95a5471e54ad01190b4a7e64245115dd3d962c5887d9afe9f","receipt_hash":"sha256:dd5ef296e5b5953745a020ad293c5d11af243e2045c9c170f9795987b55f91b2","signer":"ed25519:bench-node-01","signature":"711c39aaed264a0af46cbf6ab752ff4cc1d20edd60c62883985dc3dfce9d79ef69d99935aa43562c94bc931be5a09e27c059c2e70fa05db09296484ff1746304"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:eaf5ce7a393fb53f40fdae8538fdc4f6ace75e93ac31a7bdcd03eebd733aadae","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:94d79b3b10abf3b32bc3605e889a76f62d12e9b856a159e6889a8170369dfc6d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.402723870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.282346e-01","shared_alloc_j":"4.274488e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:94d79b3b10abf3b32bc3605e889a76f62d12e9b856a159e6889a8170369dfc6d","served_from_record":true,"record_id":"r7","record_hash":"sha256:781e5562d76a8d14d316897ae18b4fd0e03f6e448e395a5a8562b43febb6786f","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":86825},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847812e+01"},"chain":{"prev_hash":"sha256:dd5ef296e5b5953745a020ad293c5d11af243e2045c9c170f9795987b55f91b2","receipt_hash":"sha256:c80e6a349208eb6dcc7f163c373142bd57042069e25b9e86db89b019b0ba2dca","signer":"ed25519:bench-node-01","signature":"2d790809be7a73c3b64b7144747c6123968d38a1fdaa703a520821ecf1e980bc0770ccd9e00797179fb76377429ce7871c03d2ddf55f2d6bb348d49048dea900"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:75e462cc138a8c229676b33b5458007033593d383cba282a3a2565edb8e34db1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:61a0b81dbab0cff6da1d675d0857ca934485b1cb836416a15a76ff0cbb083b6a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.787188260588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.205399e-02","shared_alloc_j":"1.735133e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:61a0b81dbab0cff6da1d675d0857ca934485b1cb836416a15a76ff0cbb083b6a","served_from_record":false,"record_id":"r222","record_hash":"sha256:43ccc74f6d16f44fd16950fa3833c92acc7626c9751f31da8d7c900e792bb46e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107482},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.808657e+01"},"chain":{"prev_hash":"sha256:c80e6a349208eb6dcc7f163c373142bd57042069e25b9e86db89b019b0ba2dca","receipt_hash":"sha256:7a98efe5d3262b4a9bd0c458ff9de13b6a9230c5f3f2a0253a4721b8eb05f42b","signer":"ed25519:bench-node-01","signature":"4ad6a75ee85b6d27bc5057bd25cadbb535c445bf42862e5150e3bfd97d9bd3f5443cb0cfef28ab6da5e00df82ba46544d1de0219cf2b7e0af861d3ba3880f00e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6cd40e36a47523aa1d388b161ce440218ae71651f95acf34fdf5d134276b7486","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:c8fedcbf10aee8438e76d85876f93595fdbbe423e074c2031a7b547557e07c6b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.973005470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.739709e-01","shared_alloc_j":"5.799031e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c8fedcbf10aee8438e76d85876f93595fdbbe423e074c2031a7b547557e07c6b","served_from_record":false,"record_id":"r223","record_hash":"sha256:062ec5534bf76b9cf64cc6a713a836cc82216435c022a5b68355986d4701a6ab","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107579},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861059e+01"},"chain":{"prev_hash":"sha256:7a98efe5d3262b4a9bd0c458ff9de13b6a9230c5f3f2a0253a4721b8eb05f42b","receipt_hash":"sha256:c5e51a2c8d0ca6f0202f9f47e15e87cb77928a899bd0a23c7ba0f2f3615cf798","signer":"ed25519:bench-node-01","signature":"2338048bd9488bd0214960bf3986c84b46c526fd1695b1dff5c0a9612be394f0743c2a2c6db7205b5bc3d42d9c8d5fe5081b288242e57bc98a630b1c57c6980b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7fc200ce510345ce8f370a95a30ad5de6a67bac6bcc340a7bbc26becc69ec949","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c41d282f3a696a65be713156d86b2375f5d0733fefc81f28d26cd8c6b35f0d96","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.381130170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.567319e-01","shared_alloc_j":"5.224397e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c41d282f3a696a65be713156d86b2375f5d0733fefc81f28d26cd8c6b35f0d96","served_from_record":false,"record_id":"r224","record_hash":"sha256:70e2b67aea7506863292a9cadbf74f84e176da907effef97f273da2c209a6952","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107666},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856527e+01"},"chain":{"prev_hash":"sha256:c5e51a2c8d0ca6f0202f9f47e15e87cb77928a899bd0a23c7ba0f2f3615cf798","receipt_hash":"sha256:1f9e2f2901b9b1c7dd5aa1f4be0eafb9d8e093919e80f38e2ea156727414d728","signer":"ed25519:bench-node-01","signature":"3a8d70fd5d0bb35f75dbe1ee8e816cd67639146942703bc1bcddc09416c90dc277647ede1a4c453b7ef42d058eb302fc3e42506aaf657e118c0875c7160c5c0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f8be4154f4c365753aeb67a952ef558e0ea0576a75b0c38c9268599b498c449c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.979249500588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.677423e-02","shared_alloc_j":"2.892474e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":29,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830851e+01"},"chain":{"prev_hash":"sha256:1f9e2f2901b9b1c7dd5aa1f4be0eafb9d8e093919e80f38e2ea156727414d728","receipt_hash":"sha256:f496cb29180e1b9fa26cdc7423baff9d8504aec3f2551febcf6c54863b518f23","signer":"ed25519:bench-node-01","signature":"a842af126aa02b71df0715a0dbe091114b7d74775aaa04467f960566a7fdba448d88fd9a718eb1a3f4143c466a40a000e54155ad1e999e14998cf706dd2f9600"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:333dadd7fd12bbdcf7f778f4a2362e39e42cd452c25cd086264121f0d1794310","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.052644870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.762906e-01","shared_alloc_j":"5.876353e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":30,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861635e+01"},"chain":{"prev_hash":"sha256:f496cb29180e1b9fa26cdc7423baff9d8504aec3f2551febcf6c54863b518f23","receipt_hash":"sha256:9f6d6a888b0ed45847d2452bd7a0dc603376c2bddf033f63a32652fdcd04f132","signer":"ed25519:bench-node-01","signature":"aec2cd01c5afe3b07f30176e125d50c0b6c5a102372f1b4da328d6f2204ba25c5df1d9485d5ae76399a99d1fb36af43450774d568388695bc3fa17773021b50f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:01ea7cfe6dda05efc017061f8f13824932a931ee5eed8014ea7eb676f81f37d2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.870765970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.127407e-01","shared_alloc_j":"3.758024e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":31,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842220e+01"},"chain":{"prev_hash":"sha256:9f6d6a888b0ed45847d2452bd7a0dc603376c2bddf033f63a32652fdcd04f132","receipt_hash":"sha256:5c1c5bdfacf9f0184a47c7d7c8f43b555d25207c86b08cac1bdc383429b754f0","signer":"ed25519:bench-node-01","signature":"a453704554c28f2ac9213144474c1148e6a2a5552613c5745ffb3ab740ba8c5dd6152261159bb38cfb3ff664e108d5bab1bae9290ab772ef6ae22f1c2c267b0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7a4b0c28965d5b62b3904be3c1e5fd5421b0b943ecdf4f0710e5912987164aa8","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:438a74c1788de475b657a4d1a2b945c0fb090bbe37edf316b3c95a620c37123c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.629935970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.348524e-01","shared_alloc_j":"4.495080e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:438a74c1788de475b657a4d1a2b945c0fb090bbe37edf316b3c95a620c37123c","served_from_record":false,"record_id":"r225","record_hash":"sha256:400d079dcff9ddd209968e71526c9c47a9bce68eedeb8d849910b4300be84cb5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107950},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.849997e+01"},"chain":{"prev_hash":"sha256:5c1c5bdfacf9f0184a47c7d7c8f43b555d25207c86b08cac1bdc383429b754f0","receipt_hash":"sha256:7eea9cb706bbb1a4da8d02bab8331174c6e631c7a5dfb569baa1dc80a7597f97","signer":"ed25519:bench-node-01","signature":"b7ce822f36649b4ab1dac346af04339f9ff83aaa7dba4d1e9cb0cf853e1afded071de92fbf71998e66b9580df85f43b6d49ef44797e8477cc32cd7b3bff2e20c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f236de254b3a38140b04a5ce599cb4050955b5388c2e7752ec7757575ef7d2c7","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:a2df2bce62fb8f386af6a70e7ec36d477087420d1b44e15eda7e965a9d1feb43","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.130999170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.206790e-02","shared_alloc_j":"2.068930e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a2df2bce62fb8f386af6a70e7ec36d477087420d1b44e15eda7e965a9d1feb43","served_from_record":false,"record_id":"r226","record_hash":"sha256:245165e139ac14867855921e81154aa5d6ec31178bbe3d1fe6cfe73875a419e3","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107984},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.816298e+01"},"chain":{"prev_hash":"sha256:7eea9cb706bbb1a4da8d02bab8331174c6e631c7a5dfb569baa1dc80a7597f97","receipt_hash":"sha256:7e4bf8efb8b21a3b4965dce477d070341cb57ad0240328d610bd6a9dae461673","signer":"ed25519:bench-node-01","signature":"d0b2bfc6ab6d9604f3dc656f4d98d4f903bc0e211bb60cd333089cfb03fb0323fa9f9feaaae19c9cfeed65021e3f9ae9506d73a69d7b11f296ff3fe336c50408"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c0f627bc2329a3223d4f7e18cc6d71af62adef90c516d2906d45e059ef5c52cd","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:154acd6e250ebe25f69cf2b239edab416d7fe7fb6baccff9ac3d51823d7f3485","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.020642370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.171061e-01","shared_alloc_j":"3.903535e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:154acd6e250ebe25f69cf2b239edab416d7fe7fb6baccff9ac3d51823d7f3485","served_from_record":false,"record_id":"r227","record_hash":"sha256:4247199bf03398aa35a621eff8640cc5ac315d64031ab9ff84fefb3b4715403a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108049},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843870e+01"},"chain":{"prev_hash":"sha256:7e4bf8efb8b21a3b4965dce477d070341cb57ad0240328d610bd6a9dae461673","receipt_hash":"sha256:0708d590bf06285f861c249a0630914a2e263c558ab6865fb83058c14971bffc","signer":"ed25519:bench-node-01","signature":"2ea8e740ccadc488982e76497dcc97a806bbae03b661e78c4020db4527c26b51027fb83bb24b0b03b6eeb639d0701aaf165bc9cb85c2f18c72c800c498bde303"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ddb1c81285cb7996160580de77e525a413f27e8e0659c9fc22d28805bab17c11","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f31f9da7b2fa4c561c8ee66224a278001052b8b99d6dbe7c209883d758145f3a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.524298770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.026495e-01","shared_alloc_j":"3.421648e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f31f9da7b2fa4c561c8ee66224a278001052b8b99d6dbe7c209883d758145f3a","served_from_record":false,"record_id":"r228","record_hash":"sha256:c1091b6050ad597014c5f10e8e46bf21c85d9b1a93152ddac1726e2228f54e40","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108106},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.838147e+01"},"chain":{"prev_hash":"sha256:0708d590bf06285f861c249a0630914a2e263c558ab6865fb83058c14971bffc","receipt_hash":"sha256:dd2fe067ac3623d6d10e1104b71009a261cee6864d43486a9993513a4e035d89","signer":"ed25519:bench-node-01","signature":"4750b6bc50f98cbd9ae3fac4241bf641f1997628b93927458af918a55dee6bb8c0b10aa5b94674b7aaa5846d4283723953f6bb3fbf9fd3d7942f691a77007d02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e7d35a472344ec5adee8a0fa22c4bdb4dca4b693f7f7479d8fb8dae393e014fe","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5e7f52ad100fb57bec26eeb1324cc66580a86ca22b04827207046febf1b20a4b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"6.145659270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.789997e-01","shared_alloc_j":"5.966656e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5e7f52ad100fb57bec26eeb1324cc66580a86ca22b04827207046febf1b20a4b","served_from_record":false,"record_id":"r229","record_hash":"sha256:643279746987b5c7aab5c327e54ae755b16edda073294a8cecf943d759241a0d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108206},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.862297e+01"},"chain":{"prev_hash":"sha256:dd2fe067ac3623d6d10e1104b71009a261cee6864d43486a9993513a4e035d89","receipt_hash":"sha256:9691c03cfa8c9738b45294222990d0b2a846a5983278bd4ee633c03cedfc4544","signer":"ed25519:bench-node-01","signature":"8401518f296cb7b55787dc021d0ba00c8915dfd93c6330bc3df168969f76445ae893de9a824df43f2679f81772b644cad7a6036f30c0b16ecade2680ff338b03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5d612ac1ec5763429f736b047afa47f65a4fb65ccbe79944e75224ec2b6c4492","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:4c744e2ba5337d8ddbf322da9a54af286783ecf207c9c30c67beb264b801d5e3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.791680320588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.131105e-02","shared_alloc_j":"2.710368e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4c744e2ba5337d8ddbf322da9a54af286783ecf207c9c30c67beb264b801d5e3","served_from_record":false,"record_id":"r230","record_hash":"sha256:e9e9e27561ed0c184923d342fb04bfe0ca134f52101f78cecdbbdf8a274e9d99","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108251},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828027e+01"},"chain":{"prev_hash":"sha256:9691c03cfa8c9738b45294222990d0b2a846a5983278bd4ee633c03cedfc4544","receipt_hash":"sha256:9da6261926b19538b245b80750cfc57f76c735e704bd4a7207601fd7d572cad2","signer":"ed25519:bench-node-01","signature":"63daa4dce1d780df8f119cff8250084842f21a06abf6a4703ce6ed5ed5b46c2fe941dec9f4b31957bf8a2ed0def4f5e465162eaed323558e971d4ca88715fb09"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3aae11c22157d3b92e12114e400f5bd4243f9c8112cb16515eb5c4bf1fb58270","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:7aaecc08a0df481f598610afab8692f5ddca7549188b4b2fcc06d2adc2b91739","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.134492770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.495482e-01","shared_alloc_j":"4.984941e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:7aaecc08a0df481f598610afab8692f5ddca7549188b4b2fcc06d2adc2b91739","served_from_record":false,"record_id":"r231","record_hash":"sha256:d3a14c7700dbd53eb98cf797e55c0596f5ecfbbb221507fecfff793c08c7e257","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108334},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.854490e+01"},"chain":{"prev_hash":"sha256:9da6261926b19538b245b80750cfc57f76c735e704bd4a7207601fd7d572cad2","receipt_hash":"sha256:344ddc326e01960e89f95371d5d6c6050db95e793e9db314456209810b559169","signer":"ed25519:bench-node-01","signature":"6184ef551cf09138ff8447c2761e2747e641f4f81a8a74bb5b45ece29bf6333564d02ecacd47d462d437f1104d2f3b1e3727bae84e40aa5dc1a613e78e78c30e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:18811e638727cf8ecf763308d225a33f8c3471998521f77bcb676185b8018e9f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.823300280588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.223201e-02","shared_alloc_j":"2.741067e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":7,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828516e+01"},"chain":{"prev_hash":"sha256:344ddc326e01960e89f95371d5d6c6050db95e793e9db314456209810b559169","receipt_hash":"sha256:54426043ab38cd1ba339ae3b1b95d31bc87e7e507d3d144e10ad9a4c5f05d1b3","signer":"ed25519:bench-node-01","signature":"a83c213d8e23ba6376a82f4babfa727d1af46091386ab81eab62f0466437c3fe303a677c28e7af26e91b1786d52afbf4ba4a0e7c98a6392ecb256917a0329502"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e0db778409d677ab3a4601fe6918d5b28f383763c4b09c1fd9f18ba8c8b87f55","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:b38cd1f33a130455853b4e6fce41ca504f4173d34ad1f99470b37673b5f8daad","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.053914200588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.894893e-02","shared_alloc_j":"2.964964e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b38cd1f33a130455853b4e6fce41ca504f4173d34ad1f99470b37673b5f8daad","served_from_record":true,"record_id":"r40","record_hash":"sha256:51291ee97ebadde6d89c8d4fa2e638e63df1dad7d9b4204cf60a7cc2731225b7","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":89180},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.831926e+01"},"chain":{"prev_hash":"sha256:54426043ab38cd1ba339ae3b1b95d31bc87e7e507d3d144e10ad9a4c5f05d1b3","receipt_hash":"sha256:f4ce5969eca1ec82ab4d65ad6d3562f6ef32de6800e5392fb91ed0d5760ba34d","signer":"ed25519:bench-node-01","signature":"d79f29c6821a43cb113a9d6dc1a762f12effc498b917d40b5425da98e17e6bf8ace624f2e22843abad27686a6296666e190c6639292db223a27c0dea5bb95f0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6cbef0b7dc871680a390c68945653e2a90dbe52ab2242358f6abb5b43859f99d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.136803450588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.136318e-02","shared_alloc_j":"3.045439e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","served_from_record":true,"record_id":"r86","record_hash":"sha256:f4c7f1ad01d2d813ad75c00cc45d65ed4551e2d7454324699de36187f53cf52d","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":92951},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833089e+01"},"chain":{"prev_hash":"sha256:f4ce5969eca1ec82ab4d65ad6d3562f6ef32de6800e5392fb91ed0d5760ba34d","receipt_hash":"sha256:f603c09468523cc0f2525e47efa092c5e46baf7b9b6f121a4eecbde10fb58e8e","signer":"ed25519:bench-node-01","signature":"11b06445fb625780715aea7198861a6c7a89e447701719303d974da4f2760b40c15f67ee6cbf4b6422896533c03791a46ee71ddc588b61688f8793d681b4de0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0b8bc5dcd6cb2024ff23596b0b7b70575f84e1742b267ab9d458f95b335ed7bf","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:32b537f7e4ab7f4fe4cb1b7c4b9cce051eecf472dbc477146b1292f4d175660b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.665968970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.067757e-01","shared_alloc_j":"3.559192e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:32b537f7e4ab7f4fe4cb1b7c4b9cce051eecf472dbc477146b1292f4d175660b","served_from_record":false,"record_id":"r232","record_hash":"sha256:c61d0e73507b3f630e75b1f964baa55d47d72ec16007784f13748a4b2fbced44","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108539},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839859e+01"},"chain":{"prev_hash":"sha256:f603c09468523cc0f2525e47efa092c5e46baf7b9b6f121a4eecbde10fb58e8e","receipt_hash":"sha256:298d03e9f1d42ab1cea770a925eaa11a6340bf3bc3966607fbf842f7462e6489","signer":"ed25519:bench-node-01","signature":"fbdfba2b5e874bbcfeeaf8ed2e5eee91a942d98edcf6e8a117155d7bf8c747898e7ee205b9b7fcb14ff0d0bc611ff0ade6ca1819663b13fcea4d6ad80a367d01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d24e0a25a219dac723f5ec65f565bd262208d7136c5e01cac8782c36e52def8a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:434c21a52f0ec696ed9ace53a471ae38f5ade0437b95c87c88db4fdb7b5e41ba","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.623540670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.637924e-01","shared_alloc_j":"5.459747e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:434c21a52f0ec696ed9ace53a471ae38f5ade0437b95c87c88db4fdb7b5e41ba","served_from_record":true,"record_id":"r67","record_hash":"sha256:23efb9145121ff13e6bc533cec9c6f85c7a20b651f5ea4726d7cae63f5299534","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":91662},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858441e+01"},"chain":{"prev_hash":"sha256:298d03e9f1d42ab1cea770a925eaa11a6340bf3bc3966607fbf842f7462e6489","receipt_hash":"sha256:081406fd2ed4270898ce48d25f1ee954fa8be42ef977dfc9323c9d2e1a3b235f","signer":"ed25519:bench-node-01","signature":"294a85c7357dec87c38ee0717e68af7d2d0c403e12a476c815fbd1ad0cac16f674303bd30adff252b65bf3167fd8b8e62573a6cd897e0d42d9cb08cf75c1b301"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:638acd75ee9fe7b8c18e716d2553456a81c0cb2dc99d40f8eb8efc458750da5a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:0666d33c6587bdf37dfd5f26f63169d9428a4ad5b14f750a409cf5aac0ea7bea","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.702920770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.369782e-01","shared_alloc_j":"4.565939e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0666d33c6587bdf37dfd5f26f63169d9428a4ad5b14f750a409cf5aac0ea7bea","served_from_record":false,"record_id":"r233","record_hash":"sha256:4ddda04b57cc493a16c2c2d5e58661717887d4daab653135d566371b8acc06c7","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108706},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850677e+01"},"chain":{"prev_hash":"sha256:081406fd2ed4270898ce48d25f1ee954fa8be42ef977dfc9323c9d2e1a3b235f","receipt_hash":"sha256:d19a44594acacfb14898015551db7d17d5e2867ce2b8c532be7db2c559f9f26c","signer":"ed25519:bench-node-01","signature":"8460fe7c535fd64d7bd6796a73562d92293e0e7ba557e3871d2cfab1e5ee3fed024659b42e5dcbf9f088dc7a23f40dc3ac766f3124e9b70a9278042a759f9101"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:798ab238bfba2cf106a88456cf572558f8a6053d4dfbc9e6b816d2a287390001","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:08885ac376dea4446461fdac10faefce43c5e98f66020ca04ca3e368710cd98e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.369834550588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.902428e-02","shared_alloc_j":"2.300809e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:08885ac376dea4446461fdac10faefce43c5e98f66020ca04ca3e368710cd98e","served_from_record":false,"record_id":"r234","record_hash":"sha256:065db1263d16d95d3dc3b1d2cda0c0ca407f0c476b161babffa42f660d91c02f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108744},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820912e+01"},"chain":{"prev_hash":"sha256:d19a44594acacfb14898015551db7d17d5e2867ce2b8c532be7db2c559f9f26c","receipt_hash":"sha256:9be87dc5801d8462094c0517f1fb1f7f04ff1b23df898fea1e40e65818dd84d3","signer":"ed25519:bench-node-01","signature":"cc84d7f7d69996c47ef6d5a9310704eafdc8b7338009f4f6016eab18ae5aadaa65e606862a86d08a420a15d978beb37a7df7301db6c75d6dd212f079ae5b2d0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c3a8583571c5c2676ec85bffc610c7055e6a542cd54d12a6c049be81e6703ed2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.329953760588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"3.873649e-02","shared_alloc_j":"1.291216e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":32,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.795824e+01"},"chain":{"prev_hash":"sha256:9be87dc5801d8462094c0517f1fb1f7f04ff1b23df898fea1e40e65818dd84d3","receipt_hash":"sha256:91d34e707536c1f29200e78979efd4290c31a04ec37e19a4ae674fbfcaae125f","signer":"ed25519:bench-node-01","signature":"c34ffb15a286357b0820f92bc344e782e9e902f9daadf6ab3c1d72816b4752b4e48a3aa2b04c4ab784876f1ed61cc4fe7dc9e70b50b98acd435f295e2c339c02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:99f357fe54ebce03e7ece972a1b65eb9eb40d71a3be8a1355f093f2ae0e0daac","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:a0fd401c3038b9f285d0f65ef4ceb69b2105800921bdec43ec2954c0b0fe999e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.915087970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.140317e-01","shared_alloc_j":"3.801055e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a0fd401c3038b9f285d0f65ef4ceb69b2105800921bdec43ec2954c0b0fe999e","served_from_record":false,"record_id":"r235","record_hash":"sha256:cd6a125f508acac70b93e1cee7a76889ba92bdbbb4292bb64b53192b51725527","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108829},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842714e+01"},"chain":{"prev_hash":"sha256:91d34e707536c1f29200e78979efd4290c31a04ec37e19a4ae674fbfcaae125f","receipt_hash":"sha256:c5adbc07b85ce38a75cec9570ce0c0201dcf4b2140f4378810f5e06f7e39fae9","signer":"ed25519:bench-node-01","signature":"f8c2169e0fa76e3ba17732488122b2216c5fdedd07b7e294110fa9a77d5a0e48cd41a2a400677ea962852ee064a53d15354fbf17cb4af868204e9d9a1db1a40a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7a8e4a90ad86fa124849f102c07a2849e1905cd2df6154714b989fa092d5fb4b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:ae1bd322166290226b5e955743760d82a71c20a05d416ba0d87c429bf3b0e67c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.602584870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.049296e-01","shared_alloc_j":"3.497654e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ae1bd322166290226b5e955743760d82a71c20a05d416ba0d87c429bf3b0e67c","served_from_record":true,"record_id":"r208","record_hash":"sha256:4cf11433ab6977a2ac8947a58a09cceeac5185eae933577c35ed820cf35f9858","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":106142},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839101e+01"},"chain":{"prev_hash":"sha256:c5adbc07b85ce38a75cec9570ce0c0201dcf4b2140f4378810f5e06f7e39fae9","receipt_hash":"sha256:cf65c3a8d5bab64d1cc089542c84dc837adcbaa5aadd140d9802e1494cf9e816","signer":"ed25519:bench-node-01","signature":"5e98a7fc39288639e0af016c55edb3de6918a4f929d84bd70ed60e5c0d1bc6474a06f8dfd31ef68b9cbdb613237367fb1d4939434dd2820f639a5259c1ad7007"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a39257a3959e28173ed455c8a6ce1e61babb430dcb99dfc9920205eb0fc21149","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:933c071a2b53d7a080551b9d19b151ec064eb2d17f6c872d6bcb961d1d1529a2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.281431070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.247018e-01","shared_alloc_j":"4.156728e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:933c071a2b53d7a080551b9d19b151ec064eb2d17f6c872d6bcb961d1d1529a2","served_from_record":false,"record_id":"r236","record_hash":"sha256:4996780f941de8e1f28049ca9a39bf8ff1bbf8cd15fc36e13b9cbbc047c23129","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108957},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846599e+01"},"chain":{"prev_hash":"sha256:cf65c3a8d5bab64d1cc089542c84dc837adcbaa5aadd140d9802e1494cf9e816","receipt_hash":"sha256:692efe4c4f98028f142a4ac17b50cd9009b606e9c134786d41d00b5228e76e68","signer":"ed25519:bench-node-01","signature":"fe1ce975389acc3bb09d3e09b0a565f6cf46f8edca7c2aa22edaacb946c83367e0936cc42f6630224177f2eaa740a7e8f76624398d29db4a46428a374ac33909"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1f565369f00ad59e19e1f4bbe0ce6a205a612aa90639b1f5108646125af5d297","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:a8e321822bb7a103eee73415fa73a912b90c5f863fbec7633f2cb269013e7c16","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.503704870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.020496e-01","shared_alloc_j":"3.401654e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a8e321822bb7a103eee73415fa73a912b90c5f863fbec7633f2cb269013e7c16","served_from_record":true,"record_id":"r13","record_hash":"sha256:2b6453fee78877e034de88726e8e50ed7892dc1bc50372ca02e5bf255acd0ac5","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":87295},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.837893e+01"},"chain":{"prev_hash":"sha256:692efe4c4f98028f142a4ac17b50cd9009b606e9c134786d41d00b5228e76e68","receipt_hash":"sha256:0ca3e36b3ac0c3d8c9fa8761e1aa9350f072200b9a7d96c95cc8b2ca79d8f9dc","signer":"ed25519:bench-node-01","signature":"b71725d5be02705a161f56f025c498dd28df7eda22f4853900995633249c6728baae952b3f9dd0d62224fffe99f3dc514f11081c3d661b63b438ce79e49faf01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5287350fd6e71dee57141e9ecd93182200f6f5d60fda4d2463393da7357fb15b","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:8731682b682be8c57a69b4131050ddc9fa82308bd709b8370d0684798ae379ca","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.529990970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.319414e-01","shared_alloc_j":"4.398046e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8731682b682be8c57a69b4131050ddc9fa82308bd709b8370d0684798ae379ca","served_from_record":false,"record_id":"r237","record_hash":"sha256:5ca892c48816cfc4616288735b8a37d7126519a347c6f986a8dfddf7c92d0a51","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":109087},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.849050e+01"},"chain":{"prev_hash":"sha256:0ca3e36b3ac0c3d8c9fa8761e1aa9350f072200b9a7d96c95cc8b2ca79d8f9dc","receipt_hash":"sha256:6f8a42c1492a5f01ee1c33cecd4a4fdd41dbfe784ef803f5f93daad1bb4da20e","signer":"ed25519:bench-node-01","signature":"badd9d46efbf0ec73c1c89f81137516e870387fe7636b499296ba6d7faea71ce576b3ab1c0e347e76f28f0337e6b99dc90fe23399e0507cc3b998a485bde3e04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:11f4ce176e6d80a7b0bcea1b0342dacffe27e3f0881afe0dd18100aadb639343","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:4eca99b1aa9b7cc02d93253fcbd8b042a8f2a308065e37f5971da74e7223ddae","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.694166770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.658495e-01","shared_alloc_j":"5.528316e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4eca99b1aa9b7cc02d93253fcbd8b042a8f2a308065e37f5971da74e7223ddae","served_from_record":true,"record_id":"r153","record_hash":"sha256:2613989d0144d77d40c7ec837263f215cd6d6e55f78b5e67fc05f5fe9aad9c1f","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":98745},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858983e+01"},"chain":{"prev_hash":"sha256:6f8a42c1492a5f01ee1c33cecd4a4fdd41dbfe784ef803f5f93daad1bb4da20e","receipt_hash":"sha256:ee6f1e2d4bf258eda984cb71b3048bcbf63af3555ac987b41aae781da737ecdb","signer":"ed25519:bench-node-01","signature":"6d70bc5068d22fe1671d413ad2e7d9c92f075198f11f29a0b11136c97768a953f564c4f67bfe07e79688f3ecf84c59445d16ebf4c4d4f3114374e1179ad8e609"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:386e02f2efc99f782e3e78089a1dd6e676abcc878e15235e5752e89691baeebf","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.655500710588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.821844e-02","shared_alloc_j":"1.607281e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","served_from_record":true,"record_id":"r121","record_hash":"sha256:68c00c9152f36db8ef49fff21c928ac679e7a92a748171b7d820e16b09fa9a05","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":95619},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.805333e+01"},"chain":{"prev_hash":"sha256:ee6f1e2d4bf258eda984cb71b3048bcbf63af3555ac987b41aae781da737ecdb","receipt_hash":"sha256:aa6d0d61b2f00245dcd5977b800f218858323c5d90c910f5eef7983412e86fb6","signer":"ed25519:bench-node-01","signature":"fd37985e91af773397672c4dae36e79496b5bbfa19db49cb3f33711491de26ef7a6a4304aee2b6625c32fb35823476b74257444a5d321a2fd4678be22d20810e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8715e4620f068e452bfe45cea7782d0fae40c85b255b94a7405c167809f9962b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:61a0b81dbab0cff6da1d675d0857ca934485b1cb836416a15a76ff0cbb083b6a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.951521670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.684040e-02","shared_alloc_j":"1.894680e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:61a0b81dbab0cff6da1d675d0857ca934485b1cb836416a15a76ff0cbb083b6a","served_from_record":true,"record_id":"r222","record_hash":"sha256:43ccc74f6d16f44fd16950fa3833c92acc7626c9751f31da8d7c900e792bb46e","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":107482},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.812477e+01"},"chain":{"prev_hash":"sha256:aa6d0d61b2f00245dcd5977b800f218858323c5d90c910f5eef7983412e86fb6","receipt_hash":"sha256:47646db5b5cb985ebb0e480f9041c293e7cb9de19361e20a53f430b4a2414b62","signer":"ed25519:bench-node-01","signature":"5aad7a87f467863b76bed11a7d3a0aa12bf6bd143069f6e5a1bc160564a099b830608ccd34f0e6ea9b6900b0f12660f9a5874e20ac335719ba6d6b9410ac6a0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:860cf033c46f67c965bac2632eebff6177f33837cdc86d9c51772a0a4b68beac","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.449149570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.587130e-01","shared_alloc_j":"5.290433e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":7,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857073e+01"},"chain":{"prev_hash":"sha256:47646db5b5cb985ebb0e480f9041c293e7cb9de19361e20a53f430b4a2414b62","receipt_hash":"sha256:f866afe0578c7f4696ccc766c3134ad9ec765f5f71becf2123400f8ddc042928","signer":"ed25519:bench-node-01","signature":"e56582494abfb02000ec013548de9749aeb21c55f20712122db0d3b02c86118288a7f80a8b19ff37d5735698237a73218b454fac774243847c8d9460b58e4d06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9887a70debf151c6c45d4dfdc3abfabe52c85f766ff1ffc6241960b3247505d6","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:2425f9e03a811a126a919af3b686064dff44a60bc399c610ebe622d3abcbcfac","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.981146170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.159556e-01","shared_alloc_j":"3.865187e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2425f9e03a811a126a919af3b686064dff44a60bc399c610ebe622d3abcbcfac","served_from_record":false,"record_id":"r238","record_hash":"sha256:64bc5e879912c31d169419267c0196c7567f4ddcf0465fc1b745810506db16d8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":109390},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843441e+01"},"chain":{"prev_hash":"sha256:f866afe0578c7f4696ccc766c3134ad9ec765f5f71becf2123400f8ddc042928","receipt_hash":"sha256:0a7812b2b9398749e4667af1e23d72af1205b48b7dd2ba67966fae67ca35d362","signer":"ed25519:bench-node-01","signature":"38437283b1bcf23bd7aeccba878a90222b8fdc2925c4c710d55506187965b5a21eb3a68369aa66d4b5967c6ee97b32adf0ccf800756aecb0d5178d3a31450b0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:61d93e226874966c540bdeb1504c175c754540dae82e3448c99f98f2abc6fe04","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.935845290588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.551002e-02","shared_alloc_j":"2.850334e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":33,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830213e+01"},"chain":{"prev_hash":"sha256:0a7812b2b9398749e4667af1e23d72af1205b48b7dd2ba67966fae67ca35d362","receipt_hash":"sha256:df6b49ecd3ab5a9dc7120e3072d746751556c4a750dcbcfc5e2afdf23f76aa0b","signer":"ed25519:bench-node-01","signature":"f9e3b8615dd721e8805a60dd032e620db71ff6856a4187e22ab91c9f938e991a8b56bc6180c0f14aa5a01ea83d60d2071aff6690ac94b4d19829a44f7933c001"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:cad73e78a8fbf49fe509da8ce75468b5130872dcd95dbb8fa681bb0aa3bc90b5","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:92e9c4006c4b2efecff6f3f7549014b52d121982834ec208592be3a6e76cb549","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.687563000588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.827843e-02","shared_alloc_j":"2.609281e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:92e9c4006c4b2efecff6f3f7549014b52d121982834ec208592be3a6e76cb549","served_from_record":false,"record_id":"r239","record_hash":"sha256:f5b9b44a2d6ff33e73eb746e55d85485711800f2c4b3386899611ce66bc8c48d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":109481},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826376e+01"},"chain":{"prev_hash":"sha256:df6b49ecd3ab5a9dc7120e3072d746751556c4a750dcbcfc5e2afdf23f76aa0b","receipt_hash":"sha256:eecf133800abafd4f210f6d3795f2c80f48257ff9441e85b693f13c15875442f","signer":"ed25519:bench-node-01","signature":"9d68fbc81e4218a6298e2f7875d5cc694ed1e9c975da56afe6c34c8436b8bb306041bb4460b890e60e8ee126ac7c8572e7cc19f2be58fbd5933b3da79f2b820f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:28bcfd58cc4da96f3b6b0d0c8a4f63b04ed749169fd46943e03635fc46a08a54","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.988162970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.744124e-01","shared_alloc_j":"5.813747e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","served_from_record":true,"record_id":"r90","record_hash":"sha256:fbfb7b2e0c35a608c84403c695970a425790cfac9e71c7f2b3ab9eecb37cfc58","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":93177},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861169e+01"},"chain":{"prev_hash":"sha256:eecf133800abafd4f210f6d3795f2c80f48257ff9441e85b693f13c15875442f","receipt_hash":"sha256:a0188f39a03ad0c4f5591f19e0edcad5f44f3d22b2c0a4dc31c7c57f64789201","signer":"ed25519:bench-node-01","signature":"8bed00dbabc35e47a4ae691ff49ef44148a595c0e26e1656189afe39e4b6126401726dc22205dd05540604bc70f554506c9d1a76fc4159125bdff0e1009fca0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:93297d5ccffae0874d564f7d76d7150d0755d5b2c403c557cafb8bb93c3dd893","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:236ec770245fbae01fc58a6e26be276f26c092cfb0289d628034a105e4a34f85","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.212132670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.226834e-01","shared_alloc_j":"4.089448e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:236ec770245fbae01fc58a6e26be276f26c092cfb0289d628034a105e4a34f85","served_from_record":true,"record_id":"r160","record_hash":"sha256:9321df311783dc3660a7863b6fd15f6cfbc1f324a0bc0b1ba11a648c91e751a5","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":99410},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.845890e+01"},"chain":{"prev_hash":"sha256:a0188f39a03ad0c4f5591f19e0edcad5f44f3d22b2c0a4dc31c7c57f64789201","receipt_hash":"sha256:34b5e1fe2708bbc2a7be96b2c85ccf499dc913c17f4b5a51dcdd6f12094072c0","signer":"ed25519:bench-node-01","signature":"46f79c75f4c25b06f7ed234f4bc11d2a00921686342d127ad6c38a979ecedd378f2577958603b8a18cb803ff54a207d7d6ab8d1409e7f6e895411d984b13d106"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6fcb89a64039733f0585b0db0a49f55bc5f5526c469cfc69b2d662418b693373","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:806356603a2a84090fe9b08ce79608322c3d664075c56f05b93992641802abf0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.595121970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.629647e-01","shared_alloc_j":"5.432156e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:806356603a2a84090fe9b08ce79608322c3d664075c56f05b93992641802abf0","served_from_record":false,"record_id":"r240","record_hash":"sha256:d6198f521231d045ec9439dbb59492cdf8a112fe1801b99df076250b98ba1df9","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":109737},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858221e+01"},"chain":{"prev_hash":"sha256:34b5e1fe2708bbc2a7be96b2c85ccf499dc913c17f4b5a51dcdd6f12094072c0","receipt_hash":"sha256:e5c89481dbe120b61f40c07e396cb960f1b1df34b720b85386e66a118fb6ab58","signer":"ed25519:bench-node-01","signature":"e028b182d54abb43fe529010c3495cc713478f484de1e8ffdd8525f97285645df389d98c773bcc4d607b288978ff8b052df441c08729246d603eeb9bc4b1b90b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a79035206e3bad65aafe9350d953957618054c816767df4096f4652f013269d9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.581526970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.625687e-01","shared_alloc_j":"5.418957e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","served_from_record":true,"record_id":"r140","record_hash":"sha256:9f4054b5d15ac16ce0b79b780e5d8bf8b428262e4fd2a332ec366dce24f89c41","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":97569},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858115e+01"},"chain":{"prev_hash":"sha256:e5c89481dbe120b61f40c07e396cb960f1b1df34b720b85386e66a118fb6ab58","receipt_hash":"sha256:f35e17d5ac8bfde905862cb1bf8447e0c65c0550488bfcfe0799c6fc3b49da81","signer":"ed25519:bench-node-01","signature":"69d9ce3e84135d083b7243749f434afea049e57ee16bb3b6c3c49ac70da24bea0832f0ff627d942acc6c9df57a562352610d4135e5f5e54f3dbe62bfafd62604"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2b97acc99e2e395a456631f43dfe8d48e6c04a466e21a894ef1930be8abbd20d","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.889861180588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.417061e-02","shared_alloc_j":"2.805687e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":8,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829528e+01"},"chain":{"prev_hash":"sha256:f35e17d5ac8bfde905862cb1bf8447e0c65c0550488bfcfe0799c6fc3b49da81","receipt_hash":"sha256:d0fbed5f6cf96eee1f2f08ea555f3c8eb44647dc3dc3821544381bc1c0404b99","signer":"ed25519:bench-node-01","signature":"699f2c449a4421383c964740e98495dc9c83107feeab1582107cec3c2a77a1571e55591b0b4c0eb5dce49be57d08bfd58d85d0a96aae1f384867d7c912b6ec05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a669171761bda51a958803f2a91310885c5b692b54ed8142d82c86d22a18d2cd","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:fcf6210ad2014207403d7ca2141df00caacfd572f9e94382871cfef28c1b2718","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.894564570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.425600e-01","shared_alloc_j":"4.752001e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fcf6210ad2014207403d7ca2141df00caacfd572f9e94382871cfef28c1b2718","served_from_record":false,"record_id":"r241","record_hash":"sha256:27e2d4af5cf7ca15c43784531803e7a370bb1ac28e84c7d53c4b1127bbc08f27","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":109953},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852411e+01"},"chain":{"prev_hash":"sha256:d0fbed5f6cf96eee1f2f08ea555f3c8eb44647dc3dc3821544381bc1c0404b99","receipt_hash":"sha256:60d20695227de6f1e5f2ec45adf44b0038348091e593f70335e5e68e0fae73ec","signer":"ed25519:bench-node-01","signature":"6fad803e189448db07d70f1db12373806c78856c5c57cc6484315fd22293dcf50625473653da57fe37ee1d7238997c14a51d4ec43a654de5f697c930fafc0b0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:dab77bb789025086bcabad680aab723a196d8867e29cd9efdc3d242de8272f47","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:300656a7d76a43a3659b5e523db3771511c201965d9f67c1a12732317c102177","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.811896570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.401523e-01","shared_alloc_j":"4.671743e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:300656a7d76a43a3659b5e523db3771511c201965d9f67c1a12732317c102177","served_from_record":true,"record_id":"r74","record_hash":"sha256:dd658335054ecb3f36bd7f2f6709e3a1ef958ea7aa8c944fa78fe328bd5fc514","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":92184},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851672e+01"},"chain":{"prev_hash":"sha256:60d20695227de6f1e5f2ec45adf44b0038348091e593f70335e5e68e0fae73ec","receipt_hash":"sha256:ae99efd4ec37e3f8944e39a76b7046686f2ebbf53c8212fa2e304cbb678fc940","signer":"ed25519:bench-node-01","signature":"00c0697d25bad2bc24f1eff150722e6ffdbec43e1a83ee42f40255c335d31d9928f2ec8a9a6077d3dc3a6488447f14a45b246f25041786cf898c010112cc390b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f97ffc2c1071df72ae2dcaf483614cbe18002366f1fd5d7d53780a583c5a9a07","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.756015310588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.114604e-02","shared_alloc_j":"1.704868e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","served_from_record":true,"record_id":"r52","record_hash":"sha256:4b407241ed751d5065cf8c5d85ecd7c9cceb59ec65630b16476cef31225da9a5","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":90404},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.807893e+01"},"chain":{"prev_hash":"sha256:ae99efd4ec37e3f8944e39a76b7046686f2ebbf53c8212fa2e304cbb678fc940","receipt_hash":"sha256:1ff1cbe3387a1241447288400c650f5856fc51a63f28f1b9b114676e165a421d","signer":"ed25519:bench-node-01","signature":"7ec389fe4b7c132f12a2482a596423d37ffae7340688b84679cb28b2e225d941c86bf072ef5dc088295bd7f8276e8b0f2a47d573511c52a9a82198c1aa12df0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:19e0bf6783b51c0308ead75bd236e176302c05cd91f0dc8528c71a20f17ead7d","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:8c64fe7e125a0c23e1693ec175d3c7d7ac8100de1da797c06c8bedf80d663378","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.691297170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.366396e-01","shared_alloc_j":"4.554654e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8c64fe7e125a0c23e1693ec175d3c7d7ac8100de1da797c06c8bedf80d663378","served_from_record":false,"record_id":"r242","record_hash":"sha256:11c28c7df9b49eaba4b1d2c2ab513f3e34dc0f64c880c326ab4764d553984f1c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":110135},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850569e+01"},"chain":{"prev_hash":"sha256:1ff1cbe3387a1241447288400c650f5856fc51a63f28f1b9b114676e165a421d","receipt_hash":"sha256:85b774a372aef83f247a46347452754d73a705da5ce3ef7e9f568a88b2555d36","signer":"ed25519:bench-node-01","signature":"19305dc189befa4f423b7be989404296276d76eef609b79a703f98ae7dbc3cc32840d7c4692ea48427175f0ffe2d60126dc3fcd791381793728d40dca95e1c04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1e08c950fdbdfe39eeefb96c018a1d3a24c09ff7d5c7061cd879986ee27cf682","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:21efe65a5cd6634a182109e3ed3c9edc6a232a0b1574ec896ede74ba2a493672","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.249865510588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.465624e-02","shared_alloc_j":"3.155208e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:21efe65a5cd6634a182109e3ed3c9edc6a232a0b1574ec896ede74ba2a493672","served_from_record":false,"record_id":"r243","record_hash":"sha256:d45c57f4e5e5b05e980fb68459f53f430f2bc1eba859b2b04cb0c6a138b17909","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":110188},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834627e+01"},"chain":{"prev_hash":"sha256:85b774a372aef83f247a46347452754d73a705da5ce3ef7e9f568a88b2555d36","receipt_hash":"sha256:803d4a92a3808fee1e1b45c40743de04425692703d0ae146cc02fdc246367ce3","signer":"ed25519:bench-node-01","signature":"ce8fa8a942aea9fab0936130365c1e2bf97f76a6783067f2774ff2d13db47cbf751b55c6fbe88d50dbd2faf8cb1b38f384ec6407575136e6b430f107bdc7520f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2642dfbffc300fb0e69bd257685bf5560106fa98f076658a14c85c56919f9ec7","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4e0f6c06f2653d70fb5238b34773775a709754e0c5cef8206cea8c7bbca5fd51","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.697514070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.076945e-01","shared_alloc_j":"3.589816e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4e0f6c06f2653d70fb5238b34773775a709754e0c5cef8206cea8c7bbca5fd51","served_from_record":false,"record_id":"r244","record_hash":"sha256:88bb8e14e043a5a15c7b83925acb6a4e18c52472eef87e1daf366f3453e5f754","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":110247},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.840231e+01"},"chain":{"prev_hash":"sha256:803d4a92a3808fee1e1b45c40743de04425692703d0ae146cc02fdc246367ce3","receipt_hash":"sha256:f3c3bdef014165b20d7e5efdc08cf3e948e4698daa9be96cccafc8ad4c9f68bd","signer":"ed25519:bench-node-01","signature":"2dfde09f35d1c4750ec1623e31b124e22703d8e3214209847b219898227c56bdac6ecce8174c691e15ef4eb5e6b43e06eafa42fc0e1ba0a0b4391343a673f30e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a98394ad98683f24dda8f8e937ad3dd91db4004f93bbed58bb09ba9e33916c37","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4c74193d6acb14f41510f610a799acac10bfb3876c6a0e2a195cc68e190048d7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.676242060588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.882249e-02","shared_alloc_j":"1.627416e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4c74193d6acb14f41510f610a799acac10bfb3876c6a0e2a195cc68e190048d7","served_from_record":false,"record_id":"r245","record_hash":"sha256:5e6054783072e62c2df2ba0c93f09c85c4eb4e2f2c387aaa4595c14b7214cd80","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":110275},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.805874e+01"},"chain":{"prev_hash":"sha256:f3c3bdef014165b20d7e5efdc08cf3e948e4698daa9be96cccafc8ad4c9f68bd","receipt_hash":"sha256:296d9b7aa410b8cefa221e0ee91d5848a499e9f092221a71ffa65bf3fee8f28c","signer":"ed25519:bench-node-01","signature":"59de7bfdfe304c8dc8c5d710355dd1a9f73ae406d728a4e58f3137b281b0fc781090c006d86f1f02552c4c5a5f208faa73be091966a15d34a833377f4425170f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:34576b86fedf1c77fe669e6d9d9f34e7fe780a54738c3d3b212012b076a81c4b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.032939470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.174642e-01","shared_alloc_j":"3.915474e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","served_from_record":true,"record_id":"r82","record_hash":"sha256:796c66db2245954b7f1adefe6ab2b746c6c40d34fdc7990c935f119ab41d0a56","reuse_count":5,"derivation_j":"1.058824e-06","valid_until":92646},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844002e+01"},"chain":{"prev_hash":"sha256:296d9b7aa410b8cefa221e0ee91d5848a499e9f092221a71ffa65bf3fee8f28c","receipt_hash":"sha256:ec61d0d9e845d36edd7dd2a1d4f16c51d44d02851645905ee57586ac8f244d09","signer":"ed25519:bench-node-01","signature":"7f1437d41150e054f315fa76feee18d1b7d4d57130f601cad7cdefc7264a77ce87e389a6f215d88433ef39132876030fefb310794ef05285d1795a02925c6a0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b60bdc525ad9587207685713a11fc994aead9dbc5b0a44c5989f8e4ec253eff4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.020932170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.753669e-01","shared_alloc_j":"5.845564e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","served_from_record":true,"record_id":"r16","record_hash":"sha256:3227d5f5cdb47b0c636c60fce42fed733f0e84ce2c21552a8ea3164c96c9d710","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":87438},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861406e+01"},"chain":{"prev_hash":"sha256:ec61d0d9e845d36edd7dd2a1d4f16c51d44d02851645905ee57586ac8f244d09","receipt_hash":"sha256:cd33640ece6b2dd42b3dd6388c704dbf7bb5525d0b065bf41f6223d2942aa613","signer":"ed25519:bench-node-01","signature":"49d0723703e4dbbdcfb14a8f183a49eef12c260ca8d84bc4069b7b3c023badf63da2a08cfd1ac9c04363a12a8505b6e00fdfd61ab35b423797e6edb02f45ec07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:56c8330e67c47e1279bdb07bc43021ec40ac1e5bf566f99a26ca36c279b6beb0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ad48c4430dae690b329765ebd3a2aee6af0b915f29cbbb06ab2d43db3380730b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.438542740588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.102547e-02","shared_alloc_j":"2.367516e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ad48c4430dae690b329765ebd3a2aee6af0b915f29cbbb06ab2d43db3380730b","served_from_record":false,"record_id":"r246","record_hash":"sha256:2d2ec75370c7ff3067281f28efe906e1ccb040cfb6b9785740470fc77075ec5d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":110477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822153e+01"},"chain":{"prev_hash":"sha256:cd33640ece6b2dd42b3dd6388c704dbf7bb5525d0b065bf41f6223d2942aa613","receipt_hash":"sha256:8565bcd68c849b0518ba99e47086467430e86b716a2ecf0a02e30bf20281c8f6","signer":"ed25519:bench-node-01","signature":"a2141cc21a548a307025aa01d04f9313be11b31ed55b78227eb9b608c967b25430ed5ab468a5bd2cd91816de375a5b25b82415646249b58841d7d9e7a6d7a605"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fac3b43eb8dac57f2fe8ccca48a50137fea080b3b2b1c18f77c30bb92b498fc0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.244905270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.236380e-01","shared_alloc_j":"4.121266e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","served_from_record":true,"record_id":"r79","record_hash":"sha256:bc09a0b7aa34a4163a95cc14cba017fc4631050085f0f7aabbba0fffe37d0c86","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":92461},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846227e+01"},"chain":{"prev_hash":"sha256:8565bcd68c849b0518ba99e47086467430e86b716a2ecf0a02e30bf20281c8f6","receipt_hash":"sha256:ec203931c37bf2d8e38b0e325c0f4acb2347b936150a2d578379428c87927f8b","signer":"ed25519:bench-node-01","signature":"9161c9829fe8f467accd2dba2483252e58f96c86ef7c9af2508a98329f32299ba186c44854aa22a2c2233f76e3deb6d55eb23ed1f05790c30f27271926a22806"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d5f53741a30fe534fc90727ccdb91e337953c9df180f7939ea3f25da2004fdbe","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:81dbeff3e03710faad18ddfdcd4b715d171b50030792c13bdd2e1a8083b5c9d0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.077827730588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.051916e-02","shared_alloc_j":"2.017305e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:81dbeff3e03710faad18ddfdcd4b715d171b50030792c13bdd2e1a8083b5c9d0","served_from_record":false,"record_id":"r247","record_hash":"sha256:8e0979be027eeedbfb2e1e724555f7bbf20dce4ec8305cad70712c22160dfb62","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":110579},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.815201e+01"},"chain":{"prev_hash":"sha256:ec203931c37bf2d8e38b0e325c0f4acb2347b936150a2d578379428c87927f8b","receipt_hash":"sha256:13116332e9e32648b203d26b055ee42a835a178b0e3277a4abe3a41e76d49649","signer":"ed25519:bench-node-01","signature":"f2cb264d213e2d02a2ae7f953d5a5c4812dd21f4c0e7e13ad7b653dbe24e05ac4cd46a261f7ce3a27834648165cac212c315a26e103f730bedc1c2fdd034d205"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a3a299b3488521657767c5e4ab465b7029a8c3bb2ce6309c31878cdc928dcd6e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.502581570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.602693e-01","shared_alloc_j":"5.342311e+00","upstream_j":"0.000000e+00"},"method":"hardware_meter","temperature_k":"3.000000e+02"},"provenance":{"how":"measured","device":"hardware","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":8,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857497e+01"},"chain":{"prev_hash":"sha256:13116332e9e32648b203d26b055ee42a835a178b0e3277a4abe3a41e76d49649","receipt_hash":"sha256:94236dc07c80df3f0d4726abf2bd0c4de36bc1053ac0585336336811a97eba48","signer":"ed25519:bench-node-01","signature":"40962cfc79bc45e60e8cba7afe0f74c428067e62063257b24f19c24af95123239dc06f47bef6deeb271622fe62f6317ffd11786e1c6055a4df8b5e6f5dda6400"},"hash_alg":"sha-256","sig_alg":"ed25519"}],"records":{"r235":{"key":"a0fd401c3038b9f285d0f65ef4ceb69b2105800921bdec43ec2954c0b0fe999e","answer":"inspect","created":22429.8,"valid_until":108829.8},"r60":{"key":"591bc02284e17c26a2b0835a79b31dd08d54443ff09ee36d35b60f30ddea70d0","answer":"authorize_capped","created":4576.7,"valid_until":90976.7},"r217":{"key":"7d4b002421433b01f9b0f76611fdfe099ed2e63b43deefa28e7ced76e9250528","answer":"authorize","created":20681.4,"valid_until":107081.4},"r32":{"key":"496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","answer":"normal","created":2140.1,"valid_until":88540.1},"r21":{"key":"678fe08a78a0cb3c662513b15302b138ce1354a79c85cb3644891a472d1730f3","answer":"authorize_capped","created":1307.5,"valid_until":87707.5},"r92":{"key":"5a7550a0055d59ccb3c4f9f1776480c59246751bc365995dd7e18001152fdb9a","answer":"normal","created":6935.7,"valid_until":93335.7},"r151":{"key":"c91460ada6ccfa92b02cddd2a5dc938fbfd3c5aedf6140e6d4f383451527fa10","answer":"normal","created":12159.6,"valid_until":98559.6},"r115":{"key":"cdac90b356105bbfc2ec1d2b6f50d290b09c8a4ff2cd746ce6c64fa30a02d707","answer":"inspect","created":8780.4,"valid_until":95180.4},"r48":{"key":"23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","answer":"normal","created":3572.3,"valid_until":89972.3},"r143":{"key":"ba80a0c5a96893e7ef50727233d32223b0c47e4bb8ba733fa50ffc6d22ca525e","answer":"normal","created":11512.4,"valid_until":97912.4},"r118":{"key":"6b9150cfbd8233226dad54e0c15876c5b819e8d9aff9a0c429350e52edb80cd5","answer":"authorize_capped","created":8973.9,"valid_until":95373.9},"r221":{"key":"a6c3f0d042a4ba209dda645c248347eb145cd28fc446dd789ef491d9befd9217","answer":"authorize","created":20982.4,"valid_until":107382.4},"r112":{"key":"6b4490d57878c284cca57315f4304f2b4835d387d5d5db8a92ab2484c9fa0431","answer":"authorize","created":8548.0,"valid_until":94948.0},"r61":{"key":"661120dc456ec83861c110b710ff9ad71298352ce119f83ebb44589c06a502cd","answer":"authorize_capped","created":4693.0,"valid_until":91093.0},"r144":{"key":"37e980e4882227a96e675fb441e1820f1abf8da0fd3d4073eefc5fa35288e5c0","answer":"authorize","created":11576.0,"valid_until":97976.0},"r109":{"key":"aecc00f40acfd5e31b4c34fab60b8afce96daadbfa7765a3a8bde8aaa6bc8981","answer":"authorize","created":8382.6,"valid_until":94782.6},"r241":{"key":"fcf6210ad2014207403d7ca2141df00caacfd572f9e94382871cfef28c1b2718","answer":"authorize","created":23553.3,"valid_until":109953.3},"r191":{"key":"ff23910fa778fac032c85c6568bb998c19a986333ffceece66d612ff672c1782","answer":"normal","created":16494.5,"valid_until":102894.5},"r213":{"key":"1df06120a16dbc38a7af778f018c793b4b17283e0dbf1c7c323acdebc5cc84bc","answer":"authorize","created":20315.0,"valid_until":106715.0},"r16":{"key":"1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","answer":"normal","created":1038.3,"valid_until":87438.3},"r82":{"key":"1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","answer":"inspect","created":6246.3,"valid_until":92646.3},"r13":{"key":"a8e321822bb7a103eee73415fa73a912b90c5f863fbec7633f2cb269013e7c16","answer":"normal","created":895.9,"valid_until":87295.9},"r67":{"key":"434c21a52f0ec696ed9ace53a471ae38f5ade0437b95c87c88db4fdb7b5e41ba","answer":"inspect","created":5262.1,"valid_until":91662.1},"r147":{"key":"4dcde1b30c97bc371abad9179f7d079831c59c3860d7df8b175517cfcde56244","answer":"authorize","created":11843.3,"valid_until":98243.3},"r114":{"key":"cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","answer":"normal","created":8688.1,"valid_until":95088.1},"r100":{"key":"5c82a1e4bc712b34adb3610a3c1262f5e1d97d2d2ca195911dae28d81ed6322d","answer":"normal","created":7534.9,"valid_until":93934.9},"r206":{"key":"ca5a91e5d506197e8fd03430940a49a994c86f3b3a599cc7e4a9870d1e7d01af","answer":"inspect","created":19575.4,"valid_until":105975.4},"r40":{"key":"b38cd1f33a130455853b4e6fce41ca504f4173d34ad1f99470b37673b5f8daad","answer":"normal","created":2780.3,"valid_until":89180.3},"r4":{"key":"000992060ac23f9a6b54bc2803d93971b95cb85a38feeb4e9d3559b2ffba116e","answer":"normal","created":233.3,"valid_until":86633.3},"r214":{"key":"356be222ab6f98d66c50ea3341980d4f6f2a51649f3224f583bfae59b72d0db0","answer":"authorize","created":20386.3,"valid_until":106786.3},"r150":{"key":"01b2122aa76c492f0e26f4d0d8113e3058a9c0a42add4d988081cc48760f2f78","answer":"authorize","created":11967.9,"valid_until":98367.9},"r14":{"key":"87fbc23294c2ec468634d4d2a29b0784ae6d1e65ac331af477e07c957fe523f0","answer":"authorize","created":923.8,"valid_until":87323.8},"r133":{"key":"04e5a26940894add6708ef236b673662643062f46a51261d7761552a16d9d3f3","answer":"normal","created":10548.0,"valid_until":96948.0},"r152":{"key":"f19bc2892427342b6a94dc67637059edcc9e4ffdbe0f27bbec3ee1262358377a","answer":"inspect","created":12206.5,"valid_until":98606.5},"r131":{"key":"681cb2a577ff523b7cd6ddb96943d8e946678ec479213c4ae937a17caab6ab20","answer":"inspect","created":10456.5,"valid_until":96856.5},"r38":{"key":"57d222a9b6821d1beda2ff0e08a18cffbef322c999e07cd13ed996e871aa136d","answer":"authorize_capped","created":2618.6,"valid_until":89018.6},"r37":{"key":"6a28d2adaac95bc3a2ea8c61107a5d0963c4e4bdcbd5093ef245a58cc8ad327f","answer":"normal","created":2524.6,"valid_until":88924.6},"r95":{"key":"2a1252ad9738cc7eaaaed1b70f61b805d45ec8615340f3472862343d3faf5552","answer":"authorize","created":7050.0,"valid_until":93450.0},"r229":{"key":"5e7f52ad100fb57bec26eeb1324cc66580a86ca22b04827207046febf1b20a4b","answer":"authorize_capped","created":21806.0,"valid_until":108206.0},"r128":{"key":"22d862b92bd310f94f74a536a6cc12299c62e5300c99188e9a681064fa11c842","answer":"authorize","created":10265.0,"valid_until":96665.0},"r165":{"key":"d44df2bf4fb54c72ad6469a023b0b46e6be12079545ed3c2ae2aa38fe0e4f661","answer":"decline","created":13344.7,"valid_until":99744.7},"r176":{"key":"aa7e52c298df874051c6d2a872415cc2dfe3f707b7195b21777823f81a44483a","answer":"decline","created":14497.7,"valid_until":100897.7},"r43":{"key":"c07152cef374396b314cee5827193f70093e1aae2bc94f82384fea2c01b4f7d3","answer":"authorize_capped","created":2996.4,"valid_until":89396.4},"r184":{"key":"06da72ce846abf2c5eadd2aab2f18cd1e5565999fe71c40809bc145b7d50dc5f","answer":"authorize_capped","created":15876.1,"valid_until":102276.1},"r199":{"key":"bba012d917b3f176c43c75c1babeca7aed6998ab35cfaa4885e98ab27b59ad9a","answer":"authorize","created":18372.1,"valid_until":104772.1},"r178":{"key":"9e61930db681a8926fd28a93fc21fc78d349459ebf95dbc889666f26e6a9511a","answer":"inspect","created":14858.6,"valid_until":101258.6},"r125":{"key":"344d3310dbfdbc5554f4e978fbb9c3cab5e5c766c52065d101623da328d5d32f","answer":"inspect","created":9902.2,"valid_until":96302.2},"r208":{"key":"ae1bd322166290226b5e955743760d82a71c20a05d416ba0d87c429bf3b0e67c","answer":"normal","created":19742.1,"valid_until":106142.1},"r233":{"key":"0666d33c6587bdf37dfd5f26f63169d9428a4ad5b14f750a409cf5aac0ea7bea","answer":"authorize","created":22306.5,"valid_until":108706.5},"r171":{"key":"8d2ad364f746f7e5890037cb0de73c8c0800284c36b0693f37f9781bbdda230a","answer":"authorize_capped","created":13707.2,"valid_until":100107.2},"r8":{"key":"0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","answer":"normal","created":460.4,"valid_until":86860.4},"r1":{"key":"5ea2a39f565cf2588f19cb5c05ffdb4e6e04155dd041eeea4651d60de5cc156e","answer":"authorize","created":40.2,"valid_until":86440.2},"r239":{"key":"92e9c4006c4b2efecff6f3f7549014b52d121982834ec208592be3a6e76cb549","answer":"authorize","created":23081.4,"valid_until":109481.4},"r136":{"key":"56f31403b6c262597065ff99fdabb3aa51f06ce20ce0c64fd757c16c6e472db8","answer":"decline","created":10865.9,"valid_until":97265.9},"r116":{"key":"9840140a39c47ebfcdda27e664a72009daffa1d975d005450a100350849daa10","answer":"inspect","created":8810.8,"valid_until":95210.8},"r121":{"key":"8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","answer":"normal","created":9219.5,"valid_until":95619.5},"r18":{"key":"543b0438d15cea081a05c8bc2a7c7bab836d901528216ef19b14045909d3f014","answer":"normal","created":1126.8,"valid_until":87526.8},"r24":{"key":"441d343ae7ce5bc22fef8578d70d16d57a6e30008eba1a33565b6e8c73e5f4c1","answer":"authorize","created":1465.9,"valid_until":87865.9},"r246":{"key":"ad48c4430dae690b329765ebd3a2aee6af0b915f29cbbb06ab2d43db3380730b","answer":"inspect","created":24077.2,"valid_until":110477.2},"r89":{"key":"386c444bb8e68696b4deb7cee60d731f03a2706029e7d8dcae158d7d4a6222e0","answer":"authorize","created":6713.6,"valid_until":93113.6},"r134":{"key":"03edf452ec745a0b3af013d4ab01c43d27b32aa4bc66d762434da2276860728b","answer":"decline","created":10646.8,"valid_until":97046.8},"r119":{"key":"c5acc45aa021fd76b694dadbc084a3aa9a1107f5957329ada1989fd9a13fd849","answer":"normal","created":9004.2,"valid_until":95404.2},"r139":{"key":"6f37d45f68c8e63262b6f5238005c8e712494dcf15281951ed02eb9edcbdd749","answer":"normal","created":11078.7,"valid_until":97478.7},"r80":{"key":"cfde747273a49efebd1335b7e318d6df510579a1af73818d9b0ccab8649bd5da","answer":"authorize","created":6153.4,"valid_until":92553.4},"r200":{"key":"3456548300328438389e70210979fd21b35f4518a9be8525a35e94da571b0bc0","answer":"authorize_capped","created":18397.2,"valid_until":104797.2},"r225":{"key":"438a74c1788de475b657a4d1a2b945c0fb090bbe37edf316b3c95a620c37123c","answer":"authorize","created":21550.0,"valid_until":107950.0},"r154":{"key":"50c404d36b19c3fdef88459eb0d2411aea6815b2d9ae84aea272390b347ccc47","answer":"authorize_capped","created":12407.5,"valid_until":98807.5},"r35":{"key":"995c74d71caf5d717ec1b1db854037a328e7922345dc61b3437aba12ed2a8eb3","answer":"authorize","created":2377.5,"valid_until":88777.5},"r47":{"key":"315c14e61b89addfef08fbfe1205125c8472164f9cdf669f157fc7fc338e586e","answer":"normal","created":3437.1,"valid_until":89837.1},"r142":{"key":"76aa44f7b0b3b872eb243bcd0ed8bc9038d6779900791ddcf365d5805e743a5f","answer":"inspect","created":11427.3,"valid_until":97827.3},"r64":{"key":"12e1d500f4d5e2048a2cdfdedbab64ccfa35e492a4f9b1b1ac37e4dc345e25ab","answer":"authorize_capped","created":4896.5,"valid_until":91296.5},"r108":{"key":"89d945088318077d9adfa27011c408370594902bdc04f815e39284b8a7e08d5e","answer":"authorize_capped","created":8283.2,"valid_until":94683.2},"r98":{"key":"f4f9852d4bb1ab8da33c1e53245115c7b7c35eeb04727089cfabb53b3bde5bc9","answer":"authorize","created":7365.4,"valid_until":93765.4},"r83":{"key":"9c1ce546fd54a646e92397cdc5cf76c148f6186271155222ca123a7bdf8a1d26","answer":"normal","created":6336.5,"valid_until":92736.5},"r52":{"key":"eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","answer":"inspect","created":4004.9,"valid_until":90404.9},"r57":{"key":"fbad157ba34331794cf5050bfec542d16e1f3924470fc53d5b8557ce96983c6d","answer":"normal","created":4273.4,"valid_until":90673.4},"r190":{"key":"82766587876a39fe044dc0896677a505d5e5def45b21bf32bcd3f0e2ed269ba2","answer":"normal","created":16402.7,"valid_until":102802.7},"r6":{"key":"373ee59b311333a4d8f4d4bc7c250e0ba6a4ad0e9dfd8983a4eca3ed32f1bca1","answer":"authorize","created":332.0,"valid_until":86732.0},"r162":{"key":"866985a43c4aafecdce84de12bb2720fdf4130adc7633c396da10fde78f100b5","answer":"normal","created":13089.1,"valid_until":99489.1},"r72":{"key":"240fa5c9d924503df218a3b93037f774d98422886228c19146631e7a15c762f2","answer":"authorize","created":5630.2,"valid_until":92030.2},"r194":{"key":"a24555e7692044ccfaca766108abaf92a0eb3d523943bebf7d2eceb3f7cb2593","answer":"decline","created":16860.5,"valid_until":103260.5},"r197":{"key":"3866c5ef26acc8497fff0ba0c7f2411032b993655623b854d09ef997309076c9","answer":"normal","created":17810.7,"valid_until":104210.7},"r106":{"key":"b01775f414fc8750ffb46d8e96e6535418e94e18e8042f473efeffc9b9317a0f","answer":"alert","created":8099.0,"valid_until":94499.0},"r25":{"key":"80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","answer":"normal","created":1541.7,"valid_until":87941.7},"r189":{"key":"6737e600363f218f40dd3069f95f5dbf3c4db57424119bd7c1736a5be5cc70bb","answer":"normal","created":16370.4,"valid_until":102770.4},"r91":{"key":"f98f8602394386ea5ab5f4f9c08208c54148d551cb84dca8d4c60da7a903bf68","answer":"normal","created":6854.1,"valid_until":93254.1},"r96":{"key":"2576d606f7686868001e756e697c1c0bd80ff210c28f9626a40a0206f8740c7c","answer":"normal","created":7184.9,"valid_until":93584.9},"r129":{"key":"027206174fe3afe55662ff7e197cef4bcc261b706aae20ce6b70fce316d50652","answer":"normal","created":10354.3,"valid_until":96754.3},"r104":{"key":"d72b56294d3317cd83e6e9ac76160ce7967610be483d2d4fec03730eae111c3f","answer":"normal","created":7987.8,"valid_until":94387.8},"r45":{"key":"88e8063dab93d7c54c198faae564d37a45fdc05bf72a71091e28d81cdae5a7c3","answer":"normal","created":3314.1,"valid_until":89714.1},"r137":{"key":"6325a64e3e9f740e0d177e5e9f7b218e54860498e001b826bb4e3639a52aaaa5","answer":"authorize_capped","created":10896.2,"valid_until":97296.2},"r187":{"key":"fb1c565303b1f155c6b39c6428631346c93ae7a3c34300d38606c842ae111be3","answer":"normal","created":16305.2,"valid_until":102705.2},"r243":{"key":"21efe65a5cd6634a182109e3ed3c9edc6a232a0b1574ec896ede74ba2a493672","answer":"normal","created":23788.1,"valid_until":110188.1},"r126":{"key":"9014e65fe138b28393ccb3d8d284ed537952a969e7a21268271f523fa7af84ed","answer":"normal","created":9982.2,"valid_until":96382.2},"r240":{"key":"806356603a2a84090fe9b08ce79608322c3d664075c56f05b93992641802abf0","answer":"normal","created":23337.0,"valid_until":109737.0},"r68":{"key":"ce77866203f612a22e6657ca52065c2bca49b5c704e7cbe7bdbafc508469eb4c","answer":"normal","created":5342.7,"valid_until":91742.7},"r105":{"key":"5169b6649ebf570c3dba87c73d16a22ab32c9b6bfadf7e3a2fd90d625b3ea944","answer":"decline","created":8063.2,"valid_until":94463.2},"r2":{"key":"cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","answer":"inspect","created":78.0,"valid_until":86478.0},"r202":{"key":"6859d67dc7b9683a4f1fd9f5b965aefd8a22140e5fde07807360dc5e54dc6198","answer":"authorize","created":18703.6,"valid_until":105103.6},"r88":{"key":"c4ec9682783effc085e9f772f3940379db07512d64795c0772c75dbfe45a2979","answer":"inspect","created":6665.9,"valid_until":93065.9},"r210":{"key":"e6c836824528ac426cdb6b50379dc03e4effab0776267dceb4a9467298b81afa","answer":"normal","created":19899.6,"valid_until":106299.6},"r148":{"key":"516b5691b6e66826019f65c73831fd8628d3333ec153968bae02509709ddcf3e","answer":"authorize_capped","created":11875.8,"valid_until":98275.8},"r74":{"key":"300656a7d76a43a3659b5e523db3771511c201965d9f67c1a12732317c102177","answer":"normal","created":5784.9,"valid_until":92184.9},"r81":{"key":"310326ba6b9b9dbb0acacf16a065d18f85dff7a810d371e34f2a5949282c8060","answer":"inspect","created":6221.5,"valid_until":92621.5},"r10":{"key":"ebfae6bebcb2216decc8a5f5248c809294a8c5e1a542d328eee0999e102630d0","answer":"normal","created":664.0,"valid_until":87064.0},"r93":{"key":"8369c6ce22f5309b9167dbe73ed40554e89b1ea5b99ec31727e74624db510167","answer":"decline","created":6965.9,"valid_until":93365.9},"r111":{"key":"4989e6fd9d5b4a543eca9f0afbdce0f6043a8a567826de22f9d1d6cdf9c96ba3","answer":"authorize","created":8465.1,"valid_until":94865.1},"r236":{"key":"933c071a2b53d7a080551b9d19b151ec064eb2d17f6c872d6bcb961d1d1529a2","answer":"alert","created":22557.3,"valid_until":108957.3},"r73":{"key":"5aefa7348d80e639ad964174db0ac09ade23590bd0c9e27355a39fcf0342719b","answer":"authorize","created":5717.5,"valid_until":92117.5},"r164":{"key":"f8045743fa59e45d492212b7ce6a4d2284e391e9ee89332c8f878260e18e5039","answer":"normal","created":13268.4,"valid_until":99668.4},"r36":{"key":"fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","answer":"normal","created":2431.0,"valid_until":88831.0},"r156":{"key":"f70b4758637322ee4d79b8a5f7b81ae70da5a6c8a9c3a9e8023f55d285f1b3d9","answer":"decline","created":12574.5,"valid_until":98974.5},"r170":{"key":"8130c76217d2e109b9e876d67a30cce4f6ada330eaf9ceab951621f8d960e66c","answer":"normal","created":13655.9,"valid_until":100055.9},"r160":{"key":"236ec770245fbae01fc58a6e26be276f26c092cfb0289d628034a105e4a34f85","answer":"normal","created":13010.3,"valid_until":99410.3},"r76":{"key":"07d0f7781bd69b6ac635e1588d83110921621d8756204fc2c7b3c233b482507b","answer":"authorize","created":5909.6,"valid_until":92309.6},"r69":{"key":"f668b77f7f3629e1f6d16f8bcb2557fc93c50eff52cb1fe95b97faaa24e0e33f","answer":"authorize","created":5421.0,"valid_until":91821.0},"r65":{"key":"b0387795c262bc1dc0024657e5c1142edf822e3c40aac8830124fa0b5b3be2bd","answer":"normal","created":5031.8,"valid_until":91431.8},"r101":{"key":"1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","answer":"inspect","created":7572.9,"valid_until":93972.9},"r46":{"key":"f30367cfef088d228eabb3c5ceba77659575040308761d05e591230a30803269","answer":"normal","created":3412.7,"valid_until":89812.7},"r138":{"key":"142b07d7db8dea0bfc67c9f5eba2082dd565d65695dc5376e1da98af2000ce32","answer":"inspect","created":10989.1,"valid_until":97389.1},"r3":{"key":"5d66d7e7446bb1cf9266702755e05743ab3805b0a13146038d40f354832fe6a1","answer":"authorize","created":133.8,"valid_until":86533.8},"r232":{"key":"32b537f7e4ab7f4fe4cb1b7c4b9cce051eecf472dbc477146b1292f4d175660b","answer":"normal","created":22139.4,"valid_until":108539.4},"r222":{"key":"61a0b81dbab0cff6da1d675d0857ca934485b1cb836416a15a76ff0cbb083b6a","answer":"inspect","created":21082.6,"valid_until":107482.6},"r237":{"key":"8731682b682be8c57a69b4131050ddc9fa82308bd709b8370d0684798ae379ca","answer":"decline","created":22687.3,"valid_until":109087.3},"r224":{"key":"c41d282f3a696a65be713156d86b2375f5d0733fefc81f28d26cd8c6b35f0d96","answer":"inspect","created":21266.3,"valid_until":107666.3},"r207":{"key":"22769860872a040f92d81d780c3ead33f2c4c4693a6cbead116dbb27f5fa9744","answer":"normal","created":19625.6,"valid_until":106025.6},"r62":{"key":"b90bb86248e2952a0051e38c0fbaf3d6cbe1aaa4e1f830b4cb7d07b505c1d7aa","answer":"normal","created":4731.2,"valid_until":91131.2},"r85":{"key":"4a83686302e8d2fa143a1640bef23180d38f6901a3483339dc56731a5ec0dd8b","answer":"authorize","created":6427.6,"valid_until":92827.6},"r28":{"key":"fe80b86dc90e86386ead4fb1e13dbea22c6bf076ee82b9ab7e59aa014dfac56a","answer":"alert","created":1780.6,"valid_until":88180.6},"r86":{"key":"865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","answer":"inspect","created":6551.2,"valid_until":92951.2},"r209":{"key":"271f588ed020b0df063f75c100e10889f916ea364da298472b41f291ce3aced4","answer":"authorize_capped","created":19839.9,"valid_until":106239.9},"r94":{"key":"e8d588c15f3a6ba2d18014a87cafd908d20d54409c84a8304cad13dcfeabcffc","answer":"authorize","created":7026.8,"valid_until":93426.8},"r103":{"key":"e22d08cd71e4fe85157a117945884be41615af88796c53f606b47fa038bac18e","answer":"normal","created":7896.8,"valid_until":94296.8},"r31":{"key":"b77ef8ce17572e60cd55a9745834934f154c1d52d767075c574f18f1d3d4d748","answer":"authorize","created":2007.5,"valid_until":88407.5},"r49":{"key":"502158ddf55d90f0209666a2eb46153da936a272f75fa05532df59430c6bd719","answer":"authorize_capped","created":3722.2,"valid_until":90122.2},"r102":{"key":"84dd48defb81097cfb6618f709c9a08f3583cb3227ad2e905c32c5666eecb9b5","answer":"inspect","created":7747.5,"valid_until":94147.5},"r219":{"key":"a72d68eaba06ec4e6c963da103c9b0dc45ab7886ddc6983bfa2adda3429d7c9c","answer":"normal","created":20818.6,"valid_until":107218.6},"r79":{"key":"d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","answer":"inspect","created":6061.9,"valid_until":92461.9},"r113":{"key":"e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","answer":"authorize_capped","created":8597.7,"valid_until":94997.7},"r42":{"key":"9c89b9128168c614899065585aa1af0e9fde30a0cf82a9f112d769711fea702f","answer":"authorize","created":2849.0,"valid_until":89249.0},"r185":{"key":"961b391b8b2d819e0bd5384c0a093e3fd737cd0e8652383fbf8ce86df8e6087c","answer":"authorize_capped","created":16228.2,"valid_until":102628.2},"r149":{"key":"e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","answer":"normal","created":11938.3,"valid_until":98338.3},"r175":{"key":"4a81192758d20335e6b34c2b4afb8aaa03ec6ab7edae4b92d5689ea56bac885f","answer":"authorize","created":14353.2,"valid_until":100753.2},"r212":{"key":"3f46492cfe2688a378181ff75608c51194302a2ff04d9ef4bef928052ea3e3ff","answer":"inspect","created":20139.9,"valid_until":106539.9},"r183":{"key":"2150f93d600bfc917a75a44cc4db64793b61221b87f3d053e9c25c37953e88d6","answer":"authorize_capped","created":15454.1,"valid_until":101854.1},"r245":{"key":"4c74193d6acb14f41510f610a799acac10bfb3876c6a0e2a195cc68e190048d7","answer":"authorize","created":23875.0,"valid_until":110275.0},"r201":{"key":"aa3a99583306b739abdaacd39acd1f489f74cd82d0c356afe5edf2662711b7a6","answer":"normal","created":18614.2,"valid_until":105014.2},"r120":{"key":"5f91097cca77d5e974cab038a9e8b2caca452bee5ee33d9a3521ac39eff904a5","answer":"authorize","created":9100.3,"valid_until":95500.3},"r179":{"key":"dde0d98cce82f3e04b6a435643bf0cc5ed3dcc0a2d028483e907de961a087012","answer":"inspect","created":15005.5,"valid_until":101405.5},"r5":{"key":"2b6cc99222f33d8a6ffd1cf22eee3fcfe52da5b3b9a2d9a735a73f65e5681507","answer":"normal","created":304.7,"valid_until":86704.7},"r196":{"key":"9eba0993d20b4fcc833a8898898639838baa8bda656cef4206d45b329bb3ab0a","answer":"alert","created":17400.1,"valid_until":103800.1},"r166":{"key":"c5feb99768a5f6dafcf10e73e5dd3b71a0e485e646e80369868257c8982b6ed8","answer":"authorize","created":13378.0,"valid_until":99778.0},"r153":{"key":"4eca99b1aa9b7cc02d93253fcbd8b042a8f2a308065e37f5971da74e7223ddae","answer":"inspect","created":12345.1,"valid_until":98745.1},"r56":{"key":"bab919bbfb3527533a2cad88cbd913bdaae65b411f59deffed79daa5ef8b9230","answer":"normal","created":4230.1,"valid_until":90630.1},"r124":{"key":"88c439bb9d426fb9727a854109492c31b2cbe45e6061fb213c1131f86d0a5280","answer":"inspect","created":9454.7,"valid_until":95854.7},"r238":{"key":"2425f9e03a811a126a919af3b686064dff44a60bc399c610ebe622d3abcbcfac","answer":"authorize","created":22990.4,"valid_until":109390.4},"r180":{"key":"7bb669efc7ef54a75650b800b852a682c0dea2c379850992581df1a10e149544","answer":"authorize","created":15100.6,"valid_until":101500.6},"r9":{"key":"17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","answer":"inspect","created":555.8,"valid_until":86955.8},"r140":{"key":"fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","answer":"normal","created":11169.7,"valid_until":97569.7},"r20":{"key":"63943a4226d8fb42655215a97d92b7b39c4d83792db09fef2b659595697f2813","answer":"decline","created":1209.1,"valid_until":87609.1},"r90":{"key":"c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","answer":"authorize_capped","created":6777.4,"valid_until":93177.4},"r77":{"key":"bcc91a4f025c63a02ead5e74a517af4b3d4f4d33b42c58e454808d418e1dca17","answer":"authorize_capped","created":5944.3,"valid_until":92344.3},"r141":{"key":"d3980a53696b36e807ddd7a77cf4eea828b8b43bd22c99f8d5ccb8925f32d248","answer":"authorize","created":11233.0,"valid_until":97633.0},"r107":{"key":"ee758a6881e98d0ade331c7e8dfde55cc7269a431806803d356bcc6eb9d5ab8c","answer":"inspect","created":8194.7,"valid_until":94594.7},"r192":{"key":"01322a812d2397397876595f6fc2be45dfeeed256b674f70accd6e3354059fb0","answer":"decline","created":16670.3,"valid_until":103070.3},"r218":{"key":"08823a9dcbef015dbdc1c8f4ff977078de0a188d0ec0e08e1dd7110840697ec1","answer":"normal","created":20753.5,"valid_until":107153.5},"r59":{"key":"363a7aa5dce960db4334d9fb150b8e9170c93243393c0a7b73ac9e6d18693522","answer":"inspect","created":4486.3,"valid_until":90886.3},"r39":{"key":"9db2aac2012a48a242f2d34c7522134a296e612ec7ee0f355b4dd16eebff0f00","answer":"normal","created":2681.9,"valid_until":89081.9},"r234":{"key":"08885ac376dea4446461fdac10faefce43c5e98f66020ca04ca3e368710cd98e","answer":"alert","created":22344.9,"valid_until":108744.9},"r78":{"key":"f2d32adb3d6e01e7630860c636aab70ca928ed102a1cdf5fa6bb132eea96bb57","answer":"normal","created":6038.0,"valid_until":92438.0},"r84":{"key":"c7244af0135d986ac61fd14065b4dbf9cfe82021f3ab953ef526e57c3d5dc13c","answer":"inspect","created":6391.9,"valid_until":92791.9},"r159":{"key":"3c9feb0b662a0c417a55ec5751b1c501d1d315c1d204379045c2e004b8c5c875","answer":"inspect","created":12949.0,"valid_until":99349.0},"r145":{"key":"aee17b375980a589f30f158391737b2322f308485b57b59896ead820ac93fcac","answer":"authorize","created":11662.7,"valid_until":98062.7},"r7":{"key":"94d79b3b10abf3b32bc3605e889a76f62d12e9b856a159e6889a8170369dfc6d","answer":"inspect","created":425.9,"valid_until":86825.9},"r17":{"key":"e496bb563eed03c5e50e65c2be033983e2af2129a553cc99debae35f3260187a","answer":"authorize_capped","created":1080.1,"valid_until":87480.1},"r99":{"key":"aef4bb6b5fe9ccb4e86032a47f27b234eace63aa374802947a1767a90c0a8464","answer":"normal","created":7418.6,"valid_until":93818.6},"r53":{"key":"d4a6fb71a5a16c3ef8c4d405f5dba86c1f33c8d257865ae3f9d2bfe82f80bc8f","answer":"normal","created":4077.3,"valid_until":90477.3},"r155":{"key":"5f670babc0d5143c2f85eeafc483373c44b95de221f254f409287881280efd20","answer":"authorize_capped","created":12486.5,"valid_until":98886.5},"r158":{"key":"7fbe0bb7487a415754e1d2db8aa8e75c9a958e18764a14b62dbb6702a827d546","answer":"normal","created":12902.6,"valid_until":99302.6},"r26":{"key":"f1070bc76733cc042f615c8c46f0da8964f7b072195de00defc3becd95ac9c58","answer":"normal","created":1579.9,"valid_until":87979.9},"r226":{"key":"a2df2bce62fb8f386af6a70e7ec36d477087420d1b44e15eda7e965a9d1feb43","answer":"inspect","created":21584.5,"valid_until":107984.5},"r211":{"key":"60819bd34d50fbc46bd50d2e6a28d1071281bcc7ba2a6e42827c0b97a375501a","answer":"authorize","created":19991.5,"valid_until":106391.5},"r216":{"key":"59687be2cc0728f45be3c434049504371152803c7205e95ceed1d12f1291f24c","answer":"normal","created":20516.6,"valid_until":106916.6},"r122":{"key":"302c7be4003ea0a217fb6534c49ada5bd8b011724c713672aaf7c5e4bdb42d69","answer":"inspect","created":9342.5,"valid_until":95742.5},"r146":{"key":"6fb90bf22cf47ebb829244b6eb2a2c3c6103a367b5355ca78f592dd35b9c656b","answer":"normal","created":11743.0,"valid_until":98143.0},"r244":{"key":"4e0f6c06f2653d70fb5238b34773775a709754e0c5cef8206cea8c7bbca5fd51","answer":"decline","created":23847.9,"valid_until":110247.9},"r231":{"key":"7aaecc08a0df481f598610afab8692f5ddca7549188b4b2fcc06d2adc2b91739","answer":"authorize","created":21934.3,"valid_until":108334.3},"r34":{"key":"a5c65c1251df6b52b6e4a628d9d24fb1484cbf31edba89ca1f021a79d978cf37","answer":"inspect","created":2309.2,"valid_until":88709.2},"r75":{"key":"759f9c148dbf8a7b035d1e93268b749afb1424af4fd1bbde4111057eade1779b","answer":"decline","created":5828.5,"valid_until":92228.5},"r177":{"key":"939bcc1943febcebbe225a53f2decad409bea62e86017712d04d92893c520ed4","answer":"normal","created":14681.6,"valid_until":101081.6},"r181":{"key":"74c49c22905ea62e5a5f211dc5f47a895129ef8a84de0b3ca3c06e98b014cb87","answer":"inspect","created":15189.7,"valid_until":101589.7},"r87":{"key":"09fbec421a34061a20a3276b975bb72b854374ca4aca4b207ae8812da3d2f0bb","answer":"inspect","created":6592.9,"valid_until":92992.9},"r70":{"key":"da6c1c4573865ce511b7df4d41f5f959ab68783b07b6c0639a8a8c91d5c45886","answer":"authorize","created":5490.2,"valid_until":91890.2},"r58":{"key":"d4342c517cddd41c899d7b9a10713f0f335f15631294442b857cdb687d622a72","answer":"inspect","created":4321.7,"valid_until":90721.7},"r15":{"key":"cac3ec97ccbcc9911415dd1c3364a4e1be2862326ead2359d76fa0d81c5c2e41","answer":"normal","created":953.9,"valid_until":87353.9},"r204":{"key":"c056ecb36876fe2bda74fc48b7a32f777323cbaf6519fabddbf28ac0a87c2b68","answer":"authorize","created":18833.5,"valid_until":105233.5},"r117":{"key":"4bacccbd030089bf80d971373b0c6e1988aa64c65713385608eff33f6b6c3fa1","answer":"decline","created":8945.7,"valid_until":95345.7},"r223":{"key":"c8fedcbf10aee8438e76d85876f93595fdbbe423e074c2031a7b547557e07c6b","answer":"authorize","created":21179.2,"valid_until":107579.2},"r167":{"key":"1d7a6cc8581b38a163cf95aa00c0875a71db7a0206c9b19ddf52698710a36ab6","answer":"normal","created":13472.8,"valid_until":99872.8},"r168":{"key":"b35fdcce6b0deeb13607ea6ac07486b5e54843dcb842e6c100c5251a428ff403","answer":"authorize","created":13566.3,"valid_until":99966.3},"r63":{"key":"0bea6cd650d108797f6adf95ce6eb98edb25d3145e447dbbe59044cdc1405e79","answer":"inspect","created":4864.9,"valid_until":91264.9},"r215":{"key":"2e6bcce24324c6413e1841fbf4ccf83ba8447651cd6d25ab70dc545d67dbecf2","answer":"authorize_capped","created":20447.6,"valid_until":106847.6},"r11":{"key":"83e3ecffea2fc1d618c8e6a2b3989bbf71e691b703b087230e7c8df1a5eb2142","answer":"inspect","created":751.6,"valid_until":87151.6},"r41":{"key":"b4e6cd21c0ba051d04aab9042e5e115c3bbe352ada582acaab628fc22dc8fd67","answer":"normal","created":2825.0,"valid_until":89225.0},"r71":{"key":"efbb8d25a730016e7141c8a4385a30cc196c5b7f9d238b06f6213360fb3a4888","answer":"normal","created":5575.5,"valid_until":91975.5},"r193":{"key":"5d7d5d259b708cde975291235fd292c65d84bcd5067333476c61256be72dec9a","answer":"authorize","created":16783.9,"valid_until":103183.9},"r169":{"key":"3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","answer":"normal","created":13589.5,"valid_until":99989.5},"r186":{"key":"ec9fbd4b6ba63997cedebf8eb7b1b1602733679e70bdb87aab8f6499ba1da719","answer":"decline","created":16268.5,"valid_until":102668.5},"r44":{"key":"0267ad62d64134b8622d4fb07cdbe888137deaca0fdee61e6b66d8bcb9076eaa","answer":"normal","created":3235.0,"valid_until":89635.0},"r172":{"key":"d96ead6b9efeba477a485f30879290174c4379502931ddb2e2e517c5180a0925","answer":"inspect","created":13733.1,"valid_until":100133.1},"r205":{"key":"ad278d6c144d6ba6abe0909ec13f4571697719ce7fc2ad60ad49fcd7a7a482af","answer":"normal","created":19188.2,"valid_until":105588.2},"r227":{"key":"154acd6e250ebe25f69cf2b239edab416d7fe7fb6baccff9ac3d51823d7f3485","answer":"inspect","created":21649.5,"valid_until":108049.5},"r27":{"key":"272c9d86aaf700789284bb8372a2da11c6d2899016b0aea1b9b930ae8725b372","answer":"normal","created":1665.3,"valid_until":88065.3},"r54":{"key":"fd4c1d8eeb1ba609a09e31334f8a9013c10158c6b9aefd227c5fd0e0dd2fa168","answer":"authorize","created":4119.5,"valid_until":90519.5},"r123":{"key":"e0b57d9c257ac8c9907ed3e56a0c407357f932bf26e1660d0d88a96cc06b6aa5","answer":"authorize","created":9424.5,"valid_until":95824.5},"r188":{"key":"cf49fda430355241c258ed4f604d062793a1e809eb06aa62b8eef4d5827b6660","answer":"normal","created":16342.4,"valid_until":102742.4},"r228":{"key":"f31f9da7b2fa4c561c8ee66224a278001052b8b99d6dbe7c209883d758145f3a","answer":"inspect","created":21706.6,"valid_until":108106.6},"r51":{"key":"8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","answer":"normal","created":3911.7,"valid_until":90311.7},"r198":{"key":"b5166dc9434ae553a99bc73fc4c5eff59caa50ac572d538e05455c4f40710854","answer":"authorize","created":17969.2,"valid_until":104369.2},"r33":{"key":"38918dd8f55312dd4ef01adad024a47d010d9a3649ba108cc31f5e515e45f804","answer":"authorize","created":2192.4,"valid_until":88592.4},"r97":{"key":"c6a5bde2c8cef5728623cc3d7d230d795042fe75b0bfcffd30613b27e1962cb8","answer":"authorize","created":7274.8,"valid_until":93674.8},"r173":{"key":"db77ddfc23a61c07ebd5b655bce57cf0a257f4cd3183666ef84c4bd52ecdd2fd","answer":"alert","created":14007.4,"valid_until":100407.4},"r195":{"key":"4f997e150ba0259c9622fba72c9ccf1420961b0c877fe9ea6bd0e046da32ddee","answer":"normal","created":17190.9,"valid_until":103590.9},"r230":{"key":"4c744e2ba5337d8ddbf322da9a54af286783ecf207c9c30c67beb264b801d5e3","answer":"normal","created":21851.2,"valid_until":108251.2},"r220":{"key":"baea2e2ddc1e7402abc1dea416e792b9abb0db4212cd13a3bb45db038aef7c4d","answer":"authorize_capped","created":20951.8,"valid_until":107351.8},"r19":{"key":"37707e34da5b534c649a60fc1296acd8d8c186353bae88e9ebb88424890d7407","answer":"inspect","created":1162.2,"valid_until":87562.2},"r135":{"key":"cdcf8e35c696111fe372178b7a84c92bcc0a341f50b1b9945d5272081b4a00a3","answer":"authorize_capped","created":10740.6,"valid_until":97140.6},"r242":{"key":"8c64fe7e125a0c23e1693ec175d3c7d7ac8100de1da797c06c8bedf80d663378","answer":"authorize","created":23735.5,"valid_until":110135.5},"r203":{"key":"4d67eec84284925c3bb3e94c48c11e1e415e5b4bf6c82676bdb63f70afc5dbdf","answer":"authorize","created":18796.8,"valid_until":105196.8},"r55":{"key":"0dc01ed37cced0f5820acbc15b5de7dc270ea65e7930a4cf889bdfa792199326","answer":"inspect","created":4147.8,"valid_until":90547.8},"r157":{"key":"f64acee0744f6cb5b0186d8df86be984d0d6ad9ef0872d7c68ec46d52b0594b4","answer":"normal","created":12741.8,"valid_until":99141.8},"r66":{"key":"e794aeed80344416c0eea1f5479ecab56e92778ba0a1c0ad094b45481313cd95","answer":"normal","created":5196.0,"valid_until":91596.0},"r182":{"key":"eeefeeffb8a0a9fb80a5cbf1e129d37dde0b471996c98ef784b3e99073afef89","answer":"alert","created":15302.2,"valid_until":101702.2},"r161":{"key":"c70c4f1cfbf7f3e80ab7fd116b69405e0071bb46bac6a04135010096235a99f3","answer":"alert","created":13043.5,"valid_until":99443.5},"r132":{"key":"cad30f2c6d0d2fedf44ec59d6ee99ebbbcde9e90ccbdaeccb878fdb153546be7","answer":"normal","created":10508.6,"valid_until":96908.6},"r22":{"key":"af6e3f5337fa8c7c3e8c821840fa70047138fe84957d62d954f2d8aca1470b96","answer":"alert","created":1392.0,"valid_until":87792.0},"r130":{"key":"86bfaf5eec3f3155eb596fba26eb284381cc8e76ceb08cf882275e1d5f13b293","answer":"normal","created":10387.6,"valid_until":96787.6},"r110":{"key":"9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","answer":"alert","created":8419.6,"valid_until":94819.6},"r29":{"key":"c05b2f88954eaf469ac8bbfcd4547bc6e74c41180cce4195cef4e40ecfc1095f","answer":"normal","created":1834.7,"valid_until":88234.7},"r30":{"key":"9ca88fa2ca1389cdb90b09bc8a2e8c6a5f0e5c9345cf31bef0e590680aa21c13","answer":"authorize_capped","created":1858.3,"valid_until":88258.3},"r163":{"key":"fc270faed1a038462ee17ad9afe5fc830b173f58fbcb6f74f25d11dab82a9b32","answer":"authorize_capped","created":13175.6,"valid_until":99575.6},"r127":{"key":"05f17fd121a463594b61b4cdcf207aaa369bbb2761e582ce36c12da3375fc3c3","answer":"normal","created":10203.9,"valid_until":96603.9},"r12":{"key":"bb697fd6f8f128e857820859facf75e9f5686504c1ac81b8de52367d1ca1d83c","answer":"inspect","created":818.4,"valid_until":87218.4},"r174":{"key":"08ba4fe6512d0d94de19c3932e3bff09728b6ede0b1838ff5091c9850170a516","answer":"authorize","created":14232.9,"valid_until":100632.9},"r50":{"key":"6d5f6fefa14e96e9b333c9e2ca60b7b266ea9b478a3eea4101c6e5373b59c55f","answer":"normal","created":3862.8,"valid_until":90262.8},"r247":{"key":"81dbeff3e03710faad18ddfdcd4b715d171b50030792c13bdd2e1a8083b5c9d0","answer":"authorize","created":24179.5,"valid_until":110579.5},"r23":{"key":"843d0ffb6136b8cb2bc9712d4d55ae5f149fd4716d6773cd5f2b57114afa7b5c","answer":"authorize","created":1436.5,"valid_until":87836.5}},"ledger":{"meter_joules":"1.499794558825e+03","unallocated_joules":"0.000000e+00","carried_forward_joules":"0.000000e+00"},"expected":[]}]}
+{"oer":"2.0","draft":"0.1","source":"settle kernel host harness, 400 events","keys":{"ed25519:bench-node-01":"755c4cb9256ca7cdc4acfdc6cfeeda849017e5b9f9514e99191bd67e0b0d4276"},"vectors":[{"name":"v10 firmware chain from the C kernel","receipts":[{"oer":"2.0","receipt_id":"sha256:a28824c4bd234ff289cabc65d3c721625c2eba11b02bd6902d23583587453bd4","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5ea2a39f565cf2588f19cb5c05ffdb4e6e04155dd041eeea4651d60de5cc156e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.483598270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.233770e-02","shared_alloc_j":"2.411257e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5ea2a39f565cf2588f19cb5c05ffdb4e6e04155dd041eeea4651d60de5cc156e","served_from_record":false,"record_id":"r1","record_hash":"sha256:d6977fad9dc0b59a864f97c077ec0f08cc4fb309b34b3926961dea1290b1cf3e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86440},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822948e+01"},"chain":{"prev_hash":"sha256:0000000000000000000000000000000000000000000000000000000000000000","receipt_hash":"sha256:79e6912b7e2f256439a2fa56fbd01aaf4ef1478c943f4ed55d9fb6dd6ffc9346","signer":"ed25519:bench-node-01","signature":"138f72e8e8d2e9212be4fca8ef5efb4c15a127a995e7656e5eb3569103831df7890e2072e175a0acc83a15b73c8474c21422d4fdfc809f798f6af9d6e33bc508"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:eabaec5ccd5e8b95e9fd6d1317ad5cef76c9b5b17e6c5ed76e9d00b4b8471262","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.336309080588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.804781e-02","shared_alloc_j":"2.268260e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":false,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820293e+01"},"chain":{"prev_hash":"sha256:79e6912b7e2f256439a2fa56fbd01aaf4ef1478c943f4ed55d9fb6dd6ffc9346","receipt_hash":"sha256:90c2f26fdbd8bf3ddb35793bc29dde38d252d26ab23ba41da22a260e99dd162c","signer":"ed25519:bench-node-01","signature":"5ebf758990ed22a96acccbc762d1e943a60062a84410b2771ae1e4b11bf0edfc2e21a5b2b96bc12e8514e8e37695713847ea14f73f6f43ca1e9c64cd51892a00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5b5b6706f761c9ae724293407f8f16ace1bab4cac0a4787205e5bef9239ab516","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5d66d7e7446bb1cf9266702755e05743ab3805b0a13146038d40f354832fe6a1","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.447362070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.004085e-01","shared_alloc_j":"3.346950e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5d66d7e7446bb1cf9266702755e05743ab3805b0a13146038d40f354832fe6a1","served_from_record":false,"record_id":"r3","record_hash":"sha256:7bda35bf414431c9352b02f46600798bd137b25e0d035e028b4f360bba6d2d86","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86533},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.837189e+01"},"chain":{"prev_hash":"sha256:90c2f26fdbd8bf3ddb35793bc29dde38d252d26ab23ba41da22a260e99dd162c","receipt_hash":"sha256:cd470df6dba5aea1bc9620ed786d4992ee557c8fd539810f499e1c1349b1f9a7","signer":"ed25519:bench-node-01","signature":"31da8b9f5f55a797e2cb9a509231a922267a9f815d89214cfd449efecc0a3822382f7d27cff80a56b58690f6f048b697e95079285ab30483a7883e43d0ba5e0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ff38237a7f6e83f53b1fe4a026725ffee316aa92a9519dd7f9778265bb99f649","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:000992060ac23f9a6b54bc2803d93971b95cb85a38feeb4e9d3559b2ffba116e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.153472570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.792273e-01","shared_alloc_j":"5.974244e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:000992060ac23f9a6b54bc2803d93971b95cb85a38feeb4e9d3559b2ffba116e","served_from_record":false,"record_id":"r4","record_hash":"sha256:075ab1ff59393c60da8559722711e3fa3b2c44a93c170ee6a918f85a4efabe5f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86633},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.862352e+01"},"chain":{"prev_hash":"sha256:cd470df6dba5aea1bc9620ed786d4992ee557c8fd539810f499e1c1349b1f9a7","receipt_hash":"sha256:bee7678b1a62d8c942003e9bf75ffcb98a3834b98a411b1a861d7fa080828d99","signer":"ed25519:bench-node-01","signature":"1bfde28257f2379847b7874c21292b74c813461c7b7c1a05ae8d2e0be99f5a92e8702589c536c8d4450a49bbd7ccff73f49004246da9ca82ea0c3f2e9a614200"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b675a8e54015af257124f1f727a42fe5fba0b4fe5efa7e4231e479f321ed0c08","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:2b6cc99222f33d8a6ffd1cf22eee3fcfe52da5b3b9a2d9a735a73f65e5681507","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.410053370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.284481e-01","shared_alloc_j":"4.281604e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2b6cc99222f33d8a6ffd1cf22eee3fcfe52da5b3b9a2d9a735a73f65e5681507","served_from_record":false,"record_id":"r5","record_hash":"sha256:41c01d66b16234412c1fb58f3d033a7845b26bf4cb1994c3393a850130827581","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86704},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847884e+01"},"chain":{"prev_hash":"sha256:bee7678b1a62d8c942003e9bf75ffcb98a3834b98a411b1a861d7fa080828d99","receipt_hash":"sha256:1c4959b03f9c5fa128d32dd2f5e8db3718d0e3102a113db91cad0f2af972dbd3","signer":"ed25519:bench-node-01","signature":"6b54fc48f9218755b51f07b7ba93fd9a606457fb6d57b4a92e9f0e7314f7afdab412f8e5b56ad5eb22a67ae0adc42223038a6e1f12e92278a1c254b2fb496c08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d9c9642bd48911ea8118eb0ef244e3d76673bec4eacb91340491d40ce0d7bb94","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:373ee59b311333a4d8f4d4bc7c250e0ba6a4ad0e9dfd8983a4eca3ed32f1bca1","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.684671580588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.906801e-02","shared_alloc_j":"1.635600e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:373ee59b311333a4d8f4d4bc7c250e0ba6a4ad0e9dfd8983a4eca3ed32f1bca1","served_from_record":false,"record_id":"r6","record_hash":"sha256:ee5673b905a5f97c8fe89450dd3585c17e3f42d25310c21c2ec178fe0b0aff25","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86731},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.806092e+01"},"chain":{"prev_hash":"sha256:1c4959b03f9c5fa128d32dd2f5e8db3718d0e3102a113db91cad0f2af972dbd3","receipt_hash":"sha256:6a41fa22797aad64f8e1597c2cd71abc29fe05a8c2a13d24a87965430bdf74b8","signer":"ed25519:bench-node-01","signature":"25a5298ed0464f342e6aa184b81647ea1ab8ed67dfaf749e7276566d02ae7ef567cab115e88c638183fdcbf9467c73cbd6ffd2db2d5a173a4a2b5c0559de9c07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ddbe720008445e5e9dfaafe90d2c0bfa69fea8f0c01aec658611fb38f3e2c003","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:94d79b3b10abf3b32bc3605e889a76f62d12e9b856a159e6889a8170369dfc6d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.807003270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.691360e-01","shared_alloc_j":"5.637866e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:94d79b3b10abf3b32bc3605e889a76f62d12e9b856a159e6889a8170369dfc6d","served_from_record":false,"record_id":"r7","record_hash":"sha256:781e5562d76a8d14d316897ae18b4fd0e03f6e448e395a5a8562b43febb6786f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86825},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859835e+01"},"chain":{"prev_hash":"sha256:6a41fa22797aad64f8e1597c2cd71abc29fe05a8c2a13d24a87965430bdf74b8","receipt_hash":"sha256:96262db5de10c78a1b12c1b3de5a4f9206b882463bd6f2c00a032c3ee7b7427d","signer":"ed25519:bench-node-01","signature":"b37a058b0177168302122d3d6112ecf7c0dad918cf3b8e90de6822ae66ef54f75ca1bdc2f876189e89a08c9e0df8d37f655d88395792a2d145ea918644a39f0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c59891c6d1ce17faa63e950c310affce5edbac416b1f73ff61abd57226dc3006","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.128474650588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.199438e-02","shared_alloc_j":"2.066479e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","served_from_record":false,"record_id":"r8","record_hash":"sha256:ae42ca1dddafc073a12617d3f2c47a5ae0d14b088c0d45326c5afe31fbd99357","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86860},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.816247e+01"},"chain":{"prev_hash":"sha256:96262db5de10c78a1b12c1b3de5a4f9206b882463bd6f2c00a032c3ee7b7427d","receipt_hash":"sha256:7f0d6a42ebc79ee50febff5712cd0b8a0446ebcb0a2141861a2539154afb60e7","signer":"ed25519:bench-node-01","signature":"e0bec0c8cb16f509e14c7c318da7f01a9a7d791d930b82388caa4c386335a1b7ecf3066377c9c5f931dfc06707b54786a24624a30a2c30e637fa596720927503"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:971ab6dd4c126c494facd25581209ca45f186603620c86e70f169e3fd8bf65c9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.898794770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.718095e-01","shared_alloc_j":"5.726984e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":false,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.860516e+01"},"chain":{"prev_hash":"sha256:7f0d6a42ebc79ee50febff5712cd0b8a0446ebcb0a2141861a2539154afb60e7","receipt_hash":"sha256:69d19abbb0d852eeda74255b90b5e774c4f05fb93b37fe256aad2504d29c773c","signer":"ed25519:bench-node-01","signature":"9237abd56fa60d52f5d9f47ae9eea62c1ea95964478b319f09dd126170d959e2df9f587fe8e3d8989a4c27750caa316c770444278c8d19e843408fb5cd3e9e02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:50f290d1101e282bdd2d244270ef35d538bf23c12d90c8a5978a0f4cad5fc800","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.336529070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.554328e-01","shared_alloc_j":"5.181095e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856166e+01"},"chain":{"prev_hash":"sha256:69d19abbb0d852eeda74255b90b5e774c4f05fb93b37fe256aad2504d29c773c","receipt_hash":"sha256:807ecd4b42cb2ef26e6e39a0937fdf6c46b8c0f5e2b7b8bb8e97a30ce1af2d7d","signer":"ed25519:bench-node-01","signature":"f2a2c462f7d0f41b13d501f2df1407b8a3c9edaaec3d105b44a2d737f7f0c618c43eaf725b8437d2f0d54cd9b3231fe509516bbd4caf3810657977c882963804"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f4aad713edcd6321f53a47f70f3a2a1dd2161a7b4d4337cdbc5bc6cb78ebcda7","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ebfae6bebcb2216decc8a5f5248c809294a8c5e1a542d328eee0999e102630d0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.347019820588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"3.923355e-02","shared_alloc_j":"1.307785e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ebfae6bebcb2216decc8a5f5248c809294a8c5e1a542d328eee0999e102630d0","served_from_record":false,"record_id":"r10","record_hash":"sha256:928cde2a1820a04cc5cc97df8139b399f07faceab9496c37f6f9b2a0265ede1a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87063},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.796377e+01"},"chain":{"prev_hash":"sha256:807ecd4b42cb2ef26e6e39a0937fdf6c46b8c0f5e2b7b8bb8e97a30ce1af2d7d","receipt_hash":"sha256:c321204bddcf6dc9a5a20d3e3ac62c44e2ab3cca3c79c2c7160b41b3bfb38673","signer":"ed25519:bench-node-01","signature":"1cf94ef5f20ca05308045c24515326302a42547827beb2d2dea98a359574cf53c8fada66c8e0ee148b568b95e32ff8eb2781a117afe64cbe2bc603c403bbe40b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e2284563d142f63a9abfa3e5fd1490de790b5196f307208af40ef519d42d2466","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:83e3ecffea2fc1d618c8e6a2b3989bbf71e691b703b087230e7c8df1a5eb2142","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.415323070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.577278e-01","shared_alloc_j":"5.257594e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:83e3ecffea2fc1d618c8e6a2b3989bbf71e691b703b087230e7c8df1a5eb2142","served_from_record":false,"record_id":"r11","record_hash":"sha256:6b20a68c63f066ea3b3730f453a658b9fedb04fdd68d05e5b26ebcb6db3b5af8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87151},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856802e+01"},"chain":{"prev_hash":"sha256:c321204bddcf6dc9a5a20d3e3ac62c44e2ab3cca3c79c2c7160b41b3bfb38673","receipt_hash":"sha256:a8a89dc415b4a5d4ccfe6f683a2761ed23223398beacff690876b69ab28a5889","signer":"ed25519:bench-node-01","signature":"ded176520eddc045100306bca23942a01143363991aa1c9b188021152a8e744f40a742ccffbef2556260afc5d69f028b35fc145e5424d20af3ae333333d8e303"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4e91fe51a2aeb88f45ea48accf6e3abf333f4f9ce884b2d8ad84c7c2bdc4adb6","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:bb697fd6f8f128e857820859facf75e9f5686504c1ac81b8de52367d1ca1d83c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.131488870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.203346e-01","shared_alloc_j":"4.011153e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:bb697fd6f8f128e857820859facf75e9f5686504c1ac81b8de52367d1ca1d83c","served_from_record":false,"record_id":"r12","record_hash":"sha256:ab217fccaef6ef754ced70fbf224f661169fe7f7af2a3119a7e8009e8aac0e51","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87218},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.845051e+01"},"chain":{"prev_hash":"sha256:a8a89dc415b4a5d4ccfe6f683a2761ed23223398beacff690876b69ab28a5889","receipt_hash":"sha256:9fe7e67463638c6ede2eca97a01e252fa8ea65b794b57125115e366a541ab578","signer":"ed25519:bench-node-01","signature":"5ebbaf13286e0d67a8b5bce1b606df84685514b0148f1620d612a54ec2286aba30785196549462dad4c6c895e457cf0fb7b15aaa64e7ea163e39058d2827cf0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c29df04ca882c72d801dfb806eb4dd67f32f879d44ec07db96d4e545124169ba","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:a8e321822bb7a103eee73415fa73a912b90c5f863fbec7633f2cb269013e7c16","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.788849270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.394810e-01","shared_alloc_j":"4.649367e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a8e321822bb7a103eee73415fa73a912b90c5f863fbec7633f2cb269013e7c16","served_from_record":false,"record_id":"r13","record_hash":"sha256:2b6453fee78877e034de88726e8e50ed7892dc1bc50372ca02e5bf255acd0ac5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87295},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851463e+01"},"chain":{"prev_hash":"sha256:9fe7e67463638c6ede2eca97a01e252fa8ea65b794b57125115e366a541ab578","receipt_hash":"sha256:f87a25c0c8f36dd77639ebdd01810dac44cb5deafbbb529b72e4d88396b28764","signer":"ed25519:bench-node-01","signature":"e5069c39c9df3085a2b8076a2b634d035e222a538af04b91b6b85d05b5671353376f359634f5533fb1e23fb8468735296865ac1ab090175d1c1bbb15fd00a103"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:98be266953ac3589ab39f40247e9332b6164b5176a5cec13bbd72aef89f98e2b","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:87fbc23294c2ec468634d4d2a29b0784ae6d1e65ac331af477e07c957fe523f0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.720151970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.010140e-02","shared_alloc_j":"1.670047e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:87fbc23294c2ec468634d4d2a29b0784ae6d1e65ac331af477e07c957fe523f0","served_from_record":false,"record_id":"r14","record_hash":"sha256:48bea2997a832f667907939cfa9908442a2f5ff3f43b4094978534a0c6825f0e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87323},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.806997e+01"},"chain":{"prev_hash":"sha256:f87a25c0c8f36dd77639ebdd01810dac44cb5deafbbb529b72e4d88396b28764","receipt_hash":"sha256:0b2cadf9cabd4f366e37f94cd3dd0aa59397080a2754f7a032d5d615fac0df44","signer":"ed25519:bench-node-01","signature":"f2d857db385bfc0100f227210348aac79a3afb1eaadfa8ce5414eeb1b48db1b5a9931e44d9658be21719a5ae4df85203e3f179456b05b3de3a674394d71ae009"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bbe8a8cff87e20dacc08e93ae9815a60df4f95310ca6a293208682a6d7427a65","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:cac3ec97ccbcc9911415dd1c3364a4e1be2862326ead2359d76fa0d81c5c2e41","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.863894430588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.428816e-02","shared_alloc_j":"1.809605e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cac3ec97ccbcc9911415dd1c3364a4e1be2862326ead2359d76fa0d81c5c2e41","served_from_record":false,"record_id":"r15","record_hash":"sha256:7ec6c4fc3832e69520a2be2769278ad36c6d32a8f6002ef431fe4b98142af0b6","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87353},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810482e+01"},"chain":{"prev_hash":"sha256:0b2cadf9cabd4f366e37f94cd3dd0aa59397080a2754f7a032d5d615fac0df44","receipt_hash":"sha256:0107fc5e912ad9cd542383f72ba4680a8eaff434ea333a312e0673fd21c2ca29","signer":"ed25519:bench-node-01","signature":"91dcdcbaa6bf563a3bae17902315e1b571f895cd392aebb9e21aef217959345e433ee1d021619debdd7f531fd58979129553d25831e26947638ec6dc9f4b0009"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5ef0d67f18948910a9b9e1776759ce7e61c390796c55c088ffb7fe138876803b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.214160970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.518687e-01","shared_alloc_j":"5.062291e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","served_from_record":false,"record_id":"r16","record_hash":"sha256:3227d5f5cdb47b0c636c60fce42fed733f0e84ce2c21552a8ea3164c96c9d710","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87438},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855158e+01"},"chain":{"prev_hash":"sha256:0107fc5e912ad9cd542383f72ba4680a8eaff434ea333a312e0673fd21c2ca29","receipt_hash":"sha256:750423d93f5c668b2b27f9f7f47a0078375f1e8a48c2e83402b02c743fac2efa","signer":"ed25519:bench-node-01","signature":"e5cf5ca3b8633b647004e76ae2ec65fa448489bac5918605df2b463e516263e01a7ba78dd7fa30f6e8306742a3a363078f939b73fe67b2a3b513d854a57f490b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:52c7c12b8ac4d44fb42dcf3e6a45d1f0b575f36a682a39c5c4d59e3eed32fa33","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:e496bb563eed03c5e50e65c2be033983e2af2129a553cc99debae35f3260187a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.581065130588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.517656e-02","shared_alloc_j":"2.505885e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e496bb563eed03c5e50e65c2be033983e2af2129a553cc99debae35f3260187a","served_from_record":false,"record_id":"r17","record_hash":"sha256:604c5863e2fa80431ff93bacbba273f238b81bbd89439c9049af8248095cb968","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87480},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.824620e+01"},"chain":{"prev_hash":"sha256:750423d93f5c668b2b27f9f7f47a0078375f1e8a48c2e83402b02c743fac2efa","receipt_hash":"sha256:9108359b4e54672a667ea0fd9d6a661a4328b173c62ab1d7a5a82b57ebd6fde2","signer":"ed25519:bench-node-01","signature":"2996437c110b8ac78a863603f6a5c4e18449a223c8d5c98d3f49a145846594c1d4d4c2d09db25ff401a8215b33c8769154ecdb6eb6e8ba6b6b6c28c75299d907"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d4d2d7698c6d91326e7fba5a446144e93c29f9ccb42c820197ee1827f1a6cecd","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:543b0438d15cea081a05c8bc2a7c7bab836d901528216ef19b14045909d3f014","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.887140700588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.409143e-02","shared_alloc_j":"2.803048e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:543b0438d15cea081a05c8bc2a7c7bab836d901528216ef19b14045909d3f014","served_from_record":false,"record_id":"r18","record_hash":"sha256:f9e30653053e655f209019f00250ef72005c3130e28ee7ef20aae8f6decd898f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87526},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829487e+01"},"chain":{"prev_hash":"sha256:9108359b4e54672a667ea0fd9d6a661a4328b173c62ab1d7a5a82b57ebd6fde2","receipt_hash":"sha256:b0829748beeede5daf5b340ffd631e0f110de16e219a9898927dac8a703aef91","signer":"ed25519:bench-node-01","signature":"d3b022338dc83b1458dead4ae6b7fc1a7752ab786cf82c5ad19f130c4d718065f5fa4e6bbcf46d1040d00595f35425df132f694a1334164b2119c3ed4c08a505"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:be8f42943907bd005a1dd03e9c7fb4a40049b28957508e34b629c77e26016535","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:37707e34da5b534c649a60fc1296acd8d8c186353bae88e9ebb88424890d7407","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.188702870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.374860e-02","shared_alloc_j":"2.124953e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:37707e34da5b534c649a60fc1296acd8d8c186353bae88e9ebb88424890d7407","served_from_record":false,"record_id":"r19","record_hash":"sha256:ceaddc848f74519f3ddcb0c7bdbaa3918285688fa67a526f304a1cd23cc6c39e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87562},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.817459e+01"},"chain":{"prev_hash":"sha256:b0829748beeede5daf5b340ffd631e0f110de16e219a9898927dac8a703aef91","receipt_hash":"sha256:7d27b18834e034c0c355d399eb378be69dc504d9af795752cff7efcae511ef42","signer":"ed25519:bench-node-01","signature":"0d9f01a6c16d9ed1e046893c17dc55af6baa327adf1ca028009394a0e59e78af5b359c4557b861cee7019f43630b47e4fcdc2cf7ae3faf6e8ce479b19fe92f04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:39b1d7a7aad1e8edcd76ecdce56e7b49d1a830d76e3f1488f854ab8a0902ca74","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:63943a4226d8fb42655215a97d92b7b39c4d83792db09fef2b659595697f2813","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.900554640588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.448207e-02","shared_alloc_j":"2.816069e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:63943a4226d8fb42655215a97d92b7b39c4d83792db09fef2b659595697f2813","served_from_record":false,"record_id":"r20","record_hash":"sha256:ebb83c4e09bb79ba1d2aebf3fadda6505898f02ee3617fa696cd7e86ea11763d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87609},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829688e+01"},"chain":{"prev_hash":"sha256:7d27b18834e034c0c355d399eb378be69dc504d9af795752cff7efcae511ef42","receipt_hash":"sha256:90664d5ade5d21acfcf4c92015d0740aa53691b62edf1fee74e9ff521d3dcb9e","signer":"ed25519:bench-node-01","signature":"9dc853d83703d0be6aec56338b89bf78908fae9255a49cfabb0d34c1f7a9427e3ea2ee09c7a838d9f42a8a13813399b830d06b7167708067072ba1a61268240c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d5715d0fbaab77ab271f9e07b9c2be33b0452be30d57fb0ddc2253f859fc3480","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:678fe08a78a0cb3c662513b15302b138ce1354a79c85cb3644891a472d1730f3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"6.080976270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.771157e-01","shared_alloc_j":"5.903857e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:678fe08a78a0cb3c662513b15302b138ce1354a79c85cb3644891a472d1730f3","served_from_record":false,"record_id":"r21","record_hash":"sha256:079084a75b13903374430dbb22d3fb5c7d868e6b54c3fedf3534634e1cdc0d28","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87707},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861837e+01"},"chain":{"prev_hash":"sha256:90664d5ade5d21acfcf4c92015d0740aa53691b62edf1fee74e9ff521d3dcb9e","receipt_hash":"sha256:562988c3c9757e5cfe8e76b783f29945af4629c758f28109d228b1ab413db6cd","signer":"ed25519:bench-node-01","signature":"302240fdc5c76218a8c7f6c5ac06f236144291e7996b611e2edf2266ac58faab78a9315535be4b73f53e5a9373f2df7f5efd70074b48aa5fac0d99a00efe820f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a2030af030c920f4929c7624346396607a9f2b9866f34f73d8e21cfa80dc9a5c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:af6e3f5337fa8c7c3e8c821840fa70047138fe84957d62d954f2d8aca1470b96","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.219555070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.520258e-01","shared_alloc_j":"5.067528e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:af6e3f5337fa8c7c3e8c821840fa70047138fe84957d62d954f2d8aca1470b96","served_from_record":false,"record_id":"r22","record_hash":"sha256:9063a9e7dc76b63ae3948bf18dbf7af9865ae1e78fa877c530e45e0bea3e1be3","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87791},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855203e+01"},"chain":{"prev_hash":"sha256:562988c3c9757e5cfe8e76b783f29945af4629c758f28109d228b1ab413db6cd","receipt_hash":"sha256:cca05ce9a745f094c832717cab3d4cfc6d4c0bb1f94f875550c577050b4d9e77","signer":"ed25519:bench-node-01","signature":"88ba040ebc156031ce4eb2e27cbc90e7ee041fb535eb68d1d291b352b1b2462e456068b27b1d383fd06d63d74f4c20683960603bb3d98e6c6d07e3646f76c309"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e4fd79ed79b3a2ddba0ec36798bf3440c0f88f16d174209298140a5fe8625b69","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:843d0ffb6136b8cb2bc9712d4d55ae5f149fd4716d6773cd5f2b57114afa7b5c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.752153270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.015970e-02","shared_alloc_j":"2.671990e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:843d0ffb6136b8cb2bc9712d4d55ae5f149fd4716d6773cd5f2b57114afa7b5c","served_from_record":false,"record_id":"r23","record_hash":"sha256:da71aa5188ea791e9566dc90cb37b6f2888b0d974936587c4654b082719822a9","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87836},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.827407e+01"},"chain":{"prev_hash":"sha256:cca05ce9a745f094c832717cab3d4cfc6d4c0bb1f94f875550c577050b4d9e77","receipt_hash":"sha256:db3af2c59a28e88d94d50b2c39edd3eef8fff6a9bb3ef8e7629394cf4c26c013","signer":"ed25519:bench-node-01","signature":"d53914dbafc712da0b0ae0cf4c7309898e80fc3c6a759200b2f71ddd72477dd40a6f3bac2aa804145efce227e1704caaadb8a61fb15bd0c43806bae28259c908"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f86a99a91ceeb490f72375a1f00be3b65956e261f8f014e74383bb4d9d6b0f8c","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:441d343ae7ce5bc22fef8578d70d16d57a6e30008eba1a33565b6e8c73e5f4c1","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.816303510588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.290194e-02","shared_alloc_j":"1.763398e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:441d343ae7ce5bc22fef8578d70d16d57a6e30008eba1a33565b6e8c73e5f4c1","served_from_record":false,"record_id":"r24","record_hash":"sha256:6a8a2b74fa3a07b4c1a3efe2be1167e8fa9ad6f2a88cd3ca3775ccdffd3aa998","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87865},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.809359e+01"},"chain":{"prev_hash":"sha256:db3af2c59a28e88d94d50b2c39edd3eef8fff6a9bb3ef8e7629394cf4c26c013","receipt_hash":"sha256:e6f7e692ba7d1d55d3a2ec2bdf09def675038f30129c05072696ecb0427ccb4e","signer":"ed25519:bench-node-01","signature":"5b5aeb77f73363770d022133d7b7ce0371fe8e382c366096b017238dd62680b4fe164905e4e34c37de9baa0e5f5709380c9039aa184397534c6809778e3a7f0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4191995628dc22ed51e24638210da292efa642e92b8d3060fb790a771ba70d74","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.686044970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.364867e-01","shared_alloc_j":"4.549557e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":false,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850521e+01"},"chain":{"prev_hash":"sha256:e6f7e692ba7d1d55d3a2ec2bdf09def675038f30129c05072696ecb0427ccb4e","receipt_hash":"sha256:ba8ebb4688553726e71cbe88e76c87ac1123726419d040ccb27d02196eef4805","signer":"ed25519:bench-node-01","signature":"ec38cce1ad98a651428aeb5152085497632fce12b19be0b05f3a20f5f028b2bcacb8ab1ae19c9e9deeaa76d8eac64981a659dab823017a17afea87624596be01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ba21dc05c4e596befb09dadb38219b24b366f8ca65e39103b81399f2eeb011e5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f1070bc76733cc042f615c8c46f0da8964f7b072195de00defc3becd95ac9c58","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.359775550588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.873128e-02","shared_alloc_j":"2.291043e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f1070bc76733cc042f615c8c46f0da8964f7b072195de00defc3becd95ac9c58","served_from_record":false,"record_id":"r26","record_hash":"sha256:6201b83c8fa51bdd9d68fab6860e3a0ac914bf9cbb10d6524751271fc0ec524a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":87979},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820727e+01"},"chain":{"prev_hash":"sha256:ba8ebb4688553726e71cbe88e76c87ac1123726419d040ccb27d02196eef4805","receipt_hash":"sha256:3b87797800db6512e3f4b560ca9d17a0418d904a2824f2fc959ed2ff1fb8d789","signer":"ed25519:bench-node-01","signature":"d5d12044b6f51c8f6585ec27a38191be3e5f9f59967baf07272d38b95fe8becf294d29f4401b0c664c5b01569c3875c1f95eed20392d3731afdd61bcdc25990f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5826586d9ad787d33894ca68ae893a03f1cce3a3de75abab5ead26a373813ac5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:272c9d86aaf700789284bb8372a2da11c6d2899016b0aea1b9b930ae8725b372","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.275048470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.536422e-01","shared_alloc_j":"5.121405e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:272c9d86aaf700789284bb8372a2da11c6d2899016b0aea1b9b930ae8725b372","served_from_record":false,"record_id":"r27","record_hash":"sha256:c220d6e1378778daf5891a7e6b02c98189dfc2bdcfaa5148d9ee4272c2661772","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88065},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855663e+01"},"chain":{"prev_hash":"sha256:3b87797800db6512e3f4b560ca9d17a0418d904a2824f2fc959ed2ff1fb8d789","receipt_hash":"sha256:2840816c2c0fdc891540c206095d87aa1f24fdf0eaf359a1a4c51f4457704d22","signer":"ed25519:bench-node-01","signature":"2111dbc16949ab0615b7ae4dbecc43104f77c8fb27cfb5661ed0f3b74957217bff94c5a2a21dc78adf89270cf6050ae1afa4889d90f30c73d135a1a2085b4c05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a1de6db1610dab096de2e803a771d47b090661d006ffe5ae510b81b063ea8e0f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:63943a4226d8fb42655215a97d92b7b39c4d83792db09fef2b659595697f2813","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.221714820588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.383625e-02","shared_alloc_j":"3.127875e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:63943a4226d8fb42655215a97d92b7b39c4d83792db09fef2b659595697f2813","served_from_record":true,"record_id":"r20","record_hash":"sha256:ebb83c4e09bb79ba1d2aebf3fadda6505898f02ee3617fa696cd7e86ea11763d","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":87609},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834249e+01"},"chain":{"prev_hash":"sha256:2840816c2c0fdc891540c206095d87aa1f24fdf0eaf359a1a4c51f4457704d22","receipt_hash":"sha256:0742453ca607a04a1874334ec0805fd485e8a0f8d740a3974b66658982b2aad5","signer":"ed25519:bench-node-01","signature":"3ebc3431e1f329a0c2bf148dbc0b3906def5e9310e31b2986f27cf919080ce89a0fbdb43e54d88ed758abb9b39040a8767ec91352214e8c8593a985693366102"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ef76c005be6c06c890949392dd6d3b96a6eca5dfd460eafbfdb99cd086195eae","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:fe80b86dc90e86386ead4fb1e13dbea22c6bf076ee82b9ab7e59aa014dfac56a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.904837370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.137331e-01","shared_alloc_j":"3.791103e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fe80b86dc90e86386ead4fb1e13dbea22c6bf076ee82b9ab7e59aa014dfac56a","served_from_record":false,"record_id":"r28","record_hash":"sha256:165421441a750052156752c398c9e7e400c47d11957d7d5f3cba0767a0ec567b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88180},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842600e+01"},"chain":{"prev_hash":"sha256:0742453ca607a04a1874334ec0805fd485e8a0f8d740a3974b66658982b2aad5","receipt_hash":"sha256:d11381a39646328da7fd67ce3ce6c31268db0e400efb44efab55f1ce92c9d4a2","signer":"ed25519:bench-node-01","signature":"a5bb38e42c3bb87d56c82b60efa8ece1a45e402c50868fc467e74cf2cbe026c62c41a07e8326482f4a99aa1a19a7b2b16f8e73a7533af74d5c478d4c7711490b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3effcd046983df92966b7336d97eb960625203ddba09b73565d5a165232c3240","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c05b2f88954eaf469ac8bbfcd4547bc6e74c41180cce4195cef4e40ecfc1095f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.341960890588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.733862e-02","shared_alloc_j":"3.244621e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c05b2f88954eaf469ac8bbfcd4547bc6e74c41180cce4195cef4e40ecfc1095f","served_from_record":false,"record_id":"r29","record_hash":"sha256:51530ece39ff4c2fc78ba1a6fab22f1e347ae5edeb5a985a31f2bd5bd10d6694","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88234},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.835840e+01"},"chain":{"prev_hash":"sha256:d11381a39646328da7fd67ce3ce6c31268db0e400efb44efab55f1ce92c9d4a2","receipt_hash":"sha256:c52c341ca64cf773e5d2ccb00e59c82bb48d3bcedce25e1785eaef6efdace143","signer":"ed25519:bench-node-01","signature":"29bf4a7212d0d408c85f0c0f8e21a258b371825ae9a6e71cd59fd4c011744a546259da4f844fc6077a59230c62b544d3f26d09ba987a32c15dd3a6df487bdb0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0f243954f9e1d4cafb11b5ec5e793e720ab5e338a01e2f745857bdba8d8df491","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:9ca88fa2ca1389cdb90b09bc8a2e8c6a5f0e5c9345cf31bef0e590680aa21c13","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.461151270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.255770e-02","shared_alloc_j":"1.418590e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9ca88fa2ca1389cdb90b09bc8a2e8c6a5f0e5c9345cf31bef0e590680aa21c13","served_from_record":false,"record_id":"r30","record_hash":"sha256:b5afc08bf4813bf683141ccecdea0708bececadd5028c162adfb5247d7fd01e4","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88258},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.799910e+01"},"chain":{"prev_hash":"sha256:c52c341ca64cf773e5d2ccb00e59c82bb48d3bcedce25e1785eaef6efdace143","receipt_hash":"sha256:a77c8634b8103b91a11388a4f1859a8e7884d068557e662bf1ffb7c8fd0a63f4","signer":"ed25519:bench-node-01","signature":"324e5347681809981dd0000d81ca67c3288310512c3da2f525f2738d89900f7bb0685f383c3a63fdcaa40afd8f7013509bb7d68a7a4215c1f835ea200411ff07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c6580ea413013b8f67f130ed4082b49c5cc8b40dd5f05e73dabf056c6a47080f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.074848570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.769373e-01","shared_alloc_j":"5.897910e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861794e+01"},"chain":{"prev_hash":"sha256:a77c8634b8103b91a11388a4f1859a8e7884d068557e662bf1ffb7c8fd0a63f4","receipt_hash":"sha256:8e75f4c6d596263146b979b5f4027cb54330dd048aca0cb7d18a6bf3f369bfc6","signer":"ed25519:bench-node-01","signature":"294c2c031ba60467b8af185ee2c000d2243dd9693fbd97cff707aeea75e7ae079ec502f4c841fa6c5bca506e3bbd8588c19d4359d694d6651ffc996bbba4c304"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ed3a753294e29f01ec3dbf00dc01f4dff1efa9cad6e5fbd1cf86f61ec4a37697","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:b77ef8ce17572e60cd55a9745834934f154c1d52d767075c574f18f1d3d4d748","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.147329240588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.166967e-02","shared_alloc_j":"3.055656e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b77ef8ce17572e60cd55a9745834934f154c1d52d767075c574f18f1d3d4d748","served_from_record":false,"record_id":"r31","record_hash":"sha256:e17a4ccd8ba7177439ad54533820146198f394f78399d13767e88e53a70a5c46","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88407},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833234e+01"},"chain":{"prev_hash":"sha256:8e75f4c6d596263146b979b5f4027cb54330dd048aca0cb7d18a6bf3f369bfc6","receipt_hash":"sha256:02689bbf846ba96199d2293a757aa98fbe32306f8ac81f1934e2b98726b7254e","signer":"ed25519:bench-node-01","signature":"231fdee07bbbd945bd748486551cdace82560f1f4cd8b6a8a081e70647b718c9b6105676d5210dd160ab60d3e256936f31e2b1b02eb70ee376c7b4c5bb949305"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:dacace71f29fd742ab32c6ad1fe6aac752f6aeefb137d1f05ddf97bd30e0ac83","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.393715770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.570985e-01","shared_alloc_j":"5.236616e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856629e+01"},"chain":{"prev_hash":"sha256:02689bbf846ba96199d2293a757aa98fbe32306f8ac81f1934e2b98726b7254e","receipt_hash":"sha256:f170f627dbb36f04b441f03f66975ea0c77788b50cd39319492cc530b4d6f266","signer":"ed25519:bench-node-01","signature":"6f1803cee186f94c5a503db572c68c3375b23b31e5dd9e749403638d4454845c7da99ff56b33d594266f42735ea1ef3102cefbb5017e8efb720b8bb805933c0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:99b2a67668167b6278b5af92d0bb50bf1984b1d06b85c072b931aecf5d3f138c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.798445360588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.150809e-02","shared_alloc_j":"2.716936e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","served_from_record":false,"record_id":"r32","record_hash":"sha256:15137fb9bb5c928e449c8d3e6b50b9ef1791b583f2bd04555aaf3a153e617bc5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88540},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828132e+01"},"chain":{"prev_hash":"sha256:f170f627dbb36f04b441f03f66975ea0c77788b50cd39319492cc530b4d6f266","receipt_hash":"sha256:93f78baab97694a2373bbdc9ac66758c4ef4571695a57a66b593dac36562bb2b","signer":"ed25519:bench-node-01","signature":"69c437284bb5e77edd6ca5dc317433f464c9bfa3007cf13029b26d1d94b346d503c7a0e93f88d9f8f0ac8aaf13adcc84240d4dfa652b208ff6c74b5126de430f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:dd79d0bb77da0f478cc9f9f878b3cc4c898d5a199297fc584bc688808f994df6","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:38918dd8f55312dd4ef01adad024a47d010d9a3649ba108cc31f5e515e45f804","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.232700810588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.415624e-02","shared_alloc_j":"3.138541e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:38918dd8f55312dd4ef01adad024a47d010d9a3649ba108cc31f5e515e45f804","served_from_record":false,"record_id":"r33","record_hash":"sha256:c777d7f20123d1bd0cc3b9354425416201f01d95b67fa78468e09e0fc80d4d77","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88592},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834397e+01"},"chain":{"prev_hash":"sha256:93f78baab97694a2373bbdc9ac66758c4ef4571695a57a66b593dac36562bb2b","receipt_hash":"sha256:5e7e4aad3972ab4cefa740b57aaf4073ecaace083dacef406cd9dcc8cd45137a","signer":"ed25519:bench-node-01","signature":"19a9315bb2a873f0d8a46fddc04262f9a770dc6cc477f5f6a6cfef9e7a422e6c0684c648718c23f605ee8e2501a5ddace134e4884fab3f116ee3573f4005db0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:597c1aef3a311e3b26a43f49bd52ee101be48da35e8d5c99bceaa939e24d587a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.048873370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.880210e-02","shared_alloc_j":"2.960070e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","served_from_record":true,"record_id":"r8","record_hash":"sha256:ae42ca1dddafc073a12617d3f2c47a5ae0d14b088c0d45326c5afe31fbd99357","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":86860},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.831854e+01"},"chain":{"prev_hash":"sha256:5e7e4aad3972ab4cefa740b57aaf4073ecaace083dacef406cd9dcc8cd45137a","receipt_hash":"sha256:07f69eea009a12bc71d64a3172f146f329fdb760174fe2416e5992cca535b2e7","signer":"ed25519:bench-node-01","signature":"7d9cc20765c67715fcf23977d003dd66720bb55c7aa6c71669e8d94c7f67e257c21b98a381e15bf467a29249cdc42ddfb395413a362cb24d260c423964512207"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9c31180e5fbb19d9271e234a1a76d769a7de3dc940a7d5d9087e4aaf8e2e8e2d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:a5c65c1251df6b52b6e4a628d9d24fb1484cbf31edba89ca1f021a79d978cf37","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.170202470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.214622e-01","shared_alloc_j":"4.048739e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a5c65c1251df6b52b6e4a628d9d24fb1484cbf31edba89ca1f021a79d978cf37","served_from_record":false,"record_id":"r34","record_hash":"sha256:b5c7b68160c68bf409610e2b484bfa8d201823445b4f59c2037819d4f78ea6d9","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88709},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.845456e+01"},"chain":{"prev_hash":"sha256:07f69eea009a12bc71d64a3172f146f329fdb760174fe2416e5992cca535b2e7","receipt_hash":"sha256:b71bd9010fead5db0551b365c6581b221ceb5dcdea32c41ddc0d729b081e70d0","signer":"ed25519:bench-node-01","signature":"a16d056327ce381a95aaf036121af074e02d55438e2b575c57bd98910596fe91ac6b0621951af70a48aad36148fb174407fd2757fe1bcee69f2d8dd586be900e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4d1a316c821e8c691f5a3f88b5844519d525b44017cac2fb6ceb74593ccd1ddd","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:995c74d71caf5d717ec1b1db854037a328e7922345dc61b3437aba12ed2a8eb3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.219992870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.229123e-01","shared_alloc_j":"4.097077e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:995c74d71caf5d717ec1b1db854037a328e7922345dc61b3437aba12ed2a8eb3","served_from_record":false,"record_id":"r35","record_hash":"sha256:cd15947d6e762274d30dce74db45517a670782a8e86371490bea5359d521155d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88777},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.845971e+01"},"chain":{"prev_hash":"sha256:b71bd9010fead5db0551b365c6581b221ceb5dcdea32c41ddc0d729b081e70d0","receipt_hash":"sha256:c67bc1bfd2860d938caf367d66cea8f42bca0fb11b477ed0c6de33ea4e639d70","signer":"ed25519:bench-node-01","signature":"6f3a06159a0fa0f1dcf72220e89480d0d2078b008cb3006c00e975fa459c1c413cc162edca0e19d6f137c4503a6d9efc09fbeed53432cdc0ad09afcccc111504"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2934c19f45ea05734ce5f2e7f7c4c6fcb3c0f26b778078bb040adb6f0d397d26","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.304182570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.623830e-02","shared_alloc_j":"3.207943e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","served_from_record":false,"record_id":"r36","record_hash":"sha256:55a2b8e716a8eb9fda50c9c4ad876cf5d024f9ae99c0be4799b8f2121d94a546","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88830},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.835346e+01"},"chain":{"prev_hash":"sha256:c67bc1bfd2860d938caf367d66cea8f42bca0fb11b477ed0c6de33ea4e639d70","receipt_hash":"sha256:f741b3f50361292a5919786d272482d6db4ebb5c96513d3f420f1e81427baf53","signer":"ed25519:bench-node-01","signature":"0e3c63e18b4ebf9f4bcc1fd99332b528055f9895e0230bf8175ace2d5157a278736ea34fb8be6dc01aaf9c78c2e356936e3462935cf6fd9a03170a5d79a4f802"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:89ba952b0d770057822199ca4d073284396700ad568f727e39a0860f02785db0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:6a28d2adaac95bc3a2ea8c61107a5d0963c4e4bdcbd5093ef245a58cc8ad327f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.788573470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.685992e-01","shared_alloc_j":"5.619973e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6a28d2adaac95bc3a2ea8c61107a5d0963c4e4bdcbd5093ef245a58cc8ad327f","served_from_record":false,"record_id":"r37","record_hash":"sha256:4848c4434249834c11300558709c4263839533269cdc31662f67a1062cd0586a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":88924},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859697e+01"},"chain":{"prev_hash":"sha256:f741b3f50361292a5919786d272482d6db4ebb5c96513d3f420f1e81427baf53","receipt_hash":"sha256:bec5a1facee1b289324f336622ea5497b7aae4efe5db38a7861e971b7900d710","signer":"ed25519:bench-node-01","signature":"76b9197a9700af56d40ad0fc950a51291d81e3c3fdd07f4f0ad80beb06da396010453626d5bf05dd91f6796d40c156d85ea7b29ac7278bbb6ad8e62e5ec1c009"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9add4ac17cce66959fb856c517ffa98ff1a89222a856f1c911a02fad5ebe271a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:57d222a9b6821d1beda2ff0e08a18cffbef322c999e07cd13ed996e871aa136d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.808464070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.691785e-01","shared_alloc_j":"5.639282e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:57d222a9b6821d1beda2ff0e08a18cffbef322c999e07cd13ed996e871aa136d","served_from_record":false,"record_id":"r38","record_hash":"sha256:1af4ef5e3434b2a6ddc82b973a279d3791e488a6d302bf5ba8fc10a9079a16c2","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89018},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859846e+01"},"chain":{"prev_hash":"sha256:bec5a1facee1b289324f336622ea5497b7aae4efe5db38a7861e971b7900d710","receipt_hash":"sha256:4be31adb3087e5dd9f8740a2768f562fc63a29fc6a9781b612992c8548c2ada8","signer":"ed25519:bench-node-01","signature":"71708714b90a16d868f3f13a7ae0777f23cedee57c415ab871dd7031b6e7b55b3b887f887541eb262ec750333cc883ec378c1bdc5aac2bb10632c2aeda304707"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:be22e3e72ab048f443eeeb8a310a1c836331eb1c9b1f9f4e5851cf83ab64e8f2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9db2aac2012a48a242f2d34c7522134a296e612ec7ee0f355b4dd16eebff0f00","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.910973070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.139118e-01","shared_alloc_j":"3.797060e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9db2aac2012a48a242f2d34c7522134a296e612ec7ee0f355b4dd16eebff0f00","served_from_record":false,"record_id":"r39","record_hash":"sha256:cb164f9a8676b00635d914d154fc2daf17c61247b49ae2591fe859efff750556","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89081},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842668e+01"},"chain":{"prev_hash":"sha256:4be31adb3087e5dd9f8740a2768f562fc63a29fc6a9781b612992c8548c2ada8","receipt_hash":"sha256:0c25e3419303a018212c36e8ee50002efc53b15afc9c02c0094570fcc0ff34cf","signer":"ed25519:bench-node-01","signature":"fe081f6d1e468da56bbd02ca16ed1ec68f66635f6e8459c9f709afc101da96054a3ff682ecf592c6e5d83b904dfd56ef7162f2094728e54db7f30d9c03cc8707"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6ab36dfb4f69127158ca7b297fa48c4787fd1bf4cfa3ff34333a09c3e8065411","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:b38cd1f33a130455853b4e6fce41ca504f4173d34ad1f99470b37673b5f8daad","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.080722670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.771084e-01","shared_alloc_j":"5.903613e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b38cd1f33a130455853b4e6fce41ca504f4173d34ad1f99470b37673b5f8daad","served_from_record":false,"record_id":"r40","record_hash":"sha256:51291ee97ebadde6d89c8d4fa2e638e63df1dad7d9b4204cf60a7cc2731225b7","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89180},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861836e+01"},"chain":{"prev_hash":"sha256:0c25e3419303a018212c36e8ee50002efc53b15afc9c02c0094570fcc0ff34cf","receipt_hash":"sha256:61d8bc23e6b772ba0dc05f242b055135b5feab7332de35038c09b7907c6c4e7b","signer":"ed25519:bench-node-01","signature":"4643873cbcf76e923aa666cc21ca45ce4f5e119b6145d2d8069f7d19f3d37fcb72a41bb215c1473b8570175188e94647bafcc013d66a42a9cfa4cf12e0b0950b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:571d346115f952a81e37a53436a0682821fa1c0d0069b8fe2394f75d72d3df6b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:b4e6cd21c0ba051d04aab9042e5e115c3bbe352ada582acaab628fc22dc8fd67","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.762752760588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.046849e-02","shared_alloc_j":"2.682283e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b4e6cd21c0ba051d04aab9042e5e115c3bbe352ada582acaab628fc22dc8fd67","served_from_record":false,"record_id":"r41","record_hash":"sha256:ec08e4e68798e0e921a233c9482a51b113bef41676e1d4170b7d18e1126a11ed","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89225},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.827574e+01"},"chain":{"prev_hash":"sha256:61d8bc23e6b772ba0dc05f242b055135b5feab7332de35038c09b7907c6c4e7b","receipt_hash":"sha256:2b24bf325b91c423d8341f2909204f8ca433f6422a244317f7c16860e71ce327","signer":"ed25519:bench-node-01","signature":"11b65a91bd85d9576770b4d6c1ce723cc45ff544a4b1d47bebc30aca1cb69b3126f5d093d4e73fc48d601262c76a65571d79d617bc2e87eeb0fe36021c9ea503"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b35baf0250e1fc6b4d76c18ff4b95b932a7e4eba22267e9cd4624ca32bd94ff5","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:9c89b9128168c614899065585aa1af0e9fde30a0cf82a9f112d769711fea702f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.481688430588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.315586e-02","shared_alloc_j":"1.438529e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9c89b9128168c614899065585aa1af0e9fde30a0cf82a9f112d769711fea702f","served_from_record":false,"record_id":"r42","record_hash":"sha256:3d102fb60f2f9058c08b27c0d67046777852bbbc14385558627d5b8d74b5d902","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89248},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.800516e+01"},"chain":{"prev_hash":"sha256:2b24bf325b91c423d8341f2909204f8ca433f6422a244317f7c16860e71ce327","receipt_hash":"sha256:39b65402142bb335d3cab9fe480b57be6accd0592f803711a4eed6724eba44b0","signer":"ed25519:bench-node-01","signature":"5ff96fb2c7b3050f915726eedc4808961a1b8212f1bd827370c744b3fda0e97daec78eefdf841e6aeaa1009109b45f2724f924598ecffd646bd6b930cdef9200"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4750b95ab5fd26b0f040953502f9759f2c74dfbff46b63223720a9bcac343259","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.024818170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.463539e-01","shared_alloc_j":"4.878463e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853552e+01"},"chain":{"prev_hash":"sha256:39b65402142bb335d3cab9fe480b57be6accd0592f803711a4eed6724eba44b0","receipt_hash":"sha256:a89d109c1b5e7c98cc897c0d8616006db6de78af58c7a38c881ae6e6823d3dd3","signer":"ed25519:bench-node-01","signature":"60a6b667237ee9faeff2a66ac536a46cd7591c37d1fe75dc8425f08c66cfd3ac12a06bbd560710dcd1ec783667d0709998b5d0156dd2cdc5a56631060d506900"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d6f2da1622bbfdeac98f3bb8f6d973cea2aa7d7f4365412adb43976512a972d0","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:c07152cef374396b314cee5827193f70093e1aae2bc94f82384fea2c01b4f7d3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.082154170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.188976e-01","shared_alloc_j":"3.963253e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c07152cef374396b314cee5827193f70093e1aae2bc94f82384fea2c01b4f7d3","served_from_record":false,"record_id":"r43","record_hash":"sha256:ac347ee6d3e4ced19327ade920c78afd451bbdea6aad77145a03f74588ae7411","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89396},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844529e+01"},"chain":{"prev_hash":"sha256:a89d109c1b5e7c98cc897c0d8616006db6de78af58c7a38c881ae6e6823d3dd3","receipt_hash":"sha256:2b4016b70280899c33fe7c8be28ac748430fc9ac84052fbd8082a224420d9c73","signer":"ed25519:bench-node-01","signature":"01d3a99d26abdf5055187e8dad1be4eebecc836302711437c7d00305d028e7cf2cd74e103d557882b28fe1701202c0696ddd40c61168f5f32865e8b2296bfe06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d19223396d8c21d496f055ffe70b529d6caef360f528d0e34d5434141d50bcb5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.538357370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.321851e-01","shared_alloc_j":"4.406171e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","served_from_record":true,"record_id":"r8","record_hash":"sha256:ae42ca1dddafc073a12617d3f2c47a5ae0d14b088c0d45326c5afe31fbd99357","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":86860},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.849130e+01"},"chain":{"prev_hash":"sha256:2b4016b70280899c33fe7c8be28ac748430fc9ac84052fbd8082a224420d9c73","receipt_hash":"sha256:60cdfaddaf00990e8952ade0b987afd1aaab3309915e97988714e223e26a8cd1","signer":"ed25519:bench-node-01","signature":"e1c2a793ca596ffb86ea85038cfb66746bdcab65b84664b47a41fa17506cebb94e5605d23b04fb7d83b8ab4fd2688a89f8479be07ac954a0d8809c32043f550d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3280091657a255a1726007103a75a95453e091366f3fa9d27726a7a433ee54d0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.801191770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.398405e-01","shared_alloc_j":"4.661350e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851575e+01"},"chain":{"prev_hash":"sha256:60cdfaddaf00990e8952ade0b987afd1aaab3309915e97988714e223e26a8cd1","receipt_hash":"sha256:1906aec8e43faa4a018726d5d63a1979dfd7f8ad8329292a77cbcac2cb8ddd0a","signer":"ed25519:bench-node-01","signature":"bb8d405e25b290f42b9f9bcdb5d0b8618092fccd26a7d92d5a0876e88e3fffc7b318d174dfef63d9f3f481f066aa86f9e4bc3f3debcd838bae57c3d3434f7508"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2cc2e710a15126656e917ab5f103ef959ed093473a4220c965eaeccd18a74cbe","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:0267ad62d64134b8622d4fb07cdbe888137deaca0fdee61e6b66d8bcb9076eaa","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.411046470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.576032e-01","shared_alloc_j":"5.253442e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0267ad62d64134b8622d4fb07cdbe888137deaca0fdee61e6b66d8bcb9076eaa","served_from_record":false,"record_id":"r44","record_hash":"sha256:2dc81090fa0017c427246a792fbc24bb499645f650fefb1ca4f4c43edfcfc62c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89635},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856768e+01"},"chain":{"prev_hash":"sha256:1906aec8e43faa4a018726d5d63a1979dfd7f8ad8329292a77cbcac2cb8ddd0a","receipt_hash":"sha256:660af00cad7e7ff1bc5d0567d49736e05c583115dd588e616982af60191ac4f2","signer":"ed25519:bench-node-01","signature":"b65041dc5afb5facf930869280c315db7834fc59b0df1a0c30949f4e02bbb0f83b47c308624f2eaf232c2ba5f0302fbfe93998ee5cbd01742f08bf734f8ac40e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:de8a908bfe0bae697e9ff11df7544c2dcbb06ee661932a9a3458ba159eaaa8be","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:88e8063dab93d7c54c198faae564d37a45fdc05bf72a71091e28d81cdae5a7c3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.887696370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.423601e-01","shared_alloc_j":"4.745335e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:88e8063dab93d7c54c198faae564d37a45fdc05bf72a71091e28d81cdae5a7c3","served_from_record":false,"record_id":"r45","record_hash":"sha256:d92dd71fd24148fddada680ad1a17cf6468deccd43b4462625b8ea52c3e1b974","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89714},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852350e+01"},"chain":{"prev_hash":"sha256:660af00cad7e7ff1bc5d0567d49736e05c583115dd588e616982af60191ac4f2","receipt_hash":"sha256:e16382eeab2652a23894d4f80df801f5cffaeb9f972260787dee76e05f5b04b7","signer":"ed25519:bench-node-01","signature":"7ddd70ba37e20e95d672a287b26efc385aa502ba59c79c5770aeec21a41d47dfaac5f4d5ceeedec857a071894dccacda9e05acd3522d2ff945cb25f3fefd840c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e14f5cb8c336a0c96e496e8b863796bd19cb4351df09f3179c0006facd43b34a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f30367cfef088d228eabb3c5ceba77659575040308761d05e591230a30803269","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.094973770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.775235e-01","shared_alloc_j":"5.917449e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f30367cfef088d228eabb3c5ceba77659575040308761d05e591230a30803269","served_from_record":false,"record_id":"r46","record_hash":"sha256:fe6835e89c8ab26581c38a4ee550689c1b113deb9b880a2f1d1ffc162dce4242","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89812},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861937e+01"},"chain":{"prev_hash":"sha256:e16382eeab2652a23894d4f80df801f5cffaeb9f972260787dee76e05f5b04b7","receipt_hash":"sha256:c46b0d3a1b15e0076b51c3c7021dee9c1a2a198d5f946c629d633b33e72ef933","signer":"ed25519:bench-node-01","signature":"c9f47d8c4c2f261d06556a0daa68ab30491b62d533dba14b0557e6c55f05ffe5ea444a64d0a251e30135e17e46b69bc8f2d8ac45444dde7fafa50a0061014607"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:73ea94275b13d403ba69431b0fb4c9815e5e7b1601c7466add069d0eb04959ca","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:315c14e61b89addfef08fbfe1205125c8472164f9cdf669f157fc7fc338e586e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.505852000588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.385973e-02","shared_alloc_j":"1.461991e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:315c14e61b89addfef08fbfe1205125c8472164f9cdf669f157fc7fc338e586e","served_from_record":false,"record_id":"r47","record_hash":"sha256:0fd550875b4b6b51c231682f03b3c2c48dc7a447dd1adb4f3e7a8216e2d7428a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89837},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.801218e+01"},"chain":{"prev_hash":"sha256:c46b0d3a1b15e0076b51c3c7021dee9c1a2a198d5f946c629d633b33e72ef933","receipt_hash":"sha256:75f91b0e3470af7b784d75b0136963f223f9f312ad8dcb160fc59341e61be026","signer":"ed25519:bench-node-01","signature":"96088ddca2ec6e41df8edbb7a9299d5056d0737a6b35efdcbca17a94c9e43d4e3055297b3a13bf6f4d753363fbb4fbdf5523c587455b698ccd730098ae07ff01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2cf88961acd7cc28fcd474847ec5f2c854bfdca6f9b132bcbd4eff884e3fce64","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.469655950588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.193168e-02","shared_alloc_j":"2.397723e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822704e+01"},"chain":{"prev_hash":"sha256:75f91b0e3470af7b784d75b0136963f223f9f312ad8dcb160fc59341e61be026","receipt_hash":"sha256:a7182868b77c678c651408eeb105b0bc921ac7ba109184fe40798655eebb2a03","signer":"ed25519:bench-node-01","signature":"d30965a1dd64aa667e6053ea89de78974be8df51ef307c943a5b1b3c9c5390d48eb9933b83ea6654564fc1e25f7a6f583afb7384bbe73ca7dfc9bc993983200e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1eef346141383979b819c693e736870ff451590d3b62857917a026a0f90abc66","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.885786870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.714306e-01","shared_alloc_j":"5.714355e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","served_from_record":false,"record_id":"r48","record_hash":"sha256:758e76b23b821b7b7abe8ab30701ecd786d85e29d1f10de3aa4cbaab51519c59","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":89972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.860420e+01"},"chain":{"prev_hash":"sha256:a7182868b77c678c651408eeb105b0bc921ac7ba109184fe40798655eebb2a03","receipt_hash":"sha256:393f2d3e1bebcfaf888f0ba433d2591a7d18497e2199b7eced6af60fc0f9359e","signer":"ed25519:bench-node-01","signature":"d409e3efa5e08e69fc2cf8ac19a57073ea0e7c9fe04545cc9a0456020259f01a3452c00241948eab6529640097c978231511783e8515aca0fc9938ad86a5bc05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0490a4783368642e68aa3f986247b699cb1bc011e14c0da03b09f37a099c7d3e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.080251570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.188423e-01","shared_alloc_j":"3.961408e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":5,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844509e+01"},"chain":{"prev_hash":"sha256:393f2d3e1bebcfaf888f0ba433d2591a7d18497e2199b7eced6af60fc0f9359e","receipt_hash":"sha256:a1231e44b761e67bcc189a13d40fecb27157a74b68c771d6118d452bdbfb8633","signer":"ed25519:bench-node-01","signature":"2a27a8d1ec31b10b408bc5b9e520906ce959616be51fe118402bd3909af4ebd826f7a6462d2e0495a06b721dac4995a30bc4dd589fc7a15820d8b8d44152220d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2a2e8a62c992f9d0f5c0eebbe8a1b28ff7eb65b4c0d9090dcdd2807d8b064ae2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.250726600588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.468133e-02","shared_alloc_j":"3.156044e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":6,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834638e+01"},"chain":{"prev_hash":"sha256:a1231e44b761e67bcc189a13d40fecb27157a74b68c771d6118d452bdbfb8633","receipt_hash":"sha256:9330ca1eed4798882a905d3bc3595490c6725845a80f9b7e5f0fcc8451767031","signer":"ed25519:bench-node-01","signature":"f0398a4ab2469b8b8baf6aee8c4447ba8c60e52b4d7cf5875b2c5ce25e60758c3eafffa416d3d22dbce9c7d0befff4259490362889b1af729cf6a64ef8346300"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:11b648ef26774a4ac3b47f693ba3e141cc445b54aefc3323be5141f432cedf5d","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:502158ddf55d90f0209666a2eb46153da936a272f75fa05532df59430c6bd719","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.930763300588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.623573e-02","shared_alloc_j":"1.874524e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:502158ddf55d90f0209666a2eb46153da936a272f75fa05532df59430c6bd719","served_from_record":false,"record_id":"r49","record_hash":"sha256:ca841ede8e002214c87afbf6deb073630c765097e8be069acec71ab82213f50b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90122},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.812013e+01"},"chain":{"prev_hash":"sha256:9330ca1eed4798882a905d3bc3595490c6725845a80f9b7e5f0fcc8451767031","receipt_hash":"sha256:7971f7c2e0ab6ac44d1f94d4bf9b34e402fdbe4cedeb1127d2f4b1d1598bc519","signer":"ed25519:bench-node-01","signature":"06007a61a2789bc8b592f8f2a3859a7e979ee7829574d4f3883ce34067df3d170b59a6b2cce145a94f6ad6eb9aa0c03ce8215d5ca5aa46d7ce5f27353fb84a0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c4822c1410ecdd0ef956956f4d58beecb821ef766a31f7b94ddcf269001939d1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:c05b2f88954eaf469ac8bbfcd4547bc6e74c41180cce4195cef4e40ecfc1095f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.632449520588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.667325e-02","shared_alloc_j":"2.555775e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c05b2f88954eaf469ac8bbfcd4547bc6e74c41180cce4195cef4e40ecfc1095f","served_from_record":true,"record_id":"r29","record_hash":"sha256:51530ece39ff4c2fc78ba1a6fab22f1e347ae5edeb5a985a31f2bd5bd10d6694","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":88234},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.825476e+01"},"chain":{"prev_hash":"sha256:7971f7c2e0ab6ac44d1f94d4bf9b34e402fdbe4cedeb1127d2f4b1d1598bc519","receipt_hash":"sha256:13db8b06059eee941c095617e167117908b91a45a1a437538d558592f6047dc0","signer":"ed25519:bench-node-01","signature":"065ae6d867fcf5f9452d4f96d9fab38339ea8ccdd33e4459690f2ec3b172a2e97928b3f9d352e5da9766729809858842dab56e58c2f7ff82f47486c4bd4a6b01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:20d73ed5aba6a43b1fd86e61d70a02cc6be42b1632115b9a5901048420d7e7a5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:6d5f6fefa14e96e9b333c9e2ca60b7b266ea9b478a3eea4101c6e5373b59c55f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.055458770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.763725e-01","shared_alloc_j":"5.879085e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6d5f6fefa14e96e9b333c9e2ca60b7b266ea9b478a3eea4101c6e5373b59c55f","served_from_record":false,"record_id":"r50","record_hash":"sha256:d65dc3a09f420051437a5a3451432378064e8b77fbcfe056620e935184cfe8b1","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90262},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861655e+01"},"chain":{"prev_hash":"sha256:13db8b06059eee941c095617e167117908b91a45a1a437538d558592f6047dc0","receipt_hash":"sha256:cd0a7699bad231ac2f9c4fef995a57ec4068775175d0b5b1b9fbe38946e5fba8","signer":"ed25519:bench-node-01","signature":"d74814fc952d233e02cb5ea0f74d38ef7f3b6e7f141f0333ff4b7cc1d2fb7aa8e66900e0fef5cff158f0ccbea0e80f14ae453dc029bef2d01aa80ff0796aa105"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:44a87de028f0ee1c8501ae7a7ae8cae7459d9e1f4fcca295f392e56d9bf28d7f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.022647510588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.803824e-02","shared_alloc_j":"2.934608e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":false,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.831479e+01"},"chain":{"prev_hash":"sha256:cd0a7699bad231ac2f9c4fef995a57ec4068775175d0b5b1b9fbe38946e5fba8","receipt_hash":"sha256:10d7caf5a36a737dedd8f558d3c2df50bffa8bffd545490847b2e3798d424cb5","signer":"ed25519:bench-node-01","signature":"856e6f6338015d0033bdc033883074119a0d3be5f90ca22a1cfe9d35d03d83f2db96933015615493f87ea2906f39e81b2af61f71e64f875e31d05e115d112e0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8e3fb65f97da2fd098ab72887df2a8862b6718e9eb6f162257a0ca4033bcb806","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.762256970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.678327e-01","shared_alloc_j":"5.594423e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","served_from_record":false,"record_id":"r52","record_hash":"sha256:4b407241ed751d5065cf8c5d85ecd7c9cceb59ec65630b16476cef31225da9a5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90404},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859499e+01"},"chain":{"prev_hash":"sha256:10d7caf5a36a737dedd8f558d3c2df50bffa8bffd545490847b2e3798d424cb5","receipt_hash":"sha256:128c6f67e5f58023c27c087949f0ee29a44a812940bb25ab5548b275e0d71b6c","signer":"ed25519:bench-node-01","signature":"ea8860e13c248aa28ffd29bc3d265968ee7b88046ef6b83c07ecf43540a83a0ddcd5b369fc03900b373e8823f572e4c19c0a75f5b440751c73a621cd5eebed04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6e17ef1cbd459becbd6f774c6f830299fd00705afbf886731b5e0428e7e48b4a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:d4a6fb71a5a16c3ef8c4d405f5dba86c1f33c8d257865ae3f9d2bfe82f80bc8f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.476021770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.303695e-01","shared_alloc_j":"4.345651e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d4a6fb71a5a16c3ef8c4d405f5dba86c1f33c8d257865ae3f9d2bfe82f80bc8f","served_from_record":false,"record_id":"r53","record_hash":"sha256:129bc9adf2a45a6134151e76c45bd187f663f8b23d4a86fed40cf9949fe55abe","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.848529e+01"},"chain":{"prev_hash":"sha256:128c6f67e5f58023c27c087949f0ee29a44a812940bb25ab5548b275e0d71b6c","receipt_hash":"sha256:87bae53c3e045d9bc7eba5108c50f7024209b5f5233e91bf8a29e75ffdf184b9","signer":"ed25519:bench-node-01","signature":"349c564b75975f8da67e6b26f52d6ba47f93eba28c62b7252f607a8e37dd641a9addffde2c5788d044295dac74a1e6cd22ea2a39a7750f66be1785265f916a07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fde875a1a8330c497623ff530dcb863f3f7698828324d0d99edc069a3fef7113","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:fd4c1d8eeb1ba609a09e31334f8a9013c10158c6b9aefd227c5fd0e0dd2fa168","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.607928540588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.595897e-02","shared_alloc_j":"2.531966e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fd4c1d8eeb1ba609a09e31334f8a9013c10158c6b9aefd227c5fd0e0dd2fa168","served_from_record":false,"record_id":"r54","record_hash":"sha256:196c6d6a7abca2f5690d27b6af82392ec0d369a920c5643be69eed9816bf53af","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90519},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.825070e+01"},"chain":{"prev_hash":"sha256:87bae53c3e045d9bc7eba5108c50f7024209b5f5233e91bf8a29e75ffdf184b9","receipt_hash":"sha256:8cc530c628a8e71a85ff2b3f6c8c9c117c8a3774ea731935a4bebd65d50d7a7c","signer":"ed25519:bench-node-01","signature":"e3ce41051b2dd46a562541a6d0ca04409f6b653df94cfa40cbc31ec61de6d8b667ada6633264843b40635a643eac6fb9b2f200e4d0ca548947866001618ca600"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:67c81b85a3107e6e48161d701d4e39dcb0c01d871c3b506e8ba437a63158e523","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:0dc01ed37cced0f5820acbc15b5de7dc270ea65e7930a4cf889bdfa792199326","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.746504300588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.086903e-02","shared_alloc_j":"1.695634e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0dc01ed37cced0f5820acbc15b5de7dc270ea65e7930a4cf889bdfa792199326","served_from_record":false,"record_id":"r55","record_hash":"sha256:0bed3b60ade7437d367b332fdf54153cf19459ba204d432afdfdaf93acacebc7","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90547},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.807657e+01"},"chain":{"prev_hash":"sha256:8cc530c628a8e71a85ff2b3f6c8c9c117c8a3774ea731935a4bebd65d50d7a7c","receipt_hash":"sha256:b00dd78a7d276d9f01b184b83124ff8f4246e9321698ad6c0ae5115f086bacb9","signer":"ed25519:bench-node-01","signature":"e35b88fb67433bb9c8117d3522bec7445412c15d43700a88f55eb91d46f344cebe5475a95d93b8ffe7e13a3c3b0138c1aa73eadb941124411140d28255a2c50b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:187f50441ced56afc068f70f4d9340452985eb5f4a461b60ae52686b94b0bd6f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:bab919bbfb3527533a2cad88cbd913bdaae65b411f59deffed79daa5ef8b9230","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.084238870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.480846e-01","shared_alloc_j":"4.936153e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:bab919bbfb3527533a2cad88cbd913bdaae65b411f59deffed79daa5ef8b9230","served_from_record":false,"record_id":"r56","record_hash":"sha256:2765ca317d2b162b4e5da0ac01e42a8e09673842b1223adbd71993f12fdaa814","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90630},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.854063e+01"},"chain":{"prev_hash":"sha256:b00dd78a7d276d9f01b184b83124ff8f4246e9321698ad6c0ae5115f086bacb9","receipt_hash":"sha256:081df142fa6fc3fbbffa0a50f777ccd25a80f0c6cef452faa7c3d2f8402b4028","signer":"ed25519:bench-node-01","signature":"6dc92a3e5e451e472a990f8084f5620f799f00010aab746578778505589af4469b23e9d1db5a92a05f79b3aa820d0c3aa8e300b0712b8d77476455c3c5803b00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:769392ef976e574af175def6123ea98717664547fd2e2821680e887b41de68c0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:fbad157ba34331794cf5050bfec542d16e1f3924470fc53d5b8557ce96983c6d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.677950800588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.799853e-02","shared_alloc_j":"2.599951e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fbad157ba34331794cf5050bfec542d16e1f3924470fc53d5b8557ce96983c6d","served_from_record":false,"record_id":"r57","record_hash":"sha256:1431070f5ce2f957766ef5980bd5e7867760c31429a7aea428065e30871ff619","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90673},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826220e+01"},"chain":{"prev_hash":"sha256:081df142fa6fc3fbbffa0a50f777ccd25a80f0c6cef452faa7c3d2f8402b4028","receipt_hash":"sha256:cf6a5e7c648553674cc8bc05824eb248b6f02eff9a1d6468765617e0bd3ba290","signer":"ed25519:bench-node-01","signature":"f9b2a34c2e91b1f159a71c2e59564bc09b55018b382221da4ef6b276280856ecf0610ecf2f57280dc5e4557b40c44fb5ecde2ea3e49d133acde96274a7d8ee01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1dca2ec60fe4fba5fe47af96ebb81186749520e592aa5bcfa8465c52097fc2ef","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:d4342c517cddd41c899d7b9a10713f0f335f15631294442b857cdb687d622a72","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.987144440588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.700417e-02","shared_alloc_j":"2.900139e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d4342c517cddd41c899d7b9a10713f0f335f15631294442b857cdb687d622a72","served_from_record":false,"record_id":"r58","record_hash":"sha256:1aea47eae375fe83228afb27f5082c4cf6f582b26c73c733558ffbd7ce1bf9ac","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90721},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830966e+01"},"chain":{"prev_hash":"sha256:cf6a5e7c648553674cc8bc05824eb248b6f02eff9a1d6468765617e0bd3ba290","receipt_hash":"sha256:6d7fa6418a04bd282133bdba712323375586c50dd7ab56dcce68f92ebf950349","signer":"ed25519:bench-node-01","signature":"9eebd2fdea2a1d88619f9f746029d3f878423390b4a0dc425db917c55757f516dcea65a6a85e72f4d0b45eb7af02ab55271684a4e5b290eb6db5ddd97da73d02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1059a652f0920307d4dd9dcc33bb2b1332abbbb867ed5b1c618b1a950191b413","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.961991270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.445240e-01","shared_alloc_j":"4.817466e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":true,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853006e+01"},"chain":{"prev_hash":"sha256:6d7fa6418a04bd282133bdba712323375586c50dd7ab56dcce68f92ebf950349","receipt_hash":"sha256:486ef2e3dfdddc22b1544f57ad9eb9b1b779dd8d46316394cbe674bf6df1188d","signer":"ed25519:bench-node-01","signature":"11181622527ac12f9ac15e85da4679034024940b497af39a72c73a589966221b6e40faf73e2a003b6cddf96e62a18cfb4ea675c1be96471ecf4879e72bc5e504"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:996632aeeaf98b5438ccb3a91b46370df713f7f2b8f76821495de8d888b51110","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:363a7aa5dce960db4334d9fb150b8e9170c93243393c0a7b73ac9e6d18693522","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.204946570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.516003e-01","shared_alloc_j":"5.053345e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:363a7aa5dce960db4334d9fb150b8e9170c93243393c0a7b73ac9e6d18693522","served_from_record":false,"record_id":"r59","record_hash":"sha256:a75b4228cd9bb81eefaf1ec78bf49d5712e456c32729771e7a0587af56df9938","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90886},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855082e+01"},"chain":{"prev_hash":"sha256:486ef2e3dfdddc22b1544f57ad9eb9b1b779dd8d46316394cbe674bf6df1188d","receipt_hash":"sha256:3e8fc4202d52c0cca359c9ec15fe0a107ef4d2d8de9d0e31588f78cd5eb442c1","signer":"ed25519:bench-node-01","signature":"7db94f8bc80346aaed5fa8b089f9a00aa7b2491014013038b5219d478e2f29287c4f5865c93ee90295592de65109ee75e5136f69df7f33007fc8c1b49cc7150c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:770150bed366b11457d0ff7e8a02d956c011b7c16071f632efa999fbea201ba4","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:591bc02284e17c26a2b0835a79b31dd08d54443ff09ee36d35b60f30ddea70d0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.591416270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.628567e-01","shared_alloc_j":"5.428556e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:591bc02284e17c26a2b0835a79b31dd08d54443ff09ee36d35b60f30ddea70d0","served_from_record":false,"record_id":"r60","record_hash":"sha256:463547178c71dfc22ed6f6250b032d1a2cf446795536f7cb017e86cd968a315d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":90976},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858192e+01"},"chain":{"prev_hash":"sha256:3e8fc4202d52c0cca359c9ec15fe0a107ef4d2d8de9d0e31588f78cd5eb442c1","receipt_hash":"sha256:173b2bc842505dbad0ef554877fee5a0e6a115bec6cfb5df85602c39c785b13b","signer":"ed25519:bench-node-01","signature":"e07873015e8e78c0b2492800407fc6325e9af7020e97ae51933640d0da72ae8709809318a800b0783391c50f098d07c25998d2cdd4605e74eb2476de5c816a01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ce860236353866d205a19027fa3c5f78498ce0a633bd1a8b1f083b71649f744e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.789236370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.103661e-01","shared_alloc_j":"3.678869e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":7,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.841295e+01"},"chain":{"prev_hash":"sha256:173b2bc842505dbad0ef554877fee5a0e6a115bec6cfb5df85602c39c785b13b","receipt_hash":"sha256:e6cac33e22d247d85d943e41b0e02f77d79ec1f9c62915f133d5d1c1e8aafaf1","signer":"ed25519:bench-node-01","signature":"33a5184fcb44e6982e12bcf7972a5220bf59ab8463046b4c71fa400ba0fdcf372dcc0824e9adddeba10d1a8e0a1f87a712a9a35e085edbc676036fc344ab1a00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5e8715c134fd9dcea75fc1e69963031326860df00640306a2c0794d5b94937c0","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:661120dc456ec83861c110b710ff9ad71298352ce119f83ebb44589c06a502cd","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.398546260588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.898669e-02","shared_alloc_j":"3.299556e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:661120dc456ec83861c110b710ff9ad71298352ce119f83ebb44589c06a502cd","served_from_record":false,"record_id":"r61","record_hash":"sha256:872f8a99185cfa59e5b58b9f282fccfd91c114d1fd86b8e1a3fee1b183ae74c5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91093},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.836569e+01"},"chain":{"prev_hash":"sha256:e6cac33e22d247d85d943e41b0e02f77d79ec1f9c62915f133d5d1c1e8aafaf1","receipt_hash":"sha256:38c14dbefa60d5e3c8a826bb162de32332012d85ac09fe45e1f7290491a74983","signer":"ed25519:bench-node-01","signature":"75bf399d13c2b27848482c10e2c73afdc9ba0f3226dc917bbebf213d931a9ca76c4e3d61db9c7c54c486bdebe04bbde98432147b2d084531e3a8b9cb3954e005"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:91ae6b887e7af789e4d150f345446a9f020408bc7e7239dbfd10c48e9fe82ffb","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:b90bb86248e2952a0051e38c0fbaf3d6cbe1aaa4e1f830b4cb7d07b505c1d7aa","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.360968300588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.876603e-02","shared_alloc_j":"2.292201e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b90bb86248e2952a0051e38c0fbaf3d6cbe1aaa4e1f830b4cb7d07b505c1d7aa","served_from_record":false,"record_id":"r62","record_hash":"sha256:3a24ab302a720f69d345b7e6fa2cea2ef83ee0f23200fdd2299187b40d3ee87a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91131},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820749e+01"},"chain":{"prev_hash":"sha256:38c14dbefa60d5e3c8a826bb162de32332012d85ac09fe45e1f7290491a74983","receipt_hash":"sha256:7879e9339264c888f7984e78d63bf7fe9631d90706f7b49ff76c0c2b625732c5","signer":"ed25519:bench-node-01","signature":"930c308e85b1d7eb623978785b9a40098e765947af7f7ce804519654d0631790af4d3cc2d71f6a871fd751d40e6a5b670367f55381f2e62c3673cb716b58040b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:738272ede6d5ebd849ebbc275a07126add3b611846a0d3f67266eacebbc7b221","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.551524870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.325686e-01","shared_alloc_j":"4.418955e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":8,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.849256e+01"},"chain":{"prev_hash":"sha256:7879e9339264c888f7984e78d63bf7fe9631d90706f7b49ff76c0c2b625732c5","receipt_hash":"sha256:a2b88de131d258080f728b0259a1678cfa6a9da48a5a5edb6b2a47e84bf2fa15","signer":"ed25519:bench-node-01","signature":"9a609ef5f7b0f5147bd46cf12007dcf7ef0a0740ef11320239d2808790b363a87da08b7cb57a7c806fee09f8d1b77ed9866dcc52ca3ce8effad135ca90837304"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8584d01ad34c0d5aa63ef07f5b80fe74246055767e5f8bd7ce84e1b9a5afd621","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:0bea6cd650d108797f6adf95ce6eb98edb25d3145e447dbbe59044cdc1405e79","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.706580870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.079586e-01","shared_alloc_j":"3.598621e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0bea6cd650d108797f6adf95ce6eb98edb25d3145e447dbbe59044cdc1405e79","served_from_record":false,"record_id":"r63","record_hash":"sha256:5dd200f3ecd7d048283f28d812d78087bc75818e7bff5f5016a6a27a524cb1ef","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91264},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.840337e+01"},"chain":{"prev_hash":"sha256:a2b88de131d258080f728b0259a1678cfa6a9da48a5a5edb6b2a47e84bf2fa15","receipt_hash":"sha256:df3fb075f271101cd842cdf0db7c8fd2f00e8e16dc1a9890327bbca33ec7858d","signer":"ed25519:bench-node-01","signature":"c83544f64dca427032ee27b161906bd68d62f3759df7714fc4b882634fc17871068ec5a9ab2677e81d406fd931912e36e28e07cc3e9176d2f277a523fd2cf60c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7ceb95a3245b0f818c77d5b5419466198cff2b41ba1731d5fb8d11dc5bbdee0e","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:12e1d500f4d5e2048a2cdfdedbab64ccfa35e492a4f9b1b1ac37e4dc345e25ab","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.952247040588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.686147e-02","shared_alloc_j":"1.895382e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:12e1d500f4d5e2048a2cdfdedbab64ccfa35e492a4f9b1b1ac37e4dc345e25ab","served_from_record":false,"record_id":"r64","record_hash":"sha256:e9736f295439f929d9571f2971626aef642c48fea5bf0e865ad97750f1766f5d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91296},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.812493e+01"},"chain":{"prev_hash":"sha256:df3fb075f271101cd842cdf0db7c8fd2f00e8e16dc1a9890327bbca33ec7858d","receipt_hash":"sha256:5b2df23c6fb3de4e594015885a84f8421e1a649fb85bf5ce2ec0de75e1d3ea85","signer":"ed25519:bench-node-01","signature":"0c5216d4fe4982244a96ca34f49e12260fec066bbc818a35562726f994414fbf3b6d18e6e5b08b9fd3efb15b82f6c683a2698c1e34a936b2450960ef2002890b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e139ba28cbc7c1fc50e8e3b071575f5bc12798fc4517edd695f996b315427fcb","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.020463570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.753533e-01","shared_alloc_j":"5.845109e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":9,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861403e+01"},"chain":{"prev_hash":"sha256:5b2df23c6fb3de4e594015885a84f8421e1a649fb85bf5ce2ec0de75e1d3ea85","receipt_hash":"sha256:5e889d8c124cc2402cc89abd6075e5188f8d76284ccaa9a3dfc2217d36a4567e","signer":"ed25519:bench-node-01","signature":"6d0cfbfa473385d6451249dcad4d3300fe89cd9529bc418f375d8d176ca01a5a787a4834345f37c0d52fef953517dbd7b7ee2233199e1cfa810048167b76ec04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:38b1700c89b38f7d47eb0cd3ebf86d85dd399ee4a425b93843303977df2b5eab","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:b0387795c262bc1dc0024657e5c1142edf822e3c40aac8830124fa0b5b3be2bd","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.342859870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.823860e-02","shared_alloc_j":"2.274620e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b0387795c262bc1dc0024657e5c1142edf822e3c40aac8830124fa0b5b3be2bd","served_from_record":false,"record_id":"r65","record_hash":"sha256:889a7942bf27bd46a168b5aa4950578502099654dc4c41814fdcd5eae68fd01a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91431},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820415e+01"},"chain":{"prev_hash":"sha256:5e889d8c124cc2402cc89abd6075e5188f8d76284ccaa9a3dfc2217d36a4567e","receipt_hash":"sha256:5b9dd14550c2044c383851f6e4f61fde34b95d8211618a3e82b6e3f5dd33c9ed","signer":"ed25519:bench-node-01","signature":"a48c958a9899176114a30b95434b3d2d3dd4b840fe88400bcec59cc61b1c6cf441b01aeb52841ed58feea7292f811ddcc87b2ac2a07cd2acaf4d50fb8006270b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:af460cd41c962df0e68169eb2049c7289cf2855bf3cd21f52bf0fb38521afba8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.555321770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.618055e-01","shared_alloc_j":"5.393515e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":10,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857911e+01"},"chain":{"prev_hash":"sha256:5b9dd14550c2044c383851f6e4f61fde34b95d8211618a3e82b6e3f5dd33c9ed","receipt_hash":"sha256:8cdadaaf3befa3e72ca5a7c14384d283af081614c24abd0ed7758f1ac7815426","signer":"ed25519:bench-node-01","signature":"e51af1e5ee87fbc650015c7b757373f3d51c0d23604670852f660cbd13709d8fdb4344690589bc47ac8422fa442d46d485b3e8e15b90793a2560df510502bd00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:eb2702c3f9c026e1d6ea21964ca0a6cb6a5e84e75d79c7cb64046b2cd62f1ccb","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:e794aeed80344416c0eea1f5479ecab56e92778ba0a1c0ad094b45481313cd95","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.596417470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.338762e-01","shared_alloc_j":"4.462540e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e794aeed80344416c0eea1f5479ecab56e92778ba0a1c0ad094b45481313cd95","served_from_record":false,"record_id":"r66","record_hash":"sha256:4a7445a0dd5e1f0e63f6753a999ae0815081d2b460fe1e9cb4f40874dc5fdf5b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91596},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.849682e+01"},"chain":{"prev_hash":"sha256:8cdadaaf3befa3e72ca5a7c14384d283af081614c24abd0ed7758f1ac7815426","receipt_hash":"sha256:4785225788fa7cd69100ad29303d14a0d4c0928f64f08a91f4b4f8de1a096617","signer":"ed25519:bench-node-01","signature":"18da682b991b4eb673cc13eaadfc918368e663f67ee882d921dda4b224dc8c5d27489e6fc04db575ca6c8e4c660297af202cf0f3b7d41e4dd59af98040487805"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:25d98aef2d01aa197f5daffe77e9d3cd21fc946941bde6af802ec16a2540f2fa","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:434c21a52f0ec696ed9ace53a471ae38f5ade0437b95c87c88db4fdb7b5e41ba","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.084150070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.189558e-01","shared_alloc_j":"3.965193e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:434c21a52f0ec696ed9ace53a471ae38f5ade0437b95c87c88db4fdb7b5e41ba","served_from_record":false,"record_id":"r67","record_hash":"sha256:23efb9145121ff13e6bc533cec9c6f85c7a20b651f5ea4726d7cae63f5299534","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91662},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844550e+01"},"chain":{"prev_hash":"sha256:4785225788fa7cd69100ad29303d14a0d4c0928f64f08a91f4b4f8de1a096617","receipt_hash":"sha256:839b01b50ecf7d8a19c5053fcd688a3520bf0d68e29e9de4ca8d000a3aee64c6","signer":"ed25519:bench-node-01","signature":"b45b547de1efe9bdca73753997b2a28f700d943b44df4976eb4797879d45aff130873b5c134554843e362a59d9159f0cf72f99d6ad4ad54ec8dc3e92b14d7f0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a856f3cac1b64f2483cc47ef2354a08dd8eb139ab20cd315fcaa67515b0427dc","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ce77866203f612a22e6657ca52065c2bca49b5c704e7cbe7bdbafc508469eb4c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.978070570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.449923e-01","shared_alloc_j":"4.833077e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ce77866203f612a22e6657ca52065c2bca49b5c704e7cbe7bdbafc508469eb4c","served_from_record":false,"record_id":"r68","record_hash":"sha256:0d5bff476d58de9e80883a299e1b4aa6d7b853a633916d6d74df6885e00c5534","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91742},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853146e+01"},"chain":{"prev_hash":"sha256:839b01b50ecf7d8a19c5053fcd688a3520bf0d68e29e9de4ca8d000a3aee64c6","receipt_hash":"sha256:17e67bbecc57faa042de2185688cfdbf32af45458ae78f168328539b011a1c58","signer":"ed25519:bench-node-01","signature":"3bd398743daeae3bd747edc696cf9395afc925de4c2a83051a043cd8dd6c24f0d02818291cf6a972c760b16a427d315b437361a607987b172a275fd26ceb0f0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d3be2a24ba0edec5055e4cda8f6d0f6776d6a0fede00cc7f100ab7959677cc89","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:2b6cc99222f33d8a6ffd1cf22eee3fcfe52da5b3b9a2d9a735a73f65e5681507","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.413520950588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.029668e-02","shared_alloc_j":"2.343223e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2b6cc99222f33d8a6ffd1cf22eee3fcfe52da5b3b9a2d9a735a73f65e5681507","served_from_record":true,"record_id":"r5","record_hash":"sha256:41c01d66b16234412c1fb58f3d033a7845b26bf4cb1994c3393a850130827581","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":86704},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821705e+01"},"chain":{"prev_hash":"sha256:17e67bbecc57faa042de2185688cfdbf32af45458ae78f168328539b011a1c58","receipt_hash":"sha256:26626bd7ba9e2d20f862712f65e4ac523f28674d27f4db914dfbe7309ff0e6e1","signer":"ed25519:bench-node-01","signature":"e18a7ff3d1d9131de3335f1aac9fcb804df3ca6690f2aa6312a55b3eb30bbf03805bb4a90c8678d927fdf5ebbe88e9cd9264763fd7a76b5e4f5ddd0195d4db0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a47e24e5a9a5022cd44422b5547ad49868b40577e571ab4bd5ae43637459f6f7","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:f668b77f7f3629e1f6d16f8bcb2557fc93c50eff52cb1fe95b97faaa24e0e33f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.425684480588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.065091e-02","shared_alloc_j":"2.355030e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f668b77f7f3629e1f6d16f8bcb2557fc93c50eff52cb1fe95b97faaa24e0e33f","served_from_record":false,"record_id":"r69","record_hash":"sha256:4737f3cc94256274d0b12806b1ce485af87c89aca5c283031f546c111a344cca","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91820},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821923e+01"},"chain":{"prev_hash":"sha256:26626bd7ba9e2d20f862712f65e4ac523f28674d27f4db914dfbe7309ff0e6e1","receipt_hash":"sha256:c224ff87ab33ae23f4af20d5574f1bdcc3185a9e42135afb20d97040c63c2866","signer":"ed25519:bench-node-01","signature":"6f30b21f93c069be20b1e81d5ed1a60a718908048ce89735a4f343a2919add766db6425ee634f4d979727ceb68378c3b49d400e2ea9cdefe03db017a68bdd70c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:22fa6b1203d1986e9b05da3ea6ee1ebe4e6ec35f1f8967194eac75c8299a404e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:b4e6cd21c0ba051d04aab9042e5e115c3bbe352ada582acaab628fc22dc8fd67","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.922806290588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.600402e-02","shared_alloc_j":"1.866801e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b4e6cd21c0ba051d04aab9042e5e115c3bbe352ada582acaab628fc22dc8fd67","served_from_record":true,"record_id":"r41","record_hash":"sha256:ec08e4e68798e0e921a233c9482a51b113bef41676e1d4170b7d18e1126a11ed","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":89225},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.811834e+01"},"chain":{"prev_hash":"sha256:c224ff87ab33ae23f4af20d5574f1bdcc3185a9e42135afb20d97040c63c2866","receipt_hash":"sha256:c365e59cb571ab43a62bbd4ef4953fbf64cd9bb499bdae5cce6c7bfbdfe824ec","signer":"ed25519:bench-node-01","signature":"ff7eed1081ea7c3262e70bdc7ef61e4d18bb6009cfcdfbe78a6af2661aefe8ce258e1c16005de43e2bd893079c64af14a3e07fb88dde64a010e45893e665f503"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:42f30dea0a4bd1f820c19c7b99c5afbdb62c9a1ce2ace50ffc5b6b39c4c477ca","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:da6c1c4573865ce511b7df4d41f5f959ab68783b07b6c0639a8a8c91d5c45886","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.357319260588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.865969e-02","shared_alloc_j":"2.288656e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:da6c1c4573865ce511b7df4d41f5f959ab68783b07b6c0639a8a8c91d5c45886","served_from_record":false,"record_id":"r70","record_hash":"sha256:cf9d27990b76e11ecf153a289490c37c752d1c033890b980325feb314f51a1e6","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91890},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820682e+01"},"chain":{"prev_hash":"sha256:c365e59cb571ab43a62bbd4ef4953fbf64cd9bb499bdae5cce6c7bfbdfe824ec","receipt_hash":"sha256:f05eb66e29288c285655ae66e8e125087f22198128e7122334b14105790657ea","signer":"ed25519:bench-node-01","signature":"4866a3bdcbb342eb6955e7c7b44d64afcd34ed8f3c25773de8c0cfa3cbae3d991f30c9861bd242642c31ea546587881e466a606c1997e2aeeed046d0190c2d06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ddbd2af150a5292fca346f03cb3ba2166ef25644ea74160c2b81ae4fd9872e1c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:efbb8d25a730016e7141c8a4385a30cc196c5b7f9d238b06f6213360fb3a4888","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.266697170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.533989e-01","shared_alloc_j":"5.113297e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:efbb8d25a730016e7141c8a4385a30cc196c5b7f9d238b06f6213360fb3a4888","served_from_record":false,"record_id":"r71","record_hash":"sha256:e6cede6feea99f953bb7617c1b457e0bd9cfe84fdff8b68ed36394aa9e7fc6a0","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":91975},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855594e+01"},"chain":{"prev_hash":"sha256:f05eb66e29288c285655ae66e8e125087f22198128e7122334b14105790657ea","receipt_hash":"sha256:9402e382b814d002476d591f621d9cf699cba052619142c37aabfe75ca61be45","signer":"ed25519:bench-node-01","signature":"474d7a71055b3766b6f0922a64e424e73ece8287bd6e9391cfeebf28101fab5ac2cea88d14fa96072b719d7694106d9c26dacf618c08611a0fab54f97bd3800e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7d3607bab732d99bfd60850a500db1a6b385882938d194acc282803a6dc18fdd","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:240fa5c9d924503df218a3b93037f774d98422886228c19146631e7a15c762f2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.381218560588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.848199e-02","shared_alloc_j":"3.282733e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:240fa5c9d924503df218a3b93037f774d98422886228c19146631e7a15c762f2","served_from_record":false,"record_id":"r72","record_hash":"sha256:1c0491bd8f3c600a0e6820c686b289036359762203e255ca5155c7746149dd8a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92030},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.836347e+01"},"chain":{"prev_hash":"sha256:9402e382b814d002476d591f621d9cf699cba052619142c37aabfe75ca61be45","receipt_hash":"sha256:87e7ee0d643a61480c9cb123c119a4bc32bf080e49270b1781ee0a66c9f5f404","signer":"ed25519:bench-node-01","signature":"b5fd5a76918b012e6c75cb792b15aa182c6acc8cdd1b2891153ed1f02807d1206c557d5c015a475d4fc7defcc2c955c38cf02251c4dfbdc0af84307ee7264409"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c99bdbe1fd44fe3394fd819388fae6f1924b345bde30463567839188cd3f3c04","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5aefa7348d80e639ad964174db0ac09ade23590bd0c9e27355a39fcf0342719b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.394042470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.571079e-01","shared_alloc_j":"5.236931e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5aefa7348d80e639ad964174db0ac09ade23590bd0c9e27355a39fcf0342719b","served_from_record":false,"record_id":"r73","record_hash":"sha256:e37a1496933f6eaf96da8faeac74a85811b847f9d3999c2033cfd5ab4181b858","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92117},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856631e+01"},"chain":{"prev_hash":"sha256:87e7ee0d643a61480c9cb123c119a4bc32bf080e49270b1781ee0a66c9f5f404","receipt_hash":"sha256:1d7440e0fe2f0956f4db644c61eb12d8bb98be024fe5942882ff10347393b156","signer":"ed25519:bench-node-01","signature":"705441c7af3ec01b9866a07a70d96be291e64a3f6e03e12f6e79fbdf0271413dc9e389dad030dc2c4c9ba0534d7c1af6cb87571fd59440387c49602008f8bf08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:702b4129aa62ed41ff5f35d167ce95d1e519412d9222d0098af552b9d0b51d78","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:300656a7d76a43a3659b5e523db3771511c201965d9f67c1a12732317c102177","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.166283270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.213480e-01","shared_alloc_j":"4.044934e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:300656a7d76a43a3659b5e523db3771511c201965d9f67c1a12732317c102177","served_from_record":false,"record_id":"r74","record_hash":"sha256:dd658335054ecb3f36bd7f2f6709e3a1ef958ea7aa8c944fa78fe328bd5fc514","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92184},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.845415e+01"},"chain":{"prev_hash":"sha256:1d7440e0fe2f0956f4db644c61eb12d8bb98be024fe5942882ff10347393b156","receipt_hash":"sha256:6999f7052d3c1bd07dec02a16c686cc4c6196c33ee91a0e0a0467db23dba4f30","signer":"ed25519:bench-node-01","signature":"730961eac6721bac354defa7ef2b6b0b32005c6035b421e4f87a8de9c68df201e6160898724e6ff5f6c6aed268947c5aa8abbec7a81f2f58236bc89f551d0309"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ddeae9407e8c3d9aafbaf8192a228f55b93f7ca4e71ae586b2a34d6fb8bfa9bf","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:759f9c148dbf8a7b035d1e93268b749afb1424af4fd1bbde4111057eade1779b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.697515900588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.856833e-02","shared_alloc_j":"2.618944e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:759f9c148dbf8a7b035d1e93268b749afb1424af4fd1bbde4111057eade1779b","served_from_record":false,"record_id":"r75","record_hash":"sha256:161fa68204d05ef88a53bb41d76f3c41877cfd04958985d50501bcb437f50720","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92228},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826536e+01"},"chain":{"prev_hash":"sha256:6999f7052d3c1bd07dec02a16c686cc4c6196c33ee91a0e0a0467db23dba4f30","receipt_hash":"sha256:734a30acba8e42dddc183b99c06a64e081b0ad8b6d7063e6b47a5421f23e1d1b","signer":"ed25519:bench-node-01","signature":"c36c432f00c3064526a02ec4334f2a861f0027c553e6178c072a9d38ecd83b6f60da5f1fe1a541b143d46804d8ef7df874e44fffa6cd1a80b530108d0819a80a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:77ca8f3c726972f36762447becc249184b368ad6888026b882b9b9fb6042b39a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:07d0f7781bd69b6ac635e1588d83110921621d8756204fc2c7b3c233b482507b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.008959470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.458919e-01","shared_alloc_j":"4.863064e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:07d0f7781bd69b6ac635e1588d83110921621d8756204fc2c7b3c233b482507b","served_from_record":false,"record_id":"r76","record_hash":"sha256:3df84591717511ae8a017a9c9978292887c3bb7132e581683a991ccf699295cf","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92309},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853415e+01"},"chain":{"prev_hash":"sha256:734a30acba8e42dddc183b99c06a64e081b0ad8b6d7063e6b47a5421f23e1d1b","receipt_hash":"sha256:5a5517956921fb26da1187c201b9a862a1677515e447e6e107a3294224cf865e","signer":"ed25519:bench-node-01","signature":"6eeab68a1fd80149134d61867b14acbc94dec2704e71c94dd4f5ff945c1f150a52ae4f6c08e1bbcecb385bff69ab5c94a2791dd5e9f8c7068fde3df73c8bad0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c3734c371219a360549aa810d607b1525afa6be553855ed88f6d0d56736df05f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:bcc91a4f025c63a02ead5e74a517af4b3d4f4d33b42c58e454808d418e1dca17","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.145077440588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.247787e-02","shared_alloc_j":"2.082596e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:bcc91a4f025c63a02ead5e74a517af4b3d4f4d33b42c58e454808d418e1dca17","served_from_record":false,"record_id":"r77","record_hash":"sha256:2d7abaabe1f61b7e178b1c4172edd84e057041061cdfd7ed3bce43f549854e5d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92344},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.816584e+01"},"chain":{"prev_hash":"sha256:5a5517956921fb26da1187c201b9a862a1677515e447e6e107a3294224cf865e","receipt_hash":"sha256:16165569fcb3c65acf609f06aa9eb3e507db5b399c6a2a2957e5b0ca4bd4dcaa","signer":"ed25519:bench-node-01","signature":"8780c550873441c5c0c05437498ef5c3c6ff33ab2e709628263f8ea8ce1b96e2b3e33acd09492c3a7dcb3c735552f48c4efca3e227f8ac474aa4f88f86367707"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f0ac5acb82dbd79239bea4f04c8077e17b24c63d51709a585e1d4e2b9fa79f15","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f2d32adb3d6e01e7630860c636aab70ca928ed102a1cdf5fa6bb132eea96bb57","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.790521170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.686559e-01","shared_alloc_j":"5.621864e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f2d32adb3d6e01e7630860c636aab70ca928ed102a1cdf5fa6bb132eea96bb57","served_from_record":false,"record_id":"r78","record_hash":"sha256:cf2050c41d2d7d6e6e5c6ff019fe8027b184f84a42c71bf7285da24ca5d7c416","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92437},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859712e+01"},"chain":{"prev_hash":"sha256:16165569fcb3c65acf609f06aa9eb3e507db5b399c6a2a2957e5b0ca4bd4dcaa","receipt_hash":"sha256:4923cb150d077b532be3d082341aac2087441cb70f4a8bb6a73ea67fb3a9608a","signer":"ed25519:bench-node-01","signature":"de2fa96223e64053a25faaca6f0c8203c2a6d3b16aca7ad985ab3183e61dcbbb1431a07ef684c07054ffba3717d3a902d3081834e0daf47e85f69c3901ebf606"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e68f9ded6ff1af041cea0efc1ef6eb7fc26960ab5ae9d06c825f9cc080626abb","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.480347150588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.311688e-02","shared_alloc_j":"1.437229e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","served_from_record":false,"record_id":"r79","record_hash":"sha256:bc09a0b7aa34a4163a95cc14cba017fc4631050085f0f7aabbba0fffe37d0c86","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92461},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.800476e+01"},"chain":{"prev_hash":"sha256:4923cb150d077b532be3d082341aac2087441cb70f4a8bb6a73ea67fb3a9608a","receipt_hash":"sha256:5e14e1c4835ab24033189787fb79bf9d973d74ff8fd97a6fe10906cb39ec5fbc","signer":"ed25519:bench-node-01","signature":"36c1fb89ea041ab9f166a4fbf57eedc82f61d2604dd6068f0f9b85de132be976b1a316e324eb3c71f5578a63f3d5487694ebe1bb15ef7c7d2a96250b39c20c0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fe6d9f3d3a81d8de0506392b420342ff698cd4961b26b389bba83fbcbc93289b","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:cfde747273a49efebd1335b7e318d6df510579a1af73818d9b0ccab8649bd5da","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.654524370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.646948e-01","shared_alloc_j":"5.489826e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cfde747273a49efebd1335b7e318d6df510579a1af73818d9b0ccab8649bd5da","served_from_record":false,"record_id":"r80","record_hash":"sha256:294a59fd6d83b5e352c393f18ce47c70f770d620978e092a24efdcec58049da9","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92553},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858680e+01"},"chain":{"prev_hash":"sha256:5e14e1c4835ab24033189787fb79bf9d973d74ff8fd97a6fe10906cb39ec5fbc","receipt_hash":"sha256:39e2696f31b27f9dbe6ce91a9ff4950ff610b5abf096eb708e8868a19bcc1437","signer":"ed25519:bench-node-01","signature":"e88960b11309105856872e57fbb746e6214900f8b667f9268c1d7ac00205ca90db5806565b616cef22501ff52eb99f5a7aee7ac10a546f50f94396c7dd9e6300"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:be9a2675db3dc1e73282e8f9af9914513322fb7adb69cb1eec3ddcac7b163385","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.688294880588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.917361e-02","shared_alloc_j":"1.639120e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":true,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.806185e+01"},"chain":{"prev_hash":"sha256:39e2696f31b27f9dbe6ce91a9ff4950ff610b5abf096eb708e8868a19bcc1437","receipt_hash":"sha256:154702d06d1cfccf5fbea68e993cab9035061027abe54137b7a7a4fa008e9fa9","signer":"ed25519:bench-node-01","signature":"0371b71745f6f6dcf3aec5e0f5c5acb586767023b8082549089f757b1949fdc83f3928a6ac7c8193f6eae018e062eb825dd3f82605a9442194cce2b2b9bf3004"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:031deea70b047f911ca60f31b601d48451b2ef164ae325baaf48ea77505a23c3","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:310326ba6b9b9dbb0acacf16a065d18f85dff7a810d371e34f2a5949282c8060","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.515868980588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.327771e-02","shared_alloc_j":"2.442590e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:310326ba6b9b9dbb0acacf16a065d18f85dff7a810d371e34f2a5949282c8060","served_from_record":false,"record_id":"r81","record_hash":"sha256:2cd71ea7383e7c9a5450b5f889b9dd2e0fbe3f759d233eeb99d639b726aead5c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92621},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.823509e+01"},"chain":{"prev_hash":"sha256:154702d06d1cfccf5fbea68e993cab9035061027abe54137b7a7a4fa008e9fa9","receipt_hash":"sha256:98415aabeb35cfa3c019650c778a23cf045e102062ab23415bb5c8d527ac18de","signer":"ed25519:bench-node-01","signature":"9dd7b12abb0b61812acea8d248370e85923fc582ce52895ae5f93d30f37f5005968607071d4688113f3bc058570cf7039b140310220c3f9ef5e0033ec7fff407"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:647eb1a1a2c5436dccfc7652518fc52987280a1966fdf469f3f59cc271b5b874","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.537503890588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.478162e-02","shared_alloc_j":"1.492721e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","served_from_record":false,"record_id":"r82","record_hash":"sha256:796c66db2245954b7f1adefe6ab2b746c6c40d34fdc7990c935f119ab41d0a56","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92646},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.802122e+01"},"chain":{"prev_hash":"sha256:98415aabeb35cfa3c019650c778a23cf045e102062ab23415bb5c8d527ac18de","receipt_hash":"sha256:65b4a144ef3c7198055b7a1364ebfe5c330c675f57e4e0e38da216a14c202658","signer":"ed25519:bench-node-01","signature":"79ee42439a8a8ac0cf7b7129a66992948795a5788f0a4a3b14a5e866be0e75f1cacfd32193b3f21f2a0a74945d03315e39461ec1ff63e36f90de95ffcba4a808"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:321a9e60e83f4bdee90a491a7ed05680ac3f4927515a8e3301384b06f2907296","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.414569510588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.032724e-02","shared_alloc_j":"2.344241e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","served_from_record":true,"record_id":"r82","record_hash":"sha256:796c66db2245954b7f1adefe6ab2b746c6c40d34fdc7990c935f119ab41d0a56","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":92646},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821724e+01"},"chain":{"prev_hash":"sha256:65b4a144ef3c7198055b7a1364ebfe5c330c675f57e4e0e38da216a14c202658","receipt_hash":"sha256:f4deb050cd41a3e1425cf1e560f3d83312fd387d4dd1e57146dfeee725849024","signer":"ed25519:bench-node-01","signature":"211d8a6e9f42cab062aadddde53dc1450465cb4faeb9a63b574ff1ec203b27bdf27ae3f042c708fb9730d90b60ab6de55529750d64ea21576f2eff91307e2402"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3483be7314a9921938617500b40c45a2fd6966c395896f8d6ee70c4f0badb2f2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9c1ce546fd54a646e92397cdc5cf76c148f6186271155222ca123a7bdf8a1d26","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.156316790588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.193152e-02","shared_alloc_j":"3.064384e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9c1ce546fd54a646e92397cdc5cf76c148f6186271155222ca123a7bdf8a1d26","served_from_record":false,"record_id":"r83","record_hash":"sha256:330f6b390437308cf0919f8ef416bea8cae083616a13df679075c5f487499f7c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92736},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833358e+01"},"chain":{"prev_hash":"sha256:f4deb050cd41a3e1425cf1e560f3d83312fd387d4dd1e57146dfeee725849024","receipt_hash":"sha256:c8052daab17565cca4eff4e2d92154aa6722198d282475679ca1b673bc1c1121","signer":"ed25519:bench-node-01","signature":"1a338fba19c6e43c5673064bbc3b9a55194f948e5c7d254fb795b4a22ed276d999381a9b4f73b44eecb34c057d27e83cb842dfc16ed8e462d3b185160611b40c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5ff6fb20c70af83b973e1c596878c32b4d42699c37f861004b71370e0a1cb606","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c7244af0135d986ac61fd14065b4dbf9cfe82021f3ab953ef526e57c3d5dc13c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.424703890588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.974862e-02","shared_alloc_j":"3.324954e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c7244af0135d986ac61fd14065b4dbf9cfe82021f3ab953ef526e57c3d5dc13c","served_from_record":false,"record_id":"r84","record_hash":"sha256:edffb575f2f440e1a650390567b95dc2fb1fa951fa2131a54d6af59ffb0fafb2","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92791},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.836902e+01"},"chain":{"prev_hash":"sha256:c8052daab17565cca4eff4e2d92154aa6722198d282475679ca1b673bc1c1121","receipt_hash":"sha256:dd48ff1f6ffc8d97d8f0c7cf702ac12e4a9c1447d451084757ddb4654d8e9125","signer":"ed25519:bench-node-01","signature":"c9957fe81aa2456112c370926f70f59295ac45452f723ab0837081e1fe1ad771667fb2a05e6e77fa2bdb855560b3fbd8ebd1cb9bdf540ea75afe47ec64a4fa0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:909b7da8c216c1e43f830e45eb2c14c92725cd692b40eac9f5a4843343c4fc16","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4a83686302e8d2fa143a1640bef23180d38f6901a3483339dc56731a5ec0dd8b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.205822740588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.424717e-02","shared_alloc_j":"2.141572e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4a83686302e8d2fa143a1640bef23180d38f6901a3483339dc56731a5ec0dd8b","served_from_record":false,"record_id":"r85","record_hash":"sha256:c9793af69285f2eacdc92f59a34d7f225536f3da9a60fb88d6bb4c441b2730ff","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92827},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.817797e+01"},"chain":{"prev_hash":"sha256:dd48ff1f6ffc8d97d8f0c7cf702ac12e4a9c1447d451084757ddb4654d8e9125","receipt_hash":"sha256:d03883fd99c31156b9f057b0ee20bcd3367e639b5b188df72683dc4a5c6b5351","signer":"ed25519:bench-node-01","signature":"b7115175f62af428935bd9ec0d72ab405ab5f4d3b9cbd29576cf62f78fbe8b4b42bcc1c0238d4c57838a91539e85bbad751d8dcf0a86efd59d8041c676e5b702"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bbbf86586388fe5becfc71cbc00c2089f497e702a6702644942b80b3ace03b29","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.504373570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.311953e-01","shared_alloc_j":"4.373177e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","served_from_record":true,"record_id":"r36","record_hash":"sha256:55a2b8e716a8eb9fda50c9c4ad876cf5d024f9ae99c0be4799b8f2121d94a546","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":88830},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.848803e+01"},"chain":{"prev_hash":"sha256:d03883fd99c31156b9f057b0ee20bcd3367e639b5b188df72683dc4a5c6b5351","receipt_hash":"sha256:25c6d05d5471d33a015e9d037c1a0ca041ffe0511307faef7db40fec699d66b6","signer":"ed25519:bench-node-01","signature":"9bcd95cc81e192996a11674cc95eb142fb9d7b589666a09546194b60cad987d663fc95bb1ba5e400d0a934dc9139034ee76dd287fa17299ff899a5f772bfce09"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:19afad2402c3fbfa9bc201a0fbb4570405f2d1f6d8028e2c92b35160d3c70102","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.135314060588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.131979e-02","shared_alloc_j":"3.043993e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","served_from_record":false,"record_id":"r86","record_hash":"sha256:f4c7f1ad01d2d813ad75c00cc45d65ed4551e2d7454324699de36187f53cf52d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92951},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833068e+01"},"chain":{"prev_hash":"sha256:25c6d05d5471d33a015e9d037c1a0ca041ffe0511307faef7db40fec699d66b6","receipt_hash":"sha256:a18f1cbf7d3bf4913af0117cfa1e6a687a11b60b71b8d00777c60adbaf75426c","signer":"ed25519:bench-node-01","signature":"c6ef37e005cd783030179ffd805a11724c14ce4eb4cd0469c96e6a05a3fb8f805ddc58497eed9292114c98caf6b2229644ffeaf5d15d6bdb153464b4917a940b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d326f6a879b13b0c7d43a76a55630657144d5c2c6695ed0ff7af4b178c39755b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:09fbec421a34061a20a3276b975bb72b854374ca4aca4b207ae8812da3d2f0bb","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.577765790588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.508052e-02","shared_alloc_j":"2.502684e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:09fbec421a34061a20a3276b975bb72b854374ca4aca4b207ae8812da3d2f0bb","served_from_record":false,"record_id":"r87","record_hash":"sha256:aa9718ebd78c6b8a8b47ae94fe1ce09edfaacd1dcea8b6e31c0e5d13626ac2be","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":92992},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.824564e+01"},"chain":{"prev_hash":"sha256:a18f1cbf7d3bf4913af0117cfa1e6a687a11b60b71b8d00777c60adbaf75426c","receipt_hash":"sha256:7f260b1d29b603bb0373de3e6d37f8395175b2215dca87e83d51c9c65f69636a","signer":"ed25519:bench-node-01","signature":"e3bb338d8c1c36a0b572d2424cba2674718169e10505f1e8ca0724101af384025162883fa4f7a020b1d8eb689324f67dc350b0a81ec823bffb699cf108a38c0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:06b27872681731e4bd68569b37977942272034bd93d5e02432f745e6ae0096eb","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c4ec9682783effc085e9f772f3940379db07512d64795c0772c75dbfe45a2979","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.510416570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.313713e-01","shared_alloc_j":"4.379044e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c4ec9682783effc085e9f772f3940379db07512d64795c0772c75dbfe45a2979","served_from_record":false,"record_id":"r88","record_hash":"sha256:50f50674757fce66a6fd0cec5aec9517fca0922ad89d07963fb314068230323f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93065},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.848862e+01"},"chain":{"prev_hash":"sha256:7f260b1d29b603bb0373de3e6d37f8395175b2215dca87e83d51c9c65f69636a","receipt_hash":"sha256:761b6094c021e6d12dad03ce6e1c4da1d8c2877196ef4d9f19e78635fe0baa04","signer":"ed25519:bench-node-01","signature":"88664fae09005590cf2a9119f902745835cc8c8de27e2d6eddfea7db92a01208334e293e5ef6e1aeb8f7f5adadb787fd5b7273a872b92b0587de5a3aab24ed0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b6291c2a1fee6d38bb6aa5b247778a541117a6131aa76cac5a434cc5b9c662d1","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:386c444bb8e68696b4deb7cee60d731f03a2706029e7d8dcae158d7d4a6222e0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.945342130588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.578656e-02","shared_alloc_j":"2.859552e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:386c444bb8e68696b4deb7cee60d731f03a2706029e7d8dcae158d7d4a6222e0","served_from_record":false,"record_id":"r89","record_hash":"sha256:89f4fd912a74245bed7adf41ae615b229d03b28a6bec94788cab2374837aa102","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93113},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830354e+01"},"chain":{"prev_hash":"sha256:761b6094c021e6d12dad03ce6e1c4da1d8c2877196ef4d9f19e78635fe0baa04","receipt_hash":"sha256:1793fecd02dd16618427179ad12acffb4bab0dcf548eb9a64ce1bf29ff027d6f","signer":"ed25519:bench-node-01","signature":"7b4c7bde8e77c17d0dd0aad87cbca0d37b63c445a2cf53d595a40fabf257051df2342a6c51b3d7d473d003ff2ba7cc1eeca552ea7190f8a715d740445c0e4500"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:51e19d2d393c2127aa4d993db32c80072cf65f37bc5980f3f313ed82ec62f4d7","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.947371470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.149719e-01","shared_alloc_j":"3.832396e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","served_from_record":false,"record_id":"r90","record_hash":"sha256:fbfb7b2e0c35a608c84403c695970a425790cfac9e71c7f2b3ab9eecb37cfc58","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93177},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843071e+01"},"chain":{"prev_hash":"sha256:1793fecd02dd16618427179ad12acffb4bab0dcf548eb9a64ce1bf29ff027d6f","receipt_hash":"sha256:a854ddb545e073367d70b1cf8d216de664584fe544ebb94d2bf4f5472b36cd26","signer":"ed25519:bench-node-01","signature":"87ec21fab981d5792a5992c3b69629f9cb54eb325f3e45240a28843ef08a78700fd8d2024f296abd701ebfc424544cb800d45755833f9bd977f68f4bf4b0620a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d6c720396e03f5de9a13cc225f060e5750ef5ee781b1ea218c14f0739ba29c56","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f98f8602394386ea5ab5f4f9c08208c54148d551cb84dca8d4c60da7a903bf68","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.739314470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.380382e-01","shared_alloc_j":"4.601275e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f98f8602394386ea5ab5f4f9c08208c54148d551cb84dca8d4c60da7a903bf68","served_from_record":false,"record_id":"r91","record_hash":"sha256:152f5c145aaa9babbf205a0bbf11f61185427adda91aee0f43747b1c278636ab","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93254},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851012e+01"},"chain":{"prev_hash":"sha256:a854ddb545e073367d70b1cf8d216de664584fe544ebb94d2bf4f5472b36cd26","receipt_hash":"sha256:b4f6f7a7b3af1ef10088111371ba4b060ecc076a934c01228bd2b32c69cc6ca6","signer":"ed25519:bench-node-01","signature":"b907792b21174d1ca6137758fdf42b9109b033ae555d292ba082720ef4d1b55a084a4d5ce146ab055807bae777a45f95700ec96e4b3816627f71e07ff2423201"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e2a1de0003a808b8a722794f1b4d4f0816b4392b6a5e4ea54371583e78bf968a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:5a7550a0055d59ccb3c4f9f1776480c59246751bc365995dd7e18001152fdb9a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.042322970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.468637e-01","shared_alloc_j":"4.895458e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5a7550a0055d59ccb3c4f9f1776480c59246751bc365995dd7e18001152fdb9a","served_from_record":false,"record_id":"r92","record_hash":"sha256:5425320317c148e50fd49b10f21d774508c9318918a524d77c244c49c4c8c85e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93335},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853703e+01"},"chain":{"prev_hash":"sha256:b4f6f7a7b3af1ef10088111371ba4b060ecc076a934c01228bd2b32c69cc6ca6","receipt_hash":"sha256:b7fe56bd5f8b213e87e7d3423b5513b7cc8355c7c7eb69af798ea871972020a6","signer":"ed25519:bench-node-01","signature":"54604550424117e37ae60bff88aa5ed9629cc8039d05debe8e6d9cc2e2af0e6a2e6e074a315bcd8394f3e3977433bc8429b542d32a60eb4746267eb1e07ed50d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9680dd3b2e46b023f1cca5d03c907d1591b4f51a980c4202b576271fad4f1961","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:8369c6ce22f5309b9167dbe73ed40554e89b1ea5b99ec31727e74624db510167","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.864239710588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.429814e-02","shared_alloc_j":"1.809938e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8369c6ce22f5309b9167dbe73ed40554e89b1ea5b99ec31727e74624db510167","served_from_record":false,"record_id":"r93","record_hash":"sha256:e8e9e5f6ed2d6b5f451405bb6a3e684250d79eb0cd120268cfead714d60e296d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93365},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810490e+01"},"chain":{"prev_hash":"sha256:b7fe56bd5f8b213e87e7d3423b5513b7cc8355c7c7eb69af798ea871972020a6","receipt_hash":"sha256:6945e8c888221f117f7a104c9498ccb6dce221d026bee1d2e590f2fdeacf636c","signer":"ed25519:bench-node-01","signature":"bf83556743467c83c08c7265203bb7e81bb354f0c8cde6c9522d6c49f7bcbac07d209e9d95201fca5b56a30fc352c2d2e65d6ac96886671412409fe1519de50d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:240ecce2e874862d9866349de763ebd05854d80674523ab772c8e6d73fbb29c2","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:e8d588c15f3a6ba2d18014a87cafd908d20d54409c84a8304cad13dcfeabcffc","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.764584570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.096480e-01","shared_alloc_j":"3.654933e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e8d588c15f3a6ba2d18014a87cafd908d20d54409c84a8304cad13dcfeabcffc","served_from_record":false,"record_id":"r94","record_hash":"sha256:01182ed57e39dc1234fe4b98ee374af539ed38996ae1fc493b068801f4458c83","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93426},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.841012e+01"},"chain":{"prev_hash":"sha256:6945e8c888221f117f7a104c9498ccb6dce221d026bee1d2e590f2fdeacf636c","receipt_hash":"sha256:b7ee01cdf39b1333810814b19c45641d8a308f78f7385f9263acdc8be613579f","signer":"ed25519:bench-node-01","signature":"b3e0c372496c62607c31811bff2e6f0badcae19b45db37d94e814a3e0db3b5f360ac99395980e0c8e85b46e62a0a3979055a79e262da9faa74b89393a33f0600"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6e508e93811d17d7883c5504bbc3ce7d17219af2f1ef58b710ab564ad2b7fbec","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:2a1252ad9738cc7eaaaed1b70f61b805d45ec8615340f3472862343d3faf5552","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.435364180588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.180661e-02","shared_alloc_j":"1.393554e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2a1252ad9738cc7eaaaed1b70f61b805d45ec8615340f3472862343d3faf5552","served_from_record":false,"record_id":"r95","record_hash":"sha256:b9a3125948a2d9513c0e4b5fc000f3182fa351375359f307f3c0a06d8a1cc3c8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93450},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.799136e+01"},"chain":{"prev_hash":"sha256:b7ee01cdf39b1333810814b19c45641d8a308f78f7385f9263acdc8be613579f","receipt_hash":"sha256:fbe0ed5489f50cbe94e1c8d639b08ce64358f7a898e776334e910efba56dfa4f","signer":"ed25519:bench-node-01","signature":"682207348d66ece9979d487ee7c9c8db26ff98663fdf7a6001b4a9d761814645e5cfefb5f910f265c4c310e2807df0123265a0f099da398b3062a58f9a246b05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:196a151f28e2cf184f1b17bea45c3d187dc866846c270456cd8ab6eda6ce64a6","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:0dc01ed37cced0f5820acbc15b5de7dc270ea65e7930a4cf889bdfa792199326","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.992760010588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.716774e-02","shared_alloc_j":"2.905591e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0dc01ed37cced0f5820acbc15b5de7dc270ea65e7930a4cf889bdfa792199326","served_from_record":true,"record_id":"r55","record_hash":"sha256:0bed3b60ade7437d367b332fdf54153cf19459ba204d432afdfdaf93acacebc7","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":90547},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.831047e+01"},"chain":{"prev_hash":"sha256:fbe0ed5489f50cbe94e1c8d639b08ce64358f7a898e776334e910efba56dfa4f","receipt_hash":"sha256:4830589896fd7e7d21095cf6bdc16982f124414096979563dc2ff7c365d015a0","signer":"ed25519:bench-node-01","signature":"9149db82a1dda545593899b20dd7af9498586c66dbc9fbe8a7d0f99619ce5a5db6824ed38df5638c672337158765e14da40e8b41811adb99cfcf98b55e4db207"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a3082014c3a012724922cb93878a64a0d581e643dbf18fec09f3c0513eb02032","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:2576d606f7686868001e756e697c1c0bd80ff210c28f9626a40a0206f8740c7c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.339872470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.555302e-01","shared_alloc_j":"5.184341e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2576d606f7686868001e756e697c1c0bd80ff210c28f9626a40a0206f8740c7c","served_from_record":false,"record_id":"r96","record_hash":"sha256:f00aabe082500c634f45bf066ce0068f4071b8e5e1dd87aa9215ff18846a0c09","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93584},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856193e+01"},"chain":{"prev_hash":"sha256:4830589896fd7e7d21095cf6bdc16982f124414096979563dc2ff7c365d015a0","receipt_hash":"sha256:3401a42c22505dfab8c0df0a2cecb62276ab4f291fcc7e577f8d9dc22118ec7a","signer":"ed25519:bench-node-01","signature":"13d4032f89eba65e7244d4f580c747229d98542a38e2cf9514e76992843b10385f9e990d6855ba96ef76203a355be1dd78953fc0a9849c3db0fea649e4a6a00f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:710f6b22696ded2ed420c8810022960cc62c1c63aaec328644468fc15f6244db","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:c6a5bde2c8cef5728623cc3d7d230d795042fe75b0bfcffd30613b27e1962cb8","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.557704370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.618748e-01","shared_alloc_j":"5.395826e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c6a5bde2c8cef5728623cc3d7d230d795042fe75b0bfcffd30613b27e1962cb8","served_from_record":false,"record_id":"r97","record_hash":"sha256:a60e24cabeff5c8fab82f98d83aab2a3dcd5519aa4324118de29747edbe02593","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93674},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857930e+01"},"chain":{"prev_hash":"sha256:3401a42c22505dfab8c0df0a2cecb62276ab4f291fcc7e577f8d9dc22118ec7a","receipt_hash":"sha256:7504e00f4d6e11f23c3b593123b047acd4b29e78a48cb27ae12d87ade8979c68","signer":"ed25519:bench-node-01","signature":"765235ebb12a7ef65d7ec976b9f7ace604440f04c1028a629682bf374dcf3cbb03c7df0eb9a97bf05af37a533fc9f4d6b062e0b9a9597247e9823caf44442f0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1686ca3ac6f755df5c184cae63eed4b9a5c00e503e2b641a2cd2c857ce46ea5e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.018734320588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.879805e-02","shared_alloc_j":"1.959935e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.813948e+01"},"chain":{"prev_hash":"sha256:7504e00f4d6e11f23c3b593123b047acd4b29e78a48cb27ae12d87ade8979c68","receipt_hash":"sha256:3362a8bba0bf5257ee07096b19c0e3c943d194e1e787180a97306d0d0f72d5ed","signer":"ed25519:bench-node-01","signature":"4d72096785bca3bd6a18c74a63b6218d9f84aa2769771f9a10d130b3ece76e64aa842591c05080e990366717f66c84fa9ea8f04b67fa10b9963d56fa424faf0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1581df5fbd39bf83cdb31240bc875c562ed5d40c86c6efcffc654b5492b2e55e","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:f4f9852d4bb1ab8da33c1e53245115c7b7c35eeb04727089cfabb53b3bde5bc9","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.580811970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.042954e-01","shared_alloc_j":"3.476513e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f4f9852d4bb1ab8da33c1e53245115c7b7c35eeb04727089cfabb53b3bde5bc9","served_from_record":false,"record_id":"r98","record_hash":"sha256:1232c9646d1f56ec6c40694a4c36eff1bf0a8e1db0ef50e45b5ad0f73d8913bb","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93765},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.838838e+01"},"chain":{"prev_hash":"sha256:3362a8bba0bf5257ee07096b19c0e3c943d194e1e787180a97306d0d0f72d5ed","receipt_hash":"sha256:863ff8601f5e8f6e881d7a921b96393628520d173ae2476bae9917ac9df8cc20","signer":"ed25519:bench-node-01","signature":"d9dc79a5f253f3e61eadfcf8d051dc125eb9c813576f530caca34fde23f1f992023795db9dd6a4cdbd6a2304cf3e203c1634b0bf51e0358b6caa6a37835cfc04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d8cd3ffe54598d1f7f1ef594003a62e8caee4061ae4869b72db54caa67045a72","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:aef4bb6b5fe9ccb4e86032a47f27b234eace63aa374802947a1767a90c0a8464","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.288974620588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.579535e-02","shared_alloc_j":"3.193178e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:aef4bb6b5fe9ccb4e86032a47f27b234eace63aa374802947a1767a90c0a8464","served_from_record":false,"record_id":"r99","record_hash":"sha256:34c9f3f3e1e23a57db0a1c6a6a7ac46879665e16a919134e270f9bc17f8e0537","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93818},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.835146e+01"},"chain":{"prev_hash":"sha256:863ff8601f5e8f6e881d7a921b96393628520d173ae2476bae9917ac9df8cc20","receipt_hash":"sha256:2b86cf2499267204086d023f78dd53b11122a99f4951f553cb53b14bcdb52556","signer":"ed25519:bench-node-01","signature":"fe5085fef96f931f5f0b930cf01f4223ad422d7e4947bcaa21ed7ad40f0431dd8a8d3f8b2a299b01213e822eeb8757fe5a9c900f859c30d3c64f4ea751e4f602"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3e9d7789058f12a4673def5fbdf9cc75aff83829b228113f710af793bdef1288","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.014017370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.169131e-01","shared_alloc_j":"3.897103e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":true,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843798e+01"},"chain":{"prev_hash":"sha256:2b86cf2499267204086d023f78dd53b11122a99f4951f553cb53b14bcdb52556","receipt_hash":"sha256:4324559b4f045330b18e1e488b1b78a7a4bc80ffb8c8b9de2d5ac9594ff685c1","signer":"ed25519:bench-node-01","signature":"ba03c00ff8228a81e1b91e18c1e2af16889228a0dc364594e41b513b45c109710681bac2a142904e042ee9787a306ccc0387403c875a16f27a1a07db326eb706"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:125f99c4090f550ea8a068ae2a91fdce9bccc2a5152ff24b359c041568e0b588","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:5c82a1e4bc712b34adb3610a3c1262f5e1d97d2d2ca195911dae28d81ed6322d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.170713100588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.235083e-02","shared_alloc_j":"3.078361e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5c82a1e4bc712b34adb3610a3c1262f5e1d97d2d2ca195911dae28d81ed6322d","served_from_record":false,"record_id":"r100","record_hash":"sha256:8359486ce6d26a37515b19330316a6d640dfcc0fc6ba21a93cd33cc763f289fd","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93934},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833556e+01"},"chain":{"prev_hash":"sha256:4324559b4f045330b18e1e488b1b78a7a4bc80ffb8c8b9de2d5ac9594ff685c1","receipt_hash":"sha256:d100b7350e543cadf766021d8466b3fa905a4e687432d0e6eff7bd5218761a2f","signer":"ed25519:bench-node-01","signature":"9a78f79b5f35a230d2e442f27152f13408dcf64b226f685f6397d8f3c92fed4e75968abe1a7937ccf0d55580acd17feff2f1afeab720319c99456daef6d16e0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b6458e814b055b184a04d6107b0f15c5bb6a15df0412640704e28ff1e346338e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.347213680588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.836541e-02","shared_alloc_j":"2.278847e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","served_from_record":false,"record_id":"r101","record_hash":"sha256:423f6097e57e4c77557b0caed44714a3b731fb972ea1da097ee6162150ae2cb3","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":93972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820495e+01"},"chain":{"prev_hash":"sha256:d100b7350e543cadf766021d8466b3fa905a4e687432d0e6eff7bd5218761a2f","receipt_hash":"sha256:cef614e8e7ff796b2f5b70a18cff749f2f4b1c286eb704e0c8e22807e41e7041","signer":"ed25519:bench-node-01","signature":"915b0f37997b67da7a699afb22004d1b6d45c85b6f81c9dac3f51a22f8794fc7d46ce68543e7e3b59a84ebeb03ba97223c15e10a7b7d66dcf17db224250f420c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ba852335318ed09bc3ddb6fa6544c69d3eec5ab9eb79fdd7d6057c93588308a0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.063028270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.765930e-01","shared_alloc_j":"5.886434e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":11,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861709e+01"},"chain":{"prev_hash":"sha256:cef614e8e7ff796b2f5b70a18cff749f2f4b1c286eb704e0c8e22807e41e7041","receipt_hash":"sha256:dc1eb00a32aa340f32347992435227222ad6c859cee9ad3bb6bdb34c0ce43298","signer":"ed25519:bench-node-01","signature":"b7897f0b43ce8e18023085f62ddcdf768c18b5729ca7a58c0020dd0b741ba4cf0940505546a73c6ba4593c27866a6e5fd78cc5c6237b4e4b1f4e2847a7efb006"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:02335156dd5e9804bb5680a5e0dd1e8a9f77bc9ad85078f8bd9324f9727c723f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:84dd48defb81097cfb6618f709c9a08f3583cb3227ad2e905c32c5666eecb9b5","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.731265070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.378038e-01","shared_alloc_j":"4.593460e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:84dd48defb81097cfb6618f709c9a08f3583cb3227ad2e905c32c5666eecb9b5","served_from_record":false,"record_id":"r102","record_hash":"sha256:591b07b7a6fc7ce0d358910e7e12565dd727646abc7f9044524cc47ed119d025","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94147},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850938e+01"},"chain":{"prev_hash":"sha256:dc1eb00a32aa340f32347992435227222ad6c859cee9ad3bb6bdb34c0ce43298","receipt_hash":"sha256:80cd92c52ee83c6e7900578520dc4c1ecc70d93ea9ece8f5872c6a49b9c94bfb","signer":"ed25519:bench-node-01","signature":"b2c42606c34275059123ae11bb3ace1583672f482e7663a02f8d012b3b77d017b80484b9bee3588a721b8f301c19cd473463e4b0a40fa6b70dca0f62b33a5c01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fccf659b5c50f8f7964637cb731de9f428c716eb67000e0b7bcaf86738483762","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.985000170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.160679e-01","shared_alloc_j":"3.868931e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","served_from_record":true,"record_id":"r82","record_hash":"sha256:796c66db2245954b7f1adefe6ab2b746c6c40d34fdc7990c935f119ab41d0a56","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":92646},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843483e+01"},"chain":{"prev_hash":"sha256:80cd92c52ee83c6e7900578520dc4c1ecc70d93ea9ece8f5872c6a49b9c94bfb","receipt_hash":"sha256:c8ea549374202da4fce95086f250446e0adc7f69800656f5de07a60929758610","signer":"ed25519:bench-node-01","signature":"eb31ee1d376986004880e15dd2627894633f357de9e61cd3de9210dd071b571bedfb96f4797c8faf8252bec1128c0990fe2b56e4755fe838eab1e68bba815106"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c940186f4af9d0bf9515063218ddcce16d281a7c7a004c5202fbed0b7dcecf4d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:e22d08cd71e4fe85157a117945884be41615af88796c53f606b47fa038bac18e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.239081870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.525946e-01","shared_alloc_j":"5.086486e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e22d08cd71e4fe85157a117945884be41615af88796c53f606b47fa038bac18e","served_from_record":false,"record_id":"r103","record_hash":"sha256:aef96891cde1778fd48eb935528ed4cc34cca76b6c77efba9276f1cf503d5bb9","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94296},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855366e+01"},"chain":{"prev_hash":"sha256:c8ea549374202da4fce95086f250446e0adc7f69800656f5de07a60929758610","receipt_hash":"sha256:40aa0ea97dcf94e0b083a3877e6c6ca4fa26f337702a2423911bc435b7b1602c","signer":"ed25519:bench-node-01","signature":"271cc320e606fa420ec9241a1665a823ddc78a8d6f2201ffcd339d4a85f9e3927d5570da3593ce60c4edfd4d990d7f99609ccfc3e744e84ebb902fd5c1423209"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:957532c3730566043646136433bc7b3146f7e461215a03874caabc7846ef1a5c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:d72b56294d3317cd83e6e9ac76160ce7967610be483d2d4fec03730eae111c3f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.623812570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.638003e-01","shared_alloc_j":"5.460011e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d72b56294d3317cd83e6e9ac76160ce7967610be483d2d4fec03730eae111c3f","served_from_record":false,"record_id":"r104","record_hash":"sha256:294704c43530a35c5198aa215dc9b2be748cd6edafae3871155ee7b466c762d6","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94387},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858443e+01"},"chain":{"prev_hash":"sha256:40aa0ea97dcf94e0b083a3877e6c6ca4fa26f337702a2423911bc435b7b1602c","receipt_hash":"sha256:96e424cba61f2342d83ba7608192aa1b16514dae5ca72d884764c335c838ef4d","signer":"ed25519:bench-node-01","signature":"361bb929ff5018d4aa3c3d02bd5d45d3be189dab329e21807832aa8e42a67cad06550d81e1b625af13fcb8f51e5d0fa536a167a5aed5b2e4aee387a8c5fbf805"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3969b1a1fcf67424911f3c5988302030b0e23c2a6b62676e4e38107560bb6863","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.686308230588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.824196e-02","shared_alloc_j":"2.608065e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826356e+01"},"chain":{"prev_hash":"sha256:96e424cba61f2342d83ba7608192aa1b16514dae5ca72d884764c335c838ef4d","receipt_hash":"sha256:e09e2228b290eb645e60366cdc6b909f7631ec30fe6f130bd01b2306fd8d8a51","signer":"ed25519:bench-node-01","signature":"841691c98613eab6c8560bce1375954365ac95d0263a945335d2b7c8d52d16c4d58e446e32d9786b4fb8b1f33c3bf66ee336b421af2f2eaba81911b58872f20a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:579e450f96c79bd2ec73bdacb48ab8aea227b4245c5ceff755e58137cee96d86","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5169b6649ebf570c3dba87c73d16a22ab32c9b6bfadf7e3a2fd90d625b3ea944","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.975768110588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.754654e-02","shared_alloc_j":"1.918218e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5169b6649ebf570c3dba87c73d16a22ab32c9b6bfadf7e3a2fd90d625b3ea944","served_from_record":false,"record_id":"r105","record_hash":"sha256:a1240b56cbe7689f7a82efdf882a2748cef483c64cc181a4eafb1e21b91629f3","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94463},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.813014e+01"},"chain":{"prev_hash":"sha256:e09e2228b290eb645e60366cdc6b909f7631ec30fe6f130bd01b2306fd8d8a51","receipt_hash":"sha256:5b2edb203bc0ac3960e434f63f18196bede459cd3fb5c0cc4e9c799828820dc5","signer":"ed25519:bench-node-01","signature":"88cb9d8a1b81c12b5fce7743f68b48bb07887b65ed0b7dcd9d7d46d2ef66fb89787556d4204f6a8ec95bb3597e6568d1c70cf7ee9afbec9441cdd73e06d11d08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bffe3dde8e2de21223e565c0c18c7bc695d695a2465ceb9def96bd387df0cba1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:b01775f414fc8750ffb46d8e96e6535418e94e18e8042f473efeffc9b9317a0f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.214223160588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.449189e-02","shared_alloc_j":"2.149730e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b01775f414fc8750ffb46d8e96e6535418e94e18e8042f473efeffc9b9317a0f","served_from_record":false,"record_id":"r106","record_hash":"sha256:75e7961711cc95ab64084e8912e2fba65461ae4e408cb06df20ce54312bf169f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94499},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.817962e+01"},"chain":{"prev_hash":"sha256:5b2edb203bc0ac3960e434f63f18196bede459cd3fb5c0cc4e9c799828820dc5","receipt_hash":"sha256:5e4ed4a8bf186d0ba391c66f9108f8be45308ea5afeac4c203c8ddfe6317920b","signer":"ed25519:bench-node-01","signature":"0837774e40e240508c1737086e57dea1c3ac4e95ea53e0d283fc0e2e196a1ba725dec6d5256c06e63735d3ce1383187f5b41959841132edda5bde59f06cb6a08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1deb08cb793f5a620d658cf3379b2eec459e8e959b11aa90cd94c698045e74bb","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.433390070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.291278e-01","shared_alloc_j":"4.304261e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":12,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.848114e+01"},"chain":{"prev_hash":"sha256:5e4ed4a8bf186d0ba391c66f9108f8be45308ea5afeac4c203c8ddfe6317920b","receipt_hash":"sha256:814b16d3f7d0a55068dd221fb2a090fe561ad658ba723327352888fdec802ead","signer":"ed25519:bench-node-01","signature":"5e97b0bfd6bed319867e425ce37bd3ecdf7ee67d4bf8dd8d5a46cdf29b5926d7022b9fbffcce3141812840cfe5320761218fb9651ed1f450ae46e90eaf263d02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ab04d82749a0b9695cf3f87f099a7c5bb4f02eb515b9963adc46aadd97a192e4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ee758a6881e98d0ade331c7e8dfde55cc7269a431806803d356bcc6eb9d5ab8c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.477326150588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.302888e-02","shared_alloc_j":"1.434296e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ee758a6881e98d0ade331c7e8dfde55cc7269a431806803d356bcc6eb9d5ab8c","served_from_record":false,"record_id":"r107","record_hash":"sha256:77571ea5c92a30d88122fbb2a87c2cf33b1c2b8e801ba35a330138d80bbee952","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94594},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.800388e+01"},"chain":{"prev_hash":"sha256:814b16d3f7d0a55068dd221fb2a090fe561ad658ba723327352888fdec802ead","receipt_hash":"sha256:1488ffb45bc2f8bbc1c5918c75cb1e4baba7775ae59fad3472ef6bc4e71c3884","signer":"ed25519:bench-node-01","signature":"06c67071a4f4fbfc4c6caf93544be6242bc1bb2c91c3023d9346acca287608b60764a951f4d32d1c7de902470c0d50a5538a39b2caa59b4948220c8906c9630f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:aa5194df008e62ffe0da6b82de9139c99c11e150de8bf933dbe29165a90009b1","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:89d945088318077d9adfa27011c408370594902bdc04f815e39284b8a7e08d5e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.467522670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.592481e-01","shared_alloc_j":"5.308271e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:89d945088318077d9adfa27011c408370594902bdc04f815e39284b8a7e08d5e","served_from_record":false,"record_id":"r108","record_hash":"sha256:a9cfe644d0d2a4924809b9af0c0380774cb575f7c619ddc01d32c4551c7047fa","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94683},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857219e+01"},"chain":{"prev_hash":"sha256:1488ffb45bc2f8bbc1c5918c75cb1e4baba7775ae59fad3472ef6bc4e71c3884","receipt_hash":"sha256:5b082ab883db818647b62f1fd3853a6d7778feae2babd05cc54a24c0999f1ed9","signer":"ed25519:bench-node-01","signature":"cbeb0adefc57f8f3b194f4ad04334a791947bd5ad0dba6928a367e97fb50431f9eade5914acfb8cfa95dcae52fde08aac2bc3f702ca2706d84a876fc5131bc03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:99eafe6e286069d031777d5324f955dbe40de358ca1190aba8891920974daad4","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:aecc00f40acfd5e31b4c34fab60b8afce96daadbfa7765a3a8bde8aaa6bc8981","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"6.145881770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.790062e-01","shared_alloc_j":"5.966872e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:aecc00f40acfd5e31b4c34fab60b8afce96daadbfa7765a3a8bde8aaa6bc8981","served_from_record":false,"record_id":"r109","record_hash":"sha256:b8f1a5ec110373dd7284ed864c4a7369da6faed9b4e69e92383014b23de4455c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94782},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.862298e+01"},"chain":{"prev_hash":"sha256:5b082ab883db818647b62f1fd3853a6d7778feae2babd05cc54a24c0999f1ed9","receipt_hash":"sha256:e1ca0c6bcff9399b6c2de5db7b906274a00dbe8d45e9b28c09a9957bcbb93f2c","signer":"ed25519:bench-node-01","signature":"ec0135d715f17ce216043b1b0aa37c0c600f4d9b7a6fa473cfde145a96fb0acfb516eba045a72bc8112d1867f22091025621778e9c877590bd33816c3ec6570d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:222266fd3ade0f48893ca1f9fa5629a6e08fe95254c5ba349d2f8a95d6d65025","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.286307710588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.659144e-02","shared_alloc_j":"2.219715e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","served_from_record":false,"record_id":"r110","record_hash":"sha256:f6dd6a74403115e1c6321158ee0e6cc71d2baddb71cdaf06b97875ebcdd7c920","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94819},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.819353e+01"},"chain":{"prev_hash":"sha256:e1ca0c6bcff9399b6c2de5db7b906274a00dbe8d45e9b28c09a9957bcbb93f2c","receipt_hash":"sha256:5ee9534b5f56430f573956c1e67921c08ef7fda1671f700a27db472a7a56d37e","signer":"ed25519:bench-node-01","signature":"01e7e23aba36f9aca34dc4232cad64e7b714b05c0a67ce8af4ce1b811d413f70905c59ad36951c9e7e551617e305c8d23a5187a79650d3db185880dfda28820e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:199291608ddeeaab920561cfb608f5202338aeedd35f0f6b2e88f5e66e3a544d","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4989e6fd9d5b4a543eca9f0afbdce0f6043a8a567826de22f9d1d6cdf9c96ba3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.810268960588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.185239e-02","shared_alloc_j":"2.728413e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4989e6fd9d5b4a543eca9f0afbdce0f6043a8a567826de22f9d1d6cdf9c96ba3","served_from_record":false,"record_id":"r111","record_hash":"sha256:d8bfa89db54a7cb2b693911af839302ff4d4df5f5af9fe8701008caf6fab5fbb","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94865},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828315e+01"},"chain":{"prev_hash":"sha256:5ee9534b5f56430f573956c1e67921c08ef7fda1671f700a27db472a7a56d37e","receipt_hash":"sha256:4a81584d5e952c201496d725994efa3631996cc1cc87c7f138d4ec0da0e34dd5","signer":"ed25519:bench-node-01","signature":"42640865be0892df0a79b57d62a1396fe37639ab6be8d60b68f4f337dac827cb3c27489fa2962f107cbbfd44d1b63b77eba2ce5f193b9c223081522bd942bb0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e808f5aab6910a07a11f804a6b5ac017e100008cb9b40700db86866ac55e0f85","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:6b4490d57878c284cca57315f4304f2b4835d387d5d5db8a92ab2484c9fa0431","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.124572870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.492593e-01","shared_alloc_j":"4.975310e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6b4490d57878c284cca57315f4304f2b4835d387d5d5db8a92ab2484c9fa0431","served_from_record":false,"record_id":"r112","record_hash":"sha256:cd4491456bb360c3a6922f8481ca63bb66a8a69256e11f24857c42c8ad8a6c9e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94948},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.854406e+01"},"chain":{"prev_hash":"sha256:4a81584d5e952c201496d725994efa3631996cc1cc87c7f138d4ec0da0e34dd5","receipt_hash":"sha256:98df377bc5111004f66bbc9b5e6a8faa25286792b9cee4c7ecdf54b727a9d86f","signer":"ed25519:bench-node-01","signature":"dad688f59297bdfcfa0f98c09f4cd36dd58310c665130780988c565cda096ee6867e6129aab83bfa4768faf95cb4ba80787886fd6b8bc2704a0a84f56cbce205"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f0a55679aac421d558f755e0e1e1e874e4895d7f4fdf948b96f37ddafe10f344","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.068597080588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.937651e-02","shared_alloc_j":"2.979217e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":false,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.832134e+01"},"chain":{"prev_hash":"sha256:98df377bc5111004f66bbc9b5e6a8faa25286792b9cee4c7ecdf54b727a9d86f","receipt_hash":"sha256:434de6f98053db791c0e2d333bbf1660e17b542adeec50335a705fbcc912455f","signer":"ed25519:bench-node-01","signature":"7a2564eb9a765f89fbd6cc50768eb3eaa1d573f67732188a8b411e9b9a26a44ed4327b4c761c0175162ed5c9a4276b84219c5386c076d925acbaf3e9d3d3b40e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:77a1ee96e76f00cbd2e60862a023c377e3610ad0f3be84706709d55a11bcb7fc","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.587734770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.627495e-01","shared_alloc_j":"5.424984e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","served_from_record":false,"record_id":"r114","record_hash":"sha256:11b74bcd9d0099b86cba50d647a39fde7bbd69fff8ab977726c7de08af14d90d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95088},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858164e+01"},"chain":{"prev_hash":"sha256:434de6f98053db791c0e2d333bbf1660e17b542adeec50335a705fbcc912455f","receipt_hash":"sha256:08f25b5dfce71b17da3c7b6c6117128c1b2841771ec5a678802b68efb47097d9","signer":"ed25519:bench-node-01","signature":"8cc5924e3b356ff55894ca20a050835c5b074d6595e5f476fc21505e9de834792e3792fefe16434fe130fa922fd7fe96a9252b49577a8788da20e6b85ad7c40b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ce1c185e383a92dde10a947ca7dfa6456c5d20134ea31fcb5a25016a25b46475","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:cdac90b356105bbfc2ec1d2b6f50d290b09c8a4ff2cd746ce6c64fa30a02d707","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.704321470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.661452e-01","shared_alloc_j":"5.538175e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cdac90b356105bbfc2ec1d2b6f50d290b09c8a4ff2cd746ce6c64fa30a02d707","served_from_record":false,"record_id":"r115","record_hash":"sha256:c62537567e03c8a763bc87285d422000262f517b16685c29b27681c136f63680","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95180},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859060e+01"},"chain":{"prev_hash":"sha256:08f25b5dfce71b17da3c7b6c6117128c1b2841771ec5a678802b68efb47097d9","receipt_hash":"sha256:8ed1de7cbb48fcb6182f7d59ef53bb0b7502a2673fe6227c1152982e930a32d2","signer":"ed25519:bench-node-01","signature":"51c96c0ad3f0596d7a2badb41620d72b7be22c61f826ef6738022a1bf36834c05410b6442550a2603fb115db566c7832a03067a9fda8dfda715c127cdae5ab03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5272c86e5ff98debc625d5f08c706c61e3899ce079e51ab39c64d04db5020dcf","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9840140a39c47ebfcdda27e664a72009daffa1d975d005450a100350849daa10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.877794270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.469300e-02","shared_alloc_j":"1.823100e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9840140a39c47ebfcdda27e664a72009daffa1d975d005450a100350849daa10","served_from_record":false,"record_id":"r116","record_hash":"sha256:cae152c7d4ea4f178ff00a0ff86fd15535bff763a0dee1b34393c0e8844e4431","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95210},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810805e+01"},"chain":{"prev_hash":"sha256:8ed1de7cbb48fcb6182f7d59ef53bb0b7502a2673fe6227c1152982e930a32d2","receipt_hash":"sha256:0682ac2c8de7ce4f73e7d3915c880859327897c94a38de3aeb719aefb7c406f1","signer":"ed25519:bench-node-01","signature":"51b28d8fff9058946cfe82dcc313dd17314d005f37d310aae665d9b7a39f926325f1469bff64782b4095ec8347aaf5055538280e2ded1899dab7b22a73e35c08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:547e71a19f23780d116d2303fcc1460d0f759dbf93abc970a26740d9ed81bfc9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.177974380588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.343611e-02","shared_alloc_j":"2.114537e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","served_from_record":true,"record_id":"r110","record_hash":"sha256:f6dd6a74403115e1c6321158ee0e6cc71d2baddb71cdaf06b97875ebcdd7c920","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":94819},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.817245e+01"},"chain":{"prev_hash":"sha256:0682ac2c8de7ce4f73e7d3915c880859327897c94a38de3aeb719aefb7c406f1","receipt_hash":"sha256:6ba57f89c35235691741b394fe487c148f1859cdcd1b18068765259001858f36","signer":"ed25519:bench-node-01","signature":"2c0a8107dca223459bd50c68af2f53d44dd3075e7e675ad855471a08e01dc4ed166ed73a6e6f74fc0d2c81e3bcc1aefe67620f68fcd0c9dea4bc31829c89650c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8de71b7f0dbe7e70b8661988f7d32963fbda22e2cf4930aa674bbabc8eb7ea32","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4bacccbd030089bf80d971373b0c6e1988aa64c65713385608eff33f6b6c3fa1","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"6.161324470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.794559e-01","shared_alloc_j":"5.981865e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4bacccbd030089bf80d971373b0c6e1988aa64c65713385608eff33f6b6c3fa1","served_from_record":false,"record_id":"r117","record_hash":"sha256:a2a58e4fc14af72c8ba522771efd92b053cef9f2c23c65d6ace3e833c366ba0f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95345},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.862407e+01"},"chain":{"prev_hash":"sha256:6ba57f89c35235691741b394fe487c148f1859cdcd1b18068765259001858f36","receipt_hash":"sha256:5ef4129124377aaf5b89431394fb057e8e10a1cd675f8338281a17c4cc0d75e2","signer":"ed25519:bench-node-01","signature":"88183bdb2d1ce45150ac8ea9c00c4816a844b13ff843a2e2efe19e373ee09e3e687b5ac0e6f012eba4d759eef5d344fe6294b08fcfb3e002be06e130ebc0430e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:31aefc7d7a98279f0be380ced82cb901cffaeebf77219314efe8bccba78e9e56","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:6b9150cfbd8233226dad54e0c15876c5b819e8d9aff9a0c429350e52edb80cd5","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.743164250588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.077168e-02","shared_alloc_j":"1.692389e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6b9150cfbd8233226dad54e0c15876c5b819e8d9aff9a0c429350e52edb80cd5","served_from_record":false,"record_id":"r118","record_hash":"sha256:2c020a77fe4fc20b037e754251c6e89ad9270b5fc37be61f416f735022799a4c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95373},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.807574e+01"},"chain":{"prev_hash":"sha256:5ef4129124377aaf5b89431394fb057e8e10a1cd675f8338281a17c4cc0d75e2","receipt_hash":"sha256:c97540497b483031aa2e36833ac839547334c5d96847d405b0666e29e38b7b89","signer":"ed25519:bench-node-01","signature":"01c00370063d2a36235a1e8a8b12b8a8fca24b84a332a02d50336b3edcc82de63af17098356d6f4f063679faf2a534dab1b0b1747cf6ffad6be17e1bd3e17b09"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5cbda9e40c1ab6e5993960aa9534b4f3c179afbff8e27c05aca1be0ee13dae2a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c5acc45aa021fd76b694dadbc084a3aa9a1107f5957329ada1989fd9a13fd849","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.870503920588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.448065e-02","shared_alloc_j":"1.816022e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c5acc45aa021fd76b694dadbc084a3aa9a1107f5957329ada1989fd9a13fd849","served_from_record":false,"record_id":"r119","record_hash":"sha256:6b7084145defec11a27bbed72264c0f691eb1c3a8766ba9ffc91fdae40296056","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95404},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810636e+01"},"chain":{"prev_hash":"sha256:c97540497b483031aa2e36833ac839547334c5d96847d405b0666e29e38b7b89","receipt_hash":"sha256:da1f2d6181925b620475f4afc28a26f52723b142edefaba7d2426a811cc9bb06","signer":"ed25519:bench-node-01","signature":"2246f01b79550c00dac4c20be5a07485332b0484a5301ee02b0e19f91e868b075442b16fe0da83d4a8b7bf654ec3f24a21d5b393a2c9328536b676ac26e1aa0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e4753732f602ed4d12313ead94fe84d58701eafee518102a9f5f752f3df6cd7f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.433089370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.291191e-01","shared_alloc_j":"4.303969e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","served_from_record":true,"record_id":"r36","record_hash":"sha256:55a2b8e716a8eb9fda50c9c4ad876cf5d024f9ae99c0be4799b8f2121d94a546","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":88830},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.848111e+01"},"chain":{"prev_hash":"sha256:da1f2d6181925b620475f4afc28a26f52723b142edefaba7d2426a811cc9bb06","receipt_hash":"sha256:44433bca38adfc705d1187961ebeddb3e00f8b0e230f31da840b6a0adabd68ad","signer":"ed25519:bench-node-01","signature":"e5937709291e6350ffdc934007330b3410a899ea44e8a3e22a292a6e2383f7ba1397c47984c1c32aaad194ed97b7d779c99e105b2edd2fe459202710d482ca05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ee32141ad11491b2f65bf37737ff685edd04ceb867ef27b54b0b2fe019c980ce","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5f91097cca77d5e974cab038a9e8b2caca452bee5ee33d9a3521ac39eff904a5","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.506501150588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.387858e-02","shared_alloc_j":"1.462619e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5f91097cca77d5e974cab038a9e8b2caca452bee5ee33d9a3521ac39eff904a5","served_from_record":false,"record_id":"r120","record_hash":"sha256:26334d4bf554a3017e915c24887f5ae1279d450f9c1db25a77d7ac4bafb3ab64","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95500},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.801237e+01"},"chain":{"prev_hash":"sha256:44433bca38adfc705d1187961ebeddb3e00f8b0e230f31da840b6a0adabd68ad","receipt_hash":"sha256:313e7c67a90ec5b8e695bd9c40c49b06472d2de6d9380aa9c78401e934181e81","signer":"ed25519:bench-node-01","signature":"43591597bdfffd76077898ba69c32c34b97a76d232faca4cf85d991c9c9f6c42905f27b48899fb13dda807692d266ee59288f99834be4c93437d0e7e7d7e6203"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4904c59f598d8e6fe333f8999173ef7c4328ae828234585a094dc83e63c054e9","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.374695580588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.829201e-02","shared_alloc_j":"3.276400e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","served_from_record":true,"record_id":"r90","record_hash":"sha256:fbfb7b2e0c35a608c84403c695970a425790cfac9e71c7f2b3ab9eecb37cfc58","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":93177},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.836263e+01"},"chain":{"prev_hash":"sha256:313e7c67a90ec5b8e695bd9c40c49b06472d2de6d9380aa9c78401e934181e81","receipt_hash":"sha256:6d098310efff72d54d2f99d7b04becec007c923c33c724e87423f483c4a5feba","signer":"ed25519:bench-node-01","signature":"9b164e49906c399d7db6f7c955d122ff3a076a26109fc8db7bed5cc3ff170c6f5d5cfeb6759b18d45c60b67440a7e31576dd5c9f062b5ff7f898d21d109ff600"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8f4f0d9ee4fab8f8764b4db3839d9f14f91104690017663601f0bf7afc1f6444","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.993129970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.163047e-01","shared_alloc_j":"3.876824e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","served_from_record":false,"record_id":"r121","record_hash":"sha256:68c00c9152f36db8ef49fff21c928ac679e7a92a748171b7d820e16b09fa9a05","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95619},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843571e+01"},"chain":{"prev_hash":"sha256:6d098310efff72d54d2f99d7b04becec007c923c33c724e87423f483c4a5feba","receipt_hash":"sha256:26b734bb553bb7e18f26eedc1366fecf750f328137ec9712b83b375a9824eeb4","signer":"ed25519:bench-node-01","signature":"795894f1307b3d09038f6c9c3851964719821a3cce0e9532e89321c4a277a2804dfebfeacb72398764f6325bf3e2fad9159f99534ebd5879e39f931210b04c0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c8010af3bbfa9e0246de23e5ba6edba73cd0be4a1df0e4a35b1829a9a846b425","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.542265580588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.492031e-02","shared_alloc_j":"1.497344e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":13,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.802256e+01"},"chain":{"prev_hash":"sha256:26b734bb553bb7e18f26eedc1366fecf750f328137ec9712b83b375a9824eeb4","receipt_hash":"sha256:da68363d04619d308492a0bff935128896bfe31ca78c9321c4c3153fb2824353","signer":"ed25519:bench-node-01","signature":"2f51be15c20f0b3be697545ea43d6d197ba8b2f53a87f30feaf963c252c4bdb2a2e558f75bb76983299608ca1467afa53487c760a127baadbe2ec5e8a53d1203"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:72033d4762e5cc5c1d87cb12b0d90a0c97bde0dad64b6a31bd6fbf54fd173fae","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:302c7be4003ea0a217fb6534c49ada5bd8b011724c713672aaf7c5e4bdb42d69","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.060985770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.765335e-01","shared_alloc_j":"5.884451e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:302c7be4003ea0a217fb6534c49ada5bd8b011724c713672aaf7c5e4bdb42d69","served_from_record":false,"record_id":"r122","record_hash":"sha256:9ac3a5bfa31bc2d23bd91ee39dce78613d4d0c9378a264c1c2db444a00d60f04","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95742},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861694e+01"},"chain":{"prev_hash":"sha256:da68363d04619d308492a0bff935128896bfe31ca78c9321c4c3153fb2824353","receipt_hash":"sha256:4c99348e7d9037e0b56c7ac4b6d11817af0625cbf6bc8c9c2b832f3b548edd26","signer":"ed25519:bench-node-01","signature":"4458d64d5554367c1b878db9cce98b6164c4617d7f9802a9d287c36792a11830fdd9dd3c749c3584f2a6aae84f27314f9930f3586e53eb6cc790527a7d875803"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2372a26170e3a89285a04809e3d030f2225d95a648642655ac33ca015657b1b1","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:e0b57d9c257ac8c9907ed3e56a0c407357f932bf26e1660d0d88a96cc06b6aa5","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.066074070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.475555e-01","shared_alloc_j":"4.918515e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e0b57d9c257ac8c9907ed3e56a0c407357f932bf26e1660d0d88a96cc06b6aa5","served_from_record":false,"record_id":"r123","record_hash":"sha256:a3ac743663700a41fae36cf62c8a17ebc0f28a4b8d5ec23c4f7061f777ba7db6","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95824},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853907e+01"},"chain":{"prev_hash":"sha256:4c99348e7d9037e0b56c7ac4b6d11817af0625cbf6bc8c9c2b832f3b548edd26","receipt_hash":"sha256:5f4d532398707a09ee6a43c23db09f7c3b7243afe6df3506ce526b585542c5a5","signer":"ed25519:bench-node-01","signature":"90a231c739774a2e3349bb1c9edceddb55ed334946c8736a60dee0c9f7d235aa445451189ad1c06ab978f3b2695579380760a73986c7f103f59abbc3d65ac804"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:695311b2d17819139212fe33a9ecd9b2dc2bfaa4aff23d2ab773a580d13dad9d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:88c439bb9d426fb9727a854109492c31b2cbe45e6061fb213c1131f86d0a5280","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.868486150588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.442188e-02","shared_alloc_j":"1.814063e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:88c439bb9d426fb9727a854109492c31b2cbe45e6061fb213c1131f86d0a5280","served_from_record":false,"record_id":"r124","record_hash":"sha256:8810d4c5f141497c4aba7d3a9b00ca77492003fe0e235e6d347a73b851966316","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":95854},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810589e+01"},"chain":{"prev_hash":"sha256:5f4d532398707a09ee6a43c23db09f7c3b7243afe6df3506ce526b585542c5a5","receipt_hash":"sha256:a77ce103d9d24b8a818c56f6b2849cee7e6ca6a04982c84c48462c005f175ce2","signer":"ed25519:bench-node-01","signature":"837d43d1f44ef31c350476d7473553b3b529d356d65d7d100045d367d197bf5da46ddf38a555fc7cc862bf5b55da73c6ab64cea12978ee678793d35bda8b8b0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c28237e06d04ebd40d8bcb63479938d9b1ba240524fda8c1b00c90287ceacaba","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.637015970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.350587e-01","shared_alloc_j":"4.501956e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850064e+01"},"chain":{"prev_hash":"sha256:a77ce103d9d24b8a818c56f6b2849cee7e6ca6a04982c84c48462c005f175ce2","receipt_hash":"sha256:4b8119c337e852af6cca50ee7a5cb5a229868beed5b74232519119208e6548ae","signer":"ed25519:bench-node-01","signature":"1cd0ac958aa67dc3d96bcd6af61af5a9f7014be5aaad1027239e99d32230ae205b0cd1a3cc53cd6ab272d62cee177966f2503292ad1b807afdd48c968e278f08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1d5fd52adba96d3010d17a864cc4960638460fbb349205e01e9424059f24692b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:0267ad62d64134b8622d4fb07cdbe888137deaca0fdee61e6b66d8bcb9076eaa","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.260250170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.240849e-01","shared_alloc_j":"4.136164e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0267ad62d64134b8622d4fb07cdbe888137deaca0fdee61e6b66d8bcb9076eaa","served_from_record":true,"record_id":"r44","record_hash":"sha256:2dc81090fa0017c427246a792fbc24bb499645f650fefb1ca4f4c43edfcfc62c","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":89635},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846383e+01"},"chain":{"prev_hash":"sha256:4b8119c337e852af6cca50ee7a5cb5a229868beed5b74232519119208e6548ae","receipt_hash":"sha256:3f2472594c20c74962c1499c0d4ceb0e60b082d8f6f06220c5b6574d227732c2","signer":"ed25519:bench-node-01","signature":"39b95e83956cf27c8683642e077168176006286eeb6158cf47e997431dc528e00a87963e1568cf583b3f9f1227256d6c50f79b6c59370f5996dad309b141db00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:48b6e7713529241d5e27cd565a1f378cfcb76480392675c60ef57467cf0f7303","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.780741570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.683710e-01","shared_alloc_j":"5.612367e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","served_from_record":true,"record_id":"r90","record_hash":"sha256:fbfb7b2e0c35a608c84403c695970a425790cfac9e71c7f2b3ab9eecb37cfc58","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":93177},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859638e+01"},"chain":{"prev_hash":"sha256:3f2472594c20c74962c1499c0d4ceb0e60b082d8f6f06220c5b6574d227732c2","receipt_hash":"sha256:65c241175286e3d24ff161f1caa8c0b3ad92605a2f37f926f3dfa25b61d8a45a","signer":"ed25519:bench-node-01","signature":"61a09905c516fd8ce4b62042ab5f1908fcd8495d184ef92935069923d01d42195f2cbe485351631e610dbc6eff8dbaecf9cad2960fc60b9e20a0c1a1054f3001"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5c62422105a99c3116a6d73e07b8b3cb299fc5630574c6e732f5d54d8cd57318","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:f1070bc76733cc042f615c8c46f0da8964f7b072195de00defc3becd95ac9c58","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.609363370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.051271e-01","shared_alloc_j":"3.504235e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f1070bc76733cc042f615c8c46f0da8964f7b072195de00defc3becd95ac9c58","served_from_record":true,"record_id":"r26","record_hash":"sha256:6201b83c8fa51bdd9d68fab6860e3a0ac914bf9cbb10d6524751271fc0ec524a","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":87979},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839183e+01"},"chain":{"prev_hash":"sha256:65c241175286e3d24ff161f1caa8c0b3ad92605a2f37f926f3dfa25b61d8a45a","receipt_hash":"sha256:36f80ce9e8abbba18d2cfa969cb0b267625a9148db5dc0f63f59c8e2ee5c314a","signer":"ed25519:bench-node-01","signature":"78f01a0d9f27850946e4c1f0be54ee7b9a706518a0608bf93ca41264ececc0e40ba0f2a1f0eec7aa8619254bb83ac479bca1e2f5e2d75d26a226604210a7b80e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a4a3660e1de623a6651f5f10f35bc53c2c55efeb67e723425cb61f9df4362ff2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.294868470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.250932e-01","shared_alloc_j":"4.169774e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","served_from_record":true,"record_id":"r121","record_hash":"sha256:68c00c9152f36db8ef49fff21c928ac679e7a92a748171b7d820e16b09fa9a05","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":95619},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846735e+01"},"chain":{"prev_hash":"sha256:36f80ce9e8abbba18d2cfa969cb0b267625a9148db5dc0f63f59c8e2ee5c314a","receipt_hash":"sha256:52014b889447ae85cd73a222ee8afd4bfeacc2227d54dd6c1fda0f7a7a09bfea","signer":"ed25519:bench-node-01","signature":"03baf09fd3393d4efcac1d39df1852dd5f7f7f93f529425bdc0b8a6e90d8908da0671a7fccf5f69b16c3c83e154e4759b4ab404276300d514936e492b4ba8000"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0f7751621575d64e0fda129a9e6e25baadd0a835b4d61ca36361fd544ecfb4ce","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:344d3310dbfdbc5554f4e978fbb9c3cab5e5c766c52065d101623da328d5d32f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.069670570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.476603e-01","shared_alloc_j":"4.922009e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:344d3310dbfdbc5554f4e978fbb9c3cab5e5c766c52065d101623da328d5d32f","served_from_record":false,"record_id":"r125","record_hash":"sha256:73f33501edac9805401499a023668668b69810bb94a2b4a0edfb58c0848c0a13","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96302},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853938e+01"},"chain":{"prev_hash":"sha256:52014b889447ae85cd73a222ee8afd4bfeacc2227d54dd6c1fda0f7a7a09bfea","receipt_hash":"sha256:bd196b033b86fee0f6ddc47c22443f5bfdd07069058e989794f0092eb0396b80","signer":"ed25519:bench-node-01","signature":"282c0978e86c536759dd558c55f77461525edeaa315825c1b34ab02d26d11334475812567cd1475d60207740a514d33f159e923afb78ac71e97efc0e06fc2104"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2eac20c0f14ac79306aac80e2dd13529b250a2d154be4060a323baf271f86d0a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9014e65fe138b28393ccb3d8d284ed537952a969e7a21268271f523fa7af84ed","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.944221670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.440064e-01","shared_alloc_j":"4.800214e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9014e65fe138b28393ccb3d8d284ed537952a969e7a21268271f523fa7af84ed","served_from_record":false,"record_id":"r126","record_hash":"sha256:21c082b273e8dd3bf225ba9f6c5875d948da0df81a2224d3b8400cf7a1969a41","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96382},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852850e+01"},"chain":{"prev_hash":"sha256:bd196b033b86fee0f6ddc47c22443f5bfdd07069058e989794f0092eb0396b80","receipt_hash":"sha256:a84aaa7403aea7b4b477215dfd51087807b7026b0e47033e3c2dec4c84936e18","signer":"ed25519:bench-node-01","signature":"814f92c7615000cddc137ce830c2e029cc7a86d79fdd1a30abed77de2d1bf9f8481513729cb182973103482a0f2dcc7e87c76147790626600256ae6f5ac1ad0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:de78d5807d2d171393228b0af24564704b7e87b631aa1debef1367f7808158bb","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.690199970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.366077e-01","shared_alloc_j":"4.553591e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","served_from_record":true,"record_id":"r48","record_hash":"sha256:758e76b23b821b7b7abe8ab30701ecd786d85e29d1f10de3aa4cbaab51519c59","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":89972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850559e+01"},"chain":{"prev_hash":"sha256:a84aaa7403aea7b4b477215dfd51087807b7026b0e47033e3c2dec4c84936e18","receipt_hash":"sha256:a8afdacde2c56f9dc0f3b969cda0d266fa6e853e151110cb63249a7b5d9be68c","signer":"ed25519:bench-node-01","signature":"45d901f2522bcd372366e3df20641a778c3c1d3b89415d6608d13c15b4970de34cabe56cb0b0a0d45fefecf8dfcfe3b7a58506f78efc5147c8232f65a4258304"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:166e40b59af01a0fb0b10cc97acc97d4825fb4b737e2570ca7f89f5b103b9669","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:000992060ac23f9a6b54bc2803d93971b95cb85a38feeb4e9d3559b2ffba116e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.119823670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.174240e-02","shared_alloc_j":"2.058080e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:000992060ac23f9a6b54bc2803d93971b95cb85a38feeb4e9d3559b2ffba116e","served_from_record":true,"record_id":"r4","record_hash":"sha256:075ab1ff59393c60da8559722711e3fa3b2c44a93c170ee6a918f85a4efabe5f","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":86633},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.816070e+01"},"chain":{"prev_hash":"sha256:a8afdacde2c56f9dc0f3b969cda0d266fa6e853e151110cb63249a7b5d9be68c","receipt_hash":"sha256:663d03bdbe8cfb2956972ed2da207a07ad4044999025ceacafc174cde6c85808","signer":"ed25519:bench-node-01","signature":"2c1a64802d4feab950317772951eba4b1c9d40073caa302aae06b534159c74d8c43ebef1fbb0914b5aea6b68497de0faf7a8ecac320c3b571735591eabdafb04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:983ba27d0abd0b682d15e91752191cd5a82f11bdacb1a3cf6e54b9b385b488a7","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.933153900588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.543163e-02","shared_alloc_j":"2.847721e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","served_from_record":true,"record_id":"r48","record_hash":"sha256:758e76b23b821b7b7abe8ab30701ecd786d85e29d1f10de3aa4cbaab51519c59","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":89972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830173e+01"},"chain":{"prev_hash":"sha256:663d03bdbe8cfb2956972ed2da207a07ad4044999025ceacafc174cde6c85808","receipt_hash":"sha256:f8bb7bdc2a93c8b436915e186966c0ac30bcf2f5296f21a747c36454524741fb","signer":"ed25519:bench-node-01","signature":"bf6c5fbba9979d71b26872e7aca475e9c10a4bf6aa56dd3065f69781f03a3096bea1fab003aa5e6e372d62a9840aa884b7d3842dc873cf6d76386eb9ccf31507"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:90fb0126b475519086c6ab2817180cb05a5a37b0cb6f29dbe968876b715d4044","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:05f17fd121a463594b61b4cdcf207aaa369bbb2761e582ce36c12da3375fc3c3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.957449770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.152655e-01","shared_alloc_j":"3.842183e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:05f17fd121a463594b61b4cdcf207aaa369bbb2761e582ce36c12da3375fc3c3","served_from_record":false,"record_id":"r127","record_hash":"sha256:1e50dbf0ebd87cb9ea72df72adda520521f02f0b407b8a6eda9651b7dc8ee1ed","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96603},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843182e+01"},"chain":{"prev_hash":"sha256:f8bb7bdc2a93c8b436915e186966c0ac30bcf2f5296f21a747c36454524741fb","receipt_hash":"sha256:2e8b1bfcab243d46fdf6e48fe2d5aff9951117ae980115197adfc9d47790a774","signer":"ed25519:bench-node-01","signature":"955d9381aae22a2d22c65cd00cb0403058cae623b8b262a0d64d8a91ca0248f3bd0c271b808ec3e352c6201cb9ab27804f7a386e337a64d4a4b8a1c272b31500"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e53657eef15ceb25c26cf3560d82f779e81730d3832a19001a0f63e0adcdd12e","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:22d862b92bd310f94f74a536a6cc12299c62e5300c99188e9a681064fa11c842","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.774582770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.099392e-01","shared_alloc_j":"3.664640e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:22d862b92bd310f94f74a536a6cc12299c62e5300c99188e9a681064fa11c842","served_from_record":false,"record_id":"r128","record_hash":"sha256:eaa58fea9504d48a0ac9926993328ee3c5c080598ba54964f458828e629429b8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96664},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.841127e+01"},"chain":{"prev_hash":"sha256:2e8b1bfcab243d46fdf6e48fe2d5aff9951117ae980115197adfc9d47790a774","receipt_hash":"sha256:525c6659815ecce817203d6aad8bbaf59738115f4334bd92880d8f13ddfeea54","signer":"ed25519:bench-node-01","signature":"b62e64423aae86a3705351fbbf4fa216c32900a3897c9db3036a48d0849e2ab5938ff80e9e9bff1dd641509e67b46e995e904bc977183cda8dd87220538cc407"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3e45ae28d7b6ca979f30f66981308133b475f6eb8947b2b823048970c7389a3b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.181214970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.265670e-02","shared_alloc_j":"3.088557e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833699e+01"},"chain":{"prev_hash":"sha256:525c6659815ecce817203d6aad8bbaf59738115f4334bd92880d8f13ddfeea54","receipt_hash":"sha256:647fc687a94d9ce2808df87b259ac79a1c3132c3f22edc851b90ae5e54421c36","signer":"ed25519:bench-node-01","signature":"b5cd4daf7f279bc2ade5994c8a7c3b04ae9c3833f403fee62465c17569eaf98652bceb5563f4d3b95d17060621e07e95a6c1e2e365e03f0681ece1187c597a0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d0a7ae68172d660a6492caf712225cd6d6a07d7a29842fc19099f552712a2910","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:027206174fe3afe55662ff7e197cef4bcc261b706aae20ce6b70fce316d50652","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.341953480588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.821221e-02","shared_alloc_j":"2.273740e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:027206174fe3afe55662ff7e197cef4bcc261b706aae20ce6b70fce316d50652","served_from_record":false,"record_id":"r129","record_hash":"sha256:3973d0d461d9700f87560bc96f89beeed15a78eb890105429322b237a1944a31","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96754},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820398e+01"},"chain":{"prev_hash":"sha256:647fc687a94d9ce2808df87b259ac79a1c3132c3f22edc851b90ae5e54421c36","receipt_hash":"sha256:e0a25fe4f324bab3ed7fef41b328bb45056f56e14d2b212ef0981df3259d1402","signer":"ed25519:bench-node-01","signature":"ee33a17ba00bdc30e3f1f659ef7c5800a7c56ffe1d73daddfdc5e2ad3df7e73d6ec07abdd11c3183b2b64e4d7b4fd3988ace181b267dc173f0faeb04cb6e620a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:137de8a76fc92192794b666d1c57daada1225fe9a3fa1c46f971862f20d18708","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:86bfaf5eec3f3155eb596fba26eb284381cc8e76ceb08cf882275e1d5f13b293","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.056331390588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.989312e-02","shared_alloc_j":"1.996437e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:86bfaf5eec3f3155eb596fba26eb284381cc8e76ceb08cf882275e1d5f13b293","served_from_record":false,"record_id":"r130","record_hash":"sha256:37fe0768c1cc09003bcfc277835e7b0bc6d2bd6cf7d43f51e2861794774b36cf","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96787},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.814749e+01"},"chain":{"prev_hash":"sha256:e0a25fe4f324bab3ed7fef41b328bb45056f56e14d2b212ef0981df3259d1402","receipt_hash":"sha256:70b815e27fd98bfa799d5c02a334e4f3be9f4da65e8f71970ce96275dbdcda32","signer":"ed25519:bench-node-01","signature":"cd7f60fb47c1d503e11378c08d64b2a33c121b77ccc090ffec610708b11967be494e1cfb92a00b8bf229e47b33f8e557ee6749ffadcbb3bedfa94b778fc07608"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:20ab4eae082a906d36717de469a1e0251f9b89a549033e911ea91892627a000f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:681cb2a577ff523b7cd6ddb96943d8e946678ec479213c4ae937a17caab6ab20","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.256311470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.239702e-01","shared_alloc_j":"4.132340e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:681cb2a577ff523b7cd6ddb96943d8e946678ec479213c4ae937a17caab6ab20","served_from_record":false,"record_id":"r131","record_hash":"sha256:453ac78ed3d5d6197b0a142bdb15bb4dcefc6b07f068f596579c173fea5425ad","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96856},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846343e+01"},"chain":{"prev_hash":"sha256:70b815e27fd98bfa799d5c02a334e4f3be9f4da65e8f71970ce96275dbdcda32","receipt_hash":"sha256:e922936692b0b4048912c345cdc2d8ed7223659f83f5c239a29381c2cbf6c102","signer":"ed25519:bench-node-01","signature":"9670b70a23878c4fedabc88fe8ad352006ce8e199812ad51c9d866f8993164363f876c5785c706301f451bf313c6e587eca9b921abb02733d91cb9f585f37809"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1b232176b76c2fabdb0f47c7cd325f821590c70e17d348c6fefc414ca5b43639","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:cad30f2c6d0d2fedf44ec59d6ee99ebbbcde9e90ccbdaeccb878fdb153546be7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.223698370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.389410e-02","shared_alloc_j":"3.129803e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cad30f2c6d0d2fedf44ec59d6ee99ebbbcde9e90ccbdaeccb878fdb153546be7","served_from_record":false,"record_id":"r132","record_hash":"sha256:089786c3138124ce2fc63d613bb7ef2f34abbd2827adc8dbc87070b5d46e38f4","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96908},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834275e+01"},"chain":{"prev_hash":"sha256:e922936692b0b4048912c345cdc2d8ed7223659f83f5c239a29381c2cbf6c102","receipt_hash":"sha256:6e8b87d07dd2a587e100cdfb772c34aed95478a328bf4819d457f4495de101ed","signer":"ed25519:bench-node-01","signature":"9ef06426d39e444aa68cb4d5c85a250528decf948d3c2acc0058ebc85334544b265942138ff2b06522b0e3fb304b565a0ace9e4b797457acb94ee666abbd390d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3014bcf3ac890134301ab0ede1c8e3aa8537f3d9fee36062710d59b52bc03e67","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:04e5a26940894add6708ef236b673662643062f46a51261d7761552a16d9d3f3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.431442970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.081870e-02","shared_alloc_j":"2.360623e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:04e5a26940894add6708ef236b673662643062f46a51261d7761552a16d9d3f3","served_from_record":false,"record_id":"r133","record_hash":"sha256:a9389697697389d73dad1887641596c51077b6e1c7d3f0a261ab71de4aa95e88","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":96947},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822026e+01"},"chain":{"prev_hash":"sha256:6e8b87d07dd2a587e100cdfb772c34aed95478a328bf4819d457f4495de101ed","receipt_hash":"sha256:5f6ddd33fc5a2cb1822b3f2395bf0465520cc34c80a30a2d3c10588bc7a53fc7","signer":"ed25519:bench-node-01","signature":"1b83a52cec0c1aa5f45c4f76a11916138d769098c10b09f3fcdf6f91d2f3d3d819180822951da69486ab78bf7b96fe49265f7328667777db7f8bbf7f73401307"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ca3735e1343068c04a0db0737a793093973e6a64bcec1ea3c945586b9a3ac4a9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.272358200588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"3.705893e-02","shared_alloc_j":"1.235298e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":14,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.793901e+01"},"chain":{"prev_hash":"sha256:5f6ddd33fc5a2cb1822b3f2395bf0465520cc34c80a30a2d3c10588bc7a53fc7","receipt_hash":"sha256:57910895944bc2de79ed97c4bb878b4125e84cf64b95c3a93cf1b5fe20fb2212","signer":"ed25519:bench-node-01","signature":"65df3f0b932b5967569751a87c3ccd7c60d43c938eee81ada1f76d07ec5ca65d6c7380d0b5874fdcd685b626ea39b86384cf9afa7e53fec7d29232a05ed05502"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:cb22c4dc9d64f341d91f0c7fa4005044973c0e619dea8cec7152ce5236a6ad3f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:03edf452ec745a0b3af013d4ab01c43d27b32aa4bc66d762434da2276860728b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.835831970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.408494e-01","shared_alloc_j":"4.694979e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:03edf452ec745a0b3af013d4ab01c43d27b32aa4bc66d762434da2276860728b","served_from_record":false,"record_id":"r134","record_hash":"sha256:1eaf869c648c717dbe12a425c2b4c4f73b3164632d0832f313965d75c85131a2","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97046},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851887e+01"},"chain":{"prev_hash":"sha256:57910895944bc2de79ed97c4bb878b4125e84cf64b95c3a93cf1b5fe20fb2212","receipt_hash":"sha256:b4a7e3d442475a4c915fffea85b034473b79ad8c87986eb042e30b12745a28a9","signer":"ed25519:bench-node-01","signature":"c4006d92d06f0c4244a5de907bf8a5a4a102f4b4515c838093bb43fef08223425297cc7653373eb342388f60dd7212f50a36ebdb4acf46802714334db8e6e208"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1f78a00791c263e56268118f9002ea16fe595200328c76d3e3dd0a7ce56e1aeb","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:cdcf8e35c696111fe372178b7a84c92bcc0a341f50b1b9945d5272081b4a00a3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.797145370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.688488e-01","shared_alloc_j":"5.628293e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cdcf8e35c696111fe372178b7a84c92bcc0a341f50b1b9945d5272081b4a00a3","served_from_record":false,"record_id":"r135","record_hash":"sha256:85cf70bde7b030469e1b64d167e864ff94e5633a81fb5aff67ce6dc9ac3de15f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97140},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859761e+01"},"chain":{"prev_hash":"sha256:b4a7e3d442475a4c915fffea85b034473b79ad8c87986eb042e30b12745a28a9","receipt_hash":"sha256:fd85ff91ab164609d1bb0624d91c31b162bda32ab9691a23decfaffe3cac616d","signer":"ed25519:bench-node-01","signature":"a7a61d0eae0a6a61c8457d182e27dbe3ca8bfa55ae73c17558a0e8d606b0e3c8639f874e8af354a14bbcdf8e545febae55db7abf6e4a48831783ba1990a5e202"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:91e69541a5a0e12ca5d843fc341b81ccf6c95de6012fcd1fcf96a4c66741753a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.401590470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.994920e-02","shared_alloc_j":"2.331640e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","served_from_record":true,"record_id":"r16","record_hash":"sha256:3227d5f5cdb47b0c636c60fce42fed733f0e84ce2c21552a8ea3164c96c9d710","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":87438},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821490e+01"},"chain":{"prev_hash":"sha256:fd85ff91ab164609d1bb0624d91c31b162bda32ab9691a23decfaffe3cac616d","receipt_hash":"sha256:76c10b2a2d19511caf57f886514f4ffc77bc32efc19afb6a7bf993d47c2aa94c","signer":"ed25519:bench-node-01","signature":"dd88f4618e691b2134b8233c8fd19a475e1f2fd1025d65fcb1891ee49e7fafe6b5fdd3784eeea6b6c28c78104aed1b66ebd6c2130e1cd2feb2a791298e91110f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ffbd4ba28b0f0824dc97015b2e357541d9634b72a54bc03f8b1642d2dcbd2ea0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.876957900588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.466863e-02","shared_alloc_j":"1.822288e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","served_from_record":true,"record_id":"r114","record_hash":"sha256:11b74bcd9d0099b86cba50d647a39fde7bbd69fff8ab977726c7de08af14d90d","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":95088},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810785e+01"},"chain":{"prev_hash":"sha256:76c10b2a2d19511caf57f886514f4ffc77bc32efc19afb6a7bf993d47c2aa94c","receipt_hash":"sha256:169cd3e3800f00aebc0e2aa4cfaefc8bda65b24e568318e73c9b2b0674a87ef3","signer":"ed25519:bench-node-01","signature":"7beb6ebd00357f4b133228806029e5d186a905f57aa77415f33928ee761aa811d00b34d1f0bc815ab80b6c823552243d62818517d8ae23801d292f2cb275bb05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b28ff23aa28c997c236ae71ae25e2169719d41996aaab845e1a3b5f42aafbd8c","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:56f31403b6c262597065ff99fdabb3aa51f06ce20ce0c64fd757c16c6e472db8","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.465685770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.009422e-01","shared_alloc_j":"3.364740e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:56f31403b6c262597065ff99fdabb3aa51f06ce20ce0c64fd757c16c6e472db8","served_from_record":false,"record_id":"r136","record_hash":"sha256:0318622c533e421c87be0377c00731d4271381f35987fd09e34cd5b39d2e5820","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97265},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.837419e+01"},"chain":{"prev_hash":"sha256:169cd3e3800f00aebc0e2aa4cfaefc8bda65b24e568318e73c9b2b0674a87ef3","receipt_hash":"sha256:5c9d679620fe7bffca4d238d33210e6d9706fc6c78ee40facdf149f1baf259d4","signer":"ed25519:bench-node-01","signature":"42bcbcf072173eb305081b2565c13bce91a52a0b68a4dc8cc00d097eae6553dbdb0e7fca04bf54e1aeefb9b1119b9d1e0f0ec168e4d674613cc5b1c49f8bb50c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:de0988274c8e2e80c7088047327d12209e5990a71354c07bbb0f22dafcd8a39d","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:6325a64e3e9f740e0d177e5e9f7b218e54860498e001b826bb4e3639a52aaaa5","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.867156680588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.438311e-02","shared_alloc_j":"1.812770e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6325a64e3e9f740e0d177e5e9f7b218e54860498e001b826bb4e3639a52aaaa5","served_from_record":false,"record_id":"r137","record_hash":"sha256:e55df1f2bfa366faf645c4ab431709a7e106a7dc746b0c10e77cee9e554ba116","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97296},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810558e+01"},"chain":{"prev_hash":"sha256:5c9d679620fe7bffca4d238d33210e6d9706fc6c78ee40facdf149f1baf259d4","receipt_hash":"sha256:ed764f61bd41c8a3c12b42c74a330fda660ddaf0a21faca1fb55b03a312a8574","signer":"ed25519:bench-node-01","signature":"5dfd099707f0652a354c869a9e6830ed048a8e7a40936928adf3f2f859bd5acb188049b69ef69b508790d6dc811acdc4efd21e69aa6fefe2f75b8a0d109b0908"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2802d8a7868f8eec0118d128e5bb5d2474c2e4d81f89b89406fdc276f7cc431a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:142b07d7db8dea0bfc67c9f5eba2082dd565d65695dc5376e1da98af2000ce32","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.744887070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.673268e-01","shared_alloc_j":"5.577559e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:142b07d7db8dea0bfc67c9f5eba2082dd565d65695dc5376e1da98af2000ce32","served_from_record":false,"record_id":"r138","record_hash":"sha256:b8568107518bc92108538b5ebd929fe1e56291edc5730e993dcfd7e8e1d3bc7d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97389},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859368e+01"},"chain":{"prev_hash":"sha256:ed764f61bd41c8a3c12b42c74a330fda660ddaf0a21faca1fb55b03a312a8574","receipt_hash":"sha256:7bf904273a65888f91a37f6edd9bb0f2003aa8a6d58c3cdc9b44997f78fab455","signer":"ed25519:bench-node-01","signature":"cfe696f63983cb96f62bb1b069be3ca36e9d8c237afe67e7555b17e48cd7475e09af23961b82d2f914d6405c36d9b96b7922f1bc5879b92734096f61f97ed40c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8bba586c29b342bce758eacac23e3c1c5fd2aa27dd5d7faf00eca0cf69f3c39b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:6f37d45f68c8e63262b6f5238005c8e712494dcf15281951ed02eb9edcbdd749","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.536379970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.612537e-01","shared_alloc_j":"5.375125e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6f37d45f68c8e63262b6f5238005c8e712494dcf15281951ed02eb9edcbdd749","served_from_record":false,"record_id":"r139","record_hash":"sha256:454ce54f131e6c17e307228a92563feae01df8d8774033129589310b7a521a49","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97478},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857763e+01"},"chain":{"prev_hash":"sha256:7bf904273a65888f91a37f6edd9bb0f2003aa8a6d58c3cdc9b44997f78fab455","receipt_hash":"sha256:2de1d641cb632ba54853703a580410f9478285fa80b889ec20fe54a71c71cab6","signer":"ed25519:bench-node-01","signature":"1643fc5711a2177b1de5b4e4c4bc0cb721ed6f665c3944bda8406fee5763b444dc2c1d85fb9d575f5b5e91b4c00e9731a77f15bf9b9d0bd23088623422bf8e05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:30bc284be1bfffdb959539a9d3178061c13127fb67791819ecb41e951eef0f00","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.626844970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.638887e-01","shared_alloc_j":"5.462955e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","served_from_record":false,"record_id":"r140","record_hash":"sha256:9f4054b5d15ac16ce0b79b780e5d8bf8b428262e4fd2a332ec366dce24f89c41","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97569},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858466e+01"},"chain":{"prev_hash":"sha256:2de1d641cb632ba54853703a580410f9478285fa80b889ec20fe54a71c71cab6","receipt_hash":"sha256:e329fc483dba6850c553ab59aadd258c69dab0ac4e5f436b2f9c62c382a9be2d","signer":"ed25519:bench-node-01","signature":"bb979b837e7d0db0630fde3e97303ea0010e1a3dea35671b4b4d631b277a17c77783ea08cb77b93929f4bec50229f3b392f4f3bcb2c3410ecfd3c9b8a85b400c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4ed0e57ddce12b7f6c04c38cc473af6d2c76efb7a88fcb4ff0c6673feb234df5","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:d3980a53696b36e807ddd7a77cf4eea828b8b43bd22c99f8d5ccb8925f32d248","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.910994970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.139124e-01","shared_alloc_j":"3.797079e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d3980a53696b36e807ddd7a77cf4eea828b8b43bd22c99f8d5ccb8925f32d248","served_from_record":false,"record_id":"r141","record_hash":"sha256:d249e71c0217b0b5db7e4d57b641b81686c1268b36bc8427cb39c3cba8fdfe50","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97633},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842669e+01"},"chain":{"prev_hash":"sha256:e329fc483dba6850c553ab59aadd258c69dab0ac4e5f436b2f9c62c382a9be2d","receipt_hash":"sha256:39a411b8844fbda60deb225aa603f55da3ccb31f883fada6f100bf2d88e7b02b","signer":"ed25519:bench-node-01","signature":"9183ff6acc1bf52bc96a2547dca559151f6d39ee9b3645fa75f17081234f91d2a18884049b11136c01fe0d97d1f388650ac0a63a3f7b56903b995ccff334c008"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0b9c143c10a9bc9013309c9c5fa497ffd025d5621bfe17c587bc72fd88dfde84","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.501481920588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.285865e-02","shared_alloc_j":"2.428622e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":15,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.823260e+01"},"chain":{"prev_hash":"sha256:39a411b8844fbda60deb225aa603f55da3ccb31f883fada6f100bf2d88e7b02b","receipt_hash":"sha256:19fa57b405ca803fedddccf87a002439f304928b51c49400c73e27b583d268cd","signer":"ed25519:bench-node-01","signature":"a86840ddd314ef63460a31b9709170cfd68d45d181106ab09c9b0adb864613e825046d46fa11d8403881a721adf60ff763f0bf0641abd255e111531ad2cda80a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bd9684ba61ce2c61c28f8d023f4279e5a66341490365d0a4847f3d4cf1d8fab3","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.087835670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.481894e-01","shared_alloc_j":"4.939645e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":16,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.854093e+01"},"chain":{"prev_hash":"sha256:19fa57b405ca803fedddccf87a002439f304928b51c49400c73e27b583d268cd","receipt_hash":"sha256:b03639a4e37c7fa0c22ba0096e1ee38fd79a096ac7b534a32404bde98a989dc8","signer":"ed25519:bench-node-01","signature":"95a73d97317c408ae60629de015411ccc7620301b8ad053ee83bc816909b1e9ec654711e97822d393007364a9bd55e4623f759844652ef2c3551c8b2ebe11108"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fe101ae491f82ac40612d73a0abd730d3abcdfb0829a4125af4ea6c3357ffa53","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:76aa44f7b0b3b872eb243bcd0ed8bc9038d6779900791ddcf365d5805e743a5f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.413599670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.285514e-01","shared_alloc_j":"4.285047e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:76aa44f7b0b3b872eb243bcd0ed8bc9038d6779900791ddcf365d5805e743a5f","served_from_record":false,"record_id":"r142","record_hash":"sha256:dba5353f14cbe283a3df3bc0429b4d0da6169a5533118250370697129a4c0c9f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97827},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847919e+01"},"chain":{"prev_hash":"sha256:b03639a4e37c7fa0c22ba0096e1ee38fd79a096ac7b534a32404bde98a989dc8","receipt_hash":"sha256:b5b6f3695538e201f38a6ef6dc7daf5fd3ed222e182b75429952dcc450289d41","signer":"ed25519:bench-node-01","signature":"b29eaeda3f064a0a3ee284b87b73d6585870857401cef8417ba6987a9d33ea3309e7b60f154a14d31adf4a635a28d2ef51a89d683714dd74ffd2014c6858b103"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:219e524d9ccefe6247f7355b35fefdf0e0ca0a896cdd3540e641c5408a3f86b1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ba80a0c5a96893e7ef50727233d32223b0c47e4bb8ba733fa50ffc6d22ca525e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.259629370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.531931e-01","shared_alloc_j":"5.106435e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ba80a0c5a96893e7ef50727233d32223b0c47e4bb8ba733fa50ffc6d22ca525e","served_from_record":false,"record_id":"r143","record_hash":"sha256:bb5d62f458af5184d4385803ff272ef274caf2d58506c1d9705af4a8e8e7a6cf","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97912},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855535e+01"},"chain":{"prev_hash":"sha256:b5b6f3695538e201f38a6ef6dc7daf5fd3ed222e182b75429952dcc450289d41","receipt_hash":"sha256:dc959d4ddc4c6af7925916ccc625bdd253ef4cfed9ffc993fc0ad5cd76a78796","signer":"ed25519:bench-node-01","signature":"e6001d17f1a09dc5517ac78a404e716558926413981da90497b409b942cd7f76ac82db8c7ea5e9c611d3538e5884a74a29201d296e6c830a58ac0f7acdbe0a04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1924f01b98addb17da36277d505c0060bc92afeb524eaf4ed45be09e80c20ca6","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:37e980e4882227a96e675fb441e1820f1abf8da0fd3d4073eefc5fa35288e5c0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.933263570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.145610e-01","shared_alloc_j":"3.818699e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:37e980e4882227a96e675fb441e1820f1abf8da0fd3d4073eefc5fa35288e5c0","served_from_record":false,"record_id":"r144","record_hash":"sha256:4ad8fcdd7c640b807dcf3b6cd1b1c4e1b0089f8da66acb84a15e3d1f937e755d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":97976},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842915e+01"},"chain":{"prev_hash":"sha256:dc959d4ddc4c6af7925916ccc625bdd253ef4cfed9ffc993fc0ad5cd76a78796","receipt_hash":"sha256:44575e96e22e72a8e6951c8fa84fc04b37651d1db982436d1a3ad2a1112bc70e","signer":"ed25519:bench-node-01","signature":"9e044213bf4fcbe1c64e59ad359eb2c6e57f5b9984f1bbc37bfc64f7810562b327094ed51248058a2cf0a98968473c15e0bef127238bca1d1a75cd3bdf1a8f04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:98f1ff57443f7c4bf604fc1984804c72dec00e9c5523035708fe3c4b75e00817","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:aee17b375980a589f30f158391737b2322f308485b57b59896ead820ac93fcac","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.355661570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.559900e-01","shared_alloc_j":"5.199668e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:aee17b375980a589f30f158391737b2322f308485b57b59896ead820ac93fcac","served_from_record":false,"record_id":"r145","record_hash":"sha256:5dc901d65611b741e61f91ed0c13cd82936b5458adcd335f9fe4223bea9abb0e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98062},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856321e+01"},"chain":{"prev_hash":"sha256:44575e96e22e72a8e6951c8fa84fc04b37651d1db982436d1a3ad2a1112bc70e","receipt_hash":"sha256:2c58e2614a70fd626e4df64ffc6b00d9522006d8b6d4486d5e8129c1c25abe6b","signer":"ed25519:bench-node-01","signature":"79b70c6549ddc90a709bf1c7a2ff75f3ded7f908480b08938e492fcfdd9e6ddd1ccb0b2f47c37d4c6377aebf93f83c235193de390635d2599353271599136503"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d7c617a7c615db3c33bd81f9375f7a694ca07e7f3c7cfc8c2ced725237d0db17","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:6fb90bf22cf47ebb829244b6eb2a2c3c6103a367b5355ca78f592dd35b9c656b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.964765070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.446048e-01","shared_alloc_j":"4.820159e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6fb90bf22cf47ebb829244b6eb2a2c3c6103a367b5355ca78f592dd35b9c656b","served_from_record":false,"record_id":"r146","record_hash":"sha256:5c886813efb4150f34d433b2651ae9e8a0582f095c8f30364f1b2e063418957a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98143},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.853030e+01"},"chain":{"prev_hash":"sha256:2c58e2614a70fd626e4df64ffc6b00d9522006d8b6d4486d5e8129c1c25abe6b","receipt_hash":"sha256:4b0436bb8674f8b4a8cfaac597d18f6c7ca3191d3b8ebb3ed28dd3360e9d92e5","signer":"ed25519:bench-node-01","signature":"f76ccfbd64bd4257e4584000b53cf4580b5e5a96aa599740a0f17a373aebcabafc6463b5a012fed1907fdbaff4cb775d817abf19b3afc58b75a3a07c9d5b9706"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6e939e5b11d9230c9a25aec60820a2c69c68c44d28674bec98a8f8ad0c881139","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:ce77866203f612a22e6657ca52065c2bca49b5c704e7cbe7bdbafc508469eb4c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.658697270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.065640e-01","shared_alloc_j":"3.552132e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ce77866203f612a22e6657ca52065c2bca49b5c704e7cbe7bdbafc508469eb4c","served_from_record":true,"record_id":"r68","record_hash":"sha256:0d5bff476d58de9e80883a299e1b4aa6d7b853a633916d6d74df6885e00c5534","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":91742},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839773e+01"},"chain":{"prev_hash":"sha256:4b0436bb8674f8b4a8cfaac597d18f6c7ca3191d3b8ebb3ed28dd3360e9d92e5","receipt_hash":"sha256:0a4b0baf2460b21a62885cf9c14e5821043c2ba90bdcc8aef69322aab3b7dce5","signer":"ed25519:bench-node-01","signature":"edaebec3bd04ca24c9653a0150d4c8ff2cfb92f5f80826442fb3d7e2d555fd1fbc90c361be946be0dcea096213e8d921ebb0dfe640b7d97265d3ec3e45b1410a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0509cb6df3ce635f36fbd11aebfa2fdbb3795c40ee31b255bcb7efb5a03287bb","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4dcde1b30c97bc371abad9179f7d079831c59c3860d7df8b175517cfcde56244","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.540643810588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.399924e-02","shared_alloc_j":"2.466641e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4dcde1b30c97bc371abad9179f7d079831c59c3860d7df8b175517cfcde56244","served_from_record":false,"record_id":"r147","record_hash":"sha256:9be1d3ba2c48c0b1a0e413c83fbf5d2439b4ad805429ccab8cdec9ac45f26389","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98243},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.823934e+01"},"chain":{"prev_hash":"sha256:0a4b0baf2460b21a62885cf9c14e5821043c2ba90bdcc8aef69322aab3b7dce5","receipt_hash":"sha256:f491341ba37ee85b7e248091e3c1f5b221ddc820b0d84f61f275b8d7c228076f","signer":"ed25519:bench-node-01","signature":"70bfce5301f89a9145e4e9438c610461650f16c6d46ac95b78ba8af3254be2b8a83e3a814bfe3036fbe551da83675e8765d2c221934e9b1e26df39bf5e88580a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2afbd7df79dfe839a935709a223bde6ad4933c16c80003b3a458a0d55d4f8b20","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:516b5691b6e66826019f65c73831fd8628d3333ec153968bae02509709ddcf3e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.006231390588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.843382e-02","shared_alloc_j":"1.947794e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:516b5691b6e66826019f65c73831fd8628d3333ec153968bae02509709ddcf3e","served_from_record":false,"record_id":"r148","record_hash":"sha256:446e2b9c1246d98af321b2f2043129b3e339731bcda7e9648d7a8f577370cbd8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98275},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.813678e+01"},"chain":{"prev_hash":"sha256:f491341ba37ee85b7e248091e3c1f5b221ddc820b0d84f61f275b8d7c228076f","receipt_hash":"sha256:669ad589dc373fb874d54dd84c90b2d31bce24609c68c0f422ccd0d8ff1eee0c","signer":"ed25519:bench-node-01","signature":"34dad0a23682544e4017e127fdc23c446966db2059fe7d82942ac897f0ff51ae4749c34efedbc006f8f6e79c343da4c710555cd5df5b61f9f19cf136828eed04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:03b91a320f935531694972ea2835303dd7be51b601b48476e3175ab1489fbf9c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.862983270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.125140e-01","shared_alloc_j":"3.750468e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","served_from_record":false,"record_id":"r149","record_hash":"sha256:5766de1b0954020a4a5f70be2b1e114504615839e2365bda98f7b248fac792b6","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98338},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842132e+01"},"chain":{"prev_hash":"sha256:669ad589dc373fb874d54dd84c90b2d31bce24609c68c0f422ccd0d8ff1eee0c","receipt_hash":"sha256:4039967b3e98c314390e1670149272691d14d063bddbac56f836ff04b82926ec","signer":"ed25519:bench-node-01","signature":"9237c53fddfabf37a6f63437d0303b6936cbd3c66945539674503ef66ac5dc64091286fa3a38a1c6218f8dc71143ea1b2125a5f6894ec9837731bfee3a048602"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ba057d4188920739b3c3ace11dd4ca7aedc0d3b550371a2c6bd35b4054f9af1f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:01b2122aa76c492f0e26f4d0d8113e3058a9c0a42add4d988081cc48760f2f78","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.833080140588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.339057e-02","shared_alloc_j":"1.779686e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:01b2122aa76c492f0e26f4d0d8113e3058a9c0a42add4d988081cc48760f2f78","served_from_record":false,"record_id":"r150","record_hash":"sha256:ae74bf005f5c035d71c5d30e1da593c8b9d94e1ed5d6aed3a574303d1e62002a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98367},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.809758e+01"},"chain":{"prev_hash":"sha256:4039967b3e98c314390e1670149272691d14d063bddbac56f836ff04b82926ec","receipt_hash":"sha256:8a19d6f520d80c9a6ce47275c70f2bd92319b6022bd924d56d71970b51d1a1b8","signer":"ed25519:bench-node-01","signature":"2f61c95bf36a66a115505188b179c6ae1592cb1d89a86c3be9df47dd48e8e456afd7e0fc4363114577424f21b75475bf307dd25260e682010a162c4ebeac1308"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d27900c5ca9b9b21b5dd562616a16428a188b5dc404c79b5574d621f48e004d5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:6fb90bf22cf47ebb829244b6eb2a2c3c6103a367b5355ca78f592dd35b9c656b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.501810770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.019945e-01","shared_alloc_j":"3.399815e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6fb90bf22cf47ebb829244b6eb2a2c3c6103a367b5355ca78f592dd35b9c656b","served_from_record":true,"record_id":"r146","record_hash":"sha256:5c886813efb4150f34d433b2651ae9e8a0582f095c8f30364f1b2e063418957a","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":98143},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.837869e+01"},"chain":{"prev_hash":"sha256:8a19d6f520d80c9a6ce47275c70f2bd92319b6022bd924d56d71970b51d1a1b8","receipt_hash":"sha256:00b1f72adae175e155563491fd851d72125bfd3aa249a5f54d5f9bce1dcf9b53","signer":"ed25519:bench-node-01","signature":"8e30b1ee8ecbbb281865c7fa39b393c814e773c914f8e882621eace5abfc0284f3357e827c86e08a3f3e0673c5bb85564b3d8893ed9ba3041c68c7cf0487d70e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:04343744ec0cad5c154ce7cae5c16be5eec4632177c7a01277455727df100778","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:ba80a0c5a96893e7ef50727233d32223b0c47e4bb8ba733fa50ffc6d22ca525e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.884411670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.422644e-01","shared_alloc_j":"4.742146e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ba80a0c5a96893e7ef50727233d32223b0c47e4bb8ba733fa50ffc6d22ca525e","served_from_record":true,"record_id":"r143","record_hash":"sha256:bb5d62f458af5184d4385803ff272ef274caf2d58506c1d9705af4a8e8e7a6cf","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":97912},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852321e+01"},"chain":{"prev_hash":"sha256:00b1f72adae175e155563491fd851d72125bfd3aa249a5f54d5f9bce1dcf9b53","receipt_hash":"sha256:53bea7970c8fb62067f01c849463c373cdb091c3782a9facb1c35527539e2c59","signer":"ed25519:bench-node-01","signature":"93860d141308906a15539db5ba05adfe4fef4e30ff655cec7f1787b03ca9db19bc871205a94436be5873c1d68ef0be893db27c09e60563afde2167ad036c250f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2e594d5743136ee057bfb90aa6b5f08e5b6b8c10bb78b1d910cb71ee04951ec8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c91460ada6ccfa92b02cddd2a5dc938fbfd3c5aedf6140e6d4f383451527fa10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.455850070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.006558e-01","shared_alloc_j":"3.355193e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c91460ada6ccfa92b02cddd2a5dc938fbfd3c5aedf6140e6d4f383451527fa10","served_from_record":false,"record_id":"r151","record_hash":"sha256:117e876cb526fd957b88e6c2010c855d7752e302ab52168495f179b43c694ddd","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98559},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.837295e+01"},"chain":{"prev_hash":"sha256:53bea7970c8fb62067f01c849463c373cdb091c3782a9facb1c35527539e2c59","receipt_hash":"sha256:6f6aedab9c4eb57ef47dd510c90c6bd776646d3ce88a466b0ed790cf62d56ace","signer":"ed25519:bench-node-01","signature":"9986cad13b8fa3697ca95b71104fada57d49fc9bcd1ddda9de136848450d4b6f194f55b57aa9b613f46e74b37c421e92d692c369bcae08cbe5a0dabadf40be0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:652d43b6da60f8f7fec7f2e09c8cc8877ae037aeea25c20f708a2653ae4740d4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f19bc2892427342b6a94dc67637059edcc9e4ffdbe0f27bbec3ee1262358377a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.899879740588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.446247e-02","shared_alloc_j":"2.815416e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f19bc2892427342b6a94dc67637059edcc9e4ffdbe0f27bbec3ee1262358377a","served_from_record":false,"record_id":"r152","record_hash":"sha256:bb475a21de25accc6e85b3a0ed7d33a3c188194e19601341d92c525474ef9e59","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98606},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829678e+01"},"chain":{"prev_hash":"sha256:6f6aedab9c4eb57ef47dd510c90c6bd776646d3ce88a466b0ed790cf62d56ace","receipt_hash":"sha256:4afdf3f014c50c9c9aaf4a1bda7a31e4c9b4d53a901399a237dc61cc7949108a","signer":"ed25519:bench-node-01","signature":"9956b8d5fc7d424c979bfaa157247546530c0c62d2998bb279489f7d0f94812bd9e4f8f5b08b6a894559eb7a83aca7c8f76fce14e762ee43ccc5f2157035dc06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c62ccb6e34f4ca8175c17c9d2ba5c4349f1589e187219058ec56de47e41fd346","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:fbad157ba34331794cf5050bfec542d16e1f3924470fc53d5b8557ce96983c6d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.930168970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.534470e-02","shared_alloc_j":"2.844823e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fbad157ba34331794cf5050bfec542d16e1f3924470fc53d5b8557ce96983c6d","served_from_record":true,"record_id":"r57","record_hash":"sha256:1431070f5ce2f957766ef5980bd5e7867760c31429a7aea428065e30871ff619","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":90673},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830129e+01"},"chain":{"prev_hash":"sha256:4afdf3f014c50c9c9aaf4a1bda7a31e4c9b4d53a901399a237dc61cc7949108a","receipt_hash":"sha256:3bc9487dc258c68e9181a13d50a1dc5df2f74e54d73e93b0ee25a1ac2d4aaaf2","signer":"ed25519:bench-node-01","signature":"4a940b2494ed96ad11abe05fe62753ae71aad78e1b7737a89eb3dc50023de1a9dbe5999d9117db0519965daa7f186636dab11b126602b27f331dda303dbe1a0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4a7b5b666ec438a4c0ff159950dc92a1db3449c8e620956810a98f87d2a3aa65","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:4eca99b1aa9b7cc02d93253fcbd8b042a8f2a308065e37f5971da74e7223ddae","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.638265570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.642213e-01","shared_alloc_j":"5.474043e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4eca99b1aa9b7cc02d93253fcbd8b042a8f2a308065e37f5971da74e7223ddae","served_from_record":false,"record_id":"r153","record_hash":"sha256:2613989d0144d77d40c7ec837263f215cd6d6e55f78b5e67fc05f5fe9aad9c1f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98745},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858555e+01"},"chain":{"prev_hash":"sha256:3bc9487dc258c68e9181a13d50a1dc5df2f74e54d73e93b0ee25a1ac2d4aaaf2","receipt_hash":"sha256:8d9597ceb26e0987c7b972721654594e4b8d6189494f958ad6f7ddd7959b7d0a","signer":"ed25519:bench-node-01","signature":"9387d4f1d1c01e30b9c9f96af912ac1bdf254d519d9aec15a5b50c216a5b76be4bb72c328ab6960e8729c607840563462cb7073db5de38b93fe65e2cbfbbfa08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8da53c330d467369b5d70f6beda4c45190e2620947eff91037066fe5d0758631","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:50c404d36b19c3fdef88459eb0d2411aea6815b2d9ae84aea272390b347ccc47","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.856612970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.123284e-01","shared_alloc_j":"3.744281e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:50c404d36b19c3fdef88459eb0d2411aea6815b2d9ae84aea272390b347ccc47","served_from_record":false,"record_id":"r154","record_hash":"sha256:0d807272575aebacc8110755f47ff2419f15a4b779f8b181661addfc68f0e0cd","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98807},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842061e+01"},"chain":{"prev_hash":"sha256:8d9597ceb26e0987c7b972721654594e4b8d6189494f958ad6f7ddd7959b7d0a","receipt_hash":"sha256:d2953d54cf72b1e358d4b484c38211695dbe4b25a3cbe91d2088fc7718557249","signer":"ed25519:bench-node-01","signature":"afb853489a7d6b28d27a105aff1a200c866e28c4ee5f258b1a7cf468d6c3c0f473d3e793af9f11b67ca2de8b4adbf487705a4ef2016112c222b0d4ed04227d00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f92994f82b4eb5c235049e89368e3463902e822a1a1e10d2a2d3f389786dd803","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5f670babc0d5143c2f85eeafc483373c44b95de221f254f409287881280efd20","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.878564570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.420940e-01","shared_alloc_j":"4.736467e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5f670babc0d5143c2f85eeafc483373c44b95de221f254f409287881280efd20","served_from_record":false,"record_id":"r155","record_hash":"sha256:825dd5461528372aef6cc6608a77dd47ae331db510e0c2729b3f5a6080765a28","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98886},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852269e+01"},"chain":{"prev_hash":"sha256:d2953d54cf72b1e358d4b484c38211695dbe4b25a3cbe91d2088fc7718557249","receipt_hash":"sha256:60f0f7c34f487dd6abac3fe01c1ca67fa672b5448824bbef58388d0d52513af3","signer":"ed25519:bench-node-01","signature":"e9f952e06b3347ec9a4cf62b4108550e45e219c87eba5cb2fdfff776aa2cf17537d5d0514458e0f9650b766982222d60db37669b6ed301dc5ea7c80f2a2bb407"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8507e412fa97c1dc39dbf2ed9d6cc2fa2ec2bbef8a3404402615340e4886a03e","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.173731010588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.331244e-02","shared_alloc_j":"2.110415e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.817161e+01"},"chain":{"prev_hash":"sha256:60f0f7c34f487dd6abac3fe01c1ca67fa672b5448824bbef58388d0d52513af3","receipt_hash":"sha256:b773587fb96928d2fe3e6be31506c4971c9f41c315e7939dc3485b0589e7e846","signer":"ed25519:bench-node-01","signature":"7701803b9b63d76e0700f26a9cd4fbc5cbd7a81ee11409c43b5a49de6955fd9b409d1751615ce8ad1e45751878b28c3aa9f6822a0e08137124b062570f6c0a09"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9ba342865ea9ad7353d12d3dbb715bf62a85a87b7fbabbd4c1e91ee289ac3efd","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:f70b4758637322ee4d79b8a5f7b81ae70da5a6c8a9c3a9e8023f55d285f1b3d9","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.266768040588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.514847e-02","shared_alloc_j":"3.171616e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f70b4758637322ee4d79b8a5f7b81ae70da5a6c8a9c3a9e8023f55d285f1b3d9","served_from_record":false,"record_id":"r156","record_hash":"sha256:1a770e35eb1b8f8b37420bbfced6c945727df460cd8325620308562bddc169bb","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":98974},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834852e+01"},"chain":{"prev_hash":"sha256:b773587fb96928d2fe3e6be31506c4971c9f41c315e7939dc3485b0589e7e846","receipt_hash":"sha256:0a9c4976253bce239dfaf3d875d9e28d17e83532cb1edb60e4643a9264ff7c98","signer":"ed25519:bench-node-01","signature":"b4489da496bd108e8d01e14e029409ef2c4e3a1601507cc1a30cc14d85c79c1eb4f35eae96d6f3084cc3b91c29d6693402821a7f8e36634beee832bde883660a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7ad14286ad95257ec27fdf5844b048294407a33985a1bf52b24b54bc70c7da95","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.610198070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.634038e-01","shared_alloc_j":"5.446793e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","served_from_record":true,"record_id":"r101","record_hash":"sha256:423f6097e57e4c77557b0caed44714a3b731fb972ea1da097ee6162150ae2cb3","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":93972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858338e+01"},"chain":{"prev_hash":"sha256:0a9c4976253bce239dfaf3d875d9e28d17e83532cb1edb60e4643a9264ff7c98","receipt_hash":"sha256:3a384cff61db46a5266f84608e5a2ae976d3d418d0d3b088832b6a65b631cb98","signer":"ed25519:bench-node-01","signature":"01e410ab33644f8793e7fc9f55a304f5ee14c71c832a2ae5698c2f9a7aa3166a721bc537eaf040c20fb42204e82f1f34afd45a500d165857f77fcd9a5e13040f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2795f2781b388fd09a3fa767db5b487ceb94966fa0a0305f0c28ddcbb2629d43","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f64acee0744f6cb5b0186d8df86be984d0d6ad9ef0872d7c68ec46d52b0594b4","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.726943170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.376779e-01","shared_alloc_j":"4.589264e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f64acee0744f6cb5b0186d8df86be984d0d6ad9ef0872d7c68ec46d52b0594b4","served_from_record":false,"record_id":"r157","record_hash":"sha256:1d8203a5b8d3c9c81b0b23660d61289652ea34929007e17f0ee585d806a9d580","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99141},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850898e+01"},"chain":{"prev_hash":"sha256:3a384cff61db46a5266f84608e5a2ae976d3d418d0d3b088832b6a65b631cb98","receipt_hash":"sha256:2a3c962b73521de5d9fa5d1c5d27585e5b6ede20d5efd3521a501822e71bfb60","signer":"ed25519:bench-node-01","signature":"31ff4c9cf6bac282f08507007892fff6d3d4e441101b4ebd0511814babfc080c0f99d5b1348132d3abbdb26657bfdeab6eeba72bfc264e2771d66672a1fcab04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ea2b3af99453247d52b0e47d7ca765104748a22ea6bcc9b6ea6df68431b85459","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.240213770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.526275e-01","shared_alloc_j":"5.087585e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","served_from_record":true,"record_id":"r149","record_hash":"sha256:5766de1b0954020a4a5f70be2b1e114504615839e2365bda98f7b248fac792b6","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":98338},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855375e+01"},"chain":{"prev_hash":"sha256:2a3c962b73521de5d9fa5d1c5d27585e5b6ede20d5efd3521a501822e71bfb60","receipt_hash":"sha256:621407b907c360bca23a2429082ba60cf285e9d12eb0c716b0903b942581a231","signer":"ed25519:bench-node-01","signature":"d620c3bab5cdba76a6beeac7aaafe2271c1c56e1a21af3882e9dea6bd9ce0da85b01ddd8ec83a7daf6766e1fde6d92cf8bffe91ac262fa2eae7c6b865856bd02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:31e81545105844b39614e64b6c44b9df5eb7fb98ebfa828963a84bdc4050916a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:7fbe0bb7487a415754e1d2db8aa8e75c9a958e18764a14b62dbb6702a827d546","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.701286870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.369306e-01","shared_alloc_j":"4.564355e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:7fbe0bb7487a415754e1d2db8aa8e75c9a958e18764a14b62dbb6702a827d546","served_from_record":false,"record_id":"r158","record_hash":"sha256:88abfffb4c90cecda00ea3901c3e4e41126603241b96d66c18153f54bf999e3c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99302},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850662e+01"},"chain":{"prev_hash":"sha256:621407b907c360bca23a2429082ba60cf285e9d12eb0c716b0903b942581a231","receipt_hash":"sha256:57da2e0dcd7649e41f1b4fc552ddbfe88988d26d8fe47a043accbc4113df5126","signer":"ed25519:bench-node-01","signature":"851c4dbbbe721e052d9fd8bc0984cce68e20e2e00c277a575cb9d3c48a5fd445976a342162db1907b7eaca479407e5c4549f843f7fc2a3c49ae30e79c49df702"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:55a28c09c5545232c3a53872b87e64baa99da34d897e07ebb875dd006d9a4d7c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:3c9feb0b662a0c417a55ec5751b1c501d1d315c1d204379045c2e004b8c5c875","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.862335220588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.336895e-02","shared_alloc_j":"2.778965e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3c9feb0b662a0c417a55ec5751b1c501d1d315c1d204379045c2e004b8c5c875","served_from_record":false,"record_id":"r159","record_hash":"sha256:1c1dcd4d20b2916ec8891938b92c85b6711a814628df4ca4b2ae748dea597e96","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99348},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829112e+01"},"chain":{"prev_hash":"sha256:57da2e0dcd7649e41f1b4fc552ddbfe88988d26d8fe47a043accbc4113df5126","receipt_hash":"sha256:c8a29086f0ec39c5e54f7941ff5a8e6d561354573582f64a9e4a226456a71afa","signer":"ed25519:bench-node-01","signature":"492c442fc84ab43d1d8b661947d856bcc16561e2b45b12175e33780bc8e55ce19dfff8ee3a294267cc0837df7aa9327989bdff09607cb8625a1444e275f2b30b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:050f44148af1caa01fd309570ef0d046afa3515cc66064faeaf50f132ef8a363","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:236ec770245fbae01fc58a6e26be276f26c092cfb0289d628034a105e4a34f85","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.791852570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.104423e-01","shared_alloc_j":"3.681409e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:236ec770245fbae01fc58a6e26be276f26c092cfb0289d628034a105e4a34f85","served_from_record":false,"record_id":"r160","record_hash":"sha256:9321df311783dc3660a7863b6fd15f6cfbc1f324a0bc0b1ba11a648c91e751a5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99410},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.841325e+01"},"chain":{"prev_hash":"sha256:c8a29086f0ec39c5e54f7941ff5a8e6d561354573582f64a9e4a226456a71afa","receipt_hash":"sha256:70d7af27b18c05590865efe6ccbe6ce0ea084bf8e8a114ba65182b46fc4eb28b","signer":"ed25519:bench-node-01","signature":"992f9dfc4e4bea4fef888d0d0b36f9b410c38bb93585cbe54753f5646773b9387bdd2c594d58d6735973c36a7cebc7e5a878f325afc96eb1e84763bffc552503"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1e7ea8d9eae313eba20b13ff40175aa94a2c1ca51b87181320a81d730be10a95","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c70c4f1cfbf7f3e80ab7fd116b69405e0071bb46bac6a04135010096235a99f3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.051613980588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.975571e-02","shared_alloc_j":"1.991857e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c70c4f1cfbf7f3e80ab7fd116b69405e0071bb46bac6a04135010096235a99f3","served_from_record":false,"record_id":"r161","record_hash":"sha256:0eee3e2f9d255e1ee0143cff2061e9ca2f87125468fc3d082061511ccd760deb","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99443},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.814650e+01"},"chain":{"prev_hash":"sha256:70d7af27b18c05590865efe6ccbe6ce0ea084bf8e8a114ba65182b46fc4eb28b","receipt_hash":"sha256:adade15c6199bfb2bf91e94fabebd4142310a231f1c309951380c7f01ed33452","signer":"ed25519:bench-node-01","signature":"f3bac38aaa728cb0f5f67510daf913c19ca8d5eb61ad0ed35f484a4bb7f1dab1a991b4fdd50c391eaafb22a19646063874d802d13d88f1bf813c9365526ea209"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:334ced23bc6a1f01db24533eb3384978beabbcf498d83fbcc40b98e10c7f3737","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:866985a43c4aafecdce84de12bb2720fdf4130adc7633c396da10fde78f100b5","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.815610310588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.200804e-02","shared_alloc_j":"2.733601e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:866985a43c4aafecdce84de12bb2720fdf4130adc7633c396da10fde78f100b5","served_from_record":false,"record_id":"r162","record_hash":"sha256:880b13f80c7c7fa2c1283b860a108e20c7f711860c652dfe5c00e77bffe73369","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99489},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828397e+01"},"chain":{"prev_hash":"sha256:adade15c6199bfb2bf91e94fabebd4142310a231f1c309951380c7f01ed33452","receipt_hash":"sha256:67da43b8c5af8ddc220ba0fb445bb15d32d9a21817645cb0cd4383b61f4544c2","signer":"ed25519:bench-node-01","signature":"acee947a1bb4ca072bbadfdca150a3bfa8272968bf6ec1be33a552055f7ca00df1c3513b214df7d136364f207fb3131b71d979989a6f56f1ba353acea44de40d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e8fcf3947b4eb0411f03e078bc57d45a9d09659b5310951697cacdb14a410e35","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:315c14e61b89addfef08fbfe1205125c8472164f9cdf669f157fc7fc338e586e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.489472130588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.250886e-02","shared_alloc_j":"2.416962e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:315c14e61b89addfef08fbfe1205125c8472164f9cdf669f157fc7fc338e586e","served_from_record":true,"record_id":"r47","record_hash":"sha256:0fd550875b4b6b51c231682f03b3c2c48dc7a447dd1adb4f3e7a8216e2d7428a","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":89837},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.823051e+01"},"chain":{"prev_hash":"sha256:67da43b8c5af8ddc220ba0fb445bb15d32d9a21817645cb0cd4383b61f4544c2","receipt_hash":"sha256:4aa5e38267dabd18ae5a19612353d333f45e2d469171cb72e53082f003d8d111","signer":"ed25519:bench-node-01","signature":"e18b9970ea6fd3cf19ed880bbe0845d0393e4284eb45ca6ba0c531f3364aec556d1899112ea21f3291a2d1fa9c620302beec34b7579a7f3d20d39fa2111f0a0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:27ff362d24c0d0d5d1dbfd8f24282863d73977d36fe32feacfc2d609a9db9533","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:fc270faed1a038462ee17ad9afe5fc830b173f58fbcb6f74f25d11dab82a9b32","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.855172830588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.316026e-02","shared_alloc_j":"2.772009e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fc270faed1a038462ee17ad9afe5fc830b173f58fbcb6f74f25d11dab82a9b32","served_from_record":false,"record_id":"r163","record_hash":"sha256:55d7006368260ff33a8ae09ff2417f7f1d0da3508ee64f75ee6bd30ca5cdde9c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99575},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829003e+01"},"chain":{"prev_hash":"sha256:4aa5e38267dabd18ae5a19612353d333f45e2d469171cb72e53082f003d8d111","receipt_hash":"sha256:9ac9c59d2265a3873d34caa8b3185c8e014edd80ce7cda0b83a08ef28bb48620","signer":"ed25519:bench-node-01","signature":"b60106da69be450efd2a050651cd493302e1d0a4cc01c74508e3982f5d7f9808d7acc198ee4ec4b8b0c36ed79d2af716555a0e5540dc1913abcf3d377e41be07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d5964ca0a6e7fc9b6bd06f7dcceb81ebd671ccc7c463b41a7f4024dbe317e8f7","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f8045743fa59e45d492212b7ce6a4d2284e391e9ee89332c8f878260e18e5039","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.739944070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.671828e-01","shared_alloc_j":"5.572760e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f8045743fa59e45d492212b7ce6a4d2284e391e9ee89332c8f878260e18e5039","served_from_record":false,"record_id":"r164","record_hash":"sha256:55019fedb126a29d3ebc3f8263b658b03b7383301022eefbc39786aa0e5dba4a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99668},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859331e+01"},"chain":{"prev_hash":"sha256:9ac9c59d2265a3873d34caa8b3185c8e014edd80ce7cda0b83a08ef28bb48620","receipt_hash":"sha256:c9b8b86f0ae16788954d8cea596f56529a89b42bdf5ff9218745d6ceccfa1154","signer":"ed25519:bench-node-01","signature":"4f9b2845686c67f02cdf67ec1a1cef830c7b6986f5290ce539ec1b1ff94a5abf6a35baa82a25236e05be4869577010983d2c52a79199b6725fea229cd1bc1002"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fadc0fbfe5ef66a9cde2d09f5082996133dde607e7e14ec1b54b68c5a06a57a4","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:d44df2bf4fb54c72ad6469a023b0b46e6be12079545ed3c2ae2aa38fe0e4f661","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.711192670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.372191e-01","shared_alloc_j":"4.573970e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d44df2bf4fb54c72ad6469a023b0b46e6be12079545ed3c2ae2aa38fe0e4f661","served_from_record":false,"record_id":"r165","record_hash":"sha256:93d60ae60910aaf517d5d8e5bec8fd928a58f1c6062aeca94522befa93e9f409","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99744},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850753e+01"},"chain":{"prev_hash":"sha256:c9b8b86f0ae16788954d8cea596f56529a89b42bdf5ff9218745d6ceccfa1154","receipt_hash":"sha256:7dda532f261dcd1a625c57e6e996a9064a54b53799791a983c869b75e083ce82","signer":"ed25519:bench-node-01","signature":"63d53ce0e3164c531947814f1da9ae2dc640330f2b224c64fb979c0553eff7c6e16c5c211d81561062934a35b6722b664d01da57d8e7d9c31c95910879cb010e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8ed7f791358fe6e870e03e97306828a0961b02907c738d5735c04cd226bef7d0","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:c5feb99768a5f6dafcf10e73e5dd3b71a0e485e646e80369868257c8982b6ed8","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.059306260588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.997969e-02","shared_alloc_j":"1.999323e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c5feb99768a5f6dafcf10e73e5dd3b71a0e485e646e80369868257c8982b6ed8","served_from_record":false,"record_id":"r166","record_hash":"sha256:54c1aadc016d06670b52cd4f03e23ecfed3d60b12b9851403854ae26ea04b3e3","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99777},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.814812e+01"},"chain":{"prev_hash":"sha256:7dda532f261dcd1a625c57e6e996a9064a54b53799791a983c869b75e083ce82","receipt_hash":"sha256:553592bff36521dc01e79c86ab4853deac675639f1f44748ec091b7d95881235","signer":"ed25519:bench-node-01","signature":"879e1e0112fb042f54333c7afe9cfa95d090424d6c2dd537971c54013240c8e85698b085c4d18f5b9ed0c8822a095c0babfcdd70230231416d32ed7f59038f0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:23f3c56cd88860fdf8e49cb11bee568bf0033478504c1d6f433b6df328767534","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:1d7a6cc8581b38a163cf95aa00c0875a71db7a0206c9b19ddf52698710a36ab6","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.856013770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.705635e-01","shared_alloc_j":"5.685449e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1d7a6cc8581b38a163cf95aa00c0875a71db7a0206c9b19ddf52698710a36ab6","served_from_record":false,"record_id":"r167","record_hash":"sha256:662e905b120455ce12ca9cb913fcab615ec01d3a25a2885731785f1a0ef429de","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99872},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.860200e+01"},"chain":{"prev_hash":"sha256:553592bff36521dc01e79c86ab4853deac675639f1f44748ec091b7d95881235","receipt_hash":"sha256:2307eab76cf670183cef189750df861b3e28b62c19a2836c3b99fdd2e9213284","signer":"ed25519:bench-node-01","signature":"53644f1db636cac158589c90c717b2d5ab1423876a97597b8a37c80a8bd4669ece82524726ed1f9acb15ac32978ecb6807ff699d93b73566e30a946b58a32302"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a19f2097a2ece7598da867cf2f6b85c2dd4b34f284c42819b15a6140d93e5dfb","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:b35fdcce6b0deeb13607ea6ac07486b5e54843dcb842e6c100c5251a428ff403","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.783951070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.684645e-01","shared_alloc_j":"5.615483e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b35fdcce6b0deeb13607ea6ac07486b5e54843dcb842e6c100c5251a428ff403","served_from_record":false,"record_id":"r168","record_hash":"sha256:f49b1b0a613d8df73a042252b167239cd8fbe8fa5b9fbd238a190ee26024cd09","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99966},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859662e+01"},"chain":{"prev_hash":"sha256:2307eab76cf670183cef189750df861b3e28b62c19a2836c3b99fdd2e9213284","receipt_hash":"sha256:b20b703aac792e1e247ecf24f7e3f4972120d03736a7dad7209b0a400941293e","signer":"ed25519:bench-node-01","signature":"5bcc7b1280a8b3048f928c7b755c9378fe8ee88e8a6a91bc8268ed9b4041d6fe707ae4456e2ebaaa1007d238475e12ca7133675b4356bf844790d526898fe10b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:159f38fb12bc0c14ce6e4c514c9fd3320216c17f48ed672aff3e9a19d81056e6","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.432438740588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.172147e-02","shared_alloc_j":"1.390716e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","served_from_record":false,"record_id":"r169","record_hash":"sha256:5899c1861eccac089cbe133fab945d22b0598b0f2365e10cd70a29f4a5f57eee","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":99989},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.799048e+01"},"chain":{"prev_hash":"sha256:b20b703aac792e1e247ecf24f7e3f4972120d03736a7dad7209b0a400941293e","receipt_hash":"sha256:bbe91ab4a40eb7f86def06286880a350c9cb9507c7ae4474cea22d6787cf8e23","signer":"ed25519:bench-node-01","signature":"b937207820a8135eb7c888ff8071a4d5f4900cc3749269325d68df3df593b032a0c39adb0745a38ef94f4599732611f1f363906d92851b1e11b0020b534ac60c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:df186217235463797da741e5b3eea638412617bf0f115be211ac3247e8c7a599","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:8130c76217d2e109b9e876d67a30cce4f6ada330eaf9ceab951621f8d960e66c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.103609870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.195226e-01","shared_alloc_j":"3.984086e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8130c76217d2e109b9e876d67a30cce4f6ada330eaf9ceab951621f8d960e66c","served_from_record":false,"record_id":"r170","record_hash":"sha256:6e363cc5d16869d08c527dce0b693e3e67dd357e3e7f729f2679293c80572d30","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100055},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844757e+01"},"chain":{"prev_hash":"sha256:bbe91ab4a40eb7f86def06286880a350c9cb9507c7ae4474cea22d6787cf8e23","receipt_hash":"sha256:4f4ad2b318f701d2cddb67a72155652b871c1286fc64106b262d6b0e313799bd","signer":"ed25519:bench-node-01","signature":"542f0688b9b8700a306ecde87117bcf26f4252a243c215a1f535f91a663942ae5343cab2783d095dac49de477e57cbf41c86176bf99b589ce03b55cc22da870f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b72e4993e8b53e8747ba46935bd06aab593639a0e4f8fd930bce4c91690a09ba","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:8d2ad364f746f7e5890037cb0de73c8c0800284c36b0693f37f9781bbdda230a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.165812590588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.220802e-02","shared_alloc_j":"3.073601e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8d2ad364f746f7e5890037cb0de73c8c0800284c36b0693f37f9781bbdda230a","served_from_record":false,"record_id":"r171","record_hash":"sha256:7addd716918ddea88f258c0f0d90f73f55eb5816a1eef57c529d84c173aff8f8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100107},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833489e+01"},"chain":{"prev_hash":"sha256:4f4ad2b318f701d2cddb67a72155652b871c1286fc64106b262d6b0e313799bd","receipt_hash":"sha256:2c0310530518ec59a4bb24d815ec8a70cee2644d06b8865dc17231077f6e837e","signer":"ed25519:bench-node-01","signature":"c6c8124cbf11cd761dcc0fedb02adf8533da1966071e4f8567df3dab502386f818eec6b924383e112a007c67da70d1e9df0976dfc211821bf305d974101b4301"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b4143f095880926618eb6403f78b202556ae567fb8b90953b487278274fe94d5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:d96ead6b9efeba477a485f30879290174c4379502931ddb2e2e517c5180a0925","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.606521110588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.679184e-02","shared_alloc_j":"1.559728e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d96ead6b9efeba477a485f30879290174c4379502931ddb2e2e517c5180a0925","served_from_record":false,"record_id":"r172","record_hash":"sha256:cafdcc7d790145457efa80142436d61051d2a2d116b8aac7c163f7885dc83f93","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100133},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.804029e+01"},"chain":{"prev_hash":"sha256:2c0310530518ec59a4bb24d815ec8a70cee2644d06b8865dc17231077f6e837e","receipt_hash":"sha256:8a6ab97114753339337ed204e4dfaf331c02ac17565671b0361681058c64fc76","signer":"ed25519:bench-node-01","signature":"83e0e0298e3bd73bb149f35b49d702a14e96e4c1cc11527d90ca4ea814dac14bb051c2092b46d44a64c200f0c9137786b4a682cf28f560b14ac6bd3778189901"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:674e6a5bb0a241597de5d7e29f7a77bd7c99c9a06145824c096c159042bb7d4d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.870773170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.127409e-01","shared_alloc_j":"3.758031e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","served_from_record":true,"record_id":"r52","record_hash":"sha256:4b407241ed751d5065cf8c5d85ecd7c9cceb59ec65630b16476cef31225da9a5","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":90404},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842220e+01"},"chain":{"prev_hash":"sha256:8a6ab97114753339337ed204e4dfaf331c02ac17565671b0361681058c64fc76","receipt_hash":"sha256:d28f3eaa0980fea4abd31bd6d0507ace91991c6a720808b5334cc472c1d32524","signer":"ed25519:bench-node-01","signature":"1ce2dab9e5fc1515dbd6ef63a0589df4b3d34418d1b54ba9ca8c90f7175ff9dfec84cb0111ee39d166a067be6f9acfaeeae4da4a46c5312ec5f31659cd88860c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:81fb26f4104e952d55d876512661b1672f61a4c75a07716591f146fe135487cf","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.045176470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.956820e-02","shared_alloc_j":"1.985607e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":17,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.814513e+01"},"chain":{"prev_hash":"sha256:d28f3eaa0980fea4abd31bd6d0507ace91991c6a720808b5334cc472c1d32524","receipt_hash":"sha256:4f83d9c147efce6a4b70d9650d86767920b28774d647cb66f6e7e54a8adb3cd1","signer":"ed25519:bench-node-01","signature":"f1ba721a11dbfa7acedede7d18cfdcc18b78e5d0ff7385dbad0082379ae20c2346e7598c45e3d0714f0b31ad5617996d03656d6056f1850238c08c7fdcdd9905"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:26622747bb8163ae90cb94174af51dc9560e4bcceed7aaf87b8d0604c9ba0691","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.409006070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.575438e-01","shared_alloc_j":"5.251461e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856752e+01"},"chain":{"prev_hash":"sha256:4f83d9c147efce6a4b70d9650d86767920b28774d647cb66f6e7e54a8adb3cd1","receipt_hash":"sha256:6304b23e7c74bee2341babada701d3ccd8811cc04c3858d7485aae0cdcf191c1","signer":"ed25519:bench-node-01","signature":"885b81e6b020b887c474f82bf6817617f413e55c91d969e933a80596b82467f68018e203f8d4a6c4dd38f63c380949d1779f9314caf96daa30b9cca96c5b1108"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e58be2ca1207623804be0d7bbe622a0cc067a22fabf9b02c963308599b875935","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:db77ddfc23a61c07ebd5b655bce57cf0a257f4cd3183666ef84c4bd52ecdd2fd","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.624563470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.638222e-01","shared_alloc_j":"5.460740e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:db77ddfc23a61c07ebd5b655bce57cf0a257f4cd3183666ef84c4bd52ecdd2fd","served_from_record":false,"record_id":"r173","record_hash":"sha256:428d5f7f69ba9cbe1bb4ff54361b4953bead5fab38b14d6ff9d6c93c1c9a16dc","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100407},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858449e+01"},"chain":{"prev_hash":"sha256:6304b23e7c74bee2341babada701d3ccd8811cc04c3858d7485aae0cdcf191c1","receipt_hash":"sha256:b4c0735284de36d11a0138806b74736014f32bf8181fe8eb954bb97cd6b8846c","signer":"ed25519:bench-node-01","signature":"191719569f854e89223891675abe49e6063e5930f4e98feb3827697c37e5ea9e96d19509f5da1a6e3104df0d354120a737a3d44ecbbf3ef7702c792d631c840c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b5eeb218404c76823336f6a24cc0e81eb81f4eefd9981e20dcf3794d48adf096","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.876185870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.128986e-01","shared_alloc_j":"3.763286e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","served_from_record":true,"record_id":"r169","record_hash":"sha256:5899c1861eccac089cbe133fab945d22b0598b0f2365e10cd70a29f4a5f57eee","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":99989},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842280e+01"},"chain":{"prev_hash":"sha256:b4c0735284de36d11a0138806b74736014f32bf8181fe8eb954bb97cd6b8846c","receipt_hash":"sha256:54a6480da8f593f3ad1debee47c1a2a9b53ad14f6155b46c0cc75d295c1336e7","signer":"ed25519:bench-node-01","signature":"7c77858cebdedc195efb415af9f96f8882ea96d1acff7b9ca0bd44c67a6c4f94cf95a9b75fc83e640bce8cd9ce75e24bc12190ceaf6e753ff5719f1ea3b57608"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:054648f405dc01765936ff3793a7b3b77c777ef68747f767969ee9d70a7ae884","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.900545140588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.448187e-02","shared_alloc_j":"2.816062e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","served_from_record":true,"record_id":"r169","record_hash":"sha256:5899c1861eccac089cbe133fab945d22b0598b0f2365e10cd70a29f4a5f57eee","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":99989},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829688e+01"},"chain":{"prev_hash":"sha256:54a6480da8f593f3ad1debee47c1a2a9b53ad14f6155b46c0cc75d295c1336e7","receipt_hash":"sha256:c589b4352c73351273611ab30f8b983cf49a133025a4e89737ab08b95e766c99","signer":"ed25519:bench-node-01","signature":"0e21b9035f1a4099c1e41fbc5cf61cfc0d58cf2d89d8ac1a594c39b407ea4350e4ff5fec628f0c03aadb20e4ae4283412a8d57824174cbb7926b0c58d1209508"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d48694ec0cbe1fd236e942fabea49e5f252710d02d34dd37997140e41c69a95b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.298176410588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.693714e-02","shared_alloc_j":"2.231238e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":5,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.819578e+01"},"chain":{"prev_hash":"sha256:c589b4352c73351273611ab30f8b983cf49a133025a4e89737ab08b95e766c99","receipt_hash":"sha256:544bcba90f6f3405ce99665a14a72009390525f158cb3e507d8a2e6eb3cf5b34","signer":"ed25519:bench-node-01","signature":"6fa9ce6f17b3cb92c0e270a0332de617e766e2f76b7323b9df9b1ad2e153f4faa70fe6e7a11a3b76e7a35d34ab94d2f1ec8a3f1feb730d31a7abb109cbc7d602"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:984fe9435c174e288bdaa210a8e737d86b032e2f48b6a839aaff44b658535f1c","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:08ba4fe6512d0d94de19c3932e3bff09728b6ede0b1838ff5091c9850170a516","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.859063570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.415260e-01","shared_alloc_j":"4.717534e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:08ba4fe6512d0d94de19c3932e3bff09728b6ede0b1838ff5091c9850170a516","served_from_record":false,"record_id":"r174","record_hash":"sha256:eaa4a62989bed6ee6bcfd5b2b25c5e289680ee3d6ca1245e29d8f5f7ddcef673","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100632},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852095e+01"},"chain":{"prev_hash":"sha256:544bcba90f6f3405ce99665a14a72009390525f158cb3e507d8a2e6eb3cf5b34","receipt_hash":"sha256:2f1ba4520b541a09322e41adcfd7617a4e14deedc115ac539e4a2c9fc1e4d3b5","signer":"ed25519:bench-node-01","signature":"67310d95a6dc1cf18f797c0ce3a6e1f768c25aaf67a865d681907c6b294c30ddaf7c34643b9652747a43ce87af18414125d69778dbc70c5e4e4f399562447300"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4296bc9527d66cc6bbe520c089acd2d5b5385b09677931a139123af67e77dddc","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.639073440588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.686617e-02","shared_alloc_j":"2.562206e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":18,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.825585e+01"},"chain":{"prev_hash":"sha256:2f1ba4520b541a09322e41adcfd7617a4e14deedc115ac539e4a2c9fc1e4d3b5","receipt_hash":"sha256:ed428ff5dad3bf94985a360c98837fd3945ea644fca821049ef4bcfe0be6b81a","signer":"ed25519:bench-node-01","signature":"d075d05f3ee55c3b00ac8fc120ec8a0f11233fd6abdfde7a902b41f025a14689fc20b38772caf4bafffbc4ddcc1618aee60c0433ebca636097e37123b800ef0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:503bc7028f5eb02d17d59bc8028aef811f4d73bb7f5701a339515a85b24f6b47","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4a81192758d20335e6b34c2b4afb8aaa03ec6ab7edae4b92d5689ea56bac885f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.796344870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.396993e-01","shared_alloc_j":"4.656642e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4a81192758d20335e6b34c2b4afb8aaa03ec6ab7edae4b92d5689ea56bac885f","served_from_record":false,"record_id":"r175","record_hash":"sha256:48f838770d2511a296324b709391e778375bc774b0eb200fd362f8ffe9eb37d3","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100753},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851531e+01"},"chain":{"prev_hash":"sha256:ed428ff5dad3bf94985a360c98837fd3945ea644fca821049ef4bcfe0be6b81a","receipt_hash":"sha256:8e7da1837d8da2dc48661ddaf3607f06f4973554cc8f58d2771b153631210e8d","signer":"ed25519:bench-node-01","signature":"b41e5e9c89374c49e9b34e22ca7ef0eb63c9595583b8e6752dd81c66cb509acd11fcd44712a6f8b72f0d6673124294d4ee50f4b1555b4403299c93c78594ba01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6ce7b8b45f3f19d0494ed87c38d9ebb168e3bf4ae6b417e44ff7ad4f447ffa9a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.996269470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.163962e-01","shared_alloc_j":"3.879872e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","served_from_record":true,"record_id":"r140","record_hash":"sha256:9f4054b5d15ac16ce0b79b780e5d8bf8b428262e4fd2a332ec366dce24f89c41","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":97569},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843605e+01"},"chain":{"prev_hash":"sha256:8e7da1837d8da2dc48661ddaf3607f06f4973554cc8f58d2771b153631210e8d","receipt_hash":"sha256:d314270d97656ca9e4564a301eed818c65d335b495ec16a1529945f037d5ffb7","signer":"ed25519:bench-node-01","signature":"57863ad44a060c3f4f4f706ef041e03a25f3d16a6c28715fcd17cbe30f5797fefe79748934e4dacc2e58d6cd288c6b89d5690fdb21e2d0eb1aa73a6811256c01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6bb66d09003dbf7a8326c7bf51f769cc740bd1791f1837b0b1fe2eefc0bc6a04","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:aa7e52c298df874051c6d2a872415cc2dfe3f707b7195b21777823f81a44483a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.937106670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.437991e-01","shared_alloc_j":"4.793304e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:aa7e52c298df874051c6d2a872415cc2dfe3f707b7195b21777823f81a44483a","served_from_record":false,"record_id":"r176","record_hash":"sha256:7bf93cbada79514e2ab3a1dbd6db984b2d1e94b7358d0302980d39056e338b91","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":100897},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852787e+01"},"chain":{"prev_hash":"sha256:d314270d97656ca9e4564a301eed818c65d335b495ec16a1529945f037d5ffb7","receipt_hash":"sha256:4d1518ddd6114d767d4d5097a3892abc64061a5552e6fb3019cc7789ee0b3522","signer":"ed25519:bench-node-01","signature":"35f2f6a2ae451a6efa7e1f03f6a13a60995b1f52b9e0677e5b8434febe987f1cec0194aa2c91fc947231b5c36db47c0419cd2d333d129a7a813abc6a5110c30d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:15abd5438e8f66623bf4b199fbdc717498390fbb6a2397994ed4ef46fa0fa286","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.441080680588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.109941e-02","shared_alloc_j":"2.369980e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":6,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822198e+01"},"chain":{"prev_hash":"sha256:4d1518ddd6114d767d4d5097a3892abc64061a5552e6fb3019cc7789ee0b3522","receipt_hash":"sha256:574b569be855de859af529b35a841ade7bd222552e8f1d4dcb64bfbc24aafeb1","signer":"ed25519:bench-node-01","signature":"806525b8b952e29ce767ef54017ceef3c27703d6818759c0e8aef4bebfbdaf564c9a0128c1f5912fed20dcd103a5f461a790731f91a8b464453d38bc7092e60b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f7dc2807323aef2e8baa3bc87627f4fad5bbe44d95a834d5b476fdc95a7ec48b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.836931090588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.350282e-02","shared_alloc_j":"1.783427e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":7,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.809849e+01"},"chain":{"prev_hash":"sha256:574b569be855de859af529b35a841ade7bd222552e8f1d4dcb64bfbc24aafeb1","receipt_hash":"sha256:cfcd7f8a6ea0bdfe7d46e8a5f757da440980779f31b516a2680d45900f2f9a39","signer":"ed25519:bench-node-01","signature":"454c38a4685c5642d9740f0be0c000ad6083a62633f608657b7b513aa6d26b52be8e35a94518da47d84cbd5c161431d47d93fc99ca7a1e6176c1396df6a2310e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:716ad8ace0e5936ffa79a0863f38c1a21ece3f772e12799f718d87a6985118f1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.394740960588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.974969e-02","shared_alloc_j":"2.324990e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","served_from_record":true,"record_id":"r149","record_hash":"sha256:5766de1b0954020a4a5f70be2b1e114504615839e2365bda98f7b248fac792b6","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":98338},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821366e+01"},"chain":{"prev_hash":"sha256:cfcd7f8a6ea0bdfe7d46e8a5f757da440980779f31b516a2680d45900f2f9a39","receipt_hash":"sha256:2ac311e9d8a38698695f8602d8bd6048f9445806ae28de1fdff5a641f795a48c","signer":"ed25519:bench-node-01","signature":"1954c90aaa29f1b091338c805166a16e473447c428c310740d99fadad97c7b9a4da2de293d6eb85494d8f246693218882d1c6f6da56ea44d6b57c889284ef40b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a0c7658c17ca9ebb72a9e446f6b069a0f5d4cb9d7ef3135c89491767796e2787","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:939bcc1943febcebbe225a53f2decad409bea62e86017712d04d92893c520ed4","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.689609870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.365906e-01","shared_alloc_j":"4.553018e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:939bcc1943febcebbe225a53f2decad409bea62e86017712d04d92893c520ed4","served_from_record":false,"record_id":"r177","record_hash":"sha256:5ca6219c907c8faf0a3357d950c4e0c3f4e11971260ff63baebacb89eb4ef47b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101081},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850554e+01"},"chain":{"prev_hash":"sha256:2ac311e9d8a38698695f8602d8bd6048f9445806ae28de1fdff5a641f795a48c","receipt_hash":"sha256:813bdad028bbfec78b4fa2b75a49652ae84d1f04776446d8a809bee61f0ab88c","signer":"ed25519:bench-node-01","signature":"0bef6127baac2c0d2c4c9c4e11a65c4e46940a0dc2af7fb8ffc334acd0720e1828c92144b447a09b86691878f1b24e43512c9b7dff478a4ee7b68d74c4303807"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b3b061fd6f3a108eb3301b63cfa1449bda80a8560f1735cc4ec9399cbd395e39","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.485718800588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.239953e-02","shared_alloc_j":"2.413318e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822985e+01"},"chain":{"prev_hash":"sha256:813bdad028bbfec78b4fa2b75a49652ae84d1f04776446d8a809bee61f0ab88c","receipt_hash":"sha256:55fbe0b06110520b5879da2a0cbfe5b7619f642fc3aab89b6883c1e5ea99db76","signer":"ed25519:bench-node-01","signature":"c21b6c19c6e957babfdd42529693430d3e3213e20654ba6f57cfb632ed76575d5727250662a36069c90290a6a85306b1bcd336308fc037dd169b60e784eb720a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5f12fc50061b8dad4bdee04cf7e0264884576bdbcb4c6e3db9960c449b12c824","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.049145970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.761887e-01","shared_alloc_j":"5.872956e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":19,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861609e+01"},"chain":{"prev_hash":"sha256:55fbe0b06110520b5879da2a0cbfe5b7619f642fc3aab89b6883c1e5ea99db76","receipt_hash":"sha256:147b57c40460be7f06b179304ccd036b20e73e051a47219f01f89f8258f0ce6c","signer":"ed25519:bench-node-01","signature":"f8291889f7acb4c1b0f65cc871343762a9492042d6d76e22c8e91e6b1e79cf27dea5bd493cceb347b114a080a33293223e971b9c702c23dc2be583fb1b5e8a0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:2f5742c39f236cdef9b3aea56095e0d4ef39c8648e4523668fad42d0517ce841","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9e61930db681a8926fd28a93fc21fc78d349459ebf95dbc889666f26e6a9511a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.404329230588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.002896e-02","shared_alloc_j":"2.334299e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9e61930db681a8926fd28a93fc21fc78d349459ebf95dbc889666f26e6a9511a","served_from_record":false,"record_id":"r178","record_hash":"sha256:a1a0f595b5d51aa70120ec1a80c5fc0e81f1a214da0ec256ad9def5334859d87","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101258},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821539e+01"},"chain":{"prev_hash":"sha256:147b57c40460be7f06b179304ccd036b20e73e051a47219f01f89f8258f0ce6c","receipt_hash":"sha256:2bc2443492b19cac33cfaa1ab68ccc2ce850a4a0e8426280667f4216030eaee7","signer":"ed25519:bench-node-01","signature":"4fa0ca460a50d22bd2fa045c7caaf40f9eabde83d9b88e73f16648a7958b8b3ff929df884899c84e82dcbeec1694f2f7835e92c9d7e64af0ea0b38075e4f7408"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:60cf4e1769070159e957e1638bc2d68d35ac60df29bbdab7837d26368af78106","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.928505510588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.529624e-02","shared_alloc_j":"2.843208e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":20,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830105e+01"},"chain":{"prev_hash":"sha256:2bc2443492b19cac33cfaa1ab68ccc2ce850a4a0e8426280667f4216030eaee7","receipt_hash":"sha256:5efe61f26deda2c4538fc97c4c1de0946103a571314ecfd28de3dc1a6aa4d234","signer":"ed25519:bench-node-01","signature":"21f7ea7620d2903194a2e0a35fe568933514225e7788ac86dfa0acea91e3fd1d414102be75087efe0d9d5e174d800185706485d12cd5844b5d517bdcb08c7b0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:81eda61a2f48ceac9c6011ba3fc58c9fe61247866ab9a4bc1737a71ee36c0166","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:dde0d98cce82f3e04b6a435643bf0cc5ed3dcc0a2d028483e907de961a087012","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.147485170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.790529e-01","shared_alloc_j":"5.968431e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:dde0d98cce82f3e04b6a435643bf0cc5ed3dcc0a2d028483e907de961a087012","served_from_record":false,"record_id":"r179","record_hash":"sha256:f73ccbf34b88bb5a57be810d850e09eb29717763615d3ffc5e484ea1a988386d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101405},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.862310e+01"},"chain":{"prev_hash":"sha256:5efe61f26deda2c4538fc97c4c1de0946103a571314ecfd28de3dc1a6aa4d234","receipt_hash":"sha256:965ea38bbddf94e49fafa593c9d75296ba5c2ebcef958ba9a6126eb16d49aaea","signer":"ed25519:bench-node-01","signature":"b71dceb5c3216c750c475e93952f213988dbe00e87f82d33a157623a3a264a7bb8fcb46a6bde38a983a0f7e90d9f46a5a6e66ac3ec460da67045b09a66208b03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bdf823a81b6ef135a8245270d6d72b1da37ac6f65092cafb81bf4f9102f0305c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:83e3ecffea2fc1d618c8e6a2b3989bbf71e691b703b087230e7c8df1a5eb2142","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.205853610588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.337434e-02","shared_alloc_j":"3.112478e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:83e3ecffea2fc1d618c8e6a2b3989bbf71e691b703b087230e7c8df1a5eb2142","served_from_record":true,"record_id":"r11","record_hash":"sha256:6b20a68c63f066ea3b3730f453a658b9fedb04fdd68d05e5b26ebcb6db3b5af8","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":87151},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834034e+01"},"chain":{"prev_hash":"sha256:965ea38bbddf94e49fafa593c9d75296ba5c2ebcef958ba9a6126eb16d49aaea","receipt_hash":"sha256:705583b84de4822dc98971e4faf188085e9c9cc92a457b626e482699998b1e07","signer":"ed25519:bench-node-01","signature":"a80337fca8444bf3e34fe065765d77e7bd4eb5b745df16690552ae3afab6e33962b06297744aa2c48ffd3fcd07776b85a0424dd879ea99ca4a1d447fcf6ce60a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:097f5c787a98a752d2323f36419315f7661b91a54320bf0af43c8e424b6c74ef","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:7bb669efc7ef54a75650b800b852a682c0dea2c379850992581df1a10e149544","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.671227200588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.780263e-02","shared_alloc_j":"2.593421e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:7bb669efc7ef54a75650b800b852a682c0dea2c379850992581df1a10e149544","served_from_record":false,"record_id":"r180","record_hash":"sha256:403f6d0e4437c5e42111e960540a82e7276119588bfc95dc6655dad691a118b0","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101500},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826111e+01"},"chain":{"prev_hash":"sha256:705583b84de4822dc98971e4faf188085e9c9cc92a457b626e482699998b1e07","receipt_hash":"sha256:318c90a872cef24bff9c8449d093203285bd6ba50f1b1f89d61f8543d6b7296b","signer":"ed25519:bench-node-01","signature":"a8cd083e9478742b6363f41d686244b5841b2adadbb2425e0d13d0be20c1ba457367825fb0d2782fad772bfd319f0cb2a4b785c3ee77f21bd5787f3f1e79c40a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d300b4c76308fcc0e6f6c0b93a093f299bd86087521d0b58dd257de087057e4c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.791106380588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.216811e-02","shared_alloc_j":"1.738937e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":8,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.808752e+01"},"chain":{"prev_hash":"sha256:318c90a872cef24bff9c8449d093203285bd6ba50f1b1f89d61f8543d6b7296b","receipt_hash":"sha256:2f07ad01c831d8451294a7faab809ce7c25ac5234358fe9d2295d5d18fbe07ac","signer":"ed25519:bench-node-01","signature":"b167e5817681affb42343ea7b1f5e3a2fa5e1f76662849918ef6450072b37e7f4a2a8ba0d19a465fac8a8727a93cfc35fc4b8af4600841d6865b5f52e79b3b0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:49bacf9ca35ec38f5347e157e9247f29d2b830e33065433dd098133e182e30b5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:74c49c22905ea62e5a5f211dc5f47a895129ef8a84de0b3ca3c06e98b014cb87","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.718266270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.082990e-01","shared_alloc_j":"3.609966e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:74c49c22905ea62e5a5f211dc5f47a895129ef8a84de0b3ca3c06e98b014cb87","served_from_record":false,"record_id":"r181","record_hash":"sha256:b1537750aa8348ab7774307378f00565f63286c681001b65f15089a6d399f2a7","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101589},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.840474e+01"},"chain":{"prev_hash":"sha256:2f07ad01c831d8451294a7faab809ce7c25ac5234358fe9d2295d5d18fbe07ac","receipt_hash":"sha256:c0a36284145a976e28ea2e7427d98e77ab398787a596a2e0063f669001cbf9d4","signer":"ed25519:bench-node-01","signature":"85515624a71195bb95bba916035041e247af4b21af8d3db43a664e7ac3a9019ac25b44642db1e7a3008d33537975b795b4de61f84b0104fcd2863d02410daa0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d1f53761118415057f189aaaa329dfee3c4d536bd94258ef695c87ba2276a4c7","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.822095170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.219690e-02","shared_alloc_j":"2.739897e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":9,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828497e+01"},"chain":{"prev_hash":"sha256:c0a36284145a976e28ea2e7427d98e77ab398787a596a2e0063f669001cbf9d4","receipt_hash":"sha256:194a7b8118777ef8331abcc21f5065bcf72fd993f8ea7d4e3dd91e9f85a82ccc","signer":"ed25519:bench-node-01","signature":"8f4a5628a71fd899ac9963ad592b27b310330b1b87ff896d389012208dd735d2c5cc619d7eed19655abe1c4626499bde42faae61e2517d3604933bb796167a07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:68657770ade5ed3ea8e2394dbbc3cac433327db9854fe3228b3b09244e0295b8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:eeefeeffb8a0a9fb80a5cbf1e129d37dde0b471996c98ef784b3e99073afef89","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.127378170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.202149e-01","shared_alloc_j":"4.007162e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:eeefeeffb8a0a9fb80a5cbf1e129d37dde0b471996c98ef784b3e99073afef89","served_from_record":false,"record_id":"r182","record_hash":"sha256:e6730dbf4bd9c99c50a65a979c748bf21cf2c1c88f8a74ffac8071aba2134018","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101702},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.845007e+01"},"chain":{"prev_hash":"sha256:194a7b8118777ef8331abcc21f5065bcf72fd993f8ea7d4e3dd91e9f85a82ccc","receipt_hash":"sha256:e8c80384bbeb34cf78b0a1fc1917ef34241a0eec0b1c3a32acae994df1f2f257","signer":"ed25519:bench-node-01","signature":"8e53bd1ea65b41817636ef99b6af5c3820160b91ab00f8481f6bdf31aa0722c271b89c6b6360e1edbdbd46fb325316a15fa2bf1207572471c1447ff7dca2d70a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:774030c1f9a4d498f2ef606ee351eb51653d52a79445359ae35b788aeeffb563","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.939454190588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.648892e-02","shared_alloc_j":"1.882964e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":21,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.812208e+01"},"chain":{"prev_hash":"sha256:e8c80384bbeb34cf78b0a1fc1917ef34241a0eec0b1c3a32acae994df1f2f257","receipt_hash":"sha256:b3a9c2d9856a9ca02960287ead024c3a330ed0826efc0e2a1c43580ac58c3325","signer":"ed25519:bench-node-01","signature":"4c97191e1836e77042a7b848c082f2ae8af1c1abdd49c20caca26cafd5d8219431179908ca55866f8d1df24b391e77f1f01fb3658446ed7f63dfde2067300802"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0493a3bcca0405b175d0877e4b118e6a370408d529154e7d1ec986fd246e860c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:aef4bb6b5fe9ccb4e86032a47f27b234eace63aa374802947a1767a90c0a8464","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.733738070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.378758e-01","shared_alloc_j":"4.595861e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:aef4bb6b5fe9ccb4e86032a47f27b234eace63aa374802947a1767a90c0a8464","served_from_record":true,"record_id":"r99","record_hash":"sha256:34c9f3f3e1e23a57db0a1c6a6a7ac46879665e16a919134e270f9bc17f8e0537","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":93818},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850960e+01"},"chain":{"prev_hash":"sha256:b3a9c2d9856a9ca02960287ead024c3a330ed0826efc0e2a1c43580ac58c3325","receipt_hash":"sha256:4d3b502f8a0e20733fdc9eafe25a812ec2fb8b3c78a43100ee42a90e215b5494","signer":"ed25519:bench-node-01","signature":"5d68ce4b2b1fe8e4da1769758dc96134150e5d9552980dd58fad26f0907f1c2a834a26296f7852f9ca13ad4cde97c88d5a5ece2b38115e560a15f7baba631800"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:78321113bdb287c575d66c0368a9cefb86730d3b67db10bec275dc44829f5ed8","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:2150f93d600bfc917a75a44cc4db64793b61221b87f3d053e9c25c37953e88d6","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.717553500588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.915193e-02","shared_alloc_j":"2.638398e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2150f93d600bfc917a75a44cc4db64793b61221b87f3d053e9c25c37953e88d6","served_from_record":false,"record_id":"r183","record_hash":"sha256:4e28008d705ccde7d238a7ebeb481fdbe2513661785f9c1fc4b33b230d7b9589","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":101854},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826858e+01"},"chain":{"prev_hash":"sha256:4d3b502f8a0e20733fdc9eafe25a812ec2fb8b3c78a43100ee42a90e215b5494","receipt_hash":"sha256:8651e24c85cb2b6988a75f42da938ab13a93e26b8ebd0e9bb11e57b4afd0b1d3","signer":"ed25519:bench-node-01","signature":"1e814c54dce6edaed90c7edaf45f67f8159a3366c98270323ad76512f0d9eab1b92d4b34f57fc2839f29134fcbf984fa1a6c2367c60a422aafe56c728fab3601"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fe70527b2d1b0c1c24d1699bfc5d72f064c4b20ec34a526b2e14bab5970f9255","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.419695800588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.047653e-02","shared_alloc_j":"2.349218e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":10,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821816e+01"},"chain":{"prev_hash":"sha256:8651e24c85cb2b6988a75f42da938ab13a93e26b8ebd0e9bb11e57b4afd0b1d3","receipt_hash":"sha256:fdd591ae90813a01b4e37ee19a7fd9be82234ada4188ba86ddb9accc53867e54","signer":"ed25519:bench-node-01","signature":"33e5ef92ce6b0f6d8ba41845548cbb1b7ffeb59f20507fdf8da85b8374337a86e1e8496e1fe73c88c7e280f423cc9908b96e02445cbdb502ffa84d9d978a4104"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:58258bff15833f0d3816076377af7c1f5a474022312fe0192ae8c188bacd89db","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.914355270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.722627e-01","shared_alloc_j":"5.742089e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.860631e+01"},"chain":{"prev_hash":"sha256:fdd591ae90813a01b4e37ee19a7fd9be82234ada4188ba86ddb9accc53867e54","receipt_hash":"sha256:b5a007b3af643e9c71bc5d71b8490b9e92f4e1dc7a9fa8e2473b29b2d0dee06f","signer":"ed25519:bench-node-01","signature":"aa29498e20e915e7cb9e9bf15fa1ce5dce398a284be69d4946b0b6606a9cdd70526e0e65577846fbb5a136a4f816fe936ba0b8318369ff31bc71c0160928d00c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3d7610bb748fa38c38a13e148b7552fa659ac1fb87cc9486f825bc65e4d24319","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:6f37d45f68c8e63262b6f5238005c8e712494dcf15281951ed02eb9edcbdd749","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.382546800588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.939453e-02","shared_alloc_j":"2.313151e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6f37d45f68c8e63262b6f5238005c8e712494dcf15281951ed02eb9edcbdd749","served_from_record":true,"record_id":"r139","record_hash":"sha256:454ce54f131e6c17e307228a92563feae01df8d8774033129589310b7a521a49","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":97478},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.821144e+01"},"chain":{"prev_hash":"sha256:b5a007b3af643e9c71bc5d71b8490b9e92f4e1dc7a9fa8e2473b29b2d0dee06f","receipt_hash":"sha256:a0b06d596356f5dd6d08cbcd8069082dbd42ee03d5f0ce4b7304b358b1dbca89","signer":"ed25519:bench-node-01","signature":"c1fe46d5b5d6557a0e943947a11b65c6cb7ac5e6cf7574765d080d8920a83cc4bf324ea1150bc51fe837e5209fde4c796952de673dc69cdd7e463ef4d8d0c205"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3e4c1040ecb30728fc487416cb7dedee089b192810163e55349a6272288cef8c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.247088190588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"3.632292e-02","shared_alloc_j":"1.210764e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","served_from_record":true,"record_id":"r110","record_hash":"sha256:f6dd6a74403115e1c6321158ee0e6cc71d2baddb71cdaf06b97875ebcdd7c920","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":94819},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.793030e+01"},"chain":{"prev_hash":"sha256:a0b06d596356f5dd6d08cbcd8069082dbd42ee03d5f0ce4b7304b358b1dbca89","receipt_hash":"sha256:f7070b5c87564a37c23c12644047b5380767e5770221a5980f0950edaba59a55","signer":"ed25519:bench-node-01","signature":"31eb82d3a887674d8bdd13c5f76819db06c4ffce20d59ae020c2b798e0521a02488ba23cad3a9c839e6ba5ea1b33738a5d9d0ac6340ae05433ea0c94eada790b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8f6fb55058e73fda355803338eca3cc4a76c66f2e8f15c8c68ab5a0ffd694f01","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.546879870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.615596e-01","shared_alloc_j":"5.385319e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":22,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857845e+01"},"chain":{"prev_hash":"sha256:f7070b5c87564a37c23c12644047b5380767e5770221a5980f0950edaba59a55","receipt_hash":"sha256:8dcb8ac0f3655df8ab64ab12151de7fdf8db5d186669137d1a0ec90b2bcebbe4","signer":"ed25519:bench-node-01","signature":"1fc581c3da71af9d6370c24428a640fa756366bb60d4b47e7bce1f05abe7a62c88c49ccb130bf97b4ba9753a2b3a8cfadf46727287949664787478db59ecec0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e1e7cee1573ae3ab26da59c584d229ced4f9c20b2854d16355a6d96f75568a77","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.683865290588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.817072e-02","shared_alloc_j":"2.605691e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","served_from_record":true,"record_id":"r90","record_hash":"sha256:fbfb7b2e0c35a608c84403c695970a425790cfac9e71c7f2b3ab9eecb37cfc58","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":93177},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826316e+01"},"chain":{"prev_hash":"sha256:8dcb8ac0f3655df8ab64ab12151de7fdf8db5d186669137d1a0ec90b2bcebbe4","receipt_hash":"sha256:b417f48746ff022e8b409286e7ec16e363fddc27d2940ff9bff60a03759026de","signer":"ed25519:bench-node-01","signature":"46b342a7f739db6f23d5aacd8c6cca7ada9d113fa30ab9eeecce87ede4c4fdc7a51566071e9787cf79921e01c602485e67f97254b7fcc978cbb90dd88ed40e0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c2c077c68a2bddda03f85925e8f8db7da4d06e1b3290cb1788f906ddcae7a455","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:06da72ce846abf2c5eadd2aab2f18cd1e5565999fe71c40809bc145b7d50dc5f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.881000770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.712912e-01","shared_alloc_j":"5.709706e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:06da72ce846abf2c5eadd2aab2f18cd1e5565999fe71c40809bc145b7d50dc5f","served_from_record":false,"record_id":"r184","record_hash":"sha256:c1a685f8a2cffa8d705d2523d9448795f00aad5329ec6e82e3e893126f2a5955","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102276},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.860385e+01"},"chain":{"prev_hash":"sha256:b417f48746ff022e8b409286e7ec16e363fddc27d2940ff9bff60a03759026de","receipt_hash":"sha256:8ee008e19a3563f8fb925b20253d0b42f0c5177a1d5f29de81613184bca54733","signer":"ed25519:bench-node-01","signature":"1ad807e3aa1acb694a1a438520e76467493105cb1ab7e585d929ad783690946ecf7cc48430f6179ef933ea4ae08c753d06b35cada05307866b066fc6e9832308"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7a1de8d98c91c9a0f5e5bf3248423d5b4bb8e7621fae8e5cc25139dd6be77e64","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.665134770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.067515e-01","shared_alloc_j":"3.558382e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":23,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839849e+01"},"chain":{"prev_hash":"sha256:8ee008e19a3563f8fb925b20253d0b42f0c5177a1d5f29de81613184bca54733","receipt_hash":"sha256:5c10bd1189974a4bf165bf98dcc85de7b5d4b5ba2f719ace38deb26d8544dab1","signer":"ed25519:bench-node-01","signature":"c689255f5b16e7fbbf1f8c8a3e3500e1b21cd8fee347ea5b136a788c395ec86b5110e557efc6db18c2ed03a00b4b2bfecdb249e8863eae7bfd2b8f9a9087920d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e3a3882b0f0a863c65562700e230efbbc433fbe31868fe985add0127b78808a9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.556658670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.618444e-01","shared_alloc_j":"5.394813e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","served_from_record":true,"record_id":"r32","record_hash":"sha256:15137fb9bb5c928e449c8d3e6b50b9ef1791b583f2bd04555aaf3a153e617bc5","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":88540},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857921e+01"},"chain":{"prev_hash":"sha256:5c10bd1189974a4bf165bf98dcc85de7b5d4b5ba2f719ace38deb26d8544dab1","receipt_hash":"sha256:e462fbea88d4998ffa4e6152f51b9a2e56bdf94283dffe20c7944c20fcdeceae","signer":"ed25519:bench-node-01","signature":"24df2bbf62e79e7d31682746a2735dbcc0351f1fdf5c47ef506d0828ce3fcdb01c0029878ed11965762b21fb42491fb0aaa79c1a7b9eabda67e9e929f02f970a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:28ba6d84ac15412477e9bfb80b0994285f115387ceb2847ed00b7ea9c3433c5a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:e794aeed80344416c0eea1f5479ecab56e92778ba0a1c0ad094b45481313cd95","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.597988600588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.654333e-02","shared_alloc_j":"1.551444e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e794aeed80344416c0eea1f5479ecab56e92778ba0a1c0ad094b45481313cd95","served_from_record":true,"record_id":"r66","record_hash":"sha256:4a7445a0dd5e1f0e63f6753a999ae0815081d2b460fe1e9cb4f40874dc5fdf5b","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":91596},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.803797e+01"},"chain":{"prev_hash":"sha256:e462fbea88d4998ffa4e6152f51b9a2e56bdf94283dffe20c7944c20fcdeceae","receipt_hash":"sha256:f4e8b0011cfe4dbe79f3c66d827b497b9008b935eab129ce8707a48d5b5e7197","signer":"ed25519:bench-node-01","signature":"20ff8a693142ce0a1a1ed583c0b47d49a1cb1679eaaef54dc25d728c22b793e1393dac6f8016953476e3ea628e00830b1811d13ab1f9c49e778ed508312fda0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1ab158f22a00b9cd1ee2c73992fa2c683883eeff665217a861085005cf9fddb2","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"6.012013670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.751071e-01","shared_alloc_j":"5.836903e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861342e+01"},"chain":{"prev_hash":"sha256:f4e8b0011cfe4dbe79f3c66d827b497b9008b935eab129ce8707a48d5b5e7197","receipt_hash":"sha256:6a34d0d1689817f68737699e8c6981d93bba99da2543823c6f31183c9b54669d","signer":"ed25519:bench-node-01","signature":"ea50e407551d6375b6f9fc50a8d7e7454e6b79e50b75c9196057296a2564022753f117f530cca16520e3fe89056a38429d6fe0ca5aa614434bf8cc8ed2042904"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:60574250f7fd80825e0971d875c9fb33f7ac5ab3b0b306427bbf9348f14332c0","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:961b391b8b2d819e0bd5384c0a093e3fd737cd0e8652383fbf8ce86df8e6087c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.933632470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.436979e-01","shared_alloc_j":"4.789931e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:961b391b8b2d819e0bd5384c0a093e3fd737cd0e8652383fbf8ce86df8e6087c","served_from_record":false,"record_id":"r185","record_hash":"sha256:49133790eae82117e95b6a876b150e1f15a86bedb7281462fc137a57da8113a7","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102628},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852757e+01"},"chain":{"prev_hash":"sha256:6a34d0d1689817f68737699e8c6981d93bba99da2543823c6f31183c9b54669d","receipt_hash":"sha256:8a9fdce42811e9c15302bf0394c73215691d75b1ffeb7a5a37d5625a1a7ace57","signer":"ed25519:bench-node-01","signature":"336305b892afc08df332681d42a8eb3b6f4be3b86a08326923c690937b5d8385e0b01055faaf9bfe14619e83290f7cee0eca6a2c5dd619f8af7485f96a6ee706"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:88889dbfd4d877dc8d9678b1ab3a7a41c89dcb58d0b5251bdf58d3a578e8254b","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:ec9fbd4b6ba63997cedebf8eb7b1b1602733679e70bdb87aab8f6499ba1da719","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.488157070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.247050e-02","shared_alloc_j":"2.415683e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ec9fbd4b6ba63997cedebf8eb7b1b1602733679e70bdb87aab8f6499ba1da719","served_from_record":false,"record_id":"r186","record_hash":"sha256:063ca65efcb4564ac19d9538bbf48ede3028be096a4bc56e6455938f1308d89b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102668},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.823028e+01"},"chain":{"prev_hash":"sha256:8a9fdce42811e9c15302bf0394c73215691d75b1ffeb7a5a37d5625a1a7ace57","receipt_hash":"sha256:d0acfaae3b3769d5b5db335a3368fa4ef07afe49d26889e6ecebb5045659d963","signer":"ed25519:bench-node-01","signature":"329d14bfe73a0d506f5461d9e0db71a57f8f2953e057677aba4753ed0fe4c73d293cc6174a69852de3f595939e99ea5d4bc436f26ea27bfabd0915645c67410a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1563bb73e7189df86544c1a07c149fd54a09d570c2d010c6a1b81b79147c5cfa","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:fb1c565303b1f155c6b39c6428631346c93ae7a3c34300d38606c842ae111be3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.269335380588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.609711e-02","shared_alloc_j":"2.203237e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fb1c565303b1f155c6b39c6428631346c93ae7a3c34300d38606c842ae111be3","served_from_record":false,"record_id":"r187","record_hash":"sha256:06b8ad0835c0538b19f8eb3cc08b5879ef7c91cc15fb8e0cb469f3d6993151db","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102705},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.819030e+01"},"chain":{"prev_hash":"sha256:d0acfaae3b3769d5b5db335a3368fa4ef07afe49d26889e6ecebb5045659d963","receipt_hash":"sha256:0f5bc9b1fe86439981247ff75446689b10499f4bad4b4b0774add588b9c0621b","signer":"ed25519:bench-node-01","signature":"1193cb9b40304868be62721bec46e3772d32dd4bd9d0050c2b8726c36bdef0a9530aa622b4a568091dec78c13a8d4e9c5d94c66d63901ef101171c7ec9d57807"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fcfc351ad0189272c0369b16003b0594fe22ca8d66d079c11ad710fce3c2827b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:cf49fda430355241c258ed4f604d062793a1e809eb06aa62b8eef4d5827b6660","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.295092580588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.684731e-02","shared_alloc_j":"2.228244e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cf49fda430355241c258ed4f604d062793a1e809eb06aa62b8eef4d5827b6660","served_from_record":false,"record_id":"r188","record_hash":"sha256:32291a0cdf58073a8750b8c60bec5e703cf330fa32c2e9373894cf939de88063","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102742},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.819520e+01"},"chain":{"prev_hash":"sha256:0f5bc9b1fe86439981247ff75446689b10499f4bad4b4b0774add588b9c0621b","receipt_hash":"sha256:5ebac3f4ac38693b09cf8970df1fb894cf15716697f5b222600982ab9bcf583a","signer":"ed25519:bench-node-01","signature":"ae80ce6309ad50ed16a92742a9860d8f4caa5b7379ac2ebc4018dd03e860a8f5f79ca932bec095fdc329add9f6f0123099ae95991249ffe6b11e525cb4b8050f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:21da3e85e47a64c1cacbd20b58550c8da4b5040bd20a368ab3274d96231f0d0c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:6737e600363f218f40dd3069f95f5dbf3c4db57424119bd7c1736a5be5cc70bb","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.735307160588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.054289e-02","shared_alloc_j":"1.684763e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6737e600363f218f40dd3069f95f5dbf3c4db57424119bd7c1736a5be5cc70bb","served_from_record":false,"record_id":"r189","record_hash":"sha256:4f8f182ed08fc41d0c234ac00c3a69d21dfa85483b6ce8f6e2e05fb0357d2c59","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102770},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.807378e+01"},"chain":{"prev_hash":"sha256:5ebac3f4ac38693b09cf8970df1fb894cf15716697f5b222600982ab9bcf583a","receipt_hash":"sha256:c0a30c0006a4a4f39765e7df82941d182054b7223beb85a1c80a436c7b3dec8e","signer":"ed25519:bench-node-01","signature":"f74d2d1d8bce2ce7b78b9ebc69ccec6f4f1747e795e127664c1beb1db093876d169b1d9ba808b05d3fc00df740e13030e6c5f5f1ccb88907437f58bb5ad9810d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:00824a4cb210b4e5c4fe92636da1c8a68c6465ef238ce6bd9c9d034c952ebfa0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:82766587876a39fe044dc0896677a505d5e5def45b21bf32bcd3f0e2ed269ba2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.996150530588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.814026e-02","shared_alloc_j":"1.938009e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:82766587876a39fe044dc0896677a505d5e5def45b21bf32bcd3f0e2ed269ba2","served_from_record":false,"record_id":"r190","record_hash":"sha256:9022b949bef7cd8e3ea890d1b16f7bd5de5dcec0b037250f70de83aa5d99a0ee","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102802},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.813459e+01"},"chain":{"prev_hash":"sha256:c0a30c0006a4a4f39765e7df82941d182054b7223beb85a1c80a436c7b3dec8e","receipt_hash":"sha256:8d0b6b6ae533f0d4ac737460cbfca280de8ae4558b2b774e0c3315592ecf87db","signer":"ed25519:bench-node-01","signature":"9569e78d766b8349955a404c4cf536d7e40d08449e124dc1774324b95287029d9cdc0c1933e5bd84559db22b5d2de2a8db82d9aa7bb6e122366cb9a097288601"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:df715b08a308bfa0896c21d95eed05f19ad56fce1954ef750116d874decd45c1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ff23910fa778fac032c85c6568bb998c19a986333ffceece66d612ff672c1782","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.671451170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.651879e-01","shared_alloc_j":"5.506262e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ff23910fa778fac032c85c6568bb998c19a986333ffceece66d612ff672c1782","served_from_record":false,"record_id":"r191","record_hash":"sha256:42989b8189f68d0082e7dc055e36045d4dae926032e445277b02f4e4bf70ae96","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":102894},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858809e+01"},"chain":{"prev_hash":"sha256:8d0b6b6ae533f0d4ac737460cbfca280de8ae4558b2b774e0c3315592ecf87db","receipt_hash":"sha256:47e8749030fbd4f3fcd4041813119c8c371d6543397b770cf6d5ebdbc9cf0fc0","signer":"ed25519:bench-node-01","signature":"d20dd4ecdf1a99e7cb0ec057255c0269823906369443dfb324310283933456e1a22b90a8e6aa8967c9db850376dcd09c1231e9f2c7f471e397c58644da4a840f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9d95093b25d3483dffcedbf066be8c11580ffd6696f10ad066166d5fad4d0455","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:9840140a39c47ebfcdda27e664a72009daffa1d975d005450a100350849daa10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.954071370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.151671e-01","shared_alloc_j":"3.838903e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9840140a39c47ebfcdda27e664a72009daffa1d975d005450a100350849daa10","served_from_record":true,"record_id":"r116","record_hash":"sha256:cae152c7d4ea4f178ff00a0ff86fd15535bff763a0dee1b34393c0e8844e4431","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":95210},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843144e+01"},"chain":{"prev_hash":"sha256:47e8749030fbd4f3fcd4041813119c8c371d6543397b770cf6d5ebdbc9cf0fc0","receipt_hash":"sha256:39d5509ac495120ded6990bb4046a19a32c23c794e252413349e5a47d111eb79","signer":"ed25519:bench-node-01","signature":"fadbcf6ca1d886a37cdcaf560685a78d91b40144a36ada3be5a0dd2350a5fc2c2d4d2c4fddb12b63f57fc6a1397e74fb235c296cb9bef01387804a41354cc809"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ca947b09ff7542f7f41334bf274f141a0fe5765a7e285e8c8d784a5748e592a0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.642050370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.060791e-01","shared_alloc_j":"3.535970e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","served_from_record":true,"record_id":"r82","record_hash":"sha256:796c66db2245954b7f1adefe6ab2b746c6c40d34fdc7990c935f119ab41d0a56","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":92646},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839575e+01"},"chain":{"prev_hash":"sha256:39d5509ac495120ded6990bb4046a19a32c23c794e252413349e5a47d111eb79","receipt_hash":"sha256:e235abe007ee758f23b022f99aff7d24ba9a18a9bbf3e400d04f3a8bcd7674a4","signer":"ed25519:bench-node-01","signature":"e95d39d73dd03ea8c045d227df27f775766c21a0f490837dc1f757e818d2ec34d86ea1a8d54c8526899e582011a5fd4d488d7dded80e7eee252afb542e691c08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d9d584673fda9d6e03cccfd53f578e56fb1b7c6b0b923b2dfbfdb5bd053927f2","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:01322a812d2397397876595f6fc2be45dfeeed256b674f70accd6e3354059fb0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.265983190588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.512562e-02","shared_alloc_j":"3.170854e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:01322a812d2397397876595f6fc2be45dfeeed256b674f70accd6e3354059fb0","served_from_record":false,"record_id":"r192","record_hash":"sha256:40484c28a799866871a4cab4dbe55a3d6fd9ec71b583e6c548b4598113b0ba5a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":103070},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834841e+01"},"chain":{"prev_hash":"sha256:e235abe007ee758f23b022f99aff7d24ba9a18a9bbf3e400d04f3a8bcd7674a4","receipt_hash":"sha256:e33918555dc23150b52348aa9ca625c9a515ffa6b4e8479bf8e89d41914183c6","signer":"ed25519:bench-node-01","signature":"1471f2824e53e522986650e83cb71d032df46aac6a54d079940df9d66a2abfc1d2713c9fc88434ba44ffa12f2a815ae0f31a5ea4a63768dac586fd4d57cdf401"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1c4647cedd780ff2edd84f90e01e74817bf47a0b4c5440fbef8cf188b926f1f1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:2576d606f7686868001e756e697c1c0bd80ff210c28f9626a40a0206f8740c7c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.886637470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.423292e-01","shared_alloc_j":"4.744307e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2576d606f7686868001e756e697c1c0bd80ff210c28f9626a40a0206f8740c7c","served_from_record":true,"record_id":"r96","record_hash":"sha256:f00aabe082500c634f45bf066ce0068f4071b8e5e1dd87aa9215ff18846a0c09","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":93584},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852341e+01"},"chain":{"prev_hash":"sha256:e33918555dc23150b52348aa9ca625c9a515ffa6b4e8479bf8e89d41914183c6","receipt_hash":"sha256:14873d92f90d7aa54bfd662c8fce565c4fdd08b2194aee374e33bdfc4f74851d","signer":"ed25519:bench-node-01","signature":"822ebea29e20f91d3164144a2107da9f8fbc8d20aa2cfbb9b2915a3fac11d13042d0a4fb501b443b32d8248a5df9b2c646c2003c3333663e4268490f74bcd40a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ac42d946930ba7b2cd319bff168bf0414e3ef7345b8ce9a2191f9917dc7681d8","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5d7d5d259b708cde975291235fd292c65d84bcd5067333476c61256be72dec9a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.133356050588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.213648e-02","shared_alloc_j":"2.071216e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5d7d5d259b708cde975291235fd292c65d84bcd5067333476c61256be72dec9a","served_from_record":false,"record_id":"r193","record_hash":"sha256:840505972c746322dc68ab9977015f384d40ba56fbaffb45f6863c0f12436098","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":103183},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.816346e+01"},"chain":{"prev_hash":"sha256:14873d92f90d7aa54bfd662c8fce565c4fdd08b2194aee374e33bdfc4f74851d","receipt_hash":"sha256:e048d657ee7cd17a4cba032a990dc5666368167e6a12cca6e5f95e47641371c3","signer":"ed25519:bench-node-01","signature":"ee615b7f1cbd19ce6279f90810bfc3612148aed4c7e40c0c91cafb2c28cd98357018b3c5b2738ff87144726d066203dfcfb935a988f888ab7d2b56d2991dc40b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:77a39fd50a5f0e94077ccba2a173b0b4b233459da92186bb3797b12308a2dc80","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:a24555e7692044ccfaca766108abaf92a0eb3d523943bebf7d2eceb3f7cb2593","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.736082570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.379440e-01","shared_alloc_j":"4.598135e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a24555e7692044ccfaca766108abaf92a0eb3d523943bebf7d2eceb3f7cb2593","served_from_record":false,"record_id":"r194","record_hash":"sha256:769afc3e9e13947b6471a42ee0ab2a4a3cf94438feafe0b3757017530fe9743a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":103260},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850982e+01"},"chain":{"prev_hash":"sha256:e048d657ee7cd17a4cba032a990dc5666368167e6a12cca6e5f95e47641371c3","receipt_hash":"sha256:5e62f7538331115c6025f4a8c665f836d05e650d96c6764ec9de303354e480d2","signer":"ed25519:bench-node-01","signature":"10e99e2a1de8f6d6bfb4b3a161bfc1ffb46b0158afc7c7a138a734a0acf11795642c4a5d136fb5b174c6e420bf95160f923a26cad99147243d7e46d92fdfb600"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5bcb1127c6443400dc3de45620b272cc203592df09ab093a11de2f547ba6109d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:76aa44f7b0b3b872eb243bcd0ed8bc9038d6779900791ddcf365d5805e743a5f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.951834470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.442282e-01","shared_alloc_j":"4.807605e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:76aa44f7b0b3b872eb243bcd0ed8bc9038d6779900791ddcf365d5805e743a5f","served_from_record":true,"record_id":"r142","record_hash":"sha256:dba5353f14cbe283a3df3bc0429b4d0da6169a5533118250370697129a4c0c9f","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":97827},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852917e+01"},"chain":{"prev_hash":"sha256:5e62f7538331115c6025f4a8c665f836d05e650d96c6764ec9de303354e480d2","receipt_hash":"sha256:9d8fe93ebdadf31a0abab273bef36d9df75673fd512fbb88d2bd5897e39347c0","signer":"ed25519:bench-node-01","signature":"9691e73cd101913109345bbea3fc23989530f25a69778f43d59b891ccd362426adfbbf5dfb627c93e88816b7112bcfac50425e46b981850bb355a8e6db3dff01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:7503858dd002da14fa4d9bf4e1d8fb5a58eba1d558d8b0817a8f03ecf5afc704","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:3c9feb0b662a0c417a55ec5751b1c501d1d315c1d204379045c2e004b8c5c875","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.938949970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.147267e-01","shared_alloc_j":"3.824222e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3c9feb0b662a0c417a55ec5751b1c501d1d315c1d204379045c2e004b8c5c875","served_from_record":true,"record_id":"r159","record_hash":"sha256:1c1dcd4d20b2916ec8891938b92c85b6711a814628df4ca4b2ae748dea597e96","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":99348},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842978e+01"},"chain":{"prev_hash":"sha256:9d8fe93ebdadf31a0abab273bef36d9df75673fd512fbb88d2bd5897e39347c0","receipt_hash":"sha256:a197153961ac3236efe4c49adfe5f8e52c1a3125f54e39e4b6339a4520050bfd","signer":"ed25519:bench-node-01","signature":"030ce420e67ae54b7365bc73f92539bef4dbaec5c69c921d93512dd6c6ebf7a815c553f5dedd47d0cbeb5a33f479be6416efb1465f8745d19e9aaafd5cd0cc0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:941b1e2c2e239979d5712aeed4b4db0b6af493ae6210eb495c3c8da5806990dc","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.985444870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.743333e-01","shared_alloc_j":"5.811108e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861150e+01"},"chain":{"prev_hash":"sha256:a197153961ac3236efe4c49adfe5f8e52c1a3125f54e39e4b6339a4520050bfd","receipt_hash":"sha256:d99a1f5bf2ff933d1e2996730e8027b0f287d3f3d91a1b4bdeb22c646bbf89e4","signer":"ed25519:bench-node-01","signature":"65180897fc0f7dd8ce4d0db5c585f32cf035ef3392e0ac2a88ea42f1b2dd3c5fdc4033522cc5f7afe87870f9d70ae513618867cf0f4646ee9ccbcf383d2c790b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0a98fe9165580a3099029c7cb234bb534a07929798b9fe252cb808b96b5f1a96","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.817721580588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.294331e-02","shared_alloc_j":"1.764777e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":true,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.809393e+01"},"chain":{"prev_hash":"sha256:d99a1f5bf2ff933d1e2996730e8027b0f287d3f3d91a1b4bdeb22c646bbf89e4","receipt_hash":"sha256:fc0cfe2301f822e92433c9e1911ddfd9046bde38010906da6e530bdc498f532a","signer":"ed25519:bench-node-01","signature":"b99cf60c025789f4b355c22436165832b6110c5f83069abe045600a644eda2cdd20883d34e6586626feaa60498b5675e5adfc45c455981e86c5b85c703a5f407"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c9f25ce7f0cc25abb8c3821b71bc7db3fb2cb4959b0d2e0973fbeb5fdc41ed41","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:4f997e150ba0259c9622fba72c9ccf1420961b0c877fe9ea6bd0e046da32ddee","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.723181370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.084421e-01","shared_alloc_j":"3.614738e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4f997e150ba0259c9622fba72c9ccf1420961b0c877fe9ea6bd0e046da32ddee","served_from_record":false,"record_id":"r195","record_hash":"sha256:760baeef735194d5233072d12e4f2bcd5592c5f0243f50e90391d710d5f1a97c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":103590},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.840531e+01"},"chain":{"prev_hash":"sha256:fc0cfe2301f822e92433c9e1911ddfd9046bde38010906da6e530bdc498f532a","receipt_hash":"sha256:8d7d8db7f237c26d739d431de81f3f40528b28abbaef00871bd0c53be88f7eef","signer":"ed25519:bench-node-01","signature":"af29d67262c234fc0ad033cdcfeca330b2ef008b4618fcb5586af655a979633811569ed12ae3b13f5af2dee3573e849882304a8371f25b19f908203b5f29f80e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4cf7b353b9782bc8896f11cade45d99b00fccac1b929fd1b67f63aaec0e25736","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.616163870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.635776e-01","shared_alloc_j":"5.452585e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":24,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858384e+01"},"chain":{"prev_hash":"sha256:8d7d8db7f237c26d739d431de81f3f40528b28abbaef00871bd0c53be88f7eef","receipt_hash":"sha256:b71e04ced7a59524e30c80deef8b1da9a8a187de3f216963f83f8ce6a30c622b","signer":"ed25519:bench-node-01","signature":"75c6c94fe9a9c39a721571abc738e95637bab651f3bcae25c6e6be76180c33d7d8dcbc41bac52caf769f6acba145898e3a50c2ee232dda4c4ac20b35d8fafa0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5da7ad36fb6ae81db0042da161569016d601c8b9f2b72d103756cc457bbe4e95","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:e22d08cd71e4fe85157a117945884be41615af88796c53f606b47fa038bac18e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.120469870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.200136e-01","shared_alloc_j":"4.000455e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e22d08cd71e4fe85157a117945884be41615af88796c53f606b47fa038bac18e","served_from_record":true,"record_id":"r103","record_hash":"sha256:aef96891cde1778fd48eb935528ed4cc34cca76b6c77efba9276f1cf503d5bb9","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":94296},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844935e+01"},"chain":{"prev_hash":"sha256:b71e04ced7a59524e30c80deef8b1da9a8a187de3f216963f83f8ce6a30c622b","receipt_hash":"sha256:4f335bf2e79f9b83222069c2453194317a709a0e3d69d1c4bcfe0476baaa09d3","signer":"ed25519:bench-node-01","signature":"4f2ec0368bbfe457e804c8307923d6f563f246758168f767a0407f09a5e9e1935b18fb75e697d1236826f38aabe7899e4f5d9c4f19bb55222dfb97f80ec0c902"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8d54cdc38aff9ba30a46710a6033aa9433b2f08fbdc5ac64400102b045343667","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:9eba0993d20b4fcc833a8898898639838baa8bda656cef4206d45b329bb3ab0a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.193493600588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.301433e-02","shared_alloc_j":"3.100478e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9eba0993d20b4fcc833a8898898639838baa8bda656cef4206d45b329bb3ab0a","served_from_record":false,"record_id":"r196","record_hash":"sha256:65bff66ef8b35f4cd7df93a868f5fbe8666319d402cfaecf38b1ee526518ab31","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":103800},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833867e+01"},"chain":{"prev_hash":"sha256:4f335bf2e79f9b83222069c2453194317a709a0e3d69d1c4bcfe0476baaa09d3","receipt_hash":"sha256:8d46c25ab7092ccaaf6791e8116f37f9e47201fe091de30ab09891ffef4b568d","signer":"ed25519:bench-node-01","signature":"803cc5c8abe109c7b00e3b1e14f2cfa98e53685725786c8c338b9055b6ebb219a26a7f46cff82dabfdf97f49470a29a7963fdbefd86b84934d2b828f99529d02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b6c49f76166348c6b79ff6b52c2000e4a098eac0d73c3c04e33f0a0a904f2b1a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.736094970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.670707e-01","shared_alloc_j":"5.569023e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","served_from_record":true,"record_id":"r32","record_hash":"sha256:15137fb9bb5c928e449c8d3e6b50b9ef1791b583f2bd04555aaf3a153e617bc5","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":88540},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.859302e+01"},"chain":{"prev_hash":"sha256:8d46c25ab7092ccaaf6791e8116f37f9e47201fe091de30ab09891ffef4b568d","receipt_hash":"sha256:9ca8e5166c5ca6a98c1c0c6e7162564108e29f6cc2b14b940e301a961b3a78c0","signer":"ed25519:bench-node-01","signature":"036e2cfce688c11f17314b4b725be629b6db0b85f638f9bfd991f75635074077ce10700453896595196ac2fedc638fd3d139fa8ff21ca7b4fb72e9bde9697d0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:465db2fd5b83ed5f5c004dd827207e63e8c7c385efe7a6fbb0b8e167ccb8f798","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.356435970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.268864e-01","shared_alloc_j":"4.229546e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":5,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847353e+01"},"chain":{"prev_hash":"sha256:9ca8e5166c5ca6a98c1c0c6e7162564108e29f6cc2b14b940e301a961b3a78c0","receipt_hash":"sha256:e1dff66e7d8fb5e121f2ed984719bf551abcb0e94b207f514be431df3abee3b0","signer":"ed25519:bench-node-01","signature":"386d1240f8894a0c41f34b694a2be804bb132acb85568ff85b453ecee9c3206f2c22745e06e991f180dabffd1681e5b4a6eb29917908ed53a85244d1fe7d0600"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5fded25f49e39d1e5168a432cc70c5af72a94e19a938388f1a5f70731f51725f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:db77ddfc23a61c07ebd5b655bce57cf0a257f4cd3183666ef84c4bd52ecdd2fd","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.840494670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.701114e-01","shared_alloc_j":"5.670382e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:db77ddfc23a61c07ebd5b655bce57cf0a257f4cd3183666ef84c4bd52ecdd2fd","served_from_record":true,"record_id":"r173","record_hash":"sha256:428d5f7f69ba9cbe1bb4ff54361b4953bead5fab38b14d6ff9d6c93c1c9a16dc","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":100407},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.860085e+01"},"chain":{"prev_hash":"sha256:e1dff66e7d8fb5e121f2ed984719bf551abcb0e94b207f514be431df3abee3b0","receipt_hash":"sha256:272d04e0ec8a611aeb8eeb74353f3b4c70b389992a052c7a7c7e50ad7c313bec","signer":"ed25519:bench-node-01","signature":"1f13974fb638d715cdac9ae8b68424fd65d4519425f72f8a5573eff21081e4aae450d4e29a169c4adae9d17db753b720013a8bc9b7f42c33867cda696a7af007"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:777265405ee0e9e20ff097d72e7c4e770d695d813c0956514ad2482ecb13925c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:9014e65fe138b28393ccb3d8d284ed537952a969e7a21268271f523fa7af84ed","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.938281230588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.558096e-02","shared_alloc_j":"2.852699e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:9014e65fe138b28393ccb3d8d284ed537952a969e7a21268271f523fa7af84ed","served_from_record":true,"record_id":"r126","record_hash":"sha256:21c082b273e8dd3bf225ba9f6c5875d948da0df81a2224d3b8400cf7a1969a41","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":96382},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830249e+01"},"chain":{"prev_hash":"sha256:272d04e0ec8a611aeb8eeb74353f3b4c70b389992a052c7a7c7e50ad7c313bec","receipt_hash":"sha256:66cd2c6482bef9b09a69fc49070544f5234c7d3be54c545139d7e33263e177d9","signer":"ed25519:bench-node-01","signature":"fb86a1ebe1c53ecd0d147502f9622cfd931c46b24c61f5ad054e78aed7545b3118d41d7d2dd1ec9c13f805009d322f413aa5360b180e6d0b8c2d08bc8cdaf206"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c3b2db2f38b2e061e3df741887f9d8539e4f51c009eb3bf30b2aab35bd4d4c47","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:efbb8d25a730016e7141c8a4385a30cc196c5b7f9d238b06f6213360fb3a4888","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.366221510588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.804524e-02","shared_alloc_j":"3.268175e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:efbb8d25a730016e7141c8a4385a30cc196c5b7f9d238b06f6213360fb3a4888","served_from_record":true,"record_id":"r71","record_hash":"sha256:e6cede6feea99f953bb7617c1b457e0bd9cfe84fdff8b68ed36394aa9e7fc6a0","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":91975},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.836154e+01"},"chain":{"prev_hash":"sha256:66cd2c6482bef9b09a69fc49070544f5234c7d3be54c545139d7e33263e177d9","receipt_hash":"sha256:cc9aebcd2d0064061d793c105ea8d8f08b1ff3bfa79e2515265ec7ca2d54d75d","signer":"ed25519:bench-node-01","signature":"a10dcb486c860af09b1832adb3102cbe7fbef418b0b44aa56e99b7ae7b75700d3533f387647e2ebac2258cf410938e4ecad3f2aa11633c821ecc7177c2396b04"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b0b02f24a5efb586794db771f0476bae896272121ce514c1818a13aa52700363","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:c5acc45aa021fd76b694dadbc084a3aa9a1107f5957329ada1989fd9a13fd849","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.735409130588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.054586e-02","shared_alloc_j":"1.684862e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c5acc45aa021fd76b694dadbc084a3aa9a1107f5957329ada1989fd9a13fd849","served_from_record":true,"record_id":"r119","record_hash":"sha256:6b7084145defec11a27bbed72264c0f691eb1c3a8766ba9ffc91fdae40296056","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":95404},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.807380e+01"},"chain":{"prev_hash":"sha256:cc9aebcd2d0064061d793c105ea8d8f08b1ff3bfa79e2515265ec7ca2d54d75d","receipt_hash":"sha256:16497d95bed81f5f5c07ccc76d9cca3b16c6ced434c819a012e58b87cf3f117b","signer":"ed25519:bench-node-01","signature":"54bd6cd9b2c6eb3296d5a8b63dcc2ed3a3c1ddd314eac014b769303093e7c8d26760c4029d2db83a922e1c59dde6c6d51fc79aca1d92a0bdfca33ae970d05c0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3915fdf813a7336507c085988b0e213be0f308bf6cc6f5d1aea79bb94cd88fde","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:3866c5ef26acc8497fff0ba0c7f2411032b993655623b854d09ef997309076c9","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.401322460588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.081519e-02","shared_alloc_j":"1.360506e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3866c5ef26acc8497fff0ba0c7f2411032b993655623b854d09ef997309076c9","served_from_record":false,"record_id":"r197","record_hash":"sha256:a9587af204c6f3a521c8368d0166284790a3c1dfa4e6af1ac5cad821d07db907","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":104210},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.798094e+01"},"chain":{"prev_hash":"sha256:16497d95bed81f5f5c07ccc76d9cca3b16c6ced434c819a012e58b87cf3f117b","receipt_hash":"sha256:3e79ec56836fc5b394b5368755f37bd1b0372ca0c4a7df8465feda33bf03aac6","signer":"ed25519:bench-node-01","signature":"7c2665eb7b66ee632fb8f894f3e2537f81d8c7e2df68337b75b010169e0ebadf0876bc063f7f38fac4c1839e886a6350e033c80fcfcb1f57392cae7c132c800e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:09ef7cff3d8056908c5f98ef2e51c699e0c850f20fbd8490d8bb501e18a89456","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.529333770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.610485e-01","shared_alloc_j":"5.368284e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":true,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":5,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857707e+01"},"chain":{"prev_hash":"sha256:3e79ec56836fc5b394b5368755f37bd1b0372ca0c4a7df8465feda33bf03aac6","receipt_hash":"sha256:0feef66a1baf3a66d375b6a7c72ef9b2c995a2f2cd21d9d5de799afbad5b3d81","signer":"ed25519:bench-node-01","signature":"cb773bfcb308daddc2c885680ccabbb5a03a60d6cf78d063b80dedad0e8e15ff93521f887b5ba4c1d596d7f553f5bc9dadc8483842680f52e1acc0e81376c40c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:83aa0ba4d2bc19ef440188a4d7bacc1140419325d2e96c0a84c6382527d2cc64","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:b5166dc9434ae553a99bc73fc4c5eff59caa50ac572d538e05455c4f40710854","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.264130470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.241979e-01","shared_alloc_j":"4.139929e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b5166dc9434ae553a99bc73fc4c5eff59caa50ac572d538e05455c4f40710854","served_from_record":false,"record_id":"r198","record_hash":"sha256:b90a7016e1efd8b5896062d62c394805f30d5be1f7aba2c5d26213e5576ed571","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":104369},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846423e+01"},"chain":{"prev_hash":"sha256:0feef66a1baf3a66d375b6a7c72ef9b2c995a2f2cd21d9d5de799afbad5b3d81","receipt_hash":"sha256:f926228c6a0ab542838f27f6a406af0348051fedf95618dd245e4f1652cd29cc","signer":"ed25519:bench-node-01","signature":"421b59205768a5b1f6a09d94c06b0d95ff19032e9bffd7eff0a9929b3ca44b293e9752da115fe467a7f91743ec9d49cb7f4cccbf70c319f1c7540364a7f2ce05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8277cc0202d7888a6af7030fe67dac590c023dd44626435989556190c5560b9d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.997557970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.164337e-01","shared_alloc_j":"3.881123e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","served_from_record":true,"record_id":"r101","record_hash":"sha256:423f6097e57e4c77557b0caed44714a3b731fb972ea1da097ee6162150ae2cb3","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":93972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843619e+01"},"chain":{"prev_hash":"sha256:f926228c6a0ab542838f27f6a406af0348051fedf95618dd245e4f1652cd29cc","receipt_hash":"sha256:2f9092f5d5c98ae5f4bf5f0d5febddd7ddb17a9377d7ece51c212a058c947efa","signer":"ed25519:bench-node-01","signature":"1719f55b915b9c03f9107f3a8cfe742ff7950f89167f454929c97fa51ff058b849bd54acf8e0cc05ac4dc46353b069746200f85abff6871c6b209134a752b40b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:166fcf5b2cec487efb9cf17f3cd7b2c1d8495ca6b21bc9e44deef17c9ef1154f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.140585590588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.147332e-02","shared_alloc_j":"3.049111e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","served_from_record":true,"record_id":"r114","record_hash":"sha256:11b74bcd9d0099b86cba50d647a39fde7bbd69fff8ab977726c7de08af14d90d","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":95088},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833141e+01"},"chain":{"prev_hash":"sha256:2f9092f5d5c98ae5f4bf5f0d5febddd7ddb17a9377d7ece51c212a058c947efa","receipt_hash":"sha256:90e91a487aea549be111fed222d5e11a3095d6f9041730ad58e4014ef118724a","signer":"ed25519:bench-node-01","signature":"36ea4d834d3c0626305fb6e640c4c741c8ec9c992fa2be3a1592fa3c4605e2f9e8654270c4b01dcdfc3bbccbe73b447eb7e480ef6fad0cf25828cbd43d44cb02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:15641ab8f841469d1286ccdf1115db9dd8e8ed5e42025640e2d28bd05f987e56","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.057845870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.181896e-01","shared_alloc_j":"3.939655e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","served_from_record":true,"record_id":"r86","record_hash":"sha256:f4c7f1ad01d2d813ad75c00cc45d65ed4551e2d7454324699de36187f53cf52d","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":92951},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844270e+01"},"chain":{"prev_hash":"sha256:90e91a487aea549be111fed222d5e11a3095d6f9041730ad58e4014ef118724a","receipt_hash":"sha256:3db3d59e6e817eb843d7ffa5434f120ce0d23988c7786b15aecedbfbdecc155a","signer":"ed25519:bench-node-01","signature":"0fe77b02a81bffdefeb48efef71aa825a20eb531120df5448b7c3e77153271020653c5f5c6d4893f56be40b42d6c68f4d3085581d69402a9407156fa1b799f06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:49322d843d2e9e7397081f0d5bfa5b8fe4ae43c92f009ed2d60b7083957e282b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.269802200588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.523693e-02","shared_alloc_j":"3.174564e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":25,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834892e+01"},"chain":{"prev_hash":"sha256:3db3d59e6e817eb843d7ffa5434f120ce0d23988c7786b15aecedbfbdecc155a","receipt_hash":"sha256:5714317473deac396c32651a2bffa9c8200c1ab20d61a6580760da7e670cbfd8","signer":"ed25519:bench-node-01","signature":"e3203c9ea3f92b4a47867845f3491214285632ef4c5bb35b42e3aaafedc885f36f3bdc9a05cdd81a9180c251066801ef8d54e6dd55e854442b7bc824ac227f05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ada765da75f3f6633a83562099f11632c8b3659b6adcc44c811984909da677a4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.863434010588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.427474e-02","shared_alloc_j":"1.809158e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","served_from_record":true,"record_id":"r16","record_hash":"sha256:3227d5f5cdb47b0c636c60fce42fed733f0e84ce2c21552a8ea3164c96c9d710","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":87438},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.810471e+01"},"chain":{"prev_hash":"sha256:5714317473deac396c32651a2bffa9c8200c1ab20d61a6580760da7e670cbfd8","receipt_hash":"sha256:1152f6126570dab92b477ada96e5d1fec319766c0551c3711827a4f7965c631c","signer":"ed25519:bench-node-01","signature":"b4ec251249144ea4e524e982e7559ad65f895f9e95e335435c01ae1dea43dfaaf70b1ade99af8fc0aff56760c1aed4d31208563c466388ec70249e2608c9a605"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9fa998f076d78aa9794e35c40119ce5c931a7681454cc4ff74a675701a49d5b9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.242835970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.235777e-01","shared_alloc_j":"4.119257e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","served_from_record":true,"record_id":"r140","record_hash":"sha256:9f4054b5d15ac16ce0b79b780e5d8bf8b428262e4fd2a332ec366dce24f89c41","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":97569},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846206e+01"},"chain":{"prev_hash":"sha256:1152f6126570dab92b477ada96e5d1fec319766c0551c3711827a4f7965c631c","receipt_hash":"sha256:81d92bd396f59e2dfab866f4467fecd2232eba21102a03eb39942308f538681c","signer":"ed25519:bench-node-01","signature":"6aa8247b57cfbe4f00ec6c3a975df03ddbb0c9ec7cca77ff24396efe5fde6bcc0f7a60497afb7bdcc63c4f6a4e14f5af5de40162a6a0b34d9639c03b50db690f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a2028836c62adb6226ff9756e058327f9069d71f0ce996ce8ecd101a9c73076a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:bba012d917b3f176c43c75c1babeca7aed6998ab35cfaa4885e98ab27b59ad9a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.331857070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.261705e-01","shared_alloc_j":"4.205683e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:bba012d917b3f176c43c75c1babeca7aed6998ab35cfaa4885e98ab27b59ad9a","served_from_record":false,"record_id":"r199","record_hash":"sha256:8d7f87e7a41047265d2e6447c0d8a25de641b35df2e2d21646634d01125516b6","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":104772},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847107e+01"},"chain":{"prev_hash":"sha256:81d92bd396f59e2dfab866f4467fecd2232eba21102a03eb39942308f538681c","receipt_hash":"sha256:bec1f0ab710fa9aed26c89295fcf1e8eac1cc18cb6826d0ceb8c1af237e64570","signer":"ed25519:bench-node-01","signature":"c3473a55ececb68a5592d210b5899857c5685ffc2235eda8048b7bb2f8e0793d1552824e912bd2cdbc3b48f2a171b906dc27df259d0756acfcbc22f0b548b70d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f9f8755cd51e047365969f1905930e77f2212d9b06eb59b8e7153414c547ed4f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:3456548300328438389e70210979fd21b35f4518a9be8525a35e94da571b0bc0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.551039370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.517580e-02","shared_alloc_j":"1.505860e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3456548300328438389e70210979fd21b35f4518a9be8525a35e94da571b0bc0","served_from_record":false,"record_id":"r200","record_hash":"sha256:e101abd24d9ab038fa0aad937b49cf50562849e82002bbcb6d20322b2d9a91d5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":104797},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.802502e+01"},"chain":{"prev_hash":"sha256:bec1f0ab710fa9aed26c89295fcf1e8eac1cc18cb6826d0ceb8c1af237e64570","receipt_hash":"sha256:17dc76ea19fc4b76c56b0e57ba223b81c00b44d32ce8b8495f6bacb17eebd5cc","signer":"ed25519:bench-node-01","signature":"fc16b00597071dc147d51ff7fcd4988aae4987dfe7c0370c9dc06c20bfebba3c56acf35326bb4f7d088f3842bd754e055b3fa5a688217984b5d1af7d0dcb4507"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:63dde35de0289f981d5795023cab4d0241326f799c1cd55c280f19d7f7311868","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.296656350588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.601908e-02","shared_alloc_j":"3.200636e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":26,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.835247e+01"},"chain":{"prev_hash":"sha256:17dc76ea19fc4b76c56b0e57ba223b81c00b44d32ce8b8495f6bacb17eebd5cc","receipt_hash":"sha256:374a4caeb6f68d09448473953fbcfa3fbdd3d1943ee5a92acd385767258ce75a","signer":"ed25519:bench-node-01","signature":"6f1c24ad6248aba4cab2a87e4d2e4c3cdd3804c88304a2fcbed08689d5feb0a1732d4db4264db99954ead32286bf1710491393d41971a7448c8d6ffe7bd6e001"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4fc75c4e5282a2c7ca18ceba37cf451b6e46cee8b749cb8382d5614750aa017c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.620412370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.345751e-01","shared_alloc_j":"4.485836e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","served_from_record":true,"record_id":"r51","record_hash":"sha256:ff62c7c2ef96f95abf4dc1e600aed41d27c193ce5689fd8f868b7727dcade1a2","reuse_count":6,"derivation_j":"1.058824e-06","valid_until":90311},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.849908e+01"},"chain":{"prev_hash":"sha256:374a4caeb6f68d09448473953fbcfa3fbdd3d1943ee5a92acd385767258ce75a","receipt_hash":"sha256:adb7c8406afc6e8ee5b7084618213a221f09cb4363967c7da32284200fc54eac","signer":"ed25519:bench-node-01","signature":"9c2b6f7622e9309a029cfa647eca4d2f2d45d4f2dbe6ea34b403bbc6748da9451a4e57587f5460725f7c3e196533e340638f57551cf04d5c8a49e0738bc2fe06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:35d94a4213237b96f036d9649129e29e7f94b395531ec6933f120510814ef2b4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:aa3a99583306b739abdaacd39acd1f489f74cd82d0c356afe5edf2662711b7a6","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.492233170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.599679e-01","shared_alloc_j":"5.332264e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:aa3a99583306b739abdaacd39acd1f489f74cd82d0c356afe5edf2662711b7a6","served_from_record":false,"record_id":"r201","record_hash":"sha256:89794de1f433bbcf6a3a57b0d7a7bf8c10c7369c10c1032cadbbf2fc06c6c24f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":105014},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857415e+01"},"chain":{"prev_hash":"sha256:adb7c8406afc6e8ee5b7084618213a221f09cb4363967c7da32284200fc54eac","receipt_hash":"sha256:43744471b735794b3681544fc035e2b88b98b7964dc60906d774e093914debe4","signer":"ed25519:bench-node-01","signature":"bfa4bd9820d49b178093dc2334224b086503d8462023c6ce8420d8c85aa125e60fb9dca1644692bc1ee700b8876ae868cbdd48224810a8880e18957e099beb08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5efc68a1771b9256afaed444e7166da93ee306edc9346a8a72351e1ae553d971","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:6859d67dc7b9683a4f1fd9f5b965aefd8a22140e5fde07807360dc5e54dc6198","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.526457270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.609647e-01","shared_alloc_j":"5.365489e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:6859d67dc7b9683a4f1fd9f5b965aefd8a22140e5fde07807360dc5e54dc6198","served_from_record":false,"record_id":"r202","record_hash":"sha256:1d775bdc298dd7321ee6032a2a8a0ed3c4adc6d72767d47e7368e96f78503e8b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":105103},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857685e+01"},"chain":{"prev_hash":"sha256:43744471b735794b3681544fc035e2b88b98b7964dc60906d774e093914debe4","receipt_hash":"sha256:2d311d175489f78444c8e3122107f57f2b64b96c2c81ae9abe228024c8883453","signer":"ed25519:bench-node-01","signature":"6e253aa8f4b9f5f9975004ce15321bd883c9f060360515e15ff66697dec20dbed797f5da49d0fbc6b5bccdaa99a581fc9250cebfa707f8b58d3acb15ea13b206"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3a456c4ac755855c51d6cf3a82a309b4bf312c5bc414c0da0ba42c87d8c4b1f6","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.278335740588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.548547e-02","shared_alloc_j":"3.182849e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":27,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.835005e+01"},"chain":{"prev_hash":"sha256:2d311d175489f78444c8e3122107f57f2b64b96c2c81ae9abe228024c8883453","receipt_hash":"sha256:0cb39d416bfa1a5f0b0ad694c90c2aadc6d65cd8907b137d4df356d9a6003ba8","signer":"ed25519:bench-node-01","signature":"1d19f8094af04e29387c50d5193772328f7509634362c8a14d7478bfd2811ab4588ee97af317152d5c30927e55d617b6a4bcef49765f6bb2b3c27be48953bc0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a58a51dc864b4b53d554d7b122766c0a1046875315f53318962279731dd26c3e","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4d67eec84284925c3bb3e94c48c11e1e415e5b4bf6c82676bdb63f70afc5dbdf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.480818300588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.225673e-02","shared_alloc_j":"2.408558e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4d67eec84284925c3bb3e94c48c11e1e415e5b4bf6c82676bdb63f70afc5dbdf","served_from_record":false,"record_id":"r203","record_hash":"sha256:a7fbe335dff33f69fee2d2e8815ea76f439ac151592deb654339ff7695d5290b","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":105196},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822899e+01"},"chain":{"prev_hash":"sha256:0cb39d416bfa1a5f0b0ad694c90c2aadc6d65cd8907b137d4df356d9a6003ba8","receipt_hash":"sha256:eb2eeffef0f8adde9b281ce05ebbeb6ed555ca2fd0b1fa385f37d910ba76e915","signer":"ed25519:bench-node-01","signature":"9081a863580503e54a898410aca648cf9a3bda176263ff6a86024b6936820aab901ff81012fa855949eba4e544cfd3e9592e55bcff2e69cc2f70b3ccd70ab205"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f0afdbde64f15c6f71f1cf53fbec5bab6669de42b8a1020036f4188de9ceb2b9","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:c056ecb36876fe2bda74fc48b7a32f777323cbaf6519fabddbf28ac0a87c2b68","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.263496540588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.592697e-02","shared_alloc_j":"2.197566e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c056ecb36876fe2bda74fc48b7a32f777323cbaf6519fabddbf28ac0a87c2b68","served_from_record":false,"record_id":"r204","record_hash":"sha256:7eade093335c3d832fabe272cd4af5e8030103d1d890d55ae6297f10d0a4a812","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":105233},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.818918e+01"},"chain":{"prev_hash":"sha256:eb2eeffef0f8adde9b281ce05ebbeb6ed555ca2fd0b1fa385f37d910ba76e915","receipt_hash":"sha256:8b53d82fd891824d8e7c5228725aa1f2f1b19b900301960bbb95522481a0b552","signer":"ed25519:bench-node-01","signature":"a012e42f92dd266acc2597ef727a7adfafa2b9e902e3751b929cea97640c7b7883353e3b8eefbbad75ed123aedc60c66c51d0b0c0e19ba9eb73fc74b5787b801"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a1a551e44ab9556c732d20155a39c0dd3b26c2afb4f25beace052a99bf59bb39","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.641929070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.060755e-01","shared_alloc_j":"3.535850e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":6,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839573e+01"},"chain":{"prev_hash":"sha256:8b53d82fd891824d8e7c5228725aa1f2f1b19b900301960bbb95522481a0b552","receipt_hash":"sha256:1a65aa9c729a83c7a78c89bd0a76c68b2bdbd62a157aec33afc57503208b8791","signer":"ed25519:bench-node-01","signature":"e09fd4d70f99be6dbff51b48e93b20483282b5672b0a6b09e826e3522f999507421075b37dbf6cf676b8affc7af027a270b8a44a97590b658cbb61e9c8d42f0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bc66639316b9e93b120cfc923cb5bc693ed1589521f4f16253edae10b5516efa","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.296707860588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.602059e-02","shared_alloc_j":"3.200686e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","served_from_record":true,"record_id":"r121","record_hash":"sha256:68c00c9152f36db8ef49fff21c928ac679e7a92a748171b7d820e16b09fa9a05","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":95619},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.835248e+01"},"chain":{"prev_hash":"sha256:1a65aa9c729a83c7a78c89bd0a76c68b2bdbd62a157aec33afc57503208b8791","receipt_hash":"sha256:c4997abeb0bfd930868fe2a173b983da0fe747b4cc352fcd1ad30937c030201a","signer":"ed25519:bench-node-01","signature":"ba0af605ef59b2c3373c644e5e5c5a50723a6098cbdf14c5741112d48ef19c025b700aeadb072766eb977e877bab49b79f4111bc4b225b82043be456a9e88e0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:690df353f264a8b098731b455d54d0b41608917b0425ca1c926a75dbcc9d345f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.651352570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.354763e-01","shared_alloc_j":"4.515875e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","served_from_record":true,"record_id":"r32","record_hash":"sha256:15137fb9bb5c928e449c8d3e6b50b9ef1791b583f2bd04555aaf3a153e617bc5","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":88540},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850198e+01"},"chain":{"prev_hash":"sha256:c4997abeb0bfd930868fe2a173b983da0fe747b4cc352fcd1ad30937c030201a","receipt_hash":"sha256:858a4863894285cc222a880fcd7880ea9bf59a8b5dcdcd1091ab79e1f0d58581","signer":"ed25519:bench-node-01","signature":"4a08e4fbecaa459fdb8938f66a885ad6314fa1bd8b93f5a6cc1a5686ed0f8a6e2c68255c78faa5eb39752d65c711c2b98690967131c540b9da66f22e606cf70f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9a3f6af6a5d05df991e71dd14b2abfe67a5066d67642dc8cd9ba2de7ad3fdbe1","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.981181370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.742091e-01","shared_alloc_j":"5.806971e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","served_from_record":true,"record_id":"r149","record_hash":"sha256:5766de1b0954020a4a5f70be2b1e114504615839e2365bda98f7b248fac792b6","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":98338},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861119e+01"},"chain":{"prev_hash":"sha256:858a4863894285cc222a880fcd7880ea9bf59a8b5dcdcd1091ab79e1f0d58581","receipt_hash":"sha256:c47e4f1c35fa3bb845d094c136588ef6f1624dee47983eec0ec2ff9181ca91af","signer":"ed25519:bench-node-01","signature":"9828824281c0b87ec2f902e60d6e3236f11c06139772b3102dcaf3900d33981e9f44f97fd67ad00b5bf8d61669aab8e3fe1518614a0d3e3010abc0d62d9ee009"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c0d07cce03267496884d12aac5404cd386ab0de9db6fa52295c761ef8a78c173","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ad278d6c144d6ba6abe0909ec13f4571697719ce7fc2ad60ad49fcd7a7a482af","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.353131470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.267902e-01","shared_alloc_j":"4.226340e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ad278d6c144d6ba6abe0909ec13f4571697719ce7fc2ad60ad49fcd7a7a482af","served_from_record":false,"record_id":"r205","record_hash":"sha256:d643090525613536443e5203b6a3ac0bd59f2203ab2d995b188f3c70e4eb8b05","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":105588},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847320e+01"},"chain":{"prev_hash":"sha256:c47e4f1c35fa3bb845d094c136588ef6f1624dee47983eec0ec2ff9181ca91af","receipt_hash":"sha256:7d1e8801ed3121a4fcb913cc857116db9fafe311a41524323c934c8bfa6fb296","signer":"ed25519:bench-node-01","signature":"0631daedd10ac959ae136c27d65f943a005568eb8610b10c0b6051843a4c07382c554c29e67203d87e07893c0f59703b65e2f6b21087a715f1aaa60c5b76cf03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fbcf4926ba4252319055ac8ec14fa018c2c45349ade27f583f09ed2739060568","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.679718050588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.892378e-02","shared_alloc_j":"1.630793e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":11,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.805964e+01"},"chain":{"prev_hash":"sha256:7d1e8801ed3121a4fcb913cc857116db9fafe311a41524323c934c8bfa6fb296","receipt_hash":"sha256:93d8b035634d31676ef3dbf3df91403e9a77a661e76bb7b2979af1434d2d88a1","signer":"ed25519:bench-node-01","signature":"61391606e532eaf299b28307c110c52b610ffa5d7ef8d7f356613e72649f663ab43c82796817d0ab8eb7bcd2ae09a2b5121b4568d7df1111bc27b29d9df66102"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a2776cc12e8a5520b13d7945b795966d5e37c787bf686ca7c99439b7bd847a10","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.143795770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.789455e-01","shared_alloc_j":"5.964849e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","served_from_record":true,"record_id":"r79","record_hash":"sha256:bc09a0b7aa34a4163a95cc14cba017fc4631050085f0f7aabbba0fffe37d0c86","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":92461},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.862284e+01"},"chain":{"prev_hash":"sha256:93d8b035634d31676ef3dbf3df91403e9a77a661e76bb7b2979af1434d2d88a1","receipt_hash":"sha256:bf56c32b7a7dad2a1ab5f8392bfa663c547b2f3b8437f39d089f74e43fcac641","signer":"ed25519:bench-node-01","signature":"83cea2436623b9f0a9b4f2b21a339a9f0aa4e91340128c4d26e68f96478e1d7f61992e68430e5ff04b834ec775d6032557d93a83cb5c8f989d11729a499ad502"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:06f82894a424de900dba35f8d09b7a41c7df83f020243707a5f3995b3692257d","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:01322a812d2397397876595f6fc2be45dfeeed256b674f70accd6e3354059fb0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.669593870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.068813e-01","shared_alloc_j":"3.562709e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:01322a812d2397397876595f6fc2be45dfeeed256b674f70accd6e3354059fb0","served_from_record":true,"record_id":"r192","record_hash":"sha256:40484c28a799866871a4cab4dbe55a3d6fd9ec71b583e6c548b4598113b0ba5a","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":103070},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839902e+01"},"chain":{"prev_hash":"sha256:bf56c32b7a7dad2a1ab5f8392bfa663c547b2f3b8437f39d089f74e43fcac641","receipt_hash":"sha256:c9d87b3f730cd292498b31b3d3b510005fd25eb85aa1b4313f94d4b4ad0081b8","signer":"ed25519:bench-node-01","signature":"eadb19257cf6c043ab56653427f19abd9284dde2f4088bea135895db16ba5f90fcd0e287a6e5384d1d7bb4431790b0affb4c0d94bc54b0271a8190576359df07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f32517d314bf8dc7cce485049ef16a439484cd3ecadd4329e746d9087bce385c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.366997930588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.894166e-02","shared_alloc_j":"2.298055e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","served_from_record":true,"record_id":"r101","record_hash":"sha256:423f6097e57e4c77557b0caed44714a3b731fb972ea1da097ee6162150ae2cb3","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":93972},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820860e+01"},"chain":{"prev_hash":"sha256:c9d87b3f730cd292498b31b3d3b510005fd25eb85aa1b4313f94d4b4ad0081b8","receipt_hash":"sha256:274c97acd6c7a5e58d4021c686455a327bb6e3358bf91714b6735e9561d343b6","signer":"ed25519:bench-node-01","signature":"9e94df466815acdc63a4316c47fecedcde0d92e1296a94bd7c264f7616a6f4b6567abe807c4e348b6491da1473e149c14691c96d3fbe3a52607db310d6b1a207"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4ed0d34ee25d11896507497a7dbcdebc195490ebbf6091beb3644dfa338f2bac","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:88c439bb9d426fb9727a854109492c31b2cbe45e6061fb213c1131f86d0a5280","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.678305770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.653875e-01","shared_alloc_j":"5.512917e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:88c439bb9d426fb9727a854109492c31b2cbe45e6061fb213c1131f86d0a5280","served_from_record":true,"record_id":"r124","record_hash":"sha256:8810d4c5f141497c4aba7d3a9b00ca77492003fe0e235e6d347a73b851966316","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":95854},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858862e+01"},"chain":{"prev_hash":"sha256:274c97acd6c7a5e58d4021c686455a327bb6e3358bf91714b6735e9561d343b6","receipt_hash":"sha256:5bf9dfe9be0042e874755838517547ac73448c936e418efcd729dc55bc29c11f","signer":"ed25519:bench-node-01","signature":"b062ee022816f32d1a9971d162732c2781bccbaf441542f498e80bfe0c4790177c924327a2c061617ce9b8202a4d5c62e83e4f3517184106fe08fbcf1b95ff01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:16e754b10c60d6031cf924adbe9e9c0e53b49dd5703c26663c3572bd699deb0a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ca5a91e5d506197e8fd03430940a49a994c86f3b3a599cc7e4a9870d1e7d01af","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.389808770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.278585e-01","shared_alloc_j":"4.261949e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ca5a91e5d506197e8fd03430940a49a994c86f3b3a599cc7e4a9870d1e7d01af","served_from_record":false,"record_id":"r206","record_hash":"sha256:19456274dd21cd7aea78df75b7ec9ea8c08a0d61a1ea01ffc3e53e30bc1df55a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":105975},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847685e+01"},"chain":{"prev_hash":"sha256:5bf9dfe9be0042e874755838517547ac73448c936e418efcd729dc55bc29c11f","receipt_hash":"sha256:82ad0d0d56ab51374e9e41f44f512182b1c2429e66f37be5f54a390f892ee6cd","signer":"ed25519:bench-node-01","signature":"7bbfb63f93ba69547e9a950a1be15e2a4ee6d5483a9097fa8e2e49da5448a38504df8d965cc18c22af424f97a4f4d9be0092014bc372b52c1a4cf69edf5d7801"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ae391d7f57a75c2b4a0019e13b51d93ae66cf4cb54674885d8bd4cf348647a33","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:22769860872a040f92d81d780c3ead33f2c4c4693a6cbead116dbb27f5fa9744","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.103564310588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.039504e-02","shared_alloc_j":"3.013168e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:22769860872a040f92d81d780c3ead33f2c4c4693a6cbead116dbb27f5fa9744","served_from_record":false,"record_id":"r207","record_hash":"sha256:5a6bb37262aae8f484c97f8c237688921af54a7e9327e0017efb559f1fefb32c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106025},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.832626e+01"},"chain":{"prev_hash":"sha256:82ad0d0d56ab51374e9e41f44f512182b1c2429e66f37be5f54a390f892ee6cd","receipt_hash":"sha256:0562b3259a8b6e4240fdc8be4c796a702f588304f94cd7a7912332f4bf373a9a","signer":"ed25519:bench-node-01","signature":"019e4c28bf96f94df085771bc18e857a811167c19d0975ea6e7384390ba834eaeafdb60b0a708610bf56f5db31d4f2395a309b6fcf6d8148208d32df9f945800"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:85480cde5c5e257fbc56fc7c3627743863e11b7a4ce852468de46191b945d274","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.462801570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.008583e-01","shared_alloc_j":"3.361942e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","served_from_record":true,"record_id":"r16","record_hash":"sha256:3227d5f5cdb47b0c636c60fce42fed733f0e84ce2c21552a8ea3164c96c9d710","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":87438},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.837383e+01"},"chain":{"prev_hash":"sha256:0562b3259a8b6e4240fdc8be4c796a702f588304f94cd7a7912332f4bf373a9a","receipt_hash":"sha256:07913fbfb149cc6ab40dd871047a9e00fc5d8c9eb0f71f392898d918f2c406d9","signer":"ed25519:bench-node-01","signature":"595b72324551044302d804de89ffc6f8aa952a77bdc9de58dc3a380bb1302e53563de447b611b2a9eb799be2ee84cefa482255ee82381b877fc45d35649bdb0b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:27800b16f984d03a9b8bb764814bf654b6bd7879c3e92f7760069d66bf1ca164","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ae1bd322166290226b5e955743760d82a71c20a05d416ba0d87c429bf3b0e67c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.732154770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.087035e-01","shared_alloc_j":"3.623450e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ae1bd322166290226b5e955743760d82a71c20a05d416ba0d87c429bf3b0e67c","served_from_record":false,"record_id":"r208","record_hash":"sha256:4cf11433ab6977a2ac8947a58a09cceeac5185eae933577c35ed820cf35f9858","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106142},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.840636e+01"},"chain":{"prev_hash":"sha256:07913fbfb149cc6ab40dd871047a9e00fc5d8c9eb0f71f392898d918f2c406d9","receipt_hash":"sha256:c46031ec427570285bb2d6226b7efed0d77ab8a3863f077e71de0c694f82c9cd","signer":"ed25519:bench-node-01","signature":"31f83d243f7878946ca236a58ad40c813f007baa205f23e87c52e00dbd8e1f9a3beedd537c94b0738d1d8c68607141edd05a878e23350d226557dd239cb1ec0f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f232b44ef76e49bfd5bd1b46b4789cf5e7cb543ec8c5035978b65e14f422f080","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:271f588ed020b0df063f75c100e10889f916ea364da298472b41f291ce3aced4","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"6.045886270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.760937e-01","shared_alloc_j":"5.869789e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:271f588ed020b0df063f75c100e10889f916ea364da298472b41f291ce3aced4","served_from_record":false,"record_id":"r209","record_hash":"sha256:2b89900c783e7267aa332c6004646ff104ee4665364f3348ac32d22a6d65b3c8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106239},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861586e+01"},"chain":{"prev_hash":"sha256:c46031ec427570285bb2d6226b7efed0d77ab8a3863f077e71de0c694f82c9cd","receipt_hash":"sha256:449e9a09970df6e76a2dbd4462867d0a59f7669f9c0f67b053fe23c85b614d7b","signer":"ed25519:bench-node-01","signature":"4387b5c5915dc130d2d93f79ca32e1c7f71870554d9d9ba6fba8d0561263bebd3dd8b95f92987a1756694300aee6998594c9a88a56b31478ea6b0d07f3c56e00"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ca1f645b6fd85942a3ad56f5085a5a42324866117d51b09de45d8fbc2e21c733","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.552110340588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.520707e-02","shared_alloc_j":"1.506902e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","served_from_record":true,"record_id":"r82","record_hash":"sha256:796c66db2245954b7f1adefe6ab2b746c6c40d34fdc7990c935f119ab41d0a56","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":92646},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.802532e+01"},"chain":{"prev_hash":"sha256:449e9a09970df6e76a2dbd4462867d0a59f7669f9c0f67b053fe23c85b614d7b","receipt_hash":"sha256:b4a3cf8f14ac55151f9401814bccea93c3f0778e2b1378801575dd663e3b2068","signer":"ed25519:bench-node-01","signature":"7d2b8abbf2e959d2c1e933b7f86c0092eb7e3c541c9e085e95703affce85c093af2a216cf470325eb66c4d01c397da2829d967a76e7542f5a700f9618168e60f"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:cfea758f76091be15ba06640fddbd5fd2853fa938687d6bb692541f13c6d28c9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:e6c836824528ac426cdb6b50379dc03e4effab0776267dceb4a9467298b81afa","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.137637530588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.226126e-02","shared_alloc_j":"2.075375e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c836824528ac426cdb6b50379dc03e4effab0776267dceb4a9467298b81afa","served_from_record":false,"record_id":"r210","record_hash":"sha256:eae3e92bc62f3b9f7bf2a1fbfe14437a480490257a1de5c1360f27af17d456c5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106299},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.816433e+01"},"chain":{"prev_hash":"sha256:b4a3cf8f14ac55151f9401814bccea93c3f0778e2b1378801575dd663e3b2068","receipt_hash":"sha256:67b389b921b3988466dec24693819b099fe08ea9679e22d68c6b2e1c821f4873","signer":"ed25519:bench-node-01","signature":"14415db75221d74da207de33548755fa8e26494ac8e872eec9f8c9f4229cfbc1125f9f9a6350d6aa796548635ca7b0b8eae9d524de29f88cbce261b7e3515703"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:430b9ef41c4c7b1794927f6cbcd5b0234c7e15b141061b93938930b4d18059ab","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:60819bd34d50fbc46bd50d2e6a28d1071281bcc7ba2a6e42827c0b97a375501a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.681627770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.654842e-01","shared_alloc_j":"5.516140e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:60819bd34d50fbc46bd50d2e6a28d1071281bcc7ba2a6e42827c0b97a375501a","served_from_record":false,"record_id":"r211","record_hash":"sha256:326fe839fbc052fcbbaace0955045b8e9548d1b1a2367de71664c84292601155","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106391},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858887e+01"},"chain":{"prev_hash":"sha256:67b389b921b3988466dec24693819b099fe08ea9679e22d68c6b2e1c821f4873","receipt_hash":"sha256:f59bba8befbac0c69b6bcb282a43999eff3f12b435910adc2871983f5fe83ef8","signer":"ed25519:bench-node-01","signature":"6da2ce4aa998f9a53d0a227dd3f9aa6df92405804bbe3d7ee5a4dbff2aca1d4c469885a092ac13739e1530d06c7058cbf9fc00f7b25dc1c20259a5766ac24400"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:abb125cd759ca9610060fd111d8aba524610da5ffc1f329ebaaa1103c6ecbe8c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.278551470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.537442e-01","shared_alloc_j":"5.124806e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":28,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.855691e+01"},"chain":{"prev_hash":"sha256:f59bba8befbac0c69b6bcb282a43999eff3f12b435910adc2871983f5fe83ef8","receipt_hash":"sha256:c8c7069792ab8274ce947c3a2fdf800f19612abb3af2d5109f47f9ef76c6f998","signer":"ed25519:bench-node-01","signature":"7e138a43bae5fabaad4bf60f5db54519325899ce8a74e389674218254486cc9ea7395063a06e4391a39f17878eb654cf0879160ac9e7e2515d89dd16d34b7800"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:29ad5bdb2c844ac8825882aee23449c10e9a2de62109e22eaac34c86bc5142ab","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:3f46492cfe2688a378181ff75608c51194302a2ff04d9ef4bef928052ea3e3ff","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.889612970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.132897e-01","shared_alloc_j":"3.776322e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:3f46492cfe2688a378181ff75608c51194302a2ff04d9ef4bef928052ea3e3ff","served_from_record":false,"record_id":"r212","record_hash":"sha256:60ee6ef118725f54dbc5ef230f88bf30ffc27e8814c85b70966d9b57a47cdfe5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106539},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842431e+01"},"chain":{"prev_hash":"sha256:c8c7069792ab8274ce947c3a2fdf800f19612abb3af2d5109f47f9ef76c6f998","receipt_hash":"sha256:419acced3257c1457b9f46dd0adb62fb1bca6fc9c221543835322c825940c636","signer":"ed25519:bench-node-01","signature":"e359738358a4c64dac201db3298ad2a78fd2efc23a6b91abac1c01283be6976583f0ab3ab8e5ab96ed477af63d4c2aaa7528e62fd5fbca53692a57fe8aa26304"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3fdf146553d81b22b0f3543dd26dc70fbd6aa2219c93024f413578cf0a19fe03","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:05f17fd121a463594b61b4cdcf207aaa369bbb2761e582ce36c12da3375fc3c3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.317045670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.548654e-01","shared_alloc_j":"5.162179e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:05f17fd121a463594b61b4cdcf207aaa369bbb2761e582ce36c12da3375fc3c3","served_from_record":true,"record_id":"r127","record_hash":"sha256:1e50dbf0ebd87cb9ea72df72adda520521f02f0b407b8a6eda9651b7dc8ee1ed","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":96603},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856007e+01"},"chain":{"prev_hash":"sha256:419acced3257c1457b9f46dd0adb62fb1bca6fc9c221543835322c825940c636","receipt_hash":"sha256:4940b60587d86937580d871deb549ea4f852c76a0e944412c0795776e903523e","signer":"ed25519:bench-node-01","signature":"ba5cd34236c517c3e8b50bd292759b715c0730c11e6e21628865c1e589467aabafcde0b775e0496cadabf621581c5fdf0e618047d4f2a0d77eda1e50564c0e0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:a2d1154b32a91f3dadc9d3c2eaba57febcd00f3c3aedf534a4e93be4f8b389b2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.837664660588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.265039e-02","shared_alloc_j":"2.755013e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","served_from_record":true,"record_id":"r9","record_hash":"sha256:6171686522fa52fe064eee25b459f97c1a8208bda25fd2c3d36bd73abdf5f197","reuse_count":12,"derivation_j":"1.058824e-06","valid_until":86955},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828736e+01"},"chain":{"prev_hash":"sha256:4940b60587d86937580d871deb549ea4f852c76a0e944412c0795776e903523e","receipt_hash":"sha256:bf917428f13129ff8d8b3ae6a628d32f7fdefc7c5b650035b8d186aedf22dd21","signer":"ed25519:bench-node-01","signature":"000ad56b4dec916441ea2df8682fb0486e26656c11ad92780dab9d2a6aabf7b3e13a932bcbd53cfa9c5be6907db50546061a7915365fc15a10395510c0159a0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ad883bdccf6d121a41de16692bfe52d2490dfb97c3e47f849405fc1eecee2963","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:1df06120a16dbc38a7af778f018c793b4b17283e0dbf1c7c323acdebc5cc84bc","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.668600700588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.772613e-02","shared_alloc_j":"2.590871e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1df06120a16dbc38a7af778f018c793b4b17283e0dbf1c7c323acdebc5cc84bc","served_from_record":false,"record_id":"r213","record_hash":"sha256:0d08b83c68c630d9a4052eb243a2d31fcf8d2fdcef073f254de81ee857a1c54d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106715},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826068e+01"},"chain":{"prev_hash":"sha256:bf917428f13129ff8d8b3ae6a628d32f7fdefc7c5b650035b8d186aedf22dd21","receipt_hash":"sha256:60a33b0e54d8565645d7056be7f2775a8ec8549bab6bb261870154ebedaa38c8","signer":"ed25519:bench-node-01","signature":"b3543d35c32e4761093fb27fbab730ee0d1ed6b4d5e17684ee7eb9f7debe5d97d500ffb3ef8d9303225415a5ceda3785c205d86cfd621e32e2f008a11887930b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:362e8c4600624e735d14086beb60e5bd4e1d894c530beeafcb8bdbdeba85b953","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:356be222ab6f98d66c50ea3341980d4f6f2a51649f3224f583bfae59b72d0db0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.404356670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.282821e-01","shared_alloc_j":"4.276071e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:356be222ab6f98d66c50ea3341980d4f6f2a51649f3224f583bfae59b72d0db0","served_from_record":false,"record_id":"r214","record_hash":"sha256:a54be28cd844e5c6173e1a69e56ae5337bb2747b5cba91d01406258a70cf4297","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106786},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847828e+01"},"chain":{"prev_hash":"sha256:60a33b0e54d8565645d7056be7f2775a8ec8549bab6bb261870154ebedaa38c8","receipt_hash":"sha256:2ac4002b7752b76726698621fd79ba0b10ab70e4fb845dcde198b9aa0a94e30b","signer":"ed25519:bench-node-01","signature":"2113f6463fa1c731af6a3625460f29003bb906aad104be7106ef3af231c6b3255151818f4104dbae1e93cf8c728049a948d952ce13c0089f53abfcc2b97b9601"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5660474ce3542a03721a54d5ac5c55d27830d945efe3c70c1e76c5c7c9b9ac14","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:2e6bcce24324c6413e1841fbf4ccf83ba8447651cd6d25ab70dc545d67dbecf2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.791519070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.104325e-01","shared_alloc_j":"3.681083e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2e6bcce24324c6413e1841fbf4ccf83ba8447651cd6d25ab70dc545d67dbecf2","served_from_record":false,"record_id":"r215","record_hash":"sha256:9d207aefa9a4ec9effb4b333b2299d142396ddfe0877209d6f6c30066f2ac439","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106847},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.841321e+01"},"chain":{"prev_hash":"sha256:2ac4002b7752b76726698621fd79ba0b10ab70e4fb845dcde198b9aa0a94e30b","receipt_hash":"sha256:094673294d3f1a12e9099d0179c3e1ec4d04296c3d86efa34782d03395cd97fa","signer":"ed25519:bench-node-01","signature":"0011e00e93192e2d0440cb600c5ac287d3d0f699b3120b34e1c5e6dee13fa6794d35bafb7bd3ff96dea42bfeb58eaeb12769990a33680ff27e16f7fc7c282009"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9263b032f037bae22e3c6bf3c64a60cbcdf6ef0200bdd43d359c421205cec534","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.641395080588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.693381e-02","shared_alloc_j":"2.564460e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":5,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.825623e+01"},"chain":{"prev_hash":"sha256:094673294d3f1a12e9099d0179c3e1ec4d04296c3d86efa34782d03395cd97fa","receipt_hash":"sha256:c11279fca0df1b69578a0d735a79d26116a781f780674e2eb8cb78db361b467d","signer":"ed25519:bench-node-01","signature":"06011c34db4051a09a7ba3f89cdb3f0d3a006b5c420b909da755cf485df11b3548a08235226e31826983268b18b1cfaa6d2f2b74e4ac28836864385f988aaa0a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:bc8e4523d363f69856ced99b42c577f5c894301cd8cd4a9625c65f31dbebe921","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:59687be2cc0728f45be3c434049504371152803c7205e95ceed1d12f1291f24c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.621060590588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.721532e-02","shared_alloc_j":"1.573844e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:59687be2cc0728f45be3c434049504371152803c7205e95ceed1d12f1291f24c","served_from_record":false,"record_id":"r216","record_hash":"sha256:1a022d7f3acd2db563eda7d9e8eb6f06781f728325975d78045d9061257f383a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":106916},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.804420e+01"},"chain":{"prev_hash":"sha256:c11279fca0df1b69578a0d735a79d26116a781f780674e2eb8cb78db361b467d","receipt_hash":"sha256:ad8ac808959c300e099e617d2bd0f84ccf597f00f38647382123045959227a89","signer":"ed25519:bench-node-01","signature":"69224699c775ce75e39819ec004e74ea2c2fd4b8dedb392f07c6a5748ffbfc16eaef4a65c3cd83900af5d6d560eebf5d01dbb4d1cea0e28491b534347b8d2b03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:6b5aca5124eb70c61490356504d3941e13c26029d42a4d3ccab5046ec9b27d1d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.078132170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.770329e-01","shared_alloc_j":"5.901098e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":6,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861817e+01"},"chain":{"prev_hash":"sha256:ad8ac808959c300e099e617d2bd0f84ccf597f00f38647382123045959227a89","receipt_hash":"sha256:2c0eee645ea48986d10b8f8375aefdb3420babe8795d6ab7fc4c2c4acd814690","signer":"ed25519:bench-node-01","signature":"867f622edd9743410f9e0288e834cd01b484c1bb3ef7fbcd2b1bfe791c12fdf1194114a71f092e0ee13b9ce3b0c73ea1c8c7119ded32ce5ccbd53c104bd5730c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:853706b328bfee0523b95e27433ca1b347175aa6eaa5977eae16daf086bc0f8e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:c70c4f1cfbf7f3e80ab7fd116b69405e0071bb46bac6a04135010096235a99f3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.923646790588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.602852e-02","shared_alloc_j":"1.867617e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c70c4f1cfbf7f3e80ab7fd116b69405e0071bb46bac6a04135010096235a99f3","served_from_record":true,"record_id":"r161","record_hash":"sha256:0eee3e2f9d255e1ee0143cff2061e9ca2f87125468fc3d082061511ccd760deb","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":99443},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.811853e+01"},"chain":{"prev_hash":"sha256:2c0eee645ea48986d10b8f8375aefdb3420babe8795d6ab7fc4c2c4acd814690","receipt_hash":"sha256:12f20312b5708d8811c2ffcb0e9eb19141e536e944d9fda05d119545bebf7c69","signer":"ed25519:bench-node-01","signature":"8545e65443b4788e3dba9192a6c8cdf264dff754713b6c86d5f4ebf60831baab468ad7b6c09850da599bfdb8f95c7cf57e2ce322b0d2cc6907922774306cc407"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:853ee96ca90d6c221b60a1178f11396edaa52b223d0ab09c30cfe8e6fdfd7a49","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:7d4b002421433b01f9b0f76611fdfe099ed2e63b43deefa28e7ced76e9250528","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.185180490588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.364592e-02","shared_alloc_j":"2.121531e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:7d4b002421433b01f9b0f76611fdfe099ed2e63b43deefa28e7ced76e9250528","served_from_record":false,"record_id":"r217","record_hash":"sha256:bb6c7c697001ab7319d3ab4805f790d349ac7819aa2b0111a2fc4e53e86df0da","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107081},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.817389e+01"},"chain":{"prev_hash":"sha256:12f20312b5708d8811c2ffcb0e9eb19141e536e944d9fda05d119545bebf7c69","receipt_hash":"sha256:b4e4f2b07edc94159725bf134e54295ab464e3cca8c06e40529b7a1bd4880837","signer":"ed25519:bench-node-01","signature":"752c4ef33f12ed3870a260ec9f6481d7d0840bb56e16e65c8f8181366e8b35f8c0857d79b1b448844e712486d4c5a745a276c11a3265f3462e32ba9a06faba06"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:9070b092119363fb8f7bb7f16d86e0038ce575529857c573f79a9e7832b81dd8","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:08823a9dcbef015dbdc1c8f4ff977078de0a188d0ec0e08e1dd7110840697ec1","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.451719970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.296617e-01","shared_alloc_j":"4.322057e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:08823a9dcbef015dbdc1c8f4ff977078de0a188d0ec0e08e1dd7110840697ec1","served_from_record":false,"record_id":"r218","record_hash":"sha256:a991e298adae8c66d805d3d89e32efdd54a3ce90c6c70ec908ff52d75a762ad9","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107153},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.848293e+01"},"chain":{"prev_hash":"sha256:b4e4f2b07edc94159725bf134e54295ab464e3cca8c06e40529b7a1bd4880837","receipt_hash":"sha256:bc76b29c6975d909bdee7adf5eefe68c0c18125b4da554a24d8769d9557d771b","signer":"ed25519:bench-node-01","signature":"b7a12b8859c3d0844f0e6432bdfe4fb66272d262a1a409949b919146ddb1440c47b36eabc4fbf704b6835649a4cc225423bae7f76e6833898ef71f6b14a9fe0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5ae510ee21268a0bee8a378abb1ce2e362156ee211548680818e30559e7ea683","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:a72d68eaba06ec4e6c963da103c9b0dc45ab7886ddc6983bfa2adda3429d7c9c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.026687370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.172821e-01","shared_alloc_j":"3.909404e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a72d68eaba06ec4e6c963da103c9b0dc45ab7886ddc6983bfa2adda3429d7c9c","served_from_record":false,"record_id":"r219","record_hash":"sha256:2b049211714704c8a911e2a2f5044079ee8b7ed2e7ba64eaa0b22014ca14d7b7","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107218},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843935e+01"},"chain":{"prev_hash":"sha256:bc76b29c6975d909bdee7adf5eefe68c0c18125b4da554a24d8769d9557d771b","receipt_hash":"sha256:35a5f31ff36976c8543c136528738708590f161b3c072827e84caea37a0234ab","signer":"ed25519:bench-node-01","signature":"c8decc56ff9a5d5f23497c95f7b32b6ac923ffba498cebe31748936422e6f63f6f4b7f235df2f4269079b77018ec3ed51a7d86e503bf030a5eaaed05ce1d120b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:668a98f095422cf755306f191a88365fa399d587ae81b1d502b938d194876033","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:d72b56294d3317cd83e6e9ac76160ce7967610be483d2d4fec03730eae111c3f","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.814680670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.402334e-01","shared_alloc_j":"4.674446e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d72b56294d3317cd83e6e9ac76160ce7967610be483d2d4fec03730eae111c3f","served_from_record":true,"record_id":"r104","record_hash":"sha256:294704c43530a35c5198aa215dc9b2be748cd6edafae3871155ee7b466c762d6","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":94387},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851697e+01"},"chain":{"prev_hash":"sha256:35a5f31ff36976c8543c136528738708590f161b3c072827e84caea37a0234ab","receipt_hash":"sha256:c659c84feb7133f2c01b0ed409aacd19723346eeba076173eafcc8d523051d70","signer":"ed25519:bench-node-01","signature":"53cd19d36f035c66decb15c2ec02faf6962365ffcee16bfb53bc4f3c38e4374d8d9729c2e9fe179931ff0f40c4908e7ed913619ae6bd4c652aa01fa6406b5303"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b8d4a8261bfe7887f7148a19002ae0830cb1d278497303f353e090c70fb66c65","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:baea2e2ddc1e7402abc1dea416e792b9abb0db4212cd13a3bb45db038aef7c4d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.414865560588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"9.946199e-02","shared_alloc_j":"3.315400e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:baea2e2ddc1e7402abc1dea416e792b9abb0db4212cd13a3bb45db038aef7c4d","served_from_record":false,"record_id":"r220","record_hash":"sha256:5f0cfeddc9bd5eb0e631234b4d30877950e8da2235e5c6f0548fc2c58a7150ef","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107351},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.836777e+01"},"chain":{"prev_hash":"sha256:c659c84feb7133f2c01b0ed409aacd19723346eeba076173eafcc8d523051d70","receipt_hash":"sha256:6d3434aea5725a80ccfebb8fcc9eda47225311cfa685f12995180985991d0534","signer":"ed25519:bench-node-01","signature":"6cad4c411cb9b4f7007655a99d8b5d722bc1976e43cc5278592690882354a7eece0e022b772bb6f39f1a9e5b8d0b07c29f0d045942945dff42073163fd0d6c03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3584ebd3466fef77c902ea0d3396129e7eb546bd1d8afd737e881c60ccb3f2c3","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:a6c3f0d042a4ba209dda645c248347eb145cd28fc446dd789ef491d9befd9217","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.892878850588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"5.513228e-02","shared_alloc_j":"1.837743e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a6c3f0d042a4ba209dda645c248347eb145cd28fc446dd789ef491d9befd9217","served_from_record":false,"record_id":"r221","record_hash":"sha256:752c502aba28361bc552cd9f49410cd5df1940ef919265abbf795571cd2edeb8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107382},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.811152e+01"},"chain":{"prev_hash":"sha256:6d3434aea5725a80ccfebb8fcc9eda47225311cfa685f12995180985991d0534","receipt_hash":"sha256:28cbb3fec9d17130255120e7c9b168a50d3ccb6fee579a5c28ceb8dca1f37495","signer":"ed25519:bench-node-01","signature":"a20d4096cda71e440132de4172e1d59be3ab05c09d68145f68bdffe4b36c42ba1790831f0e38dd5911d4abd4b4f9d3dcf43ca1ba0aa90cc0caba4bd38110ab02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:eb4770b231903ca40422d84534d726d4953c96b9eb715f0d53390a257f252dc4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:94d79b3b10abf3b32bc3605e889a76f62d12e9b856a159e6889a8170369dfc6d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.402723870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.282346e-01","shared_alloc_j":"4.274488e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:94d79b3b10abf3b32bc3605e889a76f62d12e9b856a159e6889a8170369dfc6d","served_from_record":true,"record_id":"r7","record_hash":"sha256:781e5562d76a8d14d316897ae18b4fd0e03f6e448e395a5a8562b43febb6786f","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":86825},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.847812e+01"},"chain":{"prev_hash":"sha256:28cbb3fec9d17130255120e7c9b168a50d3ccb6fee579a5c28ceb8dca1f37495","receipt_hash":"sha256:8f336d0d9e9bf7023bed8e2d7af005d0de5691c1c668c0fde91545fda710da68","signer":"ed25519:bench-node-01","signature":"b352ad6e3d1e49155a2a6673c380ebc0879037723eb339c27ff3894df2e64f72e12e6b536d482459eb6655dca8b64e62feeb8a471fde90b8df9e993cf10dae0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:655c89be01d671b3dafb299f442cdfba8e5e3909a8a1c131386bce05ccebdf6b","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:61a0b81dbab0cff6da1d675d0857ca934485b1cb836416a15a76ff0cbb083b6a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.787188260588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.205399e-02","shared_alloc_j":"1.735133e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:61a0b81dbab0cff6da1d675d0857ca934485b1cb836416a15a76ff0cbb083b6a","served_from_record":false,"record_id":"r222","record_hash":"sha256:43ccc74f6d16f44fd16950fa3833c92acc7626c9751f31da8d7c900e792bb46e","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107482},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.808657e+01"},"chain":{"prev_hash":"sha256:8f336d0d9e9bf7023bed8e2d7af005d0de5691c1c668c0fde91545fda710da68","receipt_hash":"sha256:208da1556bfd2d349379d5faa205f20cbfa9d8273c67ce0f1116d0e45a6dff2e","signer":"ed25519:bench-node-01","signature":"61d76f8bcaeeddf3fa32afa7cc12b0915250a45d791520d1dde520c35895a2daf4f2dfc081f8f8cdaad70753cae30a590e83ab40e2e797a980d4cdb50237cd02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:87f9b581b441f989ad6bb545a22fcd54c97bcfa855e554676293766c7749581e","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:c8fedcbf10aee8438e76d85876f93595fdbbe423e074c2031a7b547557e07c6b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.973005470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.739709e-01","shared_alloc_j":"5.799031e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c8fedcbf10aee8438e76d85876f93595fdbbe423e074c2031a7b547557e07c6b","served_from_record":false,"record_id":"r223","record_hash":"sha256:062ec5534bf76b9cf64cc6a713a836cc82216435c022a5b68355986d4701a6ab","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107579},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861059e+01"},"chain":{"prev_hash":"sha256:208da1556bfd2d349379d5faa205f20cbfa9d8273c67ce0f1116d0e45a6dff2e","receipt_hash":"sha256:b02d054a68aabd485f3e1a3f4769db7221983311fbba721dce21750bb87fc4fa","signer":"ed25519:bench-node-01","signature":"2dad2e4e2fe16941e63f306b1555dfa90942a01945c6d6abae425d39020e96b17524b0b0b779c9a07d222132b2c6cc91ebf84b0b20891b1d80e3c8f95ee1e607"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:75de43851056f66d19e61ed69e9008e5fdbd5f130707c93526c719da28659883","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:c41d282f3a696a65be713156d86b2375f5d0733fefc81f28d26cd8c6b35f0d96","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.381130170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.567319e-01","shared_alloc_j":"5.224397e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c41d282f3a696a65be713156d86b2375f5d0733fefc81f28d26cd8c6b35f0d96","served_from_record":false,"record_id":"r224","record_hash":"sha256:70e2b67aea7506863292a9cadbf74f84e176da907effef97f273da2c209a6952","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107666},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.856527e+01"},"chain":{"prev_hash":"sha256:b02d054a68aabd485f3e1a3f4769db7221983311fbba721dce21750bb87fc4fa","receipt_hash":"sha256:daeaf0eb4d59a60e557fdfe7b0ea85f7fd220ebc029098f61d8a2beaefbec4e9","signer":"ed25519:bench-node-01","signature":"db4b5df16a4b246fc65d1d40294d94e3307ba8b7c8c336691d995063455687db57d53a89e23586152f39d81e95e257c391c3aa97da6ac39992b7163ed012f100"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:181d2af64f46f77b0ac447d1ce483f941a4d3cdb7c7efb3313cc6fdf8d6e153c","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.979249500588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.677423e-02","shared_alloc_j":"2.892474e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":29,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830851e+01"},"chain":{"prev_hash":"sha256:daeaf0eb4d59a60e557fdfe7b0ea85f7fd220ebc029098f61d8a2beaefbec4e9","receipt_hash":"sha256:21fe561cfd9094e12f9251ddc1d96e7736207a7aba25bac08977821d10e1c1ab","signer":"ed25519:bench-node-01","signature":"ad48100b8bd296cc3c9e69c0f093ce791457908e00a28729803df14828bf5fc024b1a2b9d714de17135e0674a2bd42425f948c464ac34d400b39ac22852eab05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ba4f9287328e67df70959c9068b6566d85c011d60979666425bd3eaa37e9fac4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.052644870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.762906e-01","shared_alloc_j":"5.876353e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":30,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861635e+01"},"chain":{"prev_hash":"sha256:21fe561cfd9094e12f9251ddc1d96e7736207a7aba25bac08977821d10e1c1ab","receipt_hash":"sha256:e070cfa2d83999d3be8bea57a39f0a56293364bbab7061ec102d44d38e1df75e","signer":"ed25519:bench-node-01","signature":"c78296bd513210c316238192a3b0c3b6f59febad172a91c3c7d6ad27c0d9ce4d083b0dfb673d8a71aab2a5ea0e123e49b0aff7c80fe69cd244b555d6e4b0ee0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ff5fd2503070975824a86f3e5065393190ccf5be26ec1e5034e9a63af918f9dc","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.870765970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.127407e-01","shared_alloc_j":"3.758024e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":31,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842220e+01"},"chain":{"prev_hash":"sha256:e070cfa2d83999d3be8bea57a39f0a56293364bbab7061ec102d44d38e1df75e","receipt_hash":"sha256:913d1219c9e96b398ab2ffb71b0c1c1698edad16190bc0cde301e70c6adb91c6","signer":"ed25519:bench-node-01","signature":"1c9bdc820dda89eb16654b2fa51e57a24b6e7d29d1f5101386ff2eb5dff3daf8fff217cfe80dba922c0eadb141c37b85854955a0bba07b9778a812a7ec852306"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8834a1015fc653a30c052a83fce517e170b3b6ff5c9376ad1ef188c7abaab3c2","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:438a74c1788de475b657a4d1a2b945c0fb090bbe37edf316b3c95a620c37123c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.629935970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.348524e-01","shared_alloc_j":"4.495080e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:438a74c1788de475b657a4d1a2b945c0fb090bbe37edf316b3c95a620c37123c","served_from_record":false,"record_id":"r225","record_hash":"sha256:400d079dcff9ddd209968e71526c9c47a9bce68eedeb8d849910b4300be84cb5","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107950},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.849997e+01"},"chain":{"prev_hash":"sha256:913d1219c9e96b398ab2ffb71b0c1c1698edad16190bc0cde301e70c6adb91c6","receipt_hash":"sha256:15c885cd229c130940ef203d94b71adf97911aa8a6e7309daafbd2da20402592","signer":"ed25519:bench-node-01","signature":"73c3b343d81234116f48f434b223cb063d881a81776dc4a3c38baffb0f83d0014f642b59feef4d2c6a3e5636dd44cc735efd0de57b9528ac49e9f6aa88284f07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:0447bbd3a99a9aa7a8cd112e47ed8d6c6dd60901e838329efa8af1f9491e166d","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:a2df2bce62fb8f386af6a70e7ec36d477087420d1b44e15eda7e965a9d1feb43","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.130999170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.206790e-02","shared_alloc_j":"2.068930e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a2df2bce62fb8f386af6a70e7ec36d477087420d1b44e15eda7e965a9d1feb43","served_from_record":false,"record_id":"r226","record_hash":"sha256:245165e139ac14867855921e81154aa5d6ec31178bbe3d1fe6cfe73875a419e3","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":107984},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.816298e+01"},"chain":{"prev_hash":"sha256:15c885cd229c130940ef203d94b71adf97911aa8a6e7309daafbd2da20402592","receipt_hash":"sha256:1f412ce5f68802864c2ec11b83b0e667137d0d12189a0cb7985139ed4be59d9e","signer":"ed25519:bench-node-01","signature":"acd16a28eb25180face558d7d71695b5f59ee2e77d40ca2983a0ef16fc5467475e80656853991c973a5de9a8e4246c414d2a3980fb956c14a320c2cecb7f8e01"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:79a61ca46bb07813f5206473320229f2da112cfa0dc6ffeac4d165ae6e480bec","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:154acd6e250ebe25f69cf2b239edab416d7fe7fb6baccff9ac3d51823d7f3485","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.020642370588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.171061e-01","shared_alloc_j":"3.903535e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:154acd6e250ebe25f69cf2b239edab416d7fe7fb6baccff9ac3d51823d7f3485","served_from_record":false,"record_id":"r227","record_hash":"sha256:4247199bf03398aa35a621eff8640cc5ac315d64031ab9ff84fefb3b4715403a","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108049},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843870e+01"},"chain":{"prev_hash":"sha256:1f412ce5f68802864c2ec11b83b0e667137d0d12189a0cb7985139ed4be59d9e","receipt_hash":"sha256:6e2f955e26c63cb4faa73bff299e46143659419681efa7e57c2d7d0b0967dfb8","signer":"ed25519:bench-node-01","signature":"9398503ef4f4e864e0206534e3f6309c7af54d21baa5f987640c2460598aadc0da2385fd8c0d24f0852b247537227baa898bf94c25d77af95757631d0c3e6500"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:acad3e8bf707bf8d4c8b17bcdcad15c73ffec5f05f76c51242c6489fa18d4308","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:f31f9da7b2fa4c561c8ee66224a278001052b8b99d6dbe7c209883d758145f3a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.524298770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.026495e-01","shared_alloc_j":"3.421648e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:f31f9da7b2fa4c561c8ee66224a278001052b8b99d6dbe7c209883d758145f3a","served_from_record":false,"record_id":"r228","record_hash":"sha256:c1091b6050ad597014c5f10e8e46bf21c85d9b1a93152ddac1726e2228f54e40","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108106},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.838147e+01"},"chain":{"prev_hash":"sha256:6e2f955e26c63cb4faa73bff299e46143659419681efa7e57c2d7d0b0967dfb8","receipt_hash":"sha256:3050a46833b29806d102e7f94507eb570952340db0c81298833fdc9368e54472","signer":"ed25519:bench-node-01","signature":"74b404f6acaa743d1b60122f3b19c01843f95a2e73d770d5e6824a685e785c8ea26a835bbfee70cc8a957d0c1a60dee6d310d3fd9c0fb9a212d4d006630d5308"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:cbffe3d7673ea41d0fddf8c362e9b0bf4dea9733e3a633da935f0bdadb663401","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:5e7f52ad100fb57bec26eeb1324cc66580a86ca22b04827207046febf1b20a4b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"6.145659270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.789997e-01","shared_alloc_j":"5.966656e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:5e7f52ad100fb57bec26eeb1324cc66580a86ca22b04827207046febf1b20a4b","served_from_record":false,"record_id":"r229","record_hash":"sha256:643279746987b5c7aab5c327e54ae755b16edda073294a8cecf943d759241a0d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108206},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.862297e+01"},"chain":{"prev_hash":"sha256:3050a46833b29806d102e7f94507eb570952340db0c81298833fdc9368e54472","receipt_hash":"sha256:8da73b9f651c4ba682fc9367c188a03b30b51766f7ce1d279e8b2deab6b320e8","signer":"ed25519:bench-node-01","signature":"a9b699a22d91643b5fa9519ef7655ed552955a9ffce2b140f1b274837976214af8b7063a3a732120a429ee7f71ca56e9af008f65ee1eab8d86142c8c2b87c509"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8e6492b10602fdf038cc9fca615b3cc1964b879e542e4366bba640fd9a183eab","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:4c744e2ba5337d8ddbf322da9a54af286783ecf207c9c30c67beb264b801d5e3","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.791680320588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.131105e-02","shared_alloc_j":"2.710368e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4c744e2ba5337d8ddbf322da9a54af286783ecf207c9c30c67beb264b801d5e3","served_from_record":false,"record_id":"r230","record_hash":"sha256:e9e9e27561ed0c184923d342fb04bfe0ca134f52101f78cecdbbdf8a274e9d99","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108251},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828027e+01"},"chain":{"prev_hash":"sha256:8da73b9f651c4ba682fc9367c188a03b30b51766f7ce1d279e8b2deab6b320e8","receipt_hash":"sha256:2722c194e7a3c72d1fbc2742de89971572bfafebed232d9bf85cc975213512f3","signer":"ed25519:bench-node-01","signature":"4b12a9e67f38d2fddc1883f08788b6e264b98cd47d4950bde7aa23f00cb3c7fa656d28c45a03567b2f3e2ac3ffae90b748af804c80a1d5c308d93e9482a5250b"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:410bfe1ba3589a31a5a01941bb381800cc4803bb4d496bb6c3861e9b328e818a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:7aaecc08a0df481f598610afab8692f5ddca7549188b4b2fcc06d2adc2b91739","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.134492770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.495482e-01","shared_alloc_j":"4.984941e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:7aaecc08a0df481f598610afab8692f5ddca7549188b4b2fcc06d2adc2b91739","served_from_record":false,"record_id":"r231","record_hash":"sha256:d3a14c7700dbd53eb98cf797e55c0596f5ecfbbb221507fecfff793c08c7e257","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108334},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.854490e+01"},"chain":{"prev_hash":"sha256:2722c194e7a3c72d1fbc2742de89971572bfafebed232d9bf85cc975213512f3","receipt_hash":"sha256:4f1fa7752b1bef97270de4969e6bd6ac19e0d63b4f1df4c528777f6f9a9b828b","signer":"ed25519:bench-node-01","signature":"8f96b5996d350e35a40fb203dbf068439f55f2f568fce8b327bdb6616c2ed2ca408c823a8775d3f9e56be930b35293cd0a51cfe6c0f1e6397ae0e1174dd46204"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:dda120869900b5ae6077d31dc31e9d818905ffde754c729ab6e53aa5c4697858","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.823300280588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.223201e-02","shared_alloc_j":"2.741067e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":7,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.828516e+01"},"chain":{"prev_hash":"sha256:4f1fa7752b1bef97270de4969e6bd6ac19e0d63b4f1df4c528777f6f9a9b828b","receipt_hash":"sha256:17d1bf8ee9d241eb9245769462fd3a55b1e22962e7c9cc1cc2d9b3f015c2f847","signer":"ed25519:bench-node-01","signature":"f93bd0327e7d560a976b6d9498ca9bcdd376283c86db98f7b28412c709d9dbffe6a71b003f5de59745491c1d7c4c95cc468933beff41af33e2c30fc8836d030c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:32cb7f581466f7d26f30a93ef8dbf02900ef76a615f2b83ad5270ac909a3a66e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:b38cd1f33a130455853b4e6fce41ca504f4173d34ad1f99470b37673b5f8daad","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.053914200588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.894893e-02","shared_alloc_j":"2.964964e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:b38cd1f33a130455853b4e6fce41ca504f4173d34ad1f99470b37673b5f8daad","served_from_record":true,"record_id":"r40","record_hash":"sha256:51291ee97ebadde6d89c8d4fa2e638e63df1dad7d9b4204cf60a7cc2731225b7","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":89180},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.831926e+01"},"chain":{"prev_hash":"sha256:17d1bf8ee9d241eb9245769462fd3a55b1e22962e7c9cc1cc2d9b3f015c2f847","receipt_hash":"sha256:0ebdc10fef12efc8a7a2c60cd7c260a102dd4b852756add2d78a9928c1baa8ce","signer":"ed25519:bench-node-01","signature":"4a3f0cfc87593f46afccc0b3e2dc8e648942d57ac42f7e1d2c20a702ca44d4d3b5186e542abd035727c1d20565a426a17dc685a060737c99344dcd4d5b2b520d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ec9754ae5ee68ccda1164492f7ead43b30f01bd43234b36300f677f1af165317","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.136803450588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.136318e-02","shared_alloc_j":"3.045439e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","served_from_record":true,"record_id":"r86","record_hash":"sha256:f4c7f1ad01d2d813ad75c00cc45d65ed4551e2d7454324699de36187f53cf52d","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":92951},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.833089e+01"},"chain":{"prev_hash":"sha256:0ebdc10fef12efc8a7a2c60cd7c260a102dd4b852756add2d78a9928c1baa8ce","receipt_hash":"sha256:0002c5fe1f4048cc2171c8a973c3a7a7361c498e16b3bf93509a4b136bd6178c","signer":"ed25519:bench-node-01","signature":"bfc645d795e73f9060492f56ca70b083735ba6a7cdd03579844db90709c3e6e66fbf9534fea582f3c1fba4d6cdbef08dd43b424d32161a00cb0472b70b308906"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4f1a5ee5a40678fa9c2f74310f1e0a597840f3e9e89370e9d5c539a81459a4e0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:32b537f7e4ab7f4fe4cb1b7c4b9cce051eecf472dbc477146b1292f4d175660b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.665968970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.067757e-01","shared_alloc_j":"3.559192e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:32b537f7e4ab7f4fe4cb1b7c4b9cce051eecf472dbc477146b1292f4d175660b","served_from_record":false,"record_id":"r232","record_hash":"sha256:c61d0e73507b3f630e75b1f964baa55d47d72ec16007784f13748a4b2fbced44","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108539},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839859e+01"},"chain":{"prev_hash":"sha256:0002c5fe1f4048cc2171c8a973c3a7a7361c498e16b3bf93509a4b136bd6178c","receipt_hash":"sha256:cb30f939803746c59ef44ec400e6d389311e620d2be6a2d52f19d151c084e9a3","signer":"ed25519:bench-node-01","signature":"73584b9e5a3574f637e7efbc40a76777d446d4f7ddf069c838d7dcf3b9a7b44e4accca2cdf023597b30c7028d968af6010b4ded8cf597e269879b2c2051a9a08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8ad9bc4f08da79f39276345308d37f517ea28741b55b5ac1eb2b37107115d017","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:434c21a52f0ec696ed9ace53a471ae38f5ade0437b95c87c88db4fdb7b5e41ba","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.623540670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.637924e-01","shared_alloc_j":"5.459747e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:434c21a52f0ec696ed9ace53a471ae38f5ade0437b95c87c88db4fdb7b5e41ba","served_from_record":true,"record_id":"r67","record_hash":"sha256:23efb9145121ff13e6bc533cec9c6f85c7a20b651f5ea4726d7cae63f5299534","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":91662},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858441e+01"},"chain":{"prev_hash":"sha256:cb30f939803746c59ef44ec400e6d389311e620d2be6a2d52f19d151c084e9a3","receipt_hash":"sha256:9f93d56a9870a2ddf30c842a659dd3288003b0698b6fe1d1bd494d5a29bf962d","signer":"ed25519:bench-node-01","signature":"261767e489ebcc76f7e7dd3ed23528f3bec4f456e58f80c4da2ff557cce89e8964629773f8e38e8ea4cb670e1873c190b13a04268a33a4c6557924c51034e301"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:25c4d681a85bfbf132a3ab631d81cc647a4e92f6e56e4b9606a93eb27ad2194e","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:0666d33c6587bdf37dfd5f26f63169d9428a4ad5b14f750a409cf5aac0ea7bea","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.702920770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.369782e-01","shared_alloc_j":"4.565939e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:0666d33c6587bdf37dfd5f26f63169d9428a4ad5b14f750a409cf5aac0ea7bea","served_from_record":false,"record_id":"r233","record_hash":"sha256:4ddda04b57cc493a16c2c2d5e58661717887d4daab653135d566371b8acc06c7","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108706},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850677e+01"},"chain":{"prev_hash":"sha256:9f93d56a9870a2ddf30c842a659dd3288003b0698b6fe1d1bd494d5a29bf962d","receipt_hash":"sha256:eaeb78189cda48c7616a7b3a4d9a5f88b6a2195689a874f8ef2cddb5adfa743d","signer":"ed25519:bench-node-01","signature":"6989d7151828f794fca921e583362a9e747862f9e892d03196946d51ae71c1d936d2c49633e4d69b465364705c633343b4a5e1767f2126c190f983fd54f70b07"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8aff46aadc487b921b1361a8d61cb12c06a5b575dbfb823841b1ae569af86ed5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:08885ac376dea4446461fdac10faefce43c5e98f66020ca04ca3e368710cd98e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.369834550588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"6.902428e-02","shared_alloc_j":"2.300809e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:08885ac376dea4446461fdac10faefce43c5e98f66020ca04ca3e368710cd98e","served_from_record":false,"record_id":"r234","record_hash":"sha256:065db1263d16d95d3dc3b1d2cda0c0ca407f0c476b161babffa42f660d91c02f","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108744},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.820912e+01"},"chain":{"prev_hash":"sha256:eaeb78189cda48c7616a7b3a4d9a5f88b6a2195689a874f8ef2cddb5adfa743d","receipt_hash":"sha256:a4639da61eae884c37926a1768bd2cdae443804370436178b8a779b1abf04321","signer":"ed25519:bench-node-01","signature":"44c435340057d26716e63fd0e83f3f5d98af58d57a5b9914ff0e963c845394a63a73b2e99f97a0eb8fcfc372cc382e9fdf38b0c05bd4220a9bd4e2c022c83a0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8decfd9bb0b00e8c6ea6d9650dd96d9aa16f5fef30e2be7a1cd2212008e9a26a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.329953760588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"3.873649e-02","shared_alloc_j":"1.291216e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":32,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.795824e+01"},"chain":{"prev_hash":"sha256:a4639da61eae884c37926a1768bd2cdae443804370436178b8a779b1abf04321","receipt_hash":"sha256:76fcfe98215d3f132f229693e6ee5443a766f5e5998813a0c87e7318f42c2555","signer":"ed25519:bench-node-01","signature":"5c781265af307b53b2ea346fec7630c2dd171b40de2265122a950893b7029f9db3d6848e80b6ca84db632e7065e2ae5d7b236eddd4cee46274593c21e6168e03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8b5c3ddab6987ede2af125b51b37a134e9808b3eef77af40d18d03ec79bdcb51","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:a0fd401c3038b9f285d0f65ef4ceb69b2105800921bdec43ec2954c0b0fe999e","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.915087970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.140317e-01","shared_alloc_j":"3.801055e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a0fd401c3038b9f285d0f65ef4ceb69b2105800921bdec43ec2954c0b0fe999e","served_from_record":false,"record_id":"r235","record_hash":"sha256:cd6a125f508acac70b93e1cee7a76889ba92bdbbb4292bb64b53192b51725527","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108829},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.842714e+01"},"chain":{"prev_hash":"sha256:76fcfe98215d3f132f229693e6ee5443a766f5e5998813a0c87e7318f42c2555","receipt_hash":"sha256:6e95fa6a0cad78ccde18eff1ab8c488c13bf2b47776be7dd35ad938e6fa579af","signer":"ed25519:bench-node-01","signature":"3c71c45622ea8ca83a378f8d0ebe605438c02609484999eb335e31087d339f3591e2c2ffc92c0acc7cfd7723d259b7025c16a8ad7e030788305efdeab6749301"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:26518775af59e5aec186de99bd4f2146e9605b6adc0f3428855ef280366349a9","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:ae1bd322166290226b5e955743760d82a71c20a05d416ba0d87c429bf3b0e67c","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.602584870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.049296e-01","shared_alloc_j":"3.497654e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ae1bd322166290226b5e955743760d82a71c20a05d416ba0d87c429bf3b0e67c","served_from_record":true,"record_id":"r208","record_hash":"sha256:4cf11433ab6977a2ac8947a58a09cceeac5185eae933577c35ed820cf35f9858","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":106142},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.839101e+01"},"chain":{"prev_hash":"sha256:6e95fa6a0cad78ccde18eff1ab8c488c13bf2b47776be7dd35ad938e6fa579af","receipt_hash":"sha256:b400ef7647fb421e2c39a0b4f9f16a992e871f6e41092d0a3629a6c9fa7248cb","signer":"ed25519:bench-node-01","signature":"a6e022b2eac76a34c1ea8c0e94b188bd8622139d12cf6022e1c4d5c54e2f2136689bea41981470b32ab90db775192d292091fb4a17eaab0eb8ec5fb537271804"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:1d0017948ce3f28b350d1174025795ee1fc915ec916b6117e10e7042cb2de748","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:933c071a2b53d7a080551b9d19b151ec064eb2d17f6c872d6bcb961d1d1529a2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"alert"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.281431070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.247018e-01","shared_alloc_j":"4.156728e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:933c071a2b53d7a080551b9d19b151ec064eb2d17f6c872d6bcb961d1d1529a2","served_from_record":false,"record_id":"r236","record_hash":"sha256:4996780f941de8e1f28049ca9a39bf8ff1bbf8cd15fc36e13b9cbbc047c23129","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":108957},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846599e+01"},"chain":{"prev_hash":"sha256:b400ef7647fb421e2c39a0b4f9f16a992e871f6e41092d0a3629a6c9fa7248cb","receipt_hash":"sha256:b1be435fa671acc5c86e378d4bccf0ba53f750adfa3e9095181c577ee6a39e99","signer":"ed25519:bench-node-01","signature":"cf4e9726185f5a51363ea528f9a20ab18a3bc2d7526c3488f8daa32e7db4fd3c3e653b4c1e5b151db0d36c376e75ef3c62a0b47745b43a9122b2c391df2c320c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:b3e6c59885f71505f9b1e785638d7e497ba6f8dfda687351946fe3a5211ecb7f","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:a8e321822bb7a103eee73415fa73a912b90c5f863fbec7633f2cb269013e7c16","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.503704870588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.020496e-01","shared_alloc_j":"3.401654e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:a8e321822bb7a103eee73415fa73a912b90c5f863fbec7633f2cb269013e7c16","served_from_record":true,"record_id":"r13","record_hash":"sha256:2b6453fee78877e034de88726e8e50ed7892dc1bc50372ca02e5bf255acd0ac5","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":87295},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.837893e+01"},"chain":{"prev_hash":"sha256:b1be435fa671acc5c86e378d4bccf0ba53f750adfa3e9095181c577ee6a39e99","receipt_hash":"sha256:8374921bcea637db2fef9cdf8e5b23028cf6de4d81f0706aad5702614b98dd3a","signer":"ed25519:bench-node-01","signature":"c04df7761015394e427d139682ad824e384e66148a96d54ee4898dd2321a50e07f39d03558e66f793131328b00ffc13fc783438f53802d1c9951a8e068ef7703"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e01ffdbaca262f33934389b1a923b0aea8202e0be3b0dfa032a906a0e340599a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:8731682b682be8c57a69b4131050ddc9fa82308bd709b8370d0684798ae379ca","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.529990970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.319414e-01","shared_alloc_j":"4.398046e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8731682b682be8c57a69b4131050ddc9fa82308bd709b8370d0684798ae379ca","served_from_record":false,"record_id":"r237","record_hash":"sha256:5ca892c48816cfc4616288735b8a37d7126519a347c6f986a8dfddf7c92d0a51","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":109087},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.849050e+01"},"chain":{"prev_hash":"sha256:8374921bcea637db2fef9cdf8e5b23028cf6de4d81f0706aad5702614b98dd3a","receipt_hash":"sha256:073f0bb1fe731cb3b20954141bdf10231c1e89f194291672f40ba4af46e3c211","signer":"ed25519:bench-node-01","signature":"44adb81048e479893f4e74e70592cb2f42c3ab9836c3804f47b1c3ae3dbd3261628e0f0373a573c464e79cd0769eed16102f3fbd749619c436569980c3a9f400"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e7447236bd81a93987e7d21bea934f3b685162332f20e5d02d71a4161de0d6c2","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:4eca99b1aa9b7cc02d93253fcbd8b042a8f2a308065e37f5971da74e7223ddae","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.694166770588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.658495e-01","shared_alloc_j":"5.528316e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4eca99b1aa9b7cc02d93253fcbd8b042a8f2a308065e37f5971da74e7223ddae","served_from_record":true,"record_id":"r153","record_hash":"sha256:2613989d0144d77d40c7ec837263f215cd6d6e55f78b5e67fc05f5fe9aad9c1f","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":98745},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858983e+01"},"chain":{"prev_hash":"sha256:073f0bb1fe731cb3b20954141bdf10231c1e89f194291672f40ba4af46e3c211","receipt_hash":"sha256:1991f1f8a119e5af7c1fd072b1692ed3bf26b3f8ce4bfbfe100c546237b00cad","signer":"ed25519:bench-node-01","signature":"e3b16176a5c503008444956ad9e13cd50184f8ea99f04aba080e706e04e28d08ba3db95ca3ef645011eb2c0795bb903edeeafbb66fc820e29c9486c2c1ff5f02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3291ed5f1438ed9103c073ebe1655d4da8a800023ff256fe74797359eb2e5b0e","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.655500710588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"4.821844e-02","shared_alloc_j":"1.607281e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","served_from_record":true,"record_id":"r121","record_hash":"sha256:68c00c9152f36db8ef49fff21c928ac679e7a92a748171b7d820e16b09fa9a05","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":95619},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.805333e+01"},"chain":{"prev_hash":"sha256:1991f1f8a119e5af7c1fd072b1692ed3bf26b3f8ce4bfbfe100c546237b00cad","receipt_hash":"sha256:d944ca7560696053e8b6d0f1fc14f109645acd642704c94a530cb50b12104314","signer":"ed25519:bench-node-01","signature":"41d4d4be987c89a61727f7ec6de91a23b5c096e4bb174b2f94a6b0e68c6cec09a4c1ad3e66da73f236a77cbbb95f71b6c84d31dd9d7d6c6f78c024f90bca8e0e"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:67fec650a697bb8b0c014899a4e8c9bd60c398828d8e60e27fa107086f50acd5","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:61a0b81dbab0cff6da1d675d0857ca934485b1cb836416a15a76ff0cbb083b6a","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.951521670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.684040e-02","shared_alloc_j":"1.894680e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:61a0b81dbab0cff6da1d675d0857ca934485b1cb836416a15a76ff0cbb083b6a","served_from_record":true,"record_id":"r222","record_hash":"sha256:43ccc74f6d16f44fd16950fa3833c92acc7626c9751f31da8d7c900e792bb46e","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":107482},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.812477e+01"},"chain":{"prev_hash":"sha256:d944ca7560696053e8b6d0f1fc14f109645acd642704c94a530cb50b12104314","receipt_hash":"sha256:c5e7c96bd9aa9e97bc2c992a80b7d2a9cecc69c1aadd6ea632e4c121e3c9cbf4","signer":"ed25519:bench-node-01","signature":"d932432a019ef736cc7b26feb8192aad8e2fbf6d4d0d3cd9634f7c837af885757aa509c62db58b0c142ecf7f44af7606d46f2148bfff1897248e6c372c307e0d"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f934947695272c7466ab534cb5cded6236974d689c20fbdd146bfc610201c3b0","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.449149570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.587130e-01","shared_alloc_j":"5.290433e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":7,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857073e+01"},"chain":{"prev_hash":"sha256:c5e7c96bd9aa9e97bc2c992a80b7d2a9cecc69c1aadd6ea632e4c121e3c9cbf4","receipt_hash":"sha256:0da0222d3cf14758269ee8d285d4befc4c9f2d3455883411413e0fb4320c3706","signer":"ed25519:bench-node-01","signature":"5610cbc7e0036fc82738fefb08149b5f77ba9738e1f519f2dfaa9baa47d15cbf9516536bde6f075d428d3da232a037079d6f269305ca52c5e43289674d1d2605"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:caec0657960494b0d8c9faee243355dbae42093664b5a028d560678431b64e3f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:2425f9e03a811a126a919af3b686064dff44a60bc399c610ebe622d3abcbcfac","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.981146170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.159556e-01","shared_alloc_j":"3.865187e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:2425f9e03a811a126a919af3b686064dff44a60bc399c610ebe622d3abcbcfac","served_from_record":false,"record_id":"r238","record_hash":"sha256:64bc5e879912c31d169419267c0196c7567f4ddcf0465fc1b745810506db16d8","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":109390},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.843441e+01"},"chain":{"prev_hash":"sha256:0da0222d3cf14758269ee8d285d4befc4c9f2d3455883411413e0fb4320c3706","receipt_hash":"sha256:198040a70b433d139a54a96c5d625914c25fc3651efca4203cf25d11a52a4bba","signer":"ed25519:bench-node-01","signature":"b664fbbb93b9fc2f36e4ee447a9bc67a619c03fabc2f1c36c651fc45e191ce24d4d6e0a3278f8e3caa33e5a25e6639d812032b47883d2a9d1d629ebbc2477a03"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:be5d7689c1dc9a70f3cc3afc3a5b9d26d4389468f0303e346d2aa6e67bc24048","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.935845290588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"8.551002e-02","shared_alloc_j":"2.850334e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","served_from_record":true,"record_id":"r2","record_hash":"sha256:e03b3bafc134c0a9a306c15e6c375c1e686cd2bd28c225568c1964dc8d423bb5","reuse_count":33,"derivation_j":"1.058824e-06","valid_until":86477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.830213e+01"},"chain":{"prev_hash":"sha256:198040a70b433d139a54a96c5d625914c25fc3651efca4203cf25d11a52a4bba","receipt_hash":"sha256:5e5fcf2e96823ff963a6a446e10369f9c19c4fabce0b7a2ac0b3d846e0f4792f","signer":"ed25519:bench-node-01","signature":"11aaa495ae5336f07f564a5f35b727f61365e0688b0fee9f2cd7e47b1dd8817ab540f1739680a446dbf2f084658020ac8079955e0a0daa009b30dd7c322c7404"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:74242e8366d57a8dbcb74b9c2e71de30b08b989bedeb0156c244fa7f1909941f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:92e9c4006c4b2efecff6f3f7549014b52d121982834ec208592be3a6e76cb549","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.687563000588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"7.827843e-02","shared_alloc_j":"2.609281e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:92e9c4006c4b2efecff6f3f7549014b52d121982834ec208592be3a6e76cb549","served_from_record":false,"record_id":"r239","record_hash":"sha256:f5b9b44a2d6ff33e73eb746e55d85485711800f2c4b3386899611ce66bc8c48d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":109481},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.826376e+01"},"chain":{"prev_hash":"sha256:5e5fcf2e96823ff963a6a446e10369f9c19c4fabce0b7a2ac0b3d846e0f4792f","receipt_hash":"sha256:55d8be73c66d64e5d17b1274d1b0e6907c64d4929803f7618d88a9ef491c688b","signer":"ed25519:bench-node-01","signature":"3c6cfe04c1775e3203097d41eed7be18627d7951e6c4b0dbc1bc47837f9e0e64a46fc801a5973d8acdbaa9320088e20edb03a503f33843c7c5631d6ffb349a08"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:eb2600c2e942c9e6eeaa65f8eba286d13b0e10d85b059ea6d7d9c60fbcd1d62f","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"5.988162970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.744124e-01","shared_alloc_j":"5.813747e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","served_from_record":true,"record_id":"r90","record_hash":"sha256:fbfb7b2e0c35a608c84403c695970a425790cfac9e71c7f2b3ab9eecb37cfc58","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":93177},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861169e+01"},"chain":{"prev_hash":"sha256:55d8be73c66d64e5d17b1274d1b0e6907c64d4929803f7618d88a9ef491c688b","receipt_hash":"sha256:e9d99b47feefb8567637d24ca9cb82bc934a419321c88e058baebd1a5a40662b","signer":"ed25519:bench-node-01","signature":"88d0f6c2b9b9ab626a3f116b95b05761db4c8aca901a1207e7353503234e25a5fa75f08ec291e834fd91910fbbc9ed9e153e3e6827d12b727c79e88b282f3005"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:8158a48ae976047b4aac81a2c38e772850014546d01968e6a9682005c736d5c6","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:236ec770245fbae01fc58a6e26be276f26c092cfb0289d628034a105e4a34f85","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.212132670588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.226834e-01","shared_alloc_j":"4.089448e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:236ec770245fbae01fc58a6e26be276f26c092cfb0289d628034a105e4a34f85","served_from_record":true,"record_id":"r160","record_hash":"sha256:9321df311783dc3660a7863b6fd15f6cfbc1f324a0bc0b1ba11a648c91e751a5","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":99410},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.845890e+01"},"chain":{"prev_hash":"sha256:e9d99b47feefb8567637d24ca9cb82bc934a419321c88e058baebd1a5a40662b","receipt_hash":"sha256:6a0f8c159a6985ac0a4883bf1d85c26ceb92fc0f31c1d96ac0d0e13d4cc2f6f9","signer":"ed25519:bench-node-01","signature":"ace6803b0325116d90c8f72d9d245ea408ab59f2c3382ba4fea85e2e63d5eb61efce16c60dc20ff83fd483c5c9dc301b89f5cfad8403bbfc8588dc9e2e5e2301"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5814cab4fa1e47884fb1da151549f910d40280bdad14fc4682d345da39d927b4","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:806356603a2a84090fe9b08ce79608322c3d664075c56f05b93992641802abf0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.595121970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.629647e-01","shared_alloc_j":"5.432156e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:806356603a2a84090fe9b08ce79608322c3d664075c56f05b93992641802abf0","served_from_record":false,"record_id":"r240","record_hash":"sha256:d6198f521231d045ec9439dbb59492cdf8a112fe1801b99df076250b98ba1df9","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":109737},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858221e+01"},"chain":{"prev_hash":"sha256:6a0f8c159a6985ac0a4883bf1d85c26ceb92fc0f31c1d96ac0d0e13d4cc2f6f9","receipt_hash":"sha256:9bf9dcf281b98a80e16c538aa5b4e1515cb0bf99e90d199e8f764334599a9e65","signer":"ed25519:bench-node-01","signature":"7dd1ebf1c3105310183acb929822cf8f1039b36196db3404b01a26377af21f8c0a90efa92fc146922dc770b41b2b2207f3df2e5e28fbd4e5140362a0daa1be05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:372bde5ebd827fe20a9cf58ffe053fad08dfe00511406a5628d72c9bd20ce9d0","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.581526970588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.625687e-01","shared_alloc_j":"5.418957e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","served_from_record":true,"record_id":"r140","record_hash":"sha256:9f4054b5d15ac16ce0b79b780e5d8bf8b428262e4fd2a332ec366dce24f89c41","reuse_count":3,"derivation_j":"1.058824e-06","valid_until":97569},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.858115e+01"},"chain":{"prev_hash":"sha256:9bf9dcf281b98a80e16c538aa5b4e1515cb0bf99e90d199e8f764334599a9e65","receipt_hash":"sha256:9c44bf66d533f1a93619c045b7f9df15b3a99e6af108fcd428dbdbc421d75ecf","signer":"ed25519:bench-node-01","signature":"c2715c2f69e1bd71c809df83d5f455a09331c908687972389ff340081b9ddcc1a2ab777808e4c899544f20c5a39e49c4b6c9bb829e9c410c579549d81c21d904"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:4804719840ba65745344717a3f8c7ef2f81b80f027ac68bfeff03a2a9953c7b4","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"replicate","subject":{"inputs":["sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize_capped"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.889861180588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"8.417061e-02","shared_alloc_j":"2.805687e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","served_from_record":true,"record_id":"r113","record_hash":"sha256:8ededf08c663db6b46adaa95fb079f2c1c4d6978d9cddb8bd8ec1d5ac9ff9f93","reuse_count":8,"derivation_j":"1.058824e-06","valid_until":94997},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.829528e+01"},"chain":{"prev_hash":"sha256:9c44bf66d533f1a93619c045b7f9df15b3a99e6af108fcd428dbdbc421d75ecf","receipt_hash":"sha256:8f36bbd2c906a533ad864bf43d3c235aef1225b7b64c534473f4f2a0633b2a3a","signer":"ed25519:bench-node-01","signature":"b0ffced97ed5443f884ca22faba8888c94b356efef93344b8e60ad6583c6b24dc870c591d695be5481434b1d7f9e719f02bf56acdf84a318cc780012dbdd9505"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:78598dcccd2ab8f210745cb8c1e666f14a0674a3358fdb2bb1bb53e38f91439a","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:fcf6210ad2014207403d7ca2141df00caacfd572f9e94382871cfef28c1b2718","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.894564570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.425600e-01","shared_alloc_j":"4.752001e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:fcf6210ad2014207403d7ca2141df00caacfd572f9e94382871cfef28c1b2718","served_from_record":false,"record_id":"r241","record_hash":"sha256:27e2d4af5cf7ca15c43784531803e7a370bb1ac28e84c7d53c4b1127bbc08f27","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":109953},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.852411e+01"},"chain":{"prev_hash":"sha256:8f36bbd2c906a533ad864bf43d3c235aef1225b7b64c534473f4f2a0633b2a3a","receipt_hash":"sha256:56fdf5ec86c8430cca06faa3a4aaf73d0d509a4354a6426724e6a207bf78b3bc","signer":"ed25519:bench-node-01","signature":"7715408c63dc873c226cb4a38dab7b6e662d6cf4265e6f789a2c8b4043c1a3af4ef7638aab5ba4570207237a4678be0c966291326fd51dc679df8e2be62bd104"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d60c4c1987e99a9018e3ac8a0c971fc34dd8d2d78c9144cbbc0186dabd7b3d69","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:300656a7d76a43a3659b5e523db3771511c201965d9f67c1a12732317c102177","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.811896570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.401523e-01","shared_alloc_j":"4.671743e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:300656a7d76a43a3659b5e523db3771511c201965d9f67c1a12732317c102177","served_from_record":true,"record_id":"r74","record_hash":"sha256:dd658335054ecb3f36bd7f2f6709e3a1ef958ea7aa8c944fa78fe328bd5fc514","reuse_count":1,"derivation_j":"1.058824e-06","valid_until":92184},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.851672e+01"},"chain":{"prev_hash":"sha256:56fdf5ec86c8430cca06faa3a4aaf73d0d509a4354a6426724e6a207bf78b3bc","receipt_hash":"sha256:8ad772a22df0cd54ce0dba5f00726604e02c8a775dd147abd1f292b25b0b274d","signer":"ed25519:bench-node-01","signature":"090a86a4fc52a161119f54b012aa798c14fdcbecf1a365e661efa2bfd8b50de370fd2175df19aa5fb19a8725adb45a5588689f370b270a4cb075c042f9087603"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:fcbc9617405cdc51cedc783d4944b0203c3126a810965124c8faf5993bcb0906","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"1.756015310588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"5.114604e-02","shared_alloc_j":"1.704868e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","served_from_record":true,"record_id":"r52","record_hash":"sha256:4b407241ed751d5065cf8c5d85ecd7c9cceb59ec65630b16476cef31225da9a5","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":90404},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.807893e+01"},"chain":{"prev_hash":"sha256:8ad772a22df0cd54ce0dba5f00726604e02c8a775dd147abd1f292b25b0b274d","receipt_hash":"sha256:2a53e49a81c6bd8886251326e11db73789802b4a35d5ef9aece8c5136241af26","signer":"ed25519:bench-node-01","signature":"f3bc9677a238eca370c52b9fd9137fc14c6522be94a26e26b48f881bd97e44227730512011f6121d712d90cf5f80f0a7107dfa45870adc4c43524b00f9d96a0c"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:5409e1f94faa5eda2d52b79a71a4946d68dab257143682e842ba93da37f83dd2","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:8c64fe7e125a0c23e1693ec175d3c7d7ac8100de1da797c06c8bedf80d663378","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"4.691297170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.366396e-01","shared_alloc_j":"4.554654e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:8c64fe7e125a0c23e1693ec175d3c7d7ac8100de1da797c06c8bedf80d663378","served_from_record":false,"record_id":"r242","record_hash":"sha256:11c28c7df9b49eaba4b1d2c2ab513f3e34dc0f64c880c326ab4764d553984f1c","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":110135},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.850569e+01"},"chain":{"prev_hash":"sha256:2a53e49a81c6bd8886251326e11db73789802b4a35d5ef9aece8c5136241af26","receipt_hash":"sha256:c934f27fa1fd0b89f77c8a958b4675ddd39e647baba67a6f097926cde5a5a888","signer":"ed25519:bench-node-01","signature":"ef6237c1a61b2987575230e85fc766ab93e352973c5771be9bf94b1ec0dc9fcda5e48ccfc7341b2606868959a17c02dea1f8aa8a1fe4695bd15b343fdb8a150a"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:ddabff6f9d523b1d121252d0bbd24a63dbe7e627cc32c01f68b3ad9860d14a67","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:21efe65a5cd6634a182109e3ed3c9edc6a232a0b1574ec896ede74ba2a493672","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"3.249865510588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"9.465624e-02","shared_alloc_j":"3.155208e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:21efe65a5cd6634a182109e3ed3c9edc6a232a0b1574ec896ede74ba2a493672","served_from_record":false,"record_id":"r243","record_hash":"sha256:d45c57f4e5e5b05e980fb68459f53f430f2bc1eba859b2b04cb0c6a138b17909","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":110188},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.834627e+01"},"chain":{"prev_hash":"sha256:c934f27fa1fd0b89f77c8a958b4675ddd39e647baba67a6f097926cde5a5a888","receipt_hash":"sha256:87a5ef7fa0fa9e79b63f482b67b6de8a9f1500dad36214ca3481223f32adaea0","signer":"ed25519:bench-node-01","signature":"f899445ddbb98f1c3af3991048c33cddd032b18dfae8b122838d1d9c5998d94c3399de33a5c08b2b21e6e135c026ea0fa635554f82bdb652a1d45c036dc24a05"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:d9f36f4b05b388fffd3f7966aedfa77c36dbdbeb2440baf0bddb1f07c297cea1","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4e0f6c06f2653d70fb5238b34773775a709754e0c5cef8206cea8c7bbca5fd51","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"decline"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"3.697514070588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"1.076945e-01","shared_alloc_j":"3.589816e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4e0f6c06f2653d70fb5238b34773775a709754e0c5cef8206cea8c7bbca5fd51","served_from_record":false,"record_id":"r244","record_hash":"sha256:88bb8e14e043a5a15c7b83925acb6a4e18c52472eef87e1daf366f3453e5f754","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":110247},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.840231e+01"},"chain":{"prev_hash":"sha256:87a5ef7fa0fa9e79b63f482b67b6de8a9f1500dad36214ca3481223f32adaea0","receipt_hash":"sha256:b320a4dc3dde37f033075ab86ea5eff65f6d36c68172305359e76b234d41dd71","signer":"ed25519:bench-node-01","signature":"8c0f42079b910769a72b6f1b5525be0a0e1526576e1a51cd403d80f06a06354ccff8ff3e6b6c0c46133660a544165c333e5d2f288ef97c8f79885d96dfb94102"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:c4197f11a85a0d25d329c02c639647de0f56087728cfe6aa37ff92c820d5738b","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:4c74193d6acb14f41510f610a799acac10bfb3876c6a0e2a195cc68e190048d7","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"1.676242060588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"4.882249e-02","shared_alloc_j":"1.627416e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:4c74193d6acb14f41510f610a799acac10bfb3876c6a0e2a195cc68e190048d7","served_from_record":false,"record_id":"r245","record_hash":"sha256:5e6054783072e62c2df2ba0c93f09c85c4eb4e2f2c387aaa4595c14b7214cd80","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":110275},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.805874e+01"},"chain":{"prev_hash":"sha256:b320a4dc3dde37f033075ab86ea5eff65f6d36c68172305359e76b234d41dd71","receipt_hash":"sha256:847733321deeddf912949019bb2e9fd386527dc82878fce6888d127423897668","signer":"ed25519:bench-node-01","signature":"70e621a62674e3e259a58b9d06a344fde9c809cb2096ccc565bcdf2d547e90567d2c1e333103dcaa35702575e49edf9c87d201056b051abf3b55964c0f4f1507"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e0adcf7ed7885d1a954589be1004772532ea313e5cbd9c8f49f7b5fdeb9c5437","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.032939470588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.174642e-01","shared_alloc_j":"3.915474e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","served_from_record":true,"record_id":"r82","record_hash":"sha256:796c66db2245954b7f1adefe6ab2b746c6c40d34fdc7990c935f119ab41d0a56","reuse_count":5,"derivation_j":"1.058824e-06","valid_until":92646},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.844002e+01"},"chain":{"prev_hash":"sha256:847733321deeddf912949019bb2e9fd386527dc82878fce6888d127423897668","receipt_hash":"sha256:0916bcec44d74e1f6872602fb93c19a60ddf8492eef1e20362843eaec230a83e","signer":"ed25519:bench-node-01","signature":"19e0d536d2242ccb703c481ba7c839ad2a19cc5df0ffa37ce16572bb1a7a3cdc0e47fbd48f4efa45723ab805296b5d1e126907494bb728471bf72f3f2e0ca705"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:f3ba81ca37d60d113a7ab62f3b9414adef18b034e32ffaa19f03293c00a6f2fa","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"6.020932170588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.753669e-01","shared_alloc_j":"5.845564e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","served_from_record":true,"record_id":"r16","record_hash":"sha256:3227d5f5cdb47b0c636c60fce42fed733f0e84ce2c21552a8ea3164c96c9d710","reuse_count":4,"derivation_j":"1.058824e-06","valid_until":87438},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.861406e+01"},"chain":{"prev_hash":"sha256:0916bcec44d74e1f6872602fb93c19a60ddf8492eef1e20362843eaec230a83e","receipt_hash":"sha256:68ea58ddc7e1a21cd154564950686902023b12034b7b387b5ac94476e4ceec41","signer":"ed25519:bench-node-01","signature":"21675960868449af2578234390ae8b507b4e565de540cf6a1e858ce7b801b944c3694203f4f36935d4143211d5bcb7190bf5dd52cacbf1da643c265fc09f5705"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:3acc62d1cfc4e6bba3a0e12040b7fba4e87e421dfa898cc9575cdd252601218a","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"create","subject":{"inputs":["sha256:ad48c4430dae690b329765ebd3a2aee6af0b915f29cbbb06ab2d43db3380730b","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"derive","latency_s":"1.700000e-03"},"energy":{"joules_total":"2.438542740588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"7.102547e-02","shared_alloc_j":"2.367516e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:ad48c4430dae690b329765ebd3a2aee6af0b915f29cbbb06ab2d43db3380730b","served_from_record":false,"record_id":"r246","record_hash":"sha256:2d2ec75370c7ff3067281f28efe906e1ccb040cfb6b9785740470fc77075ec5d","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":110477},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.822153e+01"},"chain":{"prev_hash":"sha256:68ea58ddc7e1a21cd154564950686902023b12034b7b387b5ac94476e4ceec41","receipt_hash":"sha256:9d61cde666b37a6f0c9bc445873db62dd145e04bd6701d4c9dcfae146e3398fa","signer":"ed25519:bench-node-01","signature":"fc1f3b0e360a16dcb474823d26a9bc1aa7c55d79193a9d1f50c35b281c35894029f3d163bdc9cc8009751650a7e945ca685cad89d0d5de89a5f6a4e869992501"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:37bdf0a77c9873de8052e6c5de146199fe4c34bf0835869c1b3b7207cac53814","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"inspect"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"4.244905270588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.236380e-01","shared_alloc_j":"4.121266e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","served_from_record":true,"record_id":"r79","record_hash":"sha256:bc09a0b7aa34a4163a95cc14cba017fc4631050085f0f7aabbba0fffe37d0c86","reuse_count":2,"derivation_j":"1.058824e-06","valid_until":92461},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.846227e+01"},"chain":{"prev_hash":"sha256:9d61cde666b37a6f0c9bc445873db62dd145e04bd6701d4c9dcfae146e3398fa","receipt_hash":"sha256:d521e8d2383f5dc3a8b947b7e1b822bf8c1de52bed44d9ae66245fe99c359fdd","signer":"ed25519:bench-node-01","signature":"48796acfbeccfc1e14180e3f30050cc4b891b7b3fcb8d0aed3c9d10e6caab45d9f3a5eae7d17c0262d37696de32a5eeebcece5532a223babacccc3592c46a005"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:e5df88f07a9c5942a286caff6da45e48c9f664a3b80949b5f41274d121264d26","kind":"decision","capability":"oer.decision.ev_charging_authorization","intent":"create","subject":{"inputs":["sha256:81dbeff3e03710faad18ddfdcd4b715d171b50030792c13bdd2e1a8083b5c9d0","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"authorize"},"work":{"status":1,"outcome":"derive","latency_s":"1.900000e-02"},"energy":{"joules_total":"2.077827730588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"2.300000e-06","idle_alloc_j":"6.051916e-02","shared_alloc_j":"2.017305e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:81dbeff3e03710faad18ddfdcd4b715d171b50030792c13bdd2e1a8083b5c9d0","served_from_record":false,"record_id":"r247","record_hash":"sha256:8e0979be027eeedbfb2e1e724555f7bbf20dce4ec8305cad70712c22160dfb62","reuse_count":0,"derivation_j":"1.058824e-06","valid_until":110579},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.815201e+01"},"chain":{"prev_hash":"sha256:d521e8d2383f5dc3a8b947b7e1b822bf8c1de52bed44d9ae66245fe99c359fdd","receipt_hash":"sha256:081d3a70d73492444a4360e695878909f751fefeb78701a61c4376c0819f44b2","signer":"ed25519:bench-node-01","signature":"6b9a9210837f8180722d9c7acda19d9cbbce96801bf751eb7b0e71a1c53e7dcde6b93e560d616204340bb1117c18238ac5cea7852f4b722b35089e50ea7aaa02"},"hash_alg":"sha-256","sig_alg":"ed25519"},{"oer":"2.0","receipt_id":"sha256:cf958d6ffa6cf52d71a72984b5c34f4acbe4d1ce5b424e27bced3bb62e3b07ff","kind":"decision","capability":"oer.decision.pipeline_sensor_check","intent":"replicate","subject":{"inputs":["sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","sha256:fc5b42fd1881fb0f66bac5e59447050c09477baff2a45fcf5c28e007616b0bf9"],"output":"normal"},"work":{"status":1,"outcome":"served_from_record","latency_s":"1.700000e-03"},"energy":{"joules_total":"5.502581570588e+00","boundary":"node device, wired charger link, backend share, network","breakdown":{"compute_j":"1.270588e-06","movement_j":"0.000000e+00","idle_alloc_j":"1.602693e-01","shared_alloc_j":"5.342311e+00","upstream_j":"0.000000e+00"},"method":"model_estimated","temperature_k":"3.000000e+02"},"provenance":{"how":"projected","device":"simulation","weakest_input":{"how":"projected","input":"wire_w"}},"settlement":{"question_key":"sha256:80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","served_from_record":true,"record_id":"r25","record_hash":"sha256:6e74829278b022bdc9536ffd84c0eb821da5a3874e95b79387b7bc23e81844cd","reuse_count":8,"derivation_j":"1.058824e-06","valid_until":87941},"floor":{"bits_committed":510,"bits_delivered":"1.585000e+00","floor_j":"1.464199e-18","decades_above_floor":"1.857497e+01"},"chain":{"prev_hash":"sha256:081d3a70d73492444a4360e695878909f751fefeb78701a61c4376c0819f44b2","receipt_hash":"sha256:96638c03cc5d86982be723d8c873fa4cbdeb65c4a885cda7e247f6487d74bf0f","signer":"ed25519:bench-node-01","signature":"a372878ee610c0880fdc2ce8a418ecf7388037e0df1102e81ec5e62593e86cbf98b293d9b93fe80b40888bb77e067db2b0e45fa316616cab29829eae79269d04"},"hash_alg":"sha-256","sig_alg":"ed25519"}],"records":{"r235":{"key":"a0fd401c3038b9f285d0f65ef4ceb69b2105800921bdec43ec2954c0b0fe999e","answer":"inspect","created":22429.8,"valid_until":108829.8},"r60":{"key":"591bc02284e17c26a2b0835a79b31dd08d54443ff09ee36d35b60f30ddea70d0","answer":"authorize_capped","created":4576.7,"valid_until":90976.7},"r217":{"key":"7d4b002421433b01f9b0f76611fdfe099ed2e63b43deefa28e7ced76e9250528","answer":"authorize","created":20681.4,"valid_until":107081.4},"r32":{"key":"496f1026c65f1f30fc2fd412283cbaa8952f64e26889486383e53c537a12a739","answer":"normal","created":2140.1,"valid_until":88540.1},"r21":{"key":"678fe08a78a0cb3c662513b15302b138ce1354a79c85cb3644891a472d1730f3","answer":"authorize_capped","created":1307.5,"valid_until":87707.5},"r92":{"key":"5a7550a0055d59ccb3c4f9f1776480c59246751bc365995dd7e18001152fdb9a","answer":"normal","created":6935.7,"valid_until":93335.7},"r151":{"key":"c91460ada6ccfa92b02cddd2a5dc938fbfd3c5aedf6140e6d4f383451527fa10","answer":"normal","created":12159.6,"valid_until":98559.6},"r115":{"key":"cdac90b356105bbfc2ec1d2b6f50d290b09c8a4ff2cd746ce6c64fa30a02d707","answer":"inspect","created":8780.4,"valid_until":95180.4},"r48":{"key":"23d480c0475de1663073fb13cbe1e5bd2fdcc4d6e07a75c2d431461245da3010","answer":"normal","created":3572.3,"valid_until":89972.3},"r143":{"key":"ba80a0c5a96893e7ef50727233d32223b0c47e4bb8ba733fa50ffc6d22ca525e","answer":"normal","created":11512.4,"valid_until":97912.4},"r118":{"key":"6b9150cfbd8233226dad54e0c15876c5b819e8d9aff9a0c429350e52edb80cd5","answer":"authorize_capped","created":8973.9,"valid_until":95373.9},"r221":{"key":"a6c3f0d042a4ba209dda645c248347eb145cd28fc446dd789ef491d9befd9217","answer":"authorize","created":20982.4,"valid_until":107382.4},"r112":{"key":"6b4490d57878c284cca57315f4304f2b4835d387d5d5db8a92ab2484c9fa0431","answer":"authorize","created":8548.0,"valid_until":94948.0},"r61":{"key":"661120dc456ec83861c110b710ff9ad71298352ce119f83ebb44589c06a502cd","answer":"authorize_capped","created":4693.0,"valid_until":91093.0},"r144":{"key":"37e980e4882227a96e675fb441e1820f1abf8da0fd3d4073eefc5fa35288e5c0","answer":"authorize","created":11576.0,"valid_until":97976.0},"r109":{"key":"aecc00f40acfd5e31b4c34fab60b8afce96daadbfa7765a3a8bde8aaa6bc8981","answer":"authorize","created":8382.6,"valid_until":94782.6},"r241":{"key":"fcf6210ad2014207403d7ca2141df00caacfd572f9e94382871cfef28c1b2718","answer":"authorize","created":23553.3,"valid_until":109953.3},"r191":{"key":"ff23910fa778fac032c85c6568bb998c19a986333ffceece66d612ff672c1782","answer":"normal","created":16494.5,"valid_until":102894.5},"r213":{"key":"1df06120a16dbc38a7af778f018c793b4b17283e0dbf1c7c323acdebc5cc84bc","answer":"authorize","created":20315.0,"valid_until":106715.0},"r16":{"key":"1d0da12dc2e037012f9fef60e513b7779fb0ae2a2acec58682f44a3d2e3f3063","answer":"normal","created":1038.3,"valid_until":87438.3},"r82":{"key":"1308918070129909a278ac574f34dccd25d7fe6e6b9edc6c3383f683b0a4c9cf","answer":"inspect","created":6246.3,"valid_until":92646.3},"r13":{"key":"a8e321822bb7a103eee73415fa73a912b90c5f863fbec7633f2cb269013e7c16","answer":"normal","created":895.9,"valid_until":87295.9},"r67":{"key":"434c21a52f0ec696ed9ace53a471ae38f5ade0437b95c87c88db4fdb7b5e41ba","answer":"inspect","created":5262.1,"valid_until":91662.1},"r147":{"key":"4dcde1b30c97bc371abad9179f7d079831c59c3860d7df8b175517cfcde56244","answer":"authorize","created":11843.3,"valid_until":98243.3},"r114":{"key":"cbb701bee2e60d609c36090f957cfb1de305f32c2f69933c00d6a22bca8f5a11","answer":"normal","created":8688.1,"valid_until":95088.1},"r100":{"key":"5c82a1e4bc712b34adb3610a3c1262f5e1d97d2d2ca195911dae28d81ed6322d","answer":"normal","created":7534.9,"valid_until":93934.9},"r206":{"key":"ca5a91e5d506197e8fd03430940a49a994c86f3b3a599cc7e4a9870d1e7d01af","answer":"inspect","created":19575.4,"valid_until":105975.4},"r40":{"key":"b38cd1f33a130455853b4e6fce41ca504f4173d34ad1f99470b37673b5f8daad","answer":"normal","created":2780.3,"valid_until":89180.3},"r4":{"key":"000992060ac23f9a6b54bc2803d93971b95cb85a38feeb4e9d3559b2ffba116e","answer":"normal","created":233.3,"valid_until":86633.3},"r214":{"key":"356be222ab6f98d66c50ea3341980d4f6f2a51649f3224f583bfae59b72d0db0","answer":"authorize","created":20386.3,"valid_until":106786.3},"r150":{"key":"01b2122aa76c492f0e26f4d0d8113e3058a9c0a42add4d988081cc48760f2f78","answer":"authorize","created":11967.9,"valid_until":98367.9},"r14":{"key":"87fbc23294c2ec468634d4d2a29b0784ae6d1e65ac331af477e07c957fe523f0","answer":"authorize","created":923.8,"valid_until":87323.8},"r133":{"key":"04e5a26940894add6708ef236b673662643062f46a51261d7761552a16d9d3f3","answer":"normal","created":10548.0,"valid_until":96948.0},"r152":{"key":"f19bc2892427342b6a94dc67637059edcc9e4ffdbe0f27bbec3ee1262358377a","answer":"inspect","created":12206.5,"valid_until":98606.5},"r131":{"key":"681cb2a577ff523b7cd6ddb96943d8e946678ec479213c4ae937a17caab6ab20","answer":"inspect","created":10456.5,"valid_until":96856.5},"r38":{"key":"57d222a9b6821d1beda2ff0e08a18cffbef322c999e07cd13ed996e871aa136d","answer":"authorize_capped","created":2618.6,"valid_until":89018.6},"r37":{"key":"6a28d2adaac95bc3a2ea8c61107a5d0963c4e4bdcbd5093ef245a58cc8ad327f","answer":"normal","created":2524.6,"valid_until":88924.6},"r95":{"key":"2a1252ad9738cc7eaaaed1b70f61b805d45ec8615340f3472862343d3faf5552","answer":"authorize","created":7050.0,"valid_until":93450.0},"r229":{"key":"5e7f52ad100fb57bec26eeb1324cc66580a86ca22b04827207046febf1b20a4b","answer":"authorize_capped","created":21806.0,"valid_until":108206.0},"r128":{"key":"22d862b92bd310f94f74a536a6cc12299c62e5300c99188e9a681064fa11c842","answer":"authorize","created":10265.0,"valid_until":96665.0},"r165":{"key":"d44df2bf4fb54c72ad6469a023b0b46e6be12079545ed3c2ae2aa38fe0e4f661","answer":"decline","created":13344.7,"valid_until":99744.7},"r176":{"key":"aa7e52c298df874051c6d2a872415cc2dfe3f707b7195b21777823f81a44483a","answer":"decline","created":14497.7,"valid_until":100897.7},"r43":{"key":"c07152cef374396b314cee5827193f70093e1aae2bc94f82384fea2c01b4f7d3","answer":"authorize_capped","created":2996.4,"valid_until":89396.4},"r184":{"key":"06da72ce846abf2c5eadd2aab2f18cd1e5565999fe71c40809bc145b7d50dc5f","answer":"authorize_capped","created":15876.1,"valid_until":102276.1},"r199":{"key":"bba012d917b3f176c43c75c1babeca7aed6998ab35cfaa4885e98ab27b59ad9a","answer":"authorize","created":18372.1,"valid_until":104772.1},"r178":{"key":"9e61930db681a8926fd28a93fc21fc78d349459ebf95dbc889666f26e6a9511a","answer":"inspect","created":14858.6,"valid_until":101258.6},"r125":{"key":"344d3310dbfdbc5554f4e978fbb9c3cab5e5c766c52065d101623da328d5d32f","answer":"inspect","created":9902.2,"valid_until":96302.2},"r208":{"key":"ae1bd322166290226b5e955743760d82a71c20a05d416ba0d87c429bf3b0e67c","answer":"normal","created":19742.1,"valid_until":106142.1},"r233":{"key":"0666d33c6587bdf37dfd5f26f63169d9428a4ad5b14f750a409cf5aac0ea7bea","answer":"authorize","created":22306.5,"valid_until":108706.5},"r171":{"key":"8d2ad364f746f7e5890037cb0de73c8c0800284c36b0693f37f9781bbdda230a","answer":"authorize_capped","created":13707.2,"valid_until":100107.2},"r8":{"key":"0459438e800f3c46d94bb0264ba260d591f263632a5327c9c04828e074ca80c0","answer":"normal","created":460.4,"valid_until":86860.4},"r1":{"key":"5ea2a39f565cf2588f19cb5c05ffdb4e6e04155dd041eeea4651d60de5cc156e","answer":"authorize","created":40.2,"valid_until":86440.2},"r239":{"key":"92e9c4006c4b2efecff6f3f7549014b52d121982834ec208592be3a6e76cb549","answer":"authorize","created":23081.4,"valid_until":109481.4},"r136":{"key":"56f31403b6c262597065ff99fdabb3aa51f06ce20ce0c64fd757c16c6e472db8","answer":"decline","created":10865.9,"valid_until":97265.9},"r116":{"key":"9840140a39c47ebfcdda27e664a72009daffa1d975d005450a100350849daa10","answer":"inspect","created":8810.8,"valid_until":95210.8},"r121":{"key":"8f52d41daaf0271ad11368ec61f9a777a25c003c2e9b643ffae172afc8c6dc8d","answer":"normal","created":9219.5,"valid_until":95619.5},"r18":{"key":"543b0438d15cea081a05c8bc2a7c7bab836d901528216ef19b14045909d3f014","answer":"normal","created":1126.8,"valid_until":87526.8},"r24":{"key":"441d343ae7ce5bc22fef8578d70d16d57a6e30008eba1a33565b6e8c73e5f4c1","answer":"authorize","created":1465.9,"valid_until":87865.9},"r246":{"key":"ad48c4430dae690b329765ebd3a2aee6af0b915f29cbbb06ab2d43db3380730b","answer":"inspect","created":24077.2,"valid_until":110477.2},"r89":{"key":"386c444bb8e68696b4deb7cee60d731f03a2706029e7d8dcae158d7d4a6222e0","answer":"authorize","created":6713.6,"valid_until":93113.6},"r134":{"key":"03edf452ec745a0b3af013d4ab01c43d27b32aa4bc66d762434da2276860728b","answer":"decline","created":10646.8,"valid_until":97046.8},"r119":{"key":"c5acc45aa021fd76b694dadbc084a3aa9a1107f5957329ada1989fd9a13fd849","answer":"normal","created":9004.2,"valid_until":95404.2},"r139":{"key":"6f37d45f68c8e63262b6f5238005c8e712494dcf15281951ed02eb9edcbdd749","answer":"normal","created":11078.7,"valid_until":97478.7},"r80":{"key":"cfde747273a49efebd1335b7e318d6df510579a1af73818d9b0ccab8649bd5da","answer":"authorize","created":6153.4,"valid_until":92553.4},"r200":{"key":"3456548300328438389e70210979fd21b35f4518a9be8525a35e94da571b0bc0","answer":"authorize_capped","created":18397.2,"valid_until":104797.2},"r225":{"key":"438a74c1788de475b657a4d1a2b945c0fb090bbe37edf316b3c95a620c37123c","answer":"authorize","created":21550.0,"valid_until":107950.0},"r154":{"key":"50c404d36b19c3fdef88459eb0d2411aea6815b2d9ae84aea272390b347ccc47","answer":"authorize_capped","created":12407.5,"valid_until":98807.5},"r35":{"key":"995c74d71caf5d717ec1b1db854037a328e7922345dc61b3437aba12ed2a8eb3","answer":"authorize","created":2377.5,"valid_until":88777.5},"r47":{"key":"315c14e61b89addfef08fbfe1205125c8472164f9cdf669f157fc7fc338e586e","answer":"normal","created":3437.1,"valid_until":89837.1},"r142":{"key":"76aa44f7b0b3b872eb243bcd0ed8bc9038d6779900791ddcf365d5805e743a5f","answer":"inspect","created":11427.3,"valid_until":97827.3},"r64":{"key":"12e1d500f4d5e2048a2cdfdedbab64ccfa35e492a4f9b1b1ac37e4dc345e25ab","answer":"authorize_capped","created":4896.5,"valid_until":91296.5},"r108":{"key":"89d945088318077d9adfa27011c408370594902bdc04f815e39284b8a7e08d5e","answer":"authorize_capped","created":8283.2,"valid_until":94683.2},"r98":{"key":"f4f9852d4bb1ab8da33c1e53245115c7b7c35eeb04727089cfabb53b3bde5bc9","answer":"authorize","created":7365.4,"valid_until":93765.4},"r83":{"key":"9c1ce546fd54a646e92397cdc5cf76c148f6186271155222ca123a7bdf8a1d26","answer":"normal","created":6336.5,"valid_until":92736.5},"r52":{"key":"eb7bb57202e70a269d90927e2c13fab24a774d9192a4ad7dc54716765bc25720","answer":"inspect","created":4004.9,"valid_until":90404.9},"r57":{"key":"fbad157ba34331794cf5050bfec542d16e1f3924470fc53d5b8557ce96983c6d","answer":"normal","created":4273.4,"valid_until":90673.4},"r190":{"key":"82766587876a39fe044dc0896677a505d5e5def45b21bf32bcd3f0e2ed269ba2","answer":"normal","created":16402.7,"valid_until":102802.7},"r6":{"key":"373ee59b311333a4d8f4d4bc7c250e0ba6a4ad0e9dfd8983a4eca3ed32f1bca1","answer":"authorize","created":332.0,"valid_until":86732.0},"r162":{"key":"866985a43c4aafecdce84de12bb2720fdf4130adc7633c396da10fde78f100b5","answer":"normal","created":13089.1,"valid_until":99489.1},"r72":{"key":"240fa5c9d924503df218a3b93037f774d98422886228c19146631e7a15c762f2","answer":"authorize","created":5630.2,"valid_until":92030.2},"r194":{"key":"a24555e7692044ccfaca766108abaf92a0eb3d523943bebf7d2eceb3f7cb2593","answer":"decline","created":16860.5,"valid_until":103260.5},"r197":{"key":"3866c5ef26acc8497fff0ba0c7f2411032b993655623b854d09ef997309076c9","answer":"normal","created":17810.7,"valid_until":104210.7},"r106":{"key":"b01775f414fc8750ffb46d8e96e6535418e94e18e8042f473efeffc9b9317a0f","answer":"alert","created":8099.0,"valid_until":94499.0},"r25":{"key":"80d385fbc8687384e87ce5b558fc529384d5bea41b4f433a06dca0659a84738d","answer":"normal","created":1541.7,"valid_until":87941.7},"r189":{"key":"6737e600363f218f40dd3069f95f5dbf3c4db57424119bd7c1736a5be5cc70bb","answer":"normal","created":16370.4,"valid_until":102770.4},"r91":{"key":"f98f8602394386ea5ab5f4f9c08208c54148d551cb84dca8d4c60da7a903bf68","answer":"normal","created":6854.1,"valid_until":93254.1},"r96":{"key":"2576d606f7686868001e756e697c1c0bd80ff210c28f9626a40a0206f8740c7c","answer":"normal","created":7184.9,"valid_until":93584.9},"r129":{"key":"027206174fe3afe55662ff7e197cef4bcc261b706aae20ce6b70fce316d50652","answer":"normal","created":10354.3,"valid_until":96754.3},"r104":{"key":"d72b56294d3317cd83e6e9ac76160ce7967610be483d2d4fec03730eae111c3f","answer":"normal","created":7987.8,"valid_until":94387.8},"r45":{"key":"88e8063dab93d7c54c198faae564d37a45fdc05bf72a71091e28d81cdae5a7c3","answer":"normal","created":3314.1,"valid_until":89714.1},"r137":{"key":"6325a64e3e9f740e0d177e5e9f7b218e54860498e001b826bb4e3639a52aaaa5","answer":"authorize_capped","created":10896.2,"valid_until":97296.2},"r187":{"key":"fb1c565303b1f155c6b39c6428631346c93ae7a3c34300d38606c842ae111be3","answer":"normal","created":16305.2,"valid_until":102705.2},"r243":{"key":"21efe65a5cd6634a182109e3ed3c9edc6a232a0b1574ec896ede74ba2a493672","answer":"normal","created":23788.1,"valid_until":110188.1},"r126":{"key":"9014e65fe138b28393ccb3d8d284ed537952a969e7a21268271f523fa7af84ed","answer":"normal","created":9982.2,"valid_until":96382.2},"r240":{"key":"806356603a2a84090fe9b08ce79608322c3d664075c56f05b93992641802abf0","answer":"normal","created":23337.0,"valid_until":109737.0},"r68":{"key":"ce77866203f612a22e6657ca52065c2bca49b5c704e7cbe7bdbafc508469eb4c","answer":"normal","created":5342.7,"valid_until":91742.7},"r105":{"key":"5169b6649ebf570c3dba87c73d16a22ab32c9b6bfadf7e3a2fd90d625b3ea944","answer":"decline","created":8063.2,"valid_until":94463.2},"r2":{"key":"cc14a6790eb93ecdfc110965eaf5ac3350b52596cb7d600d84ab5431b73cfb27","answer":"inspect","created":78.0,"valid_until":86478.0},"r202":{"key":"6859d67dc7b9683a4f1fd9f5b965aefd8a22140e5fde07807360dc5e54dc6198","answer":"authorize","created":18703.6,"valid_until":105103.6},"r88":{"key":"c4ec9682783effc085e9f772f3940379db07512d64795c0772c75dbfe45a2979","answer":"inspect","created":6665.9,"valid_until":93065.9},"r210":{"key":"e6c836824528ac426cdb6b50379dc03e4effab0776267dceb4a9467298b81afa","answer":"normal","created":19899.6,"valid_until":106299.6},"r148":{"key":"516b5691b6e66826019f65c73831fd8628d3333ec153968bae02509709ddcf3e","answer":"authorize_capped","created":11875.8,"valid_until":98275.8},"r74":{"key":"300656a7d76a43a3659b5e523db3771511c201965d9f67c1a12732317c102177","answer":"normal","created":5784.9,"valid_until":92184.9},"r81":{"key":"310326ba6b9b9dbb0acacf16a065d18f85dff7a810d371e34f2a5949282c8060","answer":"inspect","created":6221.5,"valid_until":92621.5},"r10":{"key":"ebfae6bebcb2216decc8a5f5248c809294a8c5e1a542d328eee0999e102630d0","answer":"normal","created":664.0,"valid_until":87064.0},"r93":{"key":"8369c6ce22f5309b9167dbe73ed40554e89b1ea5b99ec31727e74624db510167","answer":"decline","created":6965.9,"valid_until":93365.9},"r111":{"key":"4989e6fd9d5b4a543eca9f0afbdce0f6043a8a567826de22f9d1d6cdf9c96ba3","answer":"authorize","created":8465.1,"valid_until":94865.1},"r236":{"key":"933c071a2b53d7a080551b9d19b151ec064eb2d17f6c872d6bcb961d1d1529a2","answer":"alert","created":22557.3,"valid_until":108957.3},"r73":{"key":"5aefa7348d80e639ad964174db0ac09ade23590bd0c9e27355a39fcf0342719b","answer":"authorize","created":5717.5,"valid_until":92117.5},"r164":{"key":"f8045743fa59e45d492212b7ce6a4d2284e391e9ee89332c8f878260e18e5039","answer":"normal","created":13268.4,"valid_until":99668.4},"r36":{"key":"fc4f1753901502e5cb89dd61351c41289f2fb74c1f4cb38a6cbfe5a603582f3f","answer":"normal","created":2431.0,"valid_until":88831.0},"r156":{"key":"f70b4758637322ee4d79b8a5f7b81ae70da5a6c8a9c3a9e8023f55d285f1b3d9","answer":"decline","created":12574.5,"valid_until":98974.5},"r170":{"key":"8130c76217d2e109b9e876d67a30cce4f6ada330eaf9ceab951621f8d960e66c","answer":"normal","created":13655.9,"valid_until":100055.9},"r160":{"key":"236ec770245fbae01fc58a6e26be276f26c092cfb0289d628034a105e4a34f85","answer":"normal","created":13010.3,"valid_until":99410.3},"r76":{"key":"07d0f7781bd69b6ac635e1588d83110921621d8756204fc2c7b3c233b482507b","answer":"authorize","created":5909.6,"valid_until":92309.6},"r69":{"key":"f668b77f7f3629e1f6d16f8bcb2557fc93c50eff52cb1fe95b97faaa24e0e33f","answer":"authorize","created":5421.0,"valid_until":91821.0},"r65":{"key":"b0387795c262bc1dc0024657e5c1142edf822e3c40aac8830124fa0b5b3be2bd","answer":"normal","created":5031.8,"valid_until":91431.8},"r101":{"key":"1b4ec7b8551450bb693316293289ae6e5721e61414d32d9e1e8dcdec64a7741e","answer":"inspect","created":7572.9,"valid_until":93972.9},"r46":{"key":"f30367cfef088d228eabb3c5ceba77659575040308761d05e591230a30803269","answer":"normal","created":3412.7,"valid_until":89812.7},"r138":{"key":"142b07d7db8dea0bfc67c9f5eba2082dd565d65695dc5376e1da98af2000ce32","answer":"inspect","created":10989.1,"valid_until":97389.1},"r3":{"key":"5d66d7e7446bb1cf9266702755e05743ab3805b0a13146038d40f354832fe6a1","answer":"authorize","created":133.8,"valid_until":86533.8},"r232":{"key":"32b537f7e4ab7f4fe4cb1b7c4b9cce051eecf472dbc477146b1292f4d175660b","answer":"normal","created":22139.4,"valid_until":108539.4},"r222":{"key":"61a0b81dbab0cff6da1d675d0857ca934485b1cb836416a15a76ff0cbb083b6a","answer":"inspect","created":21082.6,"valid_until":107482.6},"r237":{"key":"8731682b682be8c57a69b4131050ddc9fa82308bd709b8370d0684798ae379ca","answer":"decline","created":22687.3,"valid_until":109087.3},"r224":{"key":"c41d282f3a696a65be713156d86b2375f5d0733fefc81f28d26cd8c6b35f0d96","answer":"inspect","created":21266.3,"valid_until":107666.3},"r207":{"key":"22769860872a040f92d81d780c3ead33f2c4c4693a6cbead116dbb27f5fa9744","answer":"normal","created":19625.6,"valid_until":106025.6},"r62":{"key":"b90bb86248e2952a0051e38c0fbaf3d6cbe1aaa4e1f830b4cb7d07b505c1d7aa","answer":"normal","created":4731.2,"valid_until":91131.2},"r85":{"key":"4a83686302e8d2fa143a1640bef23180d38f6901a3483339dc56731a5ec0dd8b","answer":"authorize","created":6427.6,"valid_until":92827.6},"r28":{"key":"fe80b86dc90e86386ead4fb1e13dbea22c6bf076ee82b9ab7e59aa014dfac56a","answer":"alert","created":1780.6,"valid_until":88180.6},"r86":{"key":"865068876fe5c11725db601266e400936a6b822e99dafb241bdd5661ea346bd0","answer":"inspect","created":6551.2,"valid_until":92951.2},"r209":{"key":"271f588ed020b0df063f75c100e10889f916ea364da298472b41f291ce3aced4","answer":"authorize_capped","created":19839.9,"valid_until":106239.9},"r94":{"key":"e8d588c15f3a6ba2d18014a87cafd908d20d54409c84a8304cad13dcfeabcffc","answer":"authorize","created":7026.8,"valid_until":93426.8},"r103":{"key":"e22d08cd71e4fe85157a117945884be41615af88796c53f606b47fa038bac18e","answer":"normal","created":7896.8,"valid_until":94296.8},"r31":{"key":"b77ef8ce17572e60cd55a9745834934f154c1d52d767075c574f18f1d3d4d748","answer":"authorize","created":2007.5,"valid_until":88407.5},"r49":{"key":"502158ddf55d90f0209666a2eb46153da936a272f75fa05532df59430c6bd719","answer":"authorize_capped","created":3722.2,"valid_until":90122.2},"r102":{"key":"84dd48defb81097cfb6618f709c9a08f3583cb3227ad2e905c32c5666eecb9b5","answer":"inspect","created":7747.5,"valid_until":94147.5},"r219":{"key":"a72d68eaba06ec4e6c963da103c9b0dc45ab7886ddc6983bfa2adda3429d7c9c","answer":"normal","created":20818.6,"valid_until":107218.6},"r79":{"key":"d0dc58f8fe1efb2a823ba77a4b5e489d18150c6f9608416c05e861396cba0e76","answer":"inspect","created":6061.9,"valid_until":92461.9},"r113":{"key":"e6c4a8fffbd7bb68e85ee6d01f9f3b0fa89fc968061d134b0275e64026294852","answer":"authorize_capped","created":8597.7,"valid_until":94997.7},"r42":{"key":"9c89b9128168c614899065585aa1af0e9fde30a0cf82a9f112d769711fea702f","answer":"authorize","created":2849.0,"valid_until":89249.0},"r185":{"key":"961b391b8b2d819e0bd5384c0a093e3fd737cd0e8652383fbf8ce86df8e6087c","answer":"authorize_capped","created":16228.2,"valid_until":102628.2},"r149":{"key":"e3493924c9fa37ce74995eb0d97adfbf48df5cc8e5412c55cfd6709c48ff4154","answer":"normal","created":11938.3,"valid_until":98338.3},"r175":{"key":"4a81192758d20335e6b34c2b4afb8aaa03ec6ab7edae4b92d5689ea56bac885f","answer":"authorize","created":14353.2,"valid_until":100753.2},"r212":{"key":"3f46492cfe2688a378181ff75608c51194302a2ff04d9ef4bef928052ea3e3ff","answer":"inspect","created":20139.9,"valid_until":106539.9},"r183":{"key":"2150f93d600bfc917a75a44cc4db64793b61221b87f3d053e9c25c37953e88d6","answer":"authorize_capped","created":15454.1,"valid_until":101854.1},"r245":{"key":"4c74193d6acb14f41510f610a799acac10bfb3876c6a0e2a195cc68e190048d7","answer":"authorize","created":23875.0,"valid_until":110275.0},"r201":{"key":"aa3a99583306b739abdaacd39acd1f489f74cd82d0c356afe5edf2662711b7a6","answer":"normal","created":18614.2,"valid_until":105014.2},"r120":{"key":"5f91097cca77d5e974cab038a9e8b2caca452bee5ee33d9a3521ac39eff904a5","answer":"authorize","created":9100.3,"valid_until":95500.3},"r179":{"key":"dde0d98cce82f3e04b6a435643bf0cc5ed3dcc0a2d028483e907de961a087012","answer":"inspect","created":15005.5,"valid_until":101405.5},"r5":{"key":"2b6cc99222f33d8a6ffd1cf22eee3fcfe52da5b3b9a2d9a735a73f65e5681507","answer":"normal","created":304.7,"valid_until":86704.7},"r196":{"key":"9eba0993d20b4fcc833a8898898639838baa8bda656cef4206d45b329bb3ab0a","answer":"alert","created":17400.1,"valid_until":103800.1},"r166":{"key":"c5feb99768a5f6dafcf10e73e5dd3b71a0e485e646e80369868257c8982b6ed8","answer":"authorize","created":13378.0,"valid_until":99778.0},"r153":{"key":"4eca99b1aa9b7cc02d93253fcbd8b042a8f2a308065e37f5971da74e7223ddae","answer":"inspect","created":12345.1,"valid_until":98745.1},"r56":{"key":"bab919bbfb3527533a2cad88cbd913bdaae65b411f59deffed79daa5ef8b9230","answer":"normal","created":4230.1,"valid_until":90630.1},"r124":{"key":"88c439bb9d426fb9727a854109492c31b2cbe45e6061fb213c1131f86d0a5280","answer":"inspect","created":9454.7,"valid_until":95854.7},"r238":{"key":"2425f9e03a811a126a919af3b686064dff44a60bc399c610ebe622d3abcbcfac","answer":"authorize","created":22990.4,"valid_until":109390.4},"r180":{"key":"7bb669efc7ef54a75650b800b852a682c0dea2c379850992581df1a10e149544","answer":"authorize","created":15100.6,"valid_until":101500.6},"r9":{"key":"17215a184e99b89fc3da059c07f301360e397b522c12c3aad6e1d5419cfb4cd7","answer":"inspect","created":555.8,"valid_until":86955.8},"r140":{"key":"fe477a1fb2edac604c78a4db71c121f492fc1089d0ca77dae881c4d5b525c6f2","answer":"normal","created":11169.7,"valid_until":97569.7},"r20":{"key":"63943a4226d8fb42655215a97d92b7b39c4d83792db09fef2b659595697f2813","answer":"decline","created":1209.1,"valid_until":87609.1},"r90":{"key":"c7983a476a8b1358c3d43853db09b7bfc38fd0634ac0b460c285b02f89223d40","answer":"authorize_capped","created":6777.4,"valid_until":93177.4},"r77":{"key":"bcc91a4f025c63a02ead5e74a517af4b3d4f4d33b42c58e454808d418e1dca17","answer":"authorize_capped","created":5944.3,"valid_until":92344.3},"r141":{"key":"d3980a53696b36e807ddd7a77cf4eea828b8b43bd22c99f8d5ccb8925f32d248","answer":"authorize","created":11233.0,"valid_until":97633.0},"r107":{"key":"ee758a6881e98d0ade331c7e8dfde55cc7269a431806803d356bcc6eb9d5ab8c","answer":"inspect","created":8194.7,"valid_until":94594.7},"r192":{"key":"01322a812d2397397876595f6fc2be45dfeeed256b674f70accd6e3354059fb0","answer":"decline","created":16670.3,"valid_until":103070.3},"r218":{"key":"08823a9dcbef015dbdc1c8f4ff977078de0a188d0ec0e08e1dd7110840697ec1","answer":"normal","created":20753.5,"valid_until":107153.5},"r59":{"key":"363a7aa5dce960db4334d9fb150b8e9170c93243393c0a7b73ac9e6d18693522","answer":"inspect","created":4486.3,"valid_until":90886.3},"r39":{"key":"9db2aac2012a48a242f2d34c7522134a296e612ec7ee0f355b4dd16eebff0f00","answer":"normal","created":2681.9,"valid_until":89081.9},"r234":{"key":"08885ac376dea4446461fdac10faefce43c5e98f66020ca04ca3e368710cd98e","answer":"alert","created":22344.9,"valid_until":108744.9},"r78":{"key":"f2d32adb3d6e01e7630860c636aab70ca928ed102a1cdf5fa6bb132eea96bb57","answer":"normal","created":6038.0,"valid_until":92438.0},"r84":{"key":"c7244af0135d986ac61fd14065b4dbf9cfe82021f3ab953ef526e57c3d5dc13c","answer":"inspect","created":6391.9,"valid_until":92791.9},"r159":{"key":"3c9feb0b662a0c417a55ec5751b1c501d1d315c1d204379045c2e004b8c5c875","answer":"inspect","created":12949.0,"valid_until":99349.0},"r145":{"key":"aee17b375980a589f30f158391737b2322f308485b57b59896ead820ac93fcac","answer":"authorize","created":11662.7,"valid_until":98062.7},"r7":{"key":"94d79b3b10abf3b32bc3605e889a76f62d12e9b856a159e6889a8170369dfc6d","answer":"inspect","created":425.9,"valid_until":86825.9},"r17":{"key":"e496bb563eed03c5e50e65c2be033983e2af2129a553cc99debae35f3260187a","answer":"authorize_capped","created":1080.1,"valid_until":87480.1},"r99":{"key":"aef4bb6b5fe9ccb4e86032a47f27b234eace63aa374802947a1767a90c0a8464","answer":"normal","created":7418.6,"valid_until":93818.6},"r53":{"key":"d4a6fb71a5a16c3ef8c4d405f5dba86c1f33c8d257865ae3f9d2bfe82f80bc8f","answer":"normal","created":4077.3,"valid_until":90477.3},"r155":{"key":"5f670babc0d5143c2f85eeafc483373c44b95de221f254f409287881280efd20","answer":"authorize_capped","created":12486.5,"valid_until":98886.5},"r158":{"key":"7fbe0bb7487a415754e1d2db8aa8e75c9a958e18764a14b62dbb6702a827d546","answer":"normal","created":12902.6,"valid_until":99302.6},"r26":{"key":"f1070bc76733cc042f615c8c46f0da8964f7b072195de00defc3becd95ac9c58","answer":"normal","created":1579.9,"valid_until":87979.9},"r226":{"key":"a2df2bce62fb8f386af6a70e7ec36d477087420d1b44e15eda7e965a9d1feb43","answer":"inspect","created":21584.5,"valid_until":107984.5},"r211":{"key":"60819bd34d50fbc46bd50d2e6a28d1071281bcc7ba2a6e42827c0b97a375501a","answer":"authorize","created":19991.5,"valid_until":106391.5},"r216":{"key":"59687be2cc0728f45be3c434049504371152803c7205e95ceed1d12f1291f24c","answer":"normal","created":20516.6,"valid_until":106916.6},"r122":{"key":"302c7be4003ea0a217fb6534c49ada5bd8b011724c713672aaf7c5e4bdb42d69","answer":"inspect","created":9342.5,"valid_until":95742.5},"r146":{"key":"6fb90bf22cf47ebb829244b6eb2a2c3c6103a367b5355ca78f592dd35b9c656b","answer":"normal","created":11743.0,"valid_until":98143.0},"r244":{"key":"4e0f6c06f2653d70fb5238b34773775a709754e0c5cef8206cea8c7bbca5fd51","answer":"decline","created":23847.9,"valid_until":110247.9},"r231":{"key":"7aaecc08a0df481f598610afab8692f5ddca7549188b4b2fcc06d2adc2b91739","answer":"authorize","created":21934.3,"valid_until":108334.3},"r34":{"key":"a5c65c1251df6b52b6e4a628d9d24fb1484cbf31edba89ca1f021a79d978cf37","answer":"inspect","created":2309.2,"valid_until":88709.2},"r75":{"key":"759f9c148dbf8a7b035d1e93268b749afb1424af4fd1bbde4111057eade1779b","answer":"decline","created":5828.5,"valid_until":92228.5},"r177":{"key":"939bcc1943febcebbe225a53f2decad409bea62e86017712d04d92893c520ed4","answer":"normal","created":14681.6,"valid_until":101081.6},"r181":{"key":"74c49c22905ea62e5a5f211dc5f47a895129ef8a84de0b3ca3c06e98b014cb87","answer":"inspect","created":15189.7,"valid_until":101589.7},"r87":{"key":"09fbec421a34061a20a3276b975bb72b854374ca4aca4b207ae8812da3d2f0bb","answer":"inspect","created":6592.9,"valid_until":92992.9},"r70":{"key":"da6c1c4573865ce511b7df4d41f5f959ab68783b07b6c0639a8a8c91d5c45886","answer":"authorize","created":5490.2,"valid_until":91890.2},"r58":{"key":"d4342c517cddd41c899d7b9a10713f0f335f15631294442b857cdb687d622a72","answer":"inspect","created":4321.7,"valid_until":90721.7},"r15":{"key":"cac3ec97ccbcc9911415dd1c3364a4e1be2862326ead2359d76fa0d81c5c2e41","answer":"normal","created":953.9,"valid_until":87353.9},"r204":{"key":"c056ecb36876fe2bda74fc48b7a32f777323cbaf6519fabddbf28ac0a87c2b68","answer":"authorize","created":18833.5,"valid_until":105233.5},"r117":{"key":"4bacccbd030089bf80d971373b0c6e1988aa64c65713385608eff33f6b6c3fa1","answer":"decline","created":8945.7,"valid_until":95345.7},"r223":{"key":"c8fedcbf10aee8438e76d85876f93595fdbbe423e074c2031a7b547557e07c6b","answer":"authorize","created":21179.2,"valid_until":107579.2},"r167":{"key":"1d7a6cc8581b38a163cf95aa00c0875a71db7a0206c9b19ddf52698710a36ab6","answer":"normal","created":13472.8,"valid_until":99872.8},"r168":{"key":"b35fdcce6b0deeb13607ea6ac07486b5e54843dcb842e6c100c5251a428ff403","answer":"authorize","created":13566.3,"valid_until":99966.3},"r63":{"key":"0bea6cd650d108797f6adf95ce6eb98edb25d3145e447dbbe59044cdc1405e79","answer":"inspect","created":4864.9,"valid_until":91264.9},"r215":{"key":"2e6bcce24324c6413e1841fbf4ccf83ba8447651cd6d25ab70dc545d67dbecf2","answer":"authorize_capped","created":20447.6,"valid_until":106847.6},"r11":{"key":"83e3ecffea2fc1d618c8e6a2b3989bbf71e691b703b087230e7c8df1a5eb2142","answer":"inspect","created":751.6,"valid_until":87151.6},"r41":{"key":"b4e6cd21c0ba051d04aab9042e5e115c3bbe352ada582acaab628fc22dc8fd67","answer":"normal","created":2825.0,"valid_until":89225.0},"r71":{"key":"efbb8d25a730016e7141c8a4385a30cc196c5b7f9d238b06f6213360fb3a4888","answer":"normal","created":5575.5,"valid_until":91975.5},"r193":{"key":"5d7d5d259b708cde975291235fd292c65d84bcd5067333476c61256be72dec9a","answer":"authorize","created":16783.9,"valid_until":103183.9},"r169":{"key":"3666ed45e5af46d635e0d84ec059f2a60ec75bf859f6573873615fa55cc9eb05","answer":"normal","created":13589.5,"valid_until":99989.5},"r186":{"key":"ec9fbd4b6ba63997cedebf8eb7b1b1602733679e70bdb87aab8f6499ba1da719","answer":"decline","created":16268.5,"valid_until":102668.5},"r44":{"key":"0267ad62d64134b8622d4fb07cdbe888137deaca0fdee61e6b66d8bcb9076eaa","answer":"normal","created":3235.0,"valid_until":89635.0},"r172":{"key":"d96ead6b9efeba477a485f30879290174c4379502931ddb2e2e517c5180a0925","answer":"inspect","created":13733.1,"valid_until":100133.1},"r205":{"key":"ad278d6c144d6ba6abe0909ec13f4571697719ce7fc2ad60ad49fcd7a7a482af","answer":"normal","created":19188.2,"valid_until":105588.2},"r227":{"key":"154acd6e250ebe25f69cf2b239edab416d7fe7fb6baccff9ac3d51823d7f3485","answer":"inspect","created":21649.5,"valid_until":108049.5},"r27":{"key":"272c9d86aaf700789284bb8372a2da11c6d2899016b0aea1b9b930ae8725b372","answer":"normal","created":1665.3,"valid_until":88065.3},"r54":{"key":"fd4c1d8eeb1ba609a09e31334f8a9013c10158c6b9aefd227c5fd0e0dd2fa168","answer":"authorize","created":4119.5,"valid_until":90519.5},"r123":{"key":"e0b57d9c257ac8c9907ed3e56a0c407357f932bf26e1660d0d88a96cc06b6aa5","answer":"authorize","created":9424.5,"valid_until":95824.5},"r188":{"key":"cf49fda430355241c258ed4f604d062793a1e809eb06aa62b8eef4d5827b6660","answer":"normal","created":16342.4,"valid_until":102742.4},"r228":{"key":"f31f9da7b2fa4c561c8ee66224a278001052b8b99d6dbe7c209883d758145f3a","answer":"inspect","created":21706.6,"valid_until":108106.6},"r51":{"key":"8bcb9dbe359bff16d6a14b5cd61e77003452673909a5709b8fd12bcdad175c10","answer":"normal","created":3911.7,"valid_until":90311.7},"r198":{"key":"b5166dc9434ae553a99bc73fc4c5eff59caa50ac572d538e05455c4f40710854","answer":"authorize","created":17969.2,"valid_until":104369.2},"r33":{"key":"38918dd8f55312dd4ef01adad024a47d010d9a3649ba108cc31f5e515e45f804","answer":"authorize","created":2192.4,"valid_until":88592.4},"r97":{"key":"c6a5bde2c8cef5728623cc3d7d230d795042fe75b0bfcffd30613b27e1962cb8","answer":"authorize","created":7274.8,"valid_until":93674.8},"r173":{"key":"db77ddfc23a61c07ebd5b655bce57cf0a257f4cd3183666ef84c4bd52ecdd2fd","answer":"alert","created":14007.4,"valid_until":100407.4},"r195":{"key":"4f997e150ba0259c9622fba72c9ccf1420961b0c877fe9ea6bd0e046da32ddee","answer":"normal","created":17190.9,"valid_until":103590.9},"r230":{"key":"4c744e2ba5337d8ddbf322da9a54af286783ecf207c9c30c67beb264b801d5e3","answer":"normal","created":21851.2,"valid_until":108251.2},"r220":{"key":"baea2e2ddc1e7402abc1dea416e792b9abb0db4212cd13a3bb45db038aef7c4d","answer":"authorize_capped","created":20951.8,"valid_until":107351.8},"r19":{"key":"37707e34da5b534c649a60fc1296acd8d8c186353bae88e9ebb88424890d7407","answer":"inspect","created":1162.2,"valid_until":87562.2},"r135":{"key":"cdcf8e35c696111fe372178b7a84c92bcc0a341f50b1b9945d5272081b4a00a3","answer":"authorize_capped","created":10740.6,"valid_until":97140.6},"r242":{"key":"8c64fe7e125a0c23e1693ec175d3c7d7ac8100de1da797c06c8bedf80d663378","answer":"authorize","created":23735.5,"valid_until":110135.5},"r203":{"key":"4d67eec84284925c3bb3e94c48c11e1e415e5b4bf6c82676bdb63f70afc5dbdf","answer":"authorize","created":18796.8,"valid_until":105196.8},"r55":{"key":"0dc01ed37cced0f5820acbc15b5de7dc270ea65e7930a4cf889bdfa792199326","answer":"inspect","created":4147.8,"valid_until":90547.8},"r157":{"key":"f64acee0744f6cb5b0186d8df86be984d0d6ad9ef0872d7c68ec46d52b0594b4","answer":"normal","created":12741.8,"valid_until":99141.8},"r66":{"key":"e794aeed80344416c0eea1f5479ecab56e92778ba0a1c0ad094b45481313cd95","answer":"normal","created":5196.0,"valid_until":91596.0},"r182":{"key":"eeefeeffb8a0a9fb80a5cbf1e129d37dde0b471996c98ef784b3e99073afef89","answer":"alert","created":15302.2,"valid_until":101702.2},"r161":{"key":"c70c4f1cfbf7f3e80ab7fd116b69405e0071bb46bac6a04135010096235a99f3","answer":"alert","created":13043.5,"valid_until":99443.5},"r132":{"key":"cad30f2c6d0d2fedf44ec59d6ee99ebbbcde9e90ccbdaeccb878fdb153546be7","answer":"normal","created":10508.6,"valid_until":96908.6},"r22":{"key":"af6e3f5337fa8c7c3e8c821840fa70047138fe84957d62d954f2d8aca1470b96","answer":"alert","created":1392.0,"valid_until":87792.0},"r130":{"key":"86bfaf5eec3f3155eb596fba26eb284381cc8e76ceb08cf882275e1d5f13b293","answer":"normal","created":10387.6,"valid_until":96787.6},"r110":{"key":"9ebe1f6dd3e36ad6669aee625d77fc7a3459aafa9624edfd9bf91ae7b6a9d89b","answer":"alert","created":8419.6,"valid_until":94819.6},"r29":{"key":"c05b2f88954eaf469ac8bbfcd4547bc6e74c41180cce4195cef4e40ecfc1095f","answer":"normal","created":1834.7,"valid_until":88234.7},"r30":{"key":"9ca88fa2ca1389cdb90b09bc8a2e8c6a5f0e5c9345cf31bef0e590680aa21c13","answer":"authorize_capped","created":1858.3,"valid_until":88258.3},"r163":{"key":"fc270faed1a038462ee17ad9afe5fc830b173f58fbcb6f74f25d11dab82a9b32","answer":"authorize_capped","created":13175.6,"valid_until":99575.6},"r127":{"key":"05f17fd121a463594b61b4cdcf207aaa369bbb2761e582ce36c12da3375fc3c3","answer":"normal","created":10203.9,"valid_until":96603.9},"r12":{"key":"bb697fd6f8f128e857820859facf75e9f5686504c1ac81b8de52367d1ca1d83c","answer":"inspect","created":818.4,"valid_until":87218.4},"r174":{"key":"08ba4fe6512d0d94de19c3932e3bff09728b6ede0b1838ff5091c9850170a516","answer":"authorize","created":14232.9,"valid_until":100632.9},"r50":{"key":"6d5f6fefa14e96e9b333c9e2ca60b7b266ea9b478a3eea4101c6e5373b59c55f","answer":"normal","created":3862.8,"valid_until":90262.8},"r247":{"key":"81dbeff3e03710faad18ddfdcd4b715d171b50030792c13bdd2e1a8083b5c9d0","answer":"authorize","created":24179.5,"valid_until":110579.5},"r23":{"key":"843d0ffb6136b8cb2bc9712d4d55ae5f149fd4716d6773cd5f2b57114afa7b5c","answer":"authorize","created":1436.5,"valid_until":87836.5}},"ledger":{"meter_joules":"1.499794558825e+03","unallocated_joules":"0.000000e+00","carried_forward_joules":"0.000000e+00"},"expected":[]}]}
diff --git a/wai/oer-conformance/settle/README.md b/wai/oer-conformance/settle/README.md
index fc5583100..33fa479dc 100644
--- a/wai/oer-conformance/settle/README.md
+++ b/wai/oer-conformance/settle/README.md
@@ -21,3 +21,10 @@ What the kernel does not do yet: escalate new questions upstream (a callback hoo
 read a rail meter (the host models one; the Zephyr skeleton counts cycles), and hold the signing seed in a
 secure element. Energy constants inside the kernel (cycle energy, bits committed) are the model's projected
 values until the bench node measures them.
+
+So no receipt here is a reading. The kernel writes the grade and the device the meter states
+(`settle_meter_t.how`, `.device`) and no longer fixes them to `measured` from `hardware`: the host harness
+states `projected`, from a `simulation`, by the method `model_estimated`, and the Zephyr skeleton
+`projected` on `hardware` by the same method (oer-receipts §2: a figure computed from constants is an
+`Estimator` figure, graded `projected`). The ledger's `meter_joules` is the sum of those projected figures,
+and the harness says so when it prints it.
diff --git a/wai/oer-conformance/settle/host_main.c b/wai/oer-conformance/settle/host_main.c
index 594ecac58..933915f2c 100644
--- a/wai/oer-conformance/settle/host_main.c
+++ b/wai/oer-conformance/settle/host_main.c
@@ -1,5 +1,8 @@
 /* SPDX-License-Identifier: Apache-2.0 */
-/* Host harness: replays a day of demand through the kernel with a modelled meter and writes an OER/2 vector file. */
+/* Host harness: replays a day of demand through the kernel with a modelled meter and writes an OER/2 vector file.
+   The meter is a model of constants (a cycle count, standby and shared draws, a link energy), none measured on the
+   node, so every figure is graded projected (oer-receipts §2: an Estimator figure), from a simulation, by a modelled
+   method: the receipts never present the model as a reading. */
 #include "settle.h"
 #include 
 #include 
@@ -17,12 +20,12 @@ int main(int argc, char **argv){
     now += 20 + 80 * urand(); char cls = urand() < 0.34 ? 'A' : 'B';
     double z = urand(); uint32_t id = (uint32_t)(cls == 'A' ? 1 + 2999 * z * z * z : 1 + 399 * z * z * z);
     settle_meter_t m; m.compute_j = 120000.0 * ctx.cycle_j; m.movement_j = cls == 'A' ? 2.3e-6 : 0; m.idle_alloc_j = standby_w * (now - last); m.shared_alloc_j = shared_w * (now - last); m.upstream_j = 0;
-    m.latency_s = cls == 'A' ? 0.019 : 0.0017; m.method = "hardware_meter"; m.weakest_how = "projected"; m.weakest_input = "wire_w";
+    m.latency_s = cls == 'A' ? 0.019 : 0.0017; m.method = "model_estimated"; m.how = "projected"; m.device = "simulation"; m.weakest_how = "projected"; m.weakest_input = "wire_w";
     settle_result_t res; if (settle_decide(&ctx, cls, id, now, &m, buf, sizeof buf, &res)) { fprintf(stderr, "decide failed\n"); return 2; }
     meter += res.joules_total; last = now;
     fprintf(f, "%s%s", i ? "," : "", buf);
   }
   static char recbuf[1 << 20]; fprintf(f, "],\"records\":"); if (settle_records_json(&ctx, recbuf, sizeof recbuf)) { fprintf(stderr, "records overflow\n"); return 3; } fputs(recbuf, f);
   fprintf(f, ",\"ledger\":{\"meter_joules\":\"%.12e\",\"unallocated_joules\":\"0.000000e+00\",\"carried_forward_joules\":\"0.000000e+00\"},\"expected\":[]}]}\n", meter);
-  fclose(f); fprintf(stderr, "wrote %s: %d receipts, meter %.6f J\n", path, n_events, meter); return 0;
+  fclose(f); fprintf(stderr, "wrote %s: %d receipts, modelled meter %.6f J (projected, not a reading)\n", path, n_events, meter); return 0;
 }
diff --git a/wai/oer-conformance/settle/settle.c b/wai/oer-conformance/settle/settle.c
index f876643b3..bdc7441b5 100644
--- a/wai/oer-conformance/settle/settle.c
+++ b/wai/oer-conformance/settle/settle.c
@@ -53,7 +53,7 @@ int settle_decide(settle_ctx_t *c, char cls, uint32_t id, double now, const sett
   PUT("\"work\":{\"status\":1,\"outcome\":\"%s\",\"latency_s\":\"%s\"},", served ? "served_from_record" : "derive", dec(d1, m->latency_s));
   PUT("\"energy\":{\"joules_total\":\"%.12e\",\"boundary\":\"%s\",\"breakdown\":{\"compute_j\":\"%s\",\"movement_j\":\"%s\",\"idle_alloc_j\":\"%s\",\"shared_alloc_j\":\"%s\",\"upstream_j\":\"%s\"},\"method\":\"%s\",\"temperature_k\":\"%s\"},",
       total, c->boundary, dec(d2, m->compute_j), dec(d3, m->movement_j), dec(d4, m->idle_alloc_j), dec(d5, m->shared_alloc_j), dec(d6, m->upstream_j), m->method, dec(d7, c->temperature_k));
-  PUT("\"provenance\":{\"how\":\"measured\",\"device\":\"hardware\",\"weakest_input\":{\"how\":\"%s\",\"input\":\"%s\"}},", m->weakest_how, m->weakest_input);
+  PUT("\"provenance\":{\"how\":\"%s\",\"device\":\"%s\",\"weakest_input\":{\"how\":\"%s\",\"input\":\"%s\"}},", m->how, m->device, m->weakest_how, m->weakest_input);
   PUT("\"settlement\":{\"question_key\":\"sha256:%s\",\"served_from_record\":%s,\"record_id\":\"r%u\",\"record_hash\":\"%s\",\"reuse_count\":%u,\"derivation_j\":\"%s\",\"valid_until\":%lld},",
       keyhex, served ? "true" : "false", r->id, rechash, r->reuse, dec(d8, deriv_j), (long long)r->valid_until);
   PUT("\"floor\":{\"bits_committed\":%u,\"bits_delivered\":\"1.585000e+00\",\"floor_j\":\"%s\",\"decades_above_floor\":\"%.6e\"},", c->bits_committed, dec(d9, floor_j), decades);
diff --git a/wai/oer-conformance/settle/settle.h b/wai/oer-conformance/settle/settle.h
index 7e31cdd22..b551b6881 100644
--- a/wai/oer-conformance/settle/settle.h
+++ b/wai/oer-conformance/settle/settle.h
@@ -8,7 +8,11 @@
 #include 
 #define SETTLE_RECORDS 4096
 #define SETTLE_ANSWER 24
-typedef struct { double compute_j, movement_j, idle_alloc_j, shared_alloc_j, upstream_j; double latency_s; const char *method; const char *weakest_how, *weakest_input; } settle_meter_t;
+/* The meter's figures and how they were obtained. `how` is the receipt's evidential grade
+   (oer-receipts §2: projected, simulated, derived, measured) and `device` its provenance text;
+   a meter states both, and the kernel writes them as given: a figure computed from constants is
+   never graded measured (oer-receipts §2: an Estimator figure is projected). */
+typedef struct { double compute_j, movement_j, idle_alloc_j, shared_alloc_j, upstream_j; double latency_s; const char *method; const char *how, *device; const char *weakest_how, *weakest_input; } settle_meter_t;
 typedef struct { uint8_t key[32]; char answer[SETTLE_ANSWER]; double created, valid_until, deriv_j; uint32_t reuse, id; uint8_t used; } settle_record_t;
 typedef struct { int status; const char *outcome; char answer[SETTLE_ANSWER]; uint32_t record_id; uint32_t reuse; char receipt_hash[72]; double joules_total; } settle_result_t;
 typedef struct {
diff --git a/wai/oer-conformance/settle/zephyr/src/main.c b/wai/oer-conformance/settle/zephyr/src/main.c
index c1677ea98..15feeab0c 100644
--- a/wai/oer-conformance/settle/zephyr/src/main.c
+++ b/wai/oer-conformance/settle/zephyr/src/main.c
@@ -33,8 +33,13 @@ int main(void){
     m.movement_j = cls == 'A' ? 2.3e-6 : 0;            /* wired charger link: replace with the meter's reading */
     m.idle_alloc_j = standby_w * (now_ms - last_ms) / 1000.0;
     m.shared_alloc_j = shared_w * (now_ms - last_ms) / 1000.0;
-    m.upstream_j = 0; m.method = "calibrated_model"; m.weakest_how = "projected"; m.weakest_input = "standby_w";
-    m.compute_j = 0; m.latency_s = 0;
+    /* No rail meter is read yet: every figure is a constant or uptime times a constant, so the
+       receipt is graded projected and its method is a model, never a reading (oer-receipts §2). */
+    m.upstream_j = 0; m.method = "model_estimated"; m.how = "projected"; m.device = "hardware"; m.weakest_how = "projected"; m.weakest_input = "standby_w";
+    /* The projected cycle count of a decision (the host harness's), until a two-pass emit puts
+       this decision's own measured cycles on its receipt: a compute figure of 0 would state that
+       the decision cost nothing. */
+    m.compute_j = 120000.0 * ctx.cycle_j; m.latency_s = 0;
     settle_result_t res;
     int rc = settle_decide(&ctx, cls, id, now_ms / 1000.0, &m, out, sizeof out, &res);
     uint32_t cyc = cycles_now() - c0;
diff --git a/wai/quantum-studio/src/main.js b/wai/quantum-studio/src/main.js
index 4c643c8de..c2e12c13d 100644
--- a/wai/quantum-studio/src/main.js
+++ b/wai/quantum-studio/src/main.js
@@ -433,7 +433,15 @@ function mount(root) {
     const rc = r.receipt || {};
     const check = el('span', { class: 'qs-badge', id: 'qs-verified', text: 'checking…' });
     const en = r.energy || {};
-    const energy = en.joules_micro ? `${en.joules_micro < 1e3 ? en.joules_micro + ' µJ' : en.joules_micro < 1e6 ? (en.joules_micro / 1e3).toFixed(1) + ' mJ' : (en.joules_micro / 1e6).toFixed(2) + ' J'}` : en.unmetered ? `unmetered: ${en.unmetered}` : '—';
+    // A figure is shown with its class, its coverage and its declared uncertainty, as the
+    // service states them, so a reading is never shown without what it is
+    // (energy-measurement §2); no figure is shown as unmetered, never as 0 J.
+    const amount = (j) => j < 1e3 ? j + ' µJ' : j < 1e6 ? (j / 1e3).toFixed(1) + ' mJ' : (j / 1e6).toFixed(2) + ' J';
+    const ppm = en.energy_uncertainty && en.energy_uncertainty.relative_ppm;
+    const energy = en.joules_micro && en.energy_provenance
+      ? `${amount(en.joules_micro)} (${en.energy_provenance}${en.coverage ? ', ' + en.coverage : ''}${ppm ? ', ±' + (ppm / 1e4).toFixed(ppm < 1e4 ? 2 : 1) + ' %' : ''})`
+      : en.joules_micro ? `${amount(en.joules_micro)} (no class stated: not a reading)`
+      : en.unmetered ? `unmetered: ${en.unmetered}` : 'unmetered';
     const dl = el('button', { class: 'qs-btn qs-small', type: 'button', text: 'Download job', onclick: () => saveJob(job) });
     blocks.push(el('div', { class: 'qs-block' }, el('div', { class: 'qs-k', text: 'Receipt' }),
       el('table', { class: 'qs-table' }, el('tbody', {},
diff --git a/wai/wai-quantum-cli/src/lab.rs b/wai/wai-quantum-cli/src/lab.rs
index 184ed5a68..338039b08 100644
--- a/wai/wai-quantum-cli/src/lab.rs
+++ b/wai/wai-quantum-cli/src/lab.rs
@@ -106,6 +106,16 @@ fn one_qubit_state(which: &str) -> DensityMatrix {
     DensityMatrix::from_pure(&c.simulate().unwrap_or_else(|e| die(&format!("simulate: {e:?}"))))
 }
 
+/// The joule figure as a line shows it: `0` is the unmetered marker, shown as
+/// unmetered and never as `0 uJ` (energy-measurement §2).
+fn joules_line(joules_micro: u64) -> String {
+    if joules_micro == 0 {
+        "unmetered (no figure; 0 is the unmetered marker, not zero joules)".into()
+    } else {
+        format!("{joules_micro} uJ")
+    }
+}
+
 /// One line saying what the joule figure is: its class and evidence, or that
 /// it has none.
 fn energy_class_line(class: Option<&EnergyClass>, joules_micro: u64) -> String {
@@ -463,7 +473,7 @@ pub fn verify_receipt(src: &str) {
         println!("physical     {} qubits", e.physical_qubits);
         println!("runtime      {}", human_time(e.runtime_ns));
         println!("factories    {}", e.factories);
-        println!("joules       {} uJ", r.joules_micro);
+        println!("joules       {}", joules_line(r.joules_micro));
         println!("energy class {}", energy_class_line(any.energy_class(), r.joules_micro));
         println!("signer       {}", r.signer_id);
         if !ok {
@@ -481,7 +491,7 @@ pub fn verify_receipt(src: &str) {
         println!("value        {}", r.result.value);
         println!("bound        {}", r.result.truncation_bound);
         println!("work         {} term-updates (peak {} terms)", r.result.term_updates, r.result.peak_terms);
-        println!("joules       {} uJ", r.joules_micro);
+        println!("joules       {}", joules_line(r.joules_micro));
         println!("energy class {}", energy_class_line(any.energy_class(), r.joules_micro));
         println!("signer       {}", r.signer_id);
         if !ok {
@@ -503,7 +513,7 @@ pub fn verify_receipt(src: &str) {
             println!("qubits       {}", r.n_qubits);
             println!("gates        {}", r.n_ops);
             println!("work         {} amplitude-updates", r.work_amp_updates);
-            println!("joules       {} uJ", r.joules_micro);
+            println!("joules       {}", joules_line(r.joules_micro));
             println!("energy class {}", energy_class_line(any.energy_class(), r.joules_micro));
             println!("signer       {}", r.signer_id);
             if !ok {
@@ -1989,3 +1999,16 @@ pub fn main(args: Vec) {
         other => die(&format!("unknown command '{other}' (try --help)")),
     }
 }
+
+#[cfg(test)]
+mod tests {
+    use super::joules_line;
+
+    /// The unmetered marker prints as unmetered, never as `0 uJ`; a figure prints as itself.
+    #[test]
+    fn the_unmetered_marker_is_never_printed_as_zero_joules() {
+        assert!(joules_line(0).starts_with("unmetered"));
+        assert!(!joules_line(0).contains("0 uJ"));
+        assert_eq!(joules_line(1_250), "1250 uJ");
+    }
+}
diff --git a/wai/wai-rs/src/bin/wai_meter.rs b/wai/wai-rs/src/bin/wai_meter.rs
index 8cc9a8d98..f5c2f8b8d 100644
--- a/wai/wai-rs/src/bin/wai_meter.rs
+++ b/wai/wai-rs/src/bin/wai_meter.rs
@@ -164,7 +164,7 @@ where
         return (0, None, None);
     };
     let values = b.values();
-    println!("== wai_meter — measured CPU energy (IOReport via macmon, no sudo) ==");
+    println!("== wai_meter — CPU energy bracket (IOReport via macmon, no sudo): a measurement only if the gate below seals it ==");
     print!("{}", b.report(verb));
     if let Some(per) = b.per_unit_uj() {
         println!("→ per {verb}   : {per:.2} µJ   (work {work} {unit})");
@@ -182,6 +182,7 @@ where
                 b.ratio(),
                 b.unsealed_reason().unwrap_or("refused")
             );
+            println!("joules_micro (receipt, UNMETERED): 0, the unmetered marker: the bracket above is no figure this receipt carries");
             (0, None, values)
         }
     }
diff --git a/wai/wai-rs/src/bin/wai_quantum_meter.rs b/wai/wai-rs/src/bin/wai_quantum_meter.rs
index f2b7e693e..782663c81 100644
--- a/wai/wai-rs/src/bin/wai_quantum_meter.rs
+++ b/wai/wai-rs/src/bin/wai_quantum_meter.rs
@@ -87,7 +87,7 @@ fn main() {
         }
         Some(b) => {
             values = b.values();
-            println!("== wai_quantum_meter — measured CPU energy (IOReport via macmon, no sudo) ==");
+            println!("== wai_quantum_meter — CPU energy bracket (IOReport via macmon, no sudo): a measurement only if the gate below seals it ==");
             print!("{}", b.report("reconstruction"));
             if let Some(per) = b.per_unit_uj() {
                 println!("→ per reconstruction: {per:.3} µJ   ({n} qubits, work {work})");
@@ -96,13 +96,16 @@ fn main() {
             let m = b.on_chip_figure(CounterFiltering::Unknown);
             match &m {
                 Some((uj, _)) => println!("joules_micro (receipt, MEASURED): {uj}"),
-                None => eprintln!(
-                    "no usable figure obtained ({:.1}x noise: {}); emitting an \
-                     UNMETERED receipt rather than sealing a number the measurement does \
-                     not support.",
-                    b.ratio(),
-                    b.unsealed_reason().unwrap_or("refused")
-                ),
+                None => {
+                    eprintln!(
+                        "no usable figure obtained ({:.1}x noise: {}); emitting an \
+                         UNMETERED receipt rather than sealing a number the measurement does \
+                         not support.",
+                        b.ratio(),
+                        b.unsealed_reason().unwrap_or("refused")
+                    );
+                    println!("joules_micro (receipt, UNMETERED): 0, the unmetered marker: the bracket above is no figure this receipt carries");
+                }
             }
             m
         }
diff --git a/wai/wai-rs/src/bin/wai_video_meter.rs b/wai/wai-rs/src/bin/wai_video_meter.rs
index 46ae5ff34..9b72260b7 100644
--- a/wai/wai-rs/src/bin/wai_video_meter.rs
+++ b/wai/wai-rs/src/bin/wai_video_meter.rs
@@ -103,7 +103,7 @@ fn main() {
             }
             Some(b) => {
                 values = b.values();
-                println!("== wai_video_meter — measured CPU energy (IOReport via macmon, no sudo) ==");
+                println!("== wai_video_meter — CPU energy bracket (IOReport via macmon, no sudo): a measurement only if the gate below seals it ==");
                 print!("{}", b.report("decode"));
                 match b.per_unit_uj() {
                     Some(per) => {
@@ -135,6 +135,7 @@ fn main() {
                             b.ratio(),
                             b.unsealed_reason().unwrap_or("refused")
                         );
+                        println!("joules_micro (receipt, UNMETERED): 0, the unmetered marker: the bracket above is no figure this receipt carries");
                         None
                     }
                 }
diff --git a/wai/wai-rs/src/bin/wai_world_meter.rs b/wai/wai-rs/src/bin/wai_world_meter.rs
index 133a9437d..a51f4f28d 100644
--- a/wai/wai-rs/src/bin/wai_world_meter.rs
+++ b/wai/wai-rs/src/bin/wai_world_meter.rs
@@ -84,7 +84,7 @@ fn main() {
         }
         Some(b) => {
             values = b.values();
-            println!("== wai_world_meter — measured CPU energy (IOReport via macmon, no sudo) ==");
+            println!("== wai_world_meter — CPU energy bracket (IOReport via macmon, no sudo): a measurement only if the gate below seals it ==");
             print!("{}", b.report("replay"));
             if let Some(per_replay_uj) = b.per_unit_uj() {
                 println!("→ per replay        : {per_replay_uj:.1} µJ   ({final_tick} ticks)");
@@ -103,6 +103,7 @@ fn main() {
                         b.ratio(),
                         b.unsealed_reason().unwrap_or("refused")
                     );
+                    println!("joules_micro (receipt, UNMETERED): 0, the unmetered marker: the bracket above is no figure this receipt carries");
                     (0, None)
                 }
             }
diff --git a/wai/wai-rs/src/provenance.rs b/wai/wai-rs/src/provenance.rs
index 6937786a5..4c17dccce 100644
--- a/wai/wai-rs/src/provenance.rs
+++ b/wai/wai-rs/src/provenance.rs
@@ -257,15 +257,25 @@ impl AssetReceipt {
     /// when every step carries the unmetered marker, never `0 µJ`; the figure
     /// labelled `Whole` when every step is measured; otherwise the figure
     /// labelled `Partial`, naming the unmetered steps the total does not cover.
+    ///
+    /// The figure carries the class the total reads at (energy-measurement §2.8): the
+    /// weakest class among the steps with a figure, or `unlabelled` when one of them
+    /// carries no label, so a total is never shown without what it is.
     pub fn total_label(&self) -> String {
         let unmetered: Vec<&str> = self.steps.iter().filter(|s| s.joules_micro == 0).map(|s| s.op.as_str()).collect();
+        let metered = self.steps.iter().filter(|s| s.joules_micro > 0);
+        let class = if metered.clone().any(|s| s.energy_provenance.is_none()) {
+            "unlabelled"
+        } else {
+            metered.filter_map(|s| s.energy_provenance.as_ref()).min_by_key(|p| p.rank()).map_or("unlabelled", EnergyProvenance::label)
+        };
         if unmetered.len() == self.steps.len() {
             "UNMETERED (no step measured)".to_owned()
         } else if unmetered.is_empty() {
-            format!("{} µJ (Whole)", self.total_joules_micro)
+            format!("{} µJ ({class}; Whole)", self.total_joules_micro)
         } else {
             format!(
-                "{} µJ over the measured steps only (Partial; unmetered: {})",
+                "{} µJ ({class}) over the measured steps only (Partial; unmetered: {})",
                 self.total_joules_micro,
                 unmetered.join(", ")
             )
@@ -429,12 +439,18 @@ mod tests {
         let (steps, asset) = chain();
         let build = |steps: Vec| AssetReceipt::build(&key(9), "did:web:wai#prov", asset, "image", "wai.image.jpeg", 0, steps, None);
         let partial = build(steps.clone());
-        assert_eq!(partial.total_label(), "4290 µJ over the measured steps only (Partial; unmetered: capture)");
+        assert_eq!(partial.total_label(), "4290 µJ (unlabelled) over the measured steps only (Partial; unmetered: capture)");
         let none = build(steps.iter().cloned().map(|s| ProvStep { joules_micro: 0, ..s }).collect());
         assert_eq!(none.total_joules_micro, 0);
         assert_eq!(none.total_label(), "UNMETERED (no step measured)", "never 0 µJ");
         let whole = build(steps.into_iter().map(|s| ProvStep { joules_micro: s.joules_micro.max(7), ..s }).collect());
-        assert_eq!(whole.total_label(), "4297 µJ (Whole)");
+        assert_eq!(whole.total_label(), "4297 µJ (unlabelled; Whole)");
+        // Labelled steps: the total reads at the weakest of their classes.
+        let chip = crate::energy_class::test_on_chip();
+        let labelled: Vec = whole.steps.iter().cloned()
+            .map(|s| if s.joules_micro < 100 { s.with_energy_class(EnergyProvenance::ModelBased) } else { s.with_energy_class(chip.clone()) }.unwrap())
+            .collect();
+        assert_eq!(build(labelled).total_label(), "4297 µJ (ModelBased; Whole)");
     }
 
     #[test]
diff --git a/wai/wai-web/demo/world.js b/wai/wai-web/demo/world.js
index 864f527d3..ef1a58e61 100644
--- a/wai/wai-web/demo/world.js
+++ b/wai/wai-web/demo/world.js
@@ -738,9 +738,9 @@ function chainHead(worldHash) {
 }
 
 // Honest energy figure: work_steps is the EXACT signed quantity; joules
-// is an ESTIMATE from measured wall-clock compute at a declared power
-// coefficient (a browser can't read RAPL — native sinks supply real
-// joules via the sink-metering path). Labeled "est" so it's never
+// is an ESTIMATE, wall-clock compute times a declared power coefficient
+// (a page reads no energy counter). The receipt seals it with the class
+// Estimator and the page shows it as an estimate, so it is never
 // mistaken for a measurement.
 const WATTS = 4.0; // declared coefficient for the estimate
 let computeMs = 0; // accumulated wall-clock in the deterministic step loop
@@ -768,7 +768,7 @@ ui.seal.addEventListener('click', () => {
     const mJ = (Number(joulesMicro) / 1000).toFixed(1);
     ui.receipt.textContent =
       `chain #${groupId}${head ? ' ↳linked' : ''} · root ${sealed.root_hash().slice(0, 10)}… · `
-      + `${sealed.work_steps()} steps · ≈${mJ} mJ est@${WATTS}W · ${reverified ? '✓ re-verified' : '✗ FAILED'}`;
+      + `${sealed.work_steps()} steps · ≈${mJ} mJ (Estimator: wall time × ${WATTS} W, not measured) · ${reverified ? '✓ re-verified' : '✗ FAILED'}`;
   } catch (e) {
     ui.receipt.textContent = '✗ ' + (e.message || e);
   }
diff --git a/wai/wai-web/src/quantum_atom.rs b/wai/wai-web/src/quantum_atom.rs
index 1b695fb81..0e1f06bcd 100644
--- a/wai/wai-web/src/quantum_atom.rs
+++ b/wai/wai-web/src/quantum_atom.rs
@@ -37,7 +37,7 @@ impl RearrangeDemo {
         let array = Array::load(w, h, fill_permille, seed as u64);
         let target = target_block(w, h, tw, th);
         let (plan, success, receipt) = rearrange_and_seal(
-            &signer(), "did:key:demo-lab", &array, &target, 400_000,
+            &signer(), "did:key:demo-lab", &array, &target, crate::UNMETERED,
             GrantRef::unbounded("quantum.rearrange"),
         );
         // tamper: drop the first real move → its target goes unfilled
diff --git a/wai/wai-web/src/quantum_cal.rs b/wai/wai-web/src/quantum_cal.rs
index 7aece417a..85de77d1d 100644
--- a/wai/wai-web/src/quantum_cal.rs
+++ b/wai/wai-web/src/quantum_cal.rs
@@ -32,7 +32,7 @@ fn seal(art: &CalArtifacts) -> (String, bool) {
         "did:key:demo-lab",
         "sim:transmon:q0",
         art,
-        3_000_000,
+        crate::UNMETERED,
         GrantRef::unbounded("quantum.calibrate"),
         None,
     );
@@ -434,7 +434,7 @@ impl CampaignDemo {
             &ed25519_dalek::SigningKey::from_bytes(&[0x51; 32]),
             "did:key:demo-lab",
             "sim:q0",
-            1_000_000,
+            crate::UNMETERED,
             &GrantRef::unbounded("quantum.calibrate"),
             &steps,
         );
diff --git a/wai/wai-web/src/quantum_compile.rs b/wai/wai-web/src/quantum_compile.rs
index 565ab71b6..ff913bca3 100644
--- a/wai/wai-web/src/quantum_compile.rs
+++ b/wai/wai-web/src/quantum_compile.rs
@@ -83,7 +83,7 @@ impl CompileDemo {
         let source = random_clifford(n, depth, seed as u64);
         let src_nonlocal = nonlocal_2q(&source, &coupling);
         let (r, equivalent, receipt) = compile_and_seal(
-            &signer(), "did:key:demo-lab", &source, &coupling, 300_000,
+            &signer(), "did:key:demo-lab", &source, &coupling, crate::UNMETERED,
             GrantRef::unbounded("quantum.compile"),
         );
         let work = verify_routing(&source, &r, n).1;
diff --git a/wai/wai-web/src/quantum_control.rs b/wai/wai-web/src/quantum_control.rs
index 49b1bb977..856c3ed3f 100644
--- a/wai/wai-web/src/quantum_control.rs
+++ b/wai/wai-web/src/quantum_control.rs
@@ -66,10 +66,10 @@ impl SpectroDemo {
         f(self.res.psd_true.iter().sum::() / self.res.psd_true.len().max(1) as i64)
     }
     pub fn receipt_json(&self) -> String {
-        self.res.seal(&signer(), "did:key:demo-lab", 1_000_000, grant()).to_json()
+        self.res.seal(&signer(), "did:key:demo-lab", crate::UNMETERED, grant()).to_json()
     }
     pub fn receipt_verifies(&self) -> bool {
-        self.res.seal(&signer(), "did:key:demo-lab", 1_000_000, grant()).verify()
+        self.res.seal(&signer(), "did:key:demo-lab", crate::UNMETERED, grant()).verify()
     }
 }
 
@@ -137,9 +137,9 @@ impl RobustFFDemo {
         self.res.pulses.iter().map(|&p| f(p)).collect()
     }
     pub fn receipt_json(&self) -> String {
-        self.res.seal(&signer(), "did:key:demo-lab", 1_000_000, grant()).to_json()
+        self.res.seal(&signer(), "did:key:demo-lab", crate::UNMETERED, grant()).to_json()
     }
     pub fn receipt_verifies(&self) -> bool {
-        self.res.seal(&signer(), "did:key:demo-lab", 1_000_000, grant()).verify()
+        self.res.seal(&signer(), "did:key:demo-lab", crate::UNMETERED, grant()).verify()
     }
 }
diff --git a/wai/wai-web/src/quantum_kernel.rs b/wai/wai-web/src/quantum_kernel.rs
index 957da9177..01b181206 100644
--- a/wai/wai-web/src/quantum_kernel.rs
+++ b/wai/wai-web/src/quantum_kernel.rs
@@ -37,7 +37,9 @@ impl PhasorReceiptJs {
     pub fn joules_micro(&self) -> f64 {
         self.inner.joules_micro as f64
     }
-    /// Measured microjoules per million phasor ops — the accountable price.
+    /// Microjoules per million phasor ops, from the receipt's energy slot as sealed: the
+    /// page's illustrative figure in a browser, which no counter backs, or none when the
+    /// slot is the unmetered marker. Not a measurement unless a metered sink sealed it.
     pub fn micro_joules_per_megaop(&self) -> f64 {
         self.inner.micro_joules_per_megaop()
     }
diff --git a/wai/wai-web/src/quantum_mitigate.rs b/wai/wai-web/src/quantum_mitigate.rs
index c39889c8f..f7f9f5492 100644
--- a/wai/wai-web/src/quantum_mitigate.rs
+++ b/wai/wai-web/src/quantum_mitigate.rs
@@ -94,10 +94,10 @@ impl ZneDemo {
         hex(&content_hash(&self.res.input_bytes()))
     }
     pub fn receipt_json(&self) -> String {
-        receipt_pair(&self.res.seal(&signer(), "did:key:demo-lab", "wai.quantum.circuit", "⟨O⟩", 800_000, grant())).0
+        receipt_pair(&self.res.seal(&signer(), "did:key:demo-lab", "wai.quantum.circuit", "⟨O⟩", crate::UNMETERED, grant())).0
     }
     pub fn receipt_verifies(&self) -> bool {
-        receipt_pair(&self.res.seal(&signer(), "did:key:demo-lab", "wai.quantum.circuit", "⟨O⟩", 800_000, grant())).1
+        receipt_pair(&self.res.seal(&signer(), "did:key:demo-lab", "wai.quantum.circuit", "⟨O⟩", crate::UNMETERED, grant())).1
     }
 }
 
@@ -209,10 +209,10 @@ impl ReadoutMitigateDemo {
         hex(&self.res.model_hash)
     }
     pub fn receipt_json(&self) -> String {
-        receipt_pair(&self.res.seal(&signer(), "did:key:demo-lab", "sim:transmon", "Z⊗Z", 600_000, grant())).0
+        receipt_pair(&self.res.seal(&signer(), "did:key:demo-lab", "sim:transmon", "Z⊗Z", crate::UNMETERED, grant())).0
     }
     pub fn receipt_verifies(&self) -> bool {
-        receipt_pair(&self.res.seal(&signer(), "did:key:demo-lab", "sim:transmon", "Z⊗Z", 600_000, grant())).1
+        receipt_pair(&self.res.seal(&signer(), "did:key:demo-lab", "sim:transmon", "Z⊗Z", crate::UNMETERED, grant())).1
     }
 }
 
@@ -295,9 +295,9 @@ impl ShadowDemo {
         hex(&content_hash(&self.res.input))
     }
     pub fn receipt_json(&self) -> String {
-        receipt_pair(&self.res.seal(&signer(), "did:key:demo-lab", "wai.quantum.circuit", "X₀Y₁Z₂", self.raw, 700_000, grant())).0
+        receipt_pair(&self.res.seal(&signer(), "did:key:demo-lab", "wai.quantum.circuit", "X₀Y₁Z₂", self.raw, crate::UNMETERED, grant())).0
     }
     pub fn receipt_verifies(&self) -> bool {
-        receipt_pair(&self.res.seal(&signer(), "did:key:demo-lab", "wai.quantum.circuit", "X₀Y₁Z₂", self.raw, 700_000, grant())).1
+        receipt_pair(&self.res.seal(&signer(), "did:key:demo-lab", "wai.quantum.circuit", "X₀Y₁Z₂", self.raw, crate::UNMETERED, grant())).1
     }
 }
diff --git a/wai/wai-web/src/quantum_noise.rs b/wai/wai-web/src/quantum_noise.rs
index afc9fbcaf..8e52a23a1 100644
--- a/wai/wai-web/src/quantum_noise.rs
+++ b/wai/wai-web/src/quantum_noise.rs
@@ -112,10 +112,10 @@ impl NoiseLearnDemo {
         hex(&self.res.learned.model_hash())
     }
     pub fn receipt_verifies(&self) -> bool {
-        self.res.seal(&signer(), "did:key:demo-lab", 2_000_000, GrantRef::unbounded("quantum.calibrate")).verify()
+        self.res.seal(&signer(), "did:key:demo-lab", crate::UNMETERED, GrantRef::unbounded("quantum.calibrate")).verify()
     }
     pub fn receipt_json(&self) -> String {
-        self.res.seal(&signer(), "did:key:demo-lab", 2_000_000, GrantRef::unbounded("quantum.calibrate")).to_json()
+        self.res.seal(&signer(), "did:key:demo-lab", crate::UNMETERED, GrantRef::unbounded("quantum.calibrate")).to_json()
     }
 
     // --- loop close: PEC bound to the learned model ---
@@ -156,7 +156,7 @@ impl NoiseLearnDemo {
             self.pec_mit,
             ONE / 100,
             60_000,
-            700_000,
+            crate::UNMETERED,
             GrantRef::unbounded("quantum.mitigate"),
         )
     }
diff --git a/wai/wai-web/src/quantum_qbom.rs b/wai/wai-web/src/quantum_qbom.rs
index 18cda3111..5a8619f62 100644
--- a/wai/wai-web/src/quantum_qbom.rs
+++ b/wai/wai-web/src/quantum_qbom.rs
@@ -47,7 +47,7 @@ impl QbomDemo {
         let coupling = Coupling::ring(6);
         let src = random_clifford(6, 40, s);
         let (_r, _eq, compile_rc) = compile_and_seal(
-            &sk, "did:key:op", &src, &coupling, 120_000, GrantRef::unbounded("quantum.compile"),
+            &sk, "did:key:op", &src, &coupling, crate::UNMETERED, GrantRef::unbounded("quantum.compile"),
         );
 
         // --- stage 2: calibrate (sealed) ---
@@ -60,21 +60,21 @@ impl QbomDemo {
                 evidence_bytes: b"".to_vec(),
                 summary: "single-qubit RB, error/Clifford 8.1e-4".into(),
             },
-            70_000, GrantRef::unbounded("quantum.calibrate"), None,
+            crate::UNMETERED, GrantRef::unbounded("quantum.calibrate"), None,
         );
 
         // --- stage 3: rearrange (live solver) ---
         let arr = Array::load(12, 12, 560, s ^ 0xB0B);
         let tgt = target_block(12, 12, 6, 6);
         let (_p, _ok, rearrange_rc) = rearrange_and_seal(
-            &sk, "did:key:op", &arr, &tgt, 90_000, GrantRef::unbounded("quantum.rearrange"),
+            &sk, "did:key:op", &arr, &tgt, crate::UNMETERED, GrantRef::unbounded("quantum.rearrange"),
         );
 
         // --- stage 4: mitigate (sealed) ---
         let mit_rc = MitigationReceipt::seal(
             &sk, "did:key:op", dev, "zne.richardson", "Z0Z1",
             content_hash(b""), Some(content_hash(b"")),
-            fx(0.72), fx(0.90), fx(0.01), 8192, 150_000,
+            fx(0.72), fx(0.90), fx(0.01), 8192, crate::UNMETERED,
             GrantRef::unbounded("quantum.mitigate"), None,
         );
 
@@ -82,7 +82,7 @@ impl QbomDemo {
         let dec_rc = DecodeReceipt::seal(
             &sk, "did:key:op", "toric:L9", "relay-bp.min-sum",
             content_hash(b""), content_hash(b""), content_hash(b""),
-            true, 8, 4096, 80_000, GrantRef::unbounded("quantum.decode"), None,
+            true, 8, 4096, crate::UNMETERED, GrantRef::unbounded("quantum.decode"), None,
         );
 
         let program_hash = content_hash(&circuit_bytes(&src, 6));
@@ -120,12 +120,16 @@ impl QbomDemo {
     pub fn stage_kinds(&self) -> Vec {
         self.kinds.clone()
     }
+    /// Each stage's energy figure as its receipt seals it: in a browser every one is `0`,
+    /// the unmetered marker, which a page shows as unmetered, never as 0 J.
     pub fn stage_joules(&self) -> Vec {
         self.joules.clone()
     }
     pub fn stage_hashes(&self) -> Vec {
         self.hashes.clone()
     }
+    /// The bill's total: `0` when every stage is unmetered, which a page shows as
+    /// unmetered (energy-measurement §2.8), never as 0 J.
     pub fn total_joules_micro(&self) -> u32 {
         self.q.total_joules_micro() as u32
     }
diff --git a/wai/wai-web/src/quantum_qec.rs b/wai/wai-web/src/quantum_qec.rs
index c19f3d78f..0cdac322f 100644
--- a/wai/wai-web/src/quantum_qec.rs
+++ b/wai/wai-web/src/quantum_qec.rs
@@ -15,13 +15,12 @@ fn signer() -> SigningKey {
 fn grant() -> GrantRef {
     GrantRef::unbounded("quantum.decode")
 }
-// Modeled energy per message-pass (µJ). The message count is the exact,
-// byte-portable work; a real decoder fills the receipt's joules from a hardware
-// meter. Declared constant → modeled joules = messages · this.
-const UJ_PER_MSG: u64 = 1;
-
+// The message count is the exact, byte-portable work. The receipt's energy is the
+// unmetered marker: a page reads no counter, and a decoder that does fills the figure
+// from it with its class. A per-message constant times the count would be an invented
+// figure, so none is sealed.
 fn seal(r: &DecodeResult) -> DecodeReceipt {
-    r.seal(&signer(), "did:key:demo-lab", r.messages * UJ_PER_MSG, grant())
+    r.seal(&signer(), "did:key:demo-lab", crate::UNMETERED, grant())
 }
 
 // Small accessor shim: DecodeResult fields are public except a few; expose what
@@ -155,9 +154,10 @@ impl GrossDemo {
     pub fn messages(&self) -> u32 {
         self.res.messages as u32
     }
-    /// Modeled joules-per-decode (µJ) = messages · declared per-message energy.
+    /// The receipt's energy figure: `0`, the unmetered marker (a page reads no counter).
+    /// A page shows it as unmetered, never as 0 J.
     pub fn joules_micro(&self) -> u32 {
-        (self.res.messages * UJ_PER_MSG) as u32
+        crate::UNMETERED as u32
     }
     pub fn receipt_json(&self) -> String {
         seal(&self.res).to_json()
diff --git a/wai/wai-web/src/world.rs b/wai/wai-web/src/world.rs
index 820a1636b..05149bf31 100644
--- a/wai/wai-web/src/world.rs
+++ b/wai/wai-web/src/world.rs
@@ -354,6 +354,38 @@ impl SealedSession {
     }
 }
 
+/// The page's figure is wall-clock time times a coefficient it declares, a constant nobody
+/// calibrated on this device: an `Estimator` figure (energy-measurement §2). It is sealed
+/// with that label, so the receipt never reads as a measurement; a zero is the unmetered
+/// marker and stays unlabelled.
+fn label_page_figure(receipt: SessionReceipt, publisher: &SigningKey) -> Result {
+    if receipt.joules_micro > 0 {
+        receipt.with_energy_class(publisher, wai::energy_class::EnergyProvenance::Estimator)
+    } else {
+        Ok(receipt)
+    }
+}
+
+#[cfg(test)]
+mod label_tests {
+    use super::*;
+
+    /// A page's non-zero figure is sealed as an `Estimator`, never unlabelled and never as a
+    /// hardware class; the unmetered marker stays unlabelled.
+    #[test]
+    fn the_pages_figure_is_sealed_as_an_estimator() {
+        let k = SigningKey::from_bytes(&[5; 32]);
+        let build = |j: u64| SessionReceipt::build(&k, "did:example:wai-world", [1; 32], 0, &[], &[], j, 0, None);
+        let r = label_page_figure(build(12_000), &k).unwrap();
+        assert_eq!(r.energy_provenance, Some(wai::energy_class::EnergyProvenance::Estimator));
+        assert!(r.verify(), "the labelled receipt verifies");
+        let json: serde_json::Value = serde_json::from_str(&r.to_json()).unwrap();
+        assert_eq!(json["energy_provenance"], "Estimator", "{json}");
+        let z = label_page_figure(build(0), &k).unwrap();
+        assert_eq!(z.energy_provenance, None);
+    }
+}
+
 #[allow(clippy::too_many_arguments)]
 fn seal_with(
     sim: &M,
@@ -391,6 +423,7 @@ fn seal_with(
     let receipt = SessionReceipt::build(
         publisher, signer_id, wh, group_id, &c.ops, &checkpoints, joules_micro, work, parent,
     );
+    let receipt = label_page_figure(receipt, publisher).map_err(js_err)?;
 
     Ok(SealedSession {
         replay: c.to_bytes(),
@@ -415,9 +448,10 @@ impl WorldSink {
     /// Seal the session as it stands at the current tick into a
     /// `wai.world.replay` plus its §8 receipt, signed by `publisher`.
     ///
-    /// `joules_micro` is **carried, never invented** — the page passes a
-    /// measured wall-clock estimate (with a declared coefficient) or `0`
-    /// when unmetered. `group_id` + `parent_hex` chain this seal onto the
+    /// `joules_micro` is carried as the page states it: wall-clock compute time
+    /// times a power coefficient the page declares, which is an estimate, not a
+    /// measurement, and is sealed with the label `Estimator`; or `0`, the
+    /// unmetered marker, sealed unlabelled. `group_id` + `parent_hex` chain this seal onto the
     /// world's prior receipt (empty `parent_hex` starts a fresh chain).
     /// The exact deterministic work figure is computed here, not passed.
     pub fn seal_session(
-- 
2.54.0 (Apple Git-157)


From a203eae233a4fe629a3fc4584f196b9ad338f9c4 Mon Sep 17 00:00:00 2001
From: Transaction Science 
Date: Sat, 24 Oct 2026 20:00:56 -0400
Subject: [PATCH 42/50] joule-moq-relay: a unit test's microjoule, and the CI
 grep for a measured line

Co-Authored-By: Claude Opus 5.5 
---
 .github/workflows/joule-code-conformance.yml                  | 2 +-
 joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/joule-code-conformance.yml b/.github/workflows/joule-code-conformance.yml
index 756d3df6b..789409811 100644
--- a/.github/workflows/joule-code-conformance.yml
+++ b/.github/workflows/joule-code-conformance.yml
@@ -258,7 +258,7 @@ jobs:
           export PATH="$HOME/.cargo/bin:$PATH"
           cargo test --locked -p joule-moq-relay --test relay_energy -- --nocapture --test-threads=1 2>&1 | tee "$RUNNER_TEMP/relay-energy.log"
           grep -q "test result: ok. 3 passed; 0 failed" "$RUNNER_TEMP/relay-energy.log"
-          grep -q "^measured: .* scope task" "$RUNNER_TEMP/relay-energy.log"
+          grep -q "measured: .* scope task" "$RUNNER_TEMP/relay-energy.log"
           ! grep -q "SKIPPED" "$RUNNER_TEMP/relay-energy.log"
 
   # The WHIP and WHEP gateway. Every test is on loopback, against a relay that checks
diff --git a/joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs b/joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs
index 532206e78..871afefa6 100644
--- a/joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs
+++ b/joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs
@@ -568,7 +568,8 @@ mod tests {
 
     #[test]
     fn a_span_the_samples_do_not_hold_or_too_short_has_no_figure() {
-        let s = series(1_000_000, 10, |_| 1_000_000, 1_000_000, 1);
+        // 1 µJ (1 000 nJ) an interval.
+        let s = series(1_000_000, 10, |_| 1_000, 1_000_000, 1);
         assert_eq!(figure(&s, 500_000, 1_600_000, Scope::Task), Err(Unmetered::NotSampled));
         assert_eq!(figure(&s, 1_100_000, 2_000_000, Scope::Task), Err(Unmetered::NotSampled));
         assert_eq!(figure(&s, 1_100_000, 1_300_000, Scope::Task), Err(Unmetered::SpanTooShort));
-- 
2.54.0 (Apple Git-157)


From 9b6e4badab71ca6fa5db26b0e3e2d19edc5ab451 Mon Sep 17 00:00:00 2001
From: Transaction Science 
Date: Sat, 24 Oct 2026 20:00:56 -0400
Subject: [PATCH 43/50] wai: say what fewer bytes do not save, and the
 changelog
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

energy-steering §5.5: the steering figure is the hops' own energy averaged over
their delivery, not the network's, which is largely flat against traffic.
live-rooms' joules_ceiling is held against an attribution by bytes. The
research taxonomy's compression lever claims cost and a mobile radio's draw,
not network energy. CHANGELOG: the slice's entry.

Co-Authored-By: Claude Opus 5.5 
---
 wai/CHANGELOG.md                  | 62 +++++++++++++++++++++++++++++++
 wai/extensions/energy-steering.md | 31 ++++++++++++++--
 wai/extensions/live-rooms.md      |  2 +-
 wai/research/content-taxonomy.md  | 11 ++++--
 4 files changed, 97 insertions(+), 9 deletions(-)

diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md
index 9fca10580..b20abeb0d 100644
--- a/wai/CHANGELOG.md
+++ b/wai/CHANGELOG.md
@@ -6,6 +6,68 @@ wire format may change and such changes are recorded here.
 
 ## v0.4.0 — current
 
+### Energy honesty: the energy order of dispatch, a metered relay, `HwShunt` closed to new profiles, and what fewer bytes do not save
+
+- **The energy order** (SPEC §4, §7.1 step 2). A sink tries the capabilities an envelope
+  offers in the energy order unless its deployer configures another: a decode its platform
+  answers supported and power-efficient first (a page's Media Capabilities answer, a native
+  platform's hardware-decode query), a learned capability (replicate class
+  `NeuralIntegerExact`, `NeuralEntropyExact`, `NeuralFloat` or `Behavioral`) that carries
+  no energy budget after every other, the envelope's order within each. So a learned
+  capability is never decoded above a classical fallback by default. The order changes which
+  capability decodes, never a reason: an inert envelope reports step 3's reason before step
+  5's. A sink that takes the manifest's order instead says so where it reports a decode.
+- **The energy budget** (SPEC §4; REGISTRY, *Energy budgets*). What lifts a learned
+  capability back to its place: a decode figure per frame or per second of content at a
+  stated resolution, `OnChipCounter` or `CalibratedInstrument` with its evidence, measured
+  on a named reference sink, in a record named by its SHA-256. A model, a constant or
+  legacy `HwShunt` backs no budget (`budget_not_hardware`, `budget_legacy_class`,
+  `budget_class_invalid`, `budget_malformed`). A registration states one in the export's
+  `energy_budget`; no registration states one in this revision.
+- **Reference.** `wai-rs` `energy_order` (`DispatchPolicy`, `Budgets`, `EnergyBudget`);
+  `Wai::dispatch_verified` and `WaiMulti::pick` apply the energy order, `dispatch_with` and
+  `pick_with` take another, and the HTTP client's default order is the energy order. The C
+  ABI's `wai_envelope_select` picks in it too.
+- **The browser sink** (browser-sink §4.7): objects that share a `choice` are alternatives
+  of one content, and the page decodes the first in the energy order that routes, the user
+  agent's power-efficient answer first and a learned capability with no budget last
+  (`no_alternative` where none routes). `browser_sink::choose_report`, the page's
+  `chooseReport`, a `choices` section in `live-conformance/browser/` checked by `wai-rs`, by
+  the page's wasm build in a browser and by `browser_sink_verify.py`.
+- **`HwShunt` is closed to new profiles** (energy-measurement §2.6, *New profiles*): a
+  profile, record, claim, table or registration member defined after the hardware class was
+  refined refuses `HwShunt` from every producer and reads it as no other class; the profiles
+  that could have sealed it keep their acceptance, listed by name. `wai-rs`
+  `energy_class::check_new_profile` (`LegacyInNewProfile`). A package counter read through
+  RAPL or a system management unit is `OnChipCounter`.
+- **The reference relay meters itself** (live-metering §8). `joule-moq-relay` samples a
+  counter every 100 ms: its process's own CPU energy on macOS (scope task), or the CPU
+  packages' RAPL energy on a Linux host the operator states runs it alone (scope package).
+  A room's record carries the advance over its span as `OnChipCounter` with filtering
+  `Unknown` and a declared uncertainty, where the counter was live and the relay served
+  that room alone; the unmetered marker otherwise. A session's summary stays unmetered.
+  `[metering] energy = "auto" | "off"` and `dedicated_host`; a macOS CI job requires a
+  measured figure, and a host with no counter prints SKIPPED.
+- **No modelled or zero figure shown as measured.**
+  - The C settlement kernel (`oer-conformance/settle/`) graded every receipt `measured`
+    from `hardware` whatever its meter; it now writes the grade and device the meter states.
+    The host harness's figures are constants, so they are `projected`, from a `simulation`,
+    by `model_estimated`, and `firmware_vectors.json` is regenerated.
+  - `wai-web`: the world demo seals its page-declared estimate labelled `Estimator` and
+    shows it as one; the quantum demos seal the unmetered marker in place of invented
+    constants.
+  - The quantum studio shows a figure with its class, coverage and uncertainty; the quantum
+    CLI prints the unmetered marker as unmetered, not `0 uJ`; the metering tools head their
+    bracket as a bracket and print the unmetered marker on stdout when they seal it; a
+    provenance total names the class it reads at.
+- **What fewer bytes do not save.** Steering by joules per delivered byte (energy-steering
+  §5.5), the attribution of a hop's joules to grants by bytes (live-metering §4.6,
+  live-rooms' `joules_ceiling`) and an HTTP client's joule budget (http-delivery
+  Appendix F) now say what their figures cover: a hop's own energy or a producer's, not the
+  network's, which is largely flat against the traffic it carries. The honest gains of
+  fewer bytes are cost and a mobile radio's draw; the energy that changes is the sink's
+  decode path and display.
+
 ### `wai.media.upscale`: super-resolution as an exact derivation, residuals against it, and an account of sink-made pictures
 
 - **The extension** ([exact-upscale](extensions/exact-upscale.md)) registers the record
diff --git a/wai/extensions/energy-steering.md b/wai/extensions/energy-steering.md
index e4a15aa68..55a884a4b 100644
--- a/wai/extensions/energy-steering.md
+++ b/wai/extensions/energy-steering.md
@@ -1,8 +1,8 @@
 # WAI Extension: Energy-Aware Content Steering
 
 > Status: Draft. Registers the record `wai.live.steering`: a steering server's choice, for
-> one client, of the pathway that delivers a room's stream for the fewest joules within the
-> operator's quality and latency limits, decided from the per-hop session records
+> one client, of the pathway whose hops signed the fewest joules per unit of delivery within
+> the operator's quality and latency limits, decided from the per-hop session records
 > ([live-metering](live-metering.md) §3, `WMH1`) that each pathway's hops signed, and signed
 > so that anyone holding those records can recompute it. The operator signs a **steering
 > policy**, `WSP1`: the pathways, their hops, their limits and the window the evidence is
@@ -15,7 +15,10 @@
 > hop is unmetered, its classes differ or its evidence is stale, is never ranked above one
 > whose energy is, so that not measuring is never rewarded. The output is the steering
 > manifest that HLS and DASH players already read, written byte for byte, carrying the
-> decision's URI in one key that players ignore. No new transport. The reference
+> decision's URI in one key that players ignore. The figure is the hops' own energy
+> averaged over what they delivered, not the network's: a network's energy is largely flat
+> against the traffic it carries, so a pathway chosen by this rule spends what its hops
+> spend, and moving a client changes no link's energy (§5.5). No new transport. The reference
 > implementation is the `energy_steering` module of `wai-rs` (feature `energy_steering`);
 > the corpus is [`live-conformance/steering/`](../live-conformance/steering/), and its
 > second implementation is `live-conformance/energy_steering_verify.py`.
@@ -303,6 +306,26 @@ as 0 (§7.2). In particular:
 - **Stale evidence is not current evidence**, and a pathway whose hops delivered nothing
   (empty) has no rate to state.
 
+### 5.5 What the figure covers
+
+The figure covers what the pathway's hops signed: each hop's own energy over its record's
+span (live-metering §3.1), divided by what the edge hops delivered. It is an average over the
+window, an attribution of the hops' energy to their delivery, and not the energy one more
+client, or one byte fewer, would add or save:
+
+- **The network between the hops is not in it.** No hop record carries the energy of the
+  links, routers and access networks a pathway's bytes cross, and the energy of a wired
+  network is largely flat against the traffic it carries. So a pathway with a lower figure
+  is one whose hops spend less per unit they deliver; the rule makes no claim that moving a
+  client, or sending it fewer bytes, lowers any network's energy.
+- **A hop's own energy is not all marginal either.** Much of a relay's draw is its host
+  running at all; the record states the hop's energy over the span, and the figure divides
+  all of it by the delivery, so the figure falls as a hop carries more.
+- **What a choice of pathway changes** is the hops that carry the client, and so whose
+  energy and whose cost its delivery is attributed to. Where a deployment wants the energy
+  a delivery changes at the client, it is the sink's decode path, its display and, on a
+  mobile radio, the radio's draw, none of which this record carries.
+
 ## 6. The decision rule
 
 The rule is a function of the policy; the evidence (§5); the client's report (§4); the
@@ -659,7 +682,7 @@ vector the same outcome, and requires every mutated copy of the corpus to fail.
 
 The corpus's energy figures are synthetic, chosen to exercise the rule. It computes which
 pathway the rule places first, and claims nothing about the energy any deployment spends or
-saves.
+saves, on its hops or on any network (§5.5).
 
 ## 12. Security and privacy considerations
 
diff --git a/wai/extensions/live-rooms.md b/wai/extensions/live-rooms.md
index 5d7e705db..c77c2d304 100644
--- a/wai/extensions/live-rooms.md
+++ b/wai/extensions/live-rooms.md
@@ -220,7 +220,7 @@ of before it serves it (ai-usage §7).
 | `once` | 16 | a single-use nonce: when it is not zero, no two `join`s name grants with this `once` (§7.2); zero, the grant may be used again within its window |
 | `viewer` | 16 | the viewer id revocation names (§5); zero for none |
 | `policy` | 65 | a `WEP1` record (live-events §5): the event kinds it may send, its payload and text bounds, and its rate windows |
-| `joules_ceiling` | 8 | u64: the energy its use may spend, in microjoules; 2^64 − 1 for no ceiling |
+| `joules_ceiling` | 8 | u64: the energy its use may be attributed, in microjoules (live-metering §4.6 attributes a hop's figure by the bytes each grant moved, an accounting convention); 2^64 − 1 for no ceiling |
 | `funds_ceiling` | 8 | u64: the funds its use may spend, in minor units of `currency`; 2^64 − 1 for no ceiling |
 | `currency` | 3 | ISO 4217 alphabetic code; three zero bytes when there is no funds ceiling |
 | `profiles` | 1 + *n* | a u8 count, then the index in the descriptor of each publish profile it publishes with |
diff --git a/wai/research/content-taxonomy.md b/wai/research/content-taxonomy.md
index b93b45d44..20b2b5ab8 100644
--- a/wai/research/content-taxonomy.md
+++ b/wai/research/content-taxonomy.md
@@ -29,10 +29,13 @@ position on the axis → a different lever, and a different gain.
 | 3 | **Instructions-at-the-sink** | ship the recipe / state / intent; the sink renders | anything whose payload is secretly a rendered result |
 | 4 | **Determinism + receipts** | replay/decode/mixdown-equivalence, content-addressing, JWP signatures, joules | **cross-cutting** — applies even to content that can't be reconstructed |
 
-Levers 1–2 are the **compression** story. Lever 3 is the **medium-shift**
-story: the unit of value moves from bytes delivered to energy per experience.
-Lever 4 is the **trust-and-energy** story, and it rides on top of all of
-them.
+Levers 1–2 are the **compression** story: fewer bytes, which lowers the cost
+of egress, encode and relays, and the draw of a mobile radio while it
+receives; it does not lower a wired network's energy, which is largely flat
+against traffic. Lever 3 is the **medium-shift** story: the unit of value
+moves from bytes delivered to what the sink renders, and the sink's decode
+and render energy, measured there, is what changes. Lever 4 is the
+**trust-and-energy** story, and it rides on top of all of them.
 
 ## 3. The taxonomy (with mechanism + coverage)
 
-- 
2.54.0 (Apple Git-157)


From 1ffceb5081e53f9aa1d4b83e617ff14f8da0b113 Mon Sep 17 00:00:00 2001
From: Transaction Science 
Date: Sat, 24 Oct 2026 20:22:34 -0400
Subject: [PATCH 44/50] =?UTF-8?q?platform-decode=20=C2=A74.3:=20a=20WAI1's?=
 =?UTF-8?q?=20fallback=20first=20whenever=20it=20ranks=20above=20a=20learn?=
 =?UTF-8?q?ed=20capability=20without=20a=20budget?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

#452's rule demoted a learned capability without a budget only for a
power-efficient fallback, so a smooth or a software classical fallback stayed
below it, while §4.2 ranks every classical decode the sink can make above it
in a WAI2. §4.3 now applies §4.2's order to the two capabilities: step 5 first
when the fallback ranks above, step 3 only if step 5 does not decode, so the
rule never leaves inert an envelope the capability could decode.
advertise_for_envelope follows; the vector learned-capability-fallback-not-
power-efficient now decodes the fallback, and learned-capability-classical-
fallback-no-platform is added. The extension also says SPEC now applies its
order by default.

Co-Authored-By: Claude Opus 5.5 
---
 wai/extensions/platform-decode.md          | 32 +++++++++++++---------
 wai/platform-decode-conformance/README.md  |  5 ++--
 wai/platform-decode-conformance/order.json | 11 ++++++--
 wai/wai-rs/src/platform_decode.rs          | 14 ++++++----
 4 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/wai/extensions/platform-decode.md b/wai/extensions/platform-decode.md
index 3e5ced81e..c73d65e9e 100644
--- a/wai/extensions/platform-decode.md
+++ b/wai/extensions/platform-decode.md
@@ -4,7 +4,8 @@
 > and WebCodecs `isConfigSupported()` with its hardware-acceleration preference, onto WAI
 > capability dispatch ([SPEC.md §4](../SPEC.md)) and rendition selection (SPEC §7.1):
 > what a sink asks the platform about an entry, what each answer means for selection,
-> and a default order, a deployer policy SPEC §7.1 allows, that tries classical decode
+> and a default order, which SPEC §4 and §7.1 apply unless a deployer configures another
+> (SPEC §4, *Energy order*), that tries classical decode
 > the platform marks power-efficient before any learned reconstruction that carries no
 > energy budget. No manifest member and no wire format: the order is a function of the
 > manifest, the payloads, the platform's answers and the budgets.
@@ -129,10 +130,10 @@ Each entry SPEC §7.1 step 2 considers has a rank, tried in this order:
    qualify.
 
 Within a rank, entries keep the manifest's order, the encoder's preference. An entry the
-sink cannot decode (§3) is skipped as `missing_capability`. The order is a deployer policy
-in SPEC §7.1's sense: it reorders the entries the sink considers and leaves out the ones it
-cannot decode, and every rule of §7.1 still holds, so an entry skipped for its digest or
-its pin is skipped whatever its rank.
+sink cannot decode (§3) is skipped as `missing_capability`. The order is SPEC §7.1 step 2's
+default order (SPEC §4, *Energy order*), which a deployer may replace: it reorders the
+entries the sink considers and leaves out the ones it cannot decode, and every rule of §7.1
+still holds, so an entry skipped for its digest or its pin is skipped whatever its rank.
 
 The order therefore decodes through a classical entry before a learned one without a
 budget whenever the sink can decode both, and through a power-efficient classical entry
@@ -143,12 +144,15 @@ measured energy figure (§5).
 ### 4.3 A `WAI1` envelope
 
 SPEC §4 tries `model_requirement.capability`, then `model_requirement.fallback`. Under the
-default order a sink does not advertise, for an envelope, a learned capability without a
-qualifying budget when the envelope's fallback is a classical capability the platform
-marks `supported`, `smooth` and `powerEfficient`: step 3 then does not decode, and step 5
-decodes the fallback. In every other case the capability is advertised as the sink
-otherwise would. Advertising for an envelope is per envelope, as module authorisation is
-(SPEC §4, *Module authorisation*).
+default order (SPEC §4, *Energy order*) a sink takes step 5 before step 3 for an envelope
+whose capability is learned without a qualifying budget and whose fallback ranks above it
+(§4.2): a classical capability the sink can decode, whether or not the platform marks it
+`powerEfficient`, or a learned one with a qualifying budget. Step 3 then decodes only if
+step 5 does not, so the rule never leaves inert an envelope the capability could decode.
+In every other case the capability is tried first, as the sink otherwise would. The
+choice is per envelope, as module authorisation is (SPEC §4, *Module authorisation*).
+This is §4.2's order applied to the two capabilities: a learned capability without a
+budget ranks below every classical one the sink can decode.
 
 ### 4.4 What the order is not
 
@@ -184,13 +188,15 @@ qualifies, it ranks last (§4.2).
 
 The reference implementation is `wai::platform_decode` (`wai/wai-rs/src/platform_decode.rs`):
 `query` forms §2's query, `rank` and `order` give §4.2's order, `select` runs SPEC §7.1
-selection in it, and `advertise_for_envelope` applies §4.3. It calls no platform: the
+selection in it, and `advertise_for_envelope` applies §4.3. The reference dispatcher
+applies this order by default (SPEC §4, *Energy order*; `energy_order::DispatchPolicy`,
+which ranks with `rank`). It calls no platform: the
 answers are inputs. The vectors are in `wai/platform-decode-conformance/`:
 
 - `order.json`: manifests of classical and learned entries with the platform's answers and
   budgets, and each entry's rank, the order, the entries skipped with their reason, and
   the entry SPEC §7.1 picks; and `WAI1` envelopes with whether their capability is
-  advertised (§4.3);
+  tried first (§4.3);
 - `queries.json`: two floor objects of the packaging corpus, whose codec string is the one
   the packager wrote into its HLS master, and an HEVC SPS a platform's hardware encoder
   wrote through WebCodecs.
diff --git a/wai/platform-decode-conformance/README.md b/wai/platform-decode-conformance/README.md
index bbbc92290..1bc015687 100644
--- a/wai/platform-decode-conformance/README.md
+++ b/wai/platform-decode-conformance/README.md
@@ -20,8 +20,9 @@ through WebCodecs (§6 of the extension records the run).
   (`first`, `smooth`, `classical`, `learned-without-budget`, or `null` for an entry the
   sink cannot decode), the `order`, the entries `refused` with their reason, and the entry
   `picked` at a sink that advertises every capability, checks no digest and holds no
-  parameter set. `wai1`: a `capability` and a `fallback` entry, and whether the capability
-  is advertised for the envelope (§4.3).
+  parameter set. `wai1`: a `capability` and a `fallback` entry, whether the capability
+  is tried first for the envelope (`advertise`), and which of the two decodes where the
+  sink can decode both (§4.3).
 - `queries.json` — `cases`: a `capability`, a `payload_file` (a `WAI1` envelope, relative
   to `wai/`) or an `sps_hex`, and the query's members.
 
diff --git a/wai/platform-decode-conformance/order.json b/wai/platform-decode-conformance/order.json
index a5f96ff65..c48cf7b9d 100644
--- a/wai/platform-decode-conformance/order.json
+++ b/wai/platform-decode-conformance/order.json
@@ -155,10 +155,17 @@
     },
     {
       "id": "learned-capability-fallback-not-power-efficient",
-      "why": "The rule removes a learned capability only in favour of a fallback the platform marks power-efficient.",
+      "why": "A smooth classical fallback the platform does not mark power-efficient still ranks above a learned capability without a budget (§4.2): step 5 is tried first, and decodes the fallback.",
       "capability": { "capability": "wai.neural.int_hyper" },
       "fallback": { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": false } } },
-      "expect": { "advertise": true, "decodes": "capability" }
+      "expect": { "advertise": false, "decodes": "fallback" }
+    },
+    {
+      "id": "learned-capability-classical-fallback-no-platform",
+      "why": "A sink with no platform to ask, or one that decodes the fallback with its own decoder: the classical fallback ranks classical, above a learned capability without a budget, and decodes.",
+      "capability": { "capability": "wai.neural.int_hyper" },
+      "fallback": { "capability": "wai.video.av1" },
+      "expect": { "advertise": false, "decodes": "fallback" }
     },
     {
       "id": "classical-capability-learned-fallback",
diff --git a/wai/wai-rs/src/platform_decode.rs b/wai/wai-rs/src/platform_decode.rs
index 351657f13..ddb117594 100644
--- a/wai/wai-rs/src/platform_decode.rs
+++ b/wai/wai-rs/src/platform_decode.rs
@@ -830,18 +830,20 @@ pub fn select(
     )
 }
 
-/// SPEC §4 for a `WAI1` envelope under the default order: whether the sink advertises
-/// `capability` for this envelope. A learned capability without a qualifying budget is
-/// not advertised for an envelope whose `fallback` is a classical capability the platform
-/// marks supported, smooth and power-efficient, so step 5 decodes the fallback; anything
-/// else is advertised as the sink otherwise would (`advertised`).
+/// SPEC §4 for a `WAI1` envelope under the default order: whether the sink tries
+/// `capability` first (step 3 before step 5) for this envelope. A learned capability
+/// without a qualifying budget is not tried first when the envelope's `fallback` ranks
+/// above it (§4.2): a classical capability the sink can decode, or a learned one with a
+/// qualifying budget. Step 5 then comes first, and step 3 only if step 5 does not decode,
+/// as `Wai::dispatch_with` takes them. Anything else is tried as the sink otherwise would
+/// (`advertised`).
 pub fn advertise_for_envelope(capability: &Entry<'_>, fallback: Option<&Entry<'_>>, advertised: bool, rules: &Rules) -> bool {
     if !advertised {
         return false;
     }
     let Some(fb) = fallback else { return true };
     match (rank(capability, rules), rank(fb, rules)) {
-        (Ok(Rank::LearnedWithoutBudget), Ok(Rank::First)) => is_learned(fb.capability),
+        (Ok(Rank::LearnedWithoutBudget), Ok(f)) => f >= Rank::LearnedWithoutBudget,
         _ => true,
     }
 }
-- 
2.54.0 (Apple Git-157)


From 6c03ba72c49783c4d91940b02e0627a754ef732e Mon Sep 17 00:00:00 2001
From: Transaction Science 
Date: Sat, 24 Oct 2026 20:22:34 -0400
Subject: [PATCH 45/50] =?UTF-8?q?wai:=20the=20energy=20order=20is=20platfo?=
 =?UTF-8?q?rm-decode's,=20by=20default;=20the=20budget=20record=20in=20ene?=
 =?UTF-8?q?rgy-measurement=20=C2=A72.10?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Built on #452 instead of beside it: energy_order ranks with
platform_decode::rank (first, smooth, classical, learned-without-budget) and
reads platform answers as platform_decode::Answers; its own mapping and ranks
are gone. SPEC §4's energy order is platform-decode §4's order applied by
default to cap and fb; §7.1 step 2's default walk is the same over the entries
that may be picked, the others keeping their places.

energy-measurement §2.10 defines the budget record platform-decode §5 reads
(class OnChipCounter, joules_micro, per frame|picture|second, relative_ppm,
window_us, reference_sink) with filtering, resolution and the record's digest,
and its refusals; energy_order::BudgetRecord reads and checks it and gives
platform-decode its view. The registry schema and REGISTRY follow.

browser-sink §4.7 ranks alternatives by platform-decode §4.2 from the user
agent's answer (a route of none last, with no rank); the choice table states
each rank. The corpus's choices are regenerated (one order changes: an
alternative routed none now comes last; one case added), and
browser_sink_verify.py ranks the same way (37 of 37 mutations caught).
http_verify.py ranks learned capabilities as platform-decode §4.1 does. The C
header is regenerated over the merged tree.

Co-Authored-By: Claude Opus 5.5 
---
 wai/CHANGELOG.md                            |  55 +--
 wai/REGISTRY.md                             |  28 +-
 wai/SPEC.md                                 |  92 ++---
 wai/extensions/browser-sink.md              |  58 +--
 wai/extensions/energy-measurement.md        |  38 +-
 wai/http-conformance/http_verify.py         |  25 +-
 wai/live-conformance/browser/vectors.json   | 211 +++++++++-
 wai/live-conformance/browser_sink_verify.py |  46 ++-
 wai/registry/capabilities.schema.json       |  72 ++--
 wai/wai-rs/include/wai.h                    |  16 +
 wai/wai-rs/src/browser_sink.rs              |  54 ++-
 wai/wai-rs/src/browser_sink/corpus.rs       |  22 +-
 wai/wai-rs/src/codecs/registry.rs           |  29 +-
 wai/wai-rs/src/container.rs                 |  97 +++--
 wai/wai-rs/src/energy_order.rs              | 420 ++++++++++----------
 15 files changed, 800 insertions(+), 463 deletions(-)

diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md
index 881cb1f01..5e15c216c 100644
--- a/wai/CHANGELOG.md
+++ b/wai/CHANGELOG.md
@@ -9,31 +9,40 @@ wire format may change and such changes are recorded here.
 ### Energy honesty: the energy order of dispatch, a metered relay, `HwShunt` closed to new profiles, and what fewer bytes do not save
 
 - **The energy order** (SPEC §4, §7.1 step 2). A sink tries the capabilities an envelope
-  offers in the energy order unless its deployer configures another: a decode its platform
-  answers supported and power-efficient first (a page's Media Capabilities answer, a native
-  platform's hardware-decode query), a learned capability (replicate class
-  `NeuralIntegerExact`, `NeuralEntropyExact`, `NeuralFloat` or `Behavioral`) that carries
-  no energy budget after every other, the envelope's order within each. So a learned
-  capability is never decoded above a classical fallback by default. The order changes which
-  capability decodes, never a reason: an inert envelope reports step 3's reason before step
-  5's. A sink that takes the manifest's order instead says so where it reports a decode.
-- **The energy budget** (SPEC §4; REGISTRY, *Energy budgets*). What lifts a learned
-  capability back to its place: a decode figure per frame or per second of content at a
-  stated resolution, `OnChipCounter` or `CalibratedInstrument` with its evidence, measured
-  on a named reference sink, in a record named by its SHA-256. A model, a constant or
-  legacy `HwShunt` backs no budget (`budget_not_hardware`, `budget_legacy_class`,
-  `budget_class_invalid`, `budget_malformed`). A registration states one in the export's
+  offers in the energy order unless its deployer configures another: the default order of
+  [platform-decode](extensions/platform-decode.md) §4, which SPEC now applies by default.
+  Its ranks are platform-decode §4.2's: `first` (classical decode the platform marks
+  supported, smooth and power-efficient, and a learned capability with a qualifying energy
+  budget), `smooth`, `classical` (every classical capability of a sink with no platform to
+  ask among them), and `learned-without-budget` last; the envelope's order within a rank;
+  and in a `WAI2` the entries never picked (companions, refinements) keep their places. So
+  a learned capability without a budget is never decoded above a classical fallback the
+  sink can decode. The order changes which capability decodes, never a reason; a sink that
+  takes the manifest's order instead says so where it reports a decode.
+- **platform-decode §4.3** follows §4.2 for a `WAI1`: the fallback is tried first whenever
+  it ranks above a learned capability without a budget, a smooth or a software classical
+  decode included, not only a power-efficient one; step 3 decodes if step 5 does not.
+  `advertise_for_envelope` and one vector follow, and a vector for a sink with no platform
+  is added.
+- **The energy budget record** (energy-measurement §2.10; REGISTRY, *Energy budgets*): an
+  `OnChipCounter` decode figure per frame, picture or second at a stated resolution, with
+  its evidence and filtering state, the reference sink and the SHA-256 of the record that
+  holds the measurement; platform-decode §5 reads its first six members. Refused:
+  `budget_legacy_class` (`HwShunt`), `budget_not_counter` (any other class),
+  `budget_class_invalid`, `budget_malformed`. A registration states one in the export's
   `energy_budget`; no registration states one in this revision.
-- **Reference.** `wai-rs` `energy_order` (`DispatchPolicy`, `Budgets`, `EnergyBudget`);
-  `Wai::dispatch_verified` and `WaiMulti::pick` apply the energy order, `dispatch_with` and
-  `pick_with` take another, and the HTTP client's default order is the energy order. The C
-  ABI's `wai_envelope_select` picks in it too.
+- **Reference.** `wai-rs` `energy_order` (`DispatchPolicy`, `Budgets`, `BudgetRecord`),
+  ranking with `platform_decode::rank`; `Wai::dispatch_verified` and `WaiMulti::pick`
+  apply the energy order, `dispatch_with` and `pick_with` take another, and the HTTP
+  client's default order and the C ABI's `wai_envelope_select` follow it. The HTTP
+  corpus's O2 pin cases and the pin corpus's selection cases state the table's order they
+  run in; `select_O2_default` and `fetch_O2_default` are the default.
 - **The browser sink** (browser-sink §4.7): objects that share a `choice` are alternatives
-  of one content, and the page decodes the first in the energy order that routes, the user
-  agent's power-efficient answer first and a learned capability with no budget last
-  (`no_alternative` where none routes). `browser_sink::choose_report`, the page's
-  `chooseReport`, a `choices` section in `live-conformance/browser/` checked by `wai-rs`, by
-  the page's wasm build in a browser and by `browser_sink_verify.py`.
+  of one content, ranked by platform-decode §4.2 from the user agent's answer for each, and
+  the page decodes the first that routes (`no_alternative` where none does).
+  `browser_sink::choose_report`, the page's `chooseReport`, a `choices` section in
+  `live-conformance/browser/` with each alternative's rank, checked by `wai-rs`, by the
+  page's wasm build in a browser and by `browser_sink_verify.py`.
 - **`HwShunt` is closed to new profiles** (energy-measurement §2.6, *New profiles*): a
   profile, record, claim, table or registration member defined after the hardware class was
   refined refuses `HwShunt` from every producer and reads it as no other class; the profiles
diff --git a/wai/REGISTRY.md b/wai/REGISTRY.md
index c8e9ebdb2..77374e6da 100644
--- a/wai/REGISTRY.md
+++ b/wai/REGISTRY.md
@@ -130,20 +130,20 @@ gives it; a record carries none.
 
 ## Energy budgets
 
-A learned capability (replicate class `neural-int-exact`, `neural-entropy-exact`,
-`neural-float` or `behavioral`) is dispatched after every other capability an
-envelope offers, unless it carries an energy budget (SPEC §4, *Energy order* and
-*Energy budget*). A registration states one by adding a row to
-`energy_order::REGISTERED` in `wai-rs`, which the export writes as the
-capability's `energy_budget`: the decode figure per frame or per second of
-content, at a stated resolution, its class (`OnChipCounter` or
-`CalibratedInstrument`) with its evidence, the reference sink it was measured on,
-and the SHA-256 of the signed record that holds the measurement. The tests refuse
-a row whose budget does not check (`EnergyBudget::check`): a `ModelBased` or
-`Estimator` figure, legacy `HwShunt`, a declaration below the resolution floor,
-no sink, or no record. The member is absent for every capability that states
-none, which in this revision is every capability. A budget states what a
-measurement found on one sink; it is not a claim about any other sink.
+A learned capability (platform-decode §4.1: a replicate class other than
+`standard-defined`, `standard-tolerance` and `standard-unclassified`) is
+dispatched after every classical capability an envelope offers that the sink can
+decode, unless it carries a qualifying energy budget (SPEC §4, *Energy order*).
+A registration states one by adding a row to `energy_order::REGISTERED` in
+`wai-rs`, which the export writes as the capability's `energy_budget`: the
+budget record of [energy-measurement](extensions/energy-measurement.md) §2.10,
+an `OnChipCounter` figure per frame, picture or second at a stated resolution,
+with its evidence, the reference sink it was measured on and the SHA-256 of the
+signed record that holds the measurement. The tests refuse a row whose record
+does not check (`BudgetRecord::check`). The member is absent for every
+capability that states none, which in this revision is every capability. A
+budget states what a measurement found on one sink; it is not a claim about any
+other sink.
 
 ## How to register a string
 
diff --git a/wai/SPEC.md b/wai/SPEC.md
index 946a359f3..da47b3ffb 100644
--- a/wai/SPEC.md
+++ b/wai/SPEC.md
@@ -485,55 +485,55 @@ that needs an alternative for sinks that hold another parameter set carries one
 pinned rendition per set in a `WAI2` envelope (§7.1).
 
 **Energy order.** Steps 3 and 5 are tried in the **energy order**, which a sink
-applies unless its deployer configures another (below). Each capability the
-sink may take ranks:
+applies unless its deployer configures another: the default order of
+[platform-decode](extensions/platform-decode.md) §4, applied to `cap` and `fb`.
+Each capability ranks as platform-decode §4.2 has it, from what the sink's
+platform answers about the decode (§2, §3 there: Media Capabilities
+`decodingInfo()`, WebCodecs `isConfigSupported()`) and from the energy budgets
+of learned capabilities (§5 there):
 
-1. first, where the sink can ask its platform about a decode (a page's Media
-   Capabilities `decodingInfo`, a native platform's hardware-decode query) and
-   the platform answers the capability's configuration both supported and
-   power-efficient: on the platforms that answer so, that is the hardware
-   decode path;
-2. last, where the capability is **learned** — its replicate class (§7) is
-   `NeuralIntegerExact`, `NeuralEntropyExact`, `NeuralFloat` or `Behavioral` —
-   and carries no energy budget (below);
-3. between them, every other capability.
+1. `first`: classical decode the platform marks supported, smooth and
+   power-efficient, which on the platforms that answer so is the hardware
+   decode path; and a learned capability with a qualifying energy budget;
+2. `smooth`: classical decode the platform marks supported and smooth, not
+   power-efficient;
+3. `classical`: any other classical decode the sink can make, every classical
+   capability of a sink with no platform to ask among them;
+4. `learned-without-budget`: a learned capability (platform-decode §4.1: a
+   replicate class (§7) other than the three standard ones, or a string this
+   revision does not register) whose budget is absent or does not qualify.
 
 Where `fb` ranks before `cap`, the sink takes steps 4 and 5 before step 3, and
-step 3 only if step 5 does not decode; otherwise it takes them as listed. So a
-learned capability is never decoded above a classical fallback by default, and
-a decode the platform answers power-efficient is decoded above a software or a
-learned one. The order changes which capability decodes and nothing else: an
-inert envelope reports the reason kept at step 3, else the one kept at step 5,
-whichever was tried first. A sink whose deployer configures the manifest's
-order instead takes the steps as listed, and says so wherever it reports a
-decode (a capability report, a receipt's notes, its logs). The energy order
-reads no energy figure the envelope carries: a manifest states no energy, and a
-figure in a receipt is the producer's (encode) energy, not the sink's decode.
+step 3 only if step 5 does not decode; otherwise it takes them as listed
+(platform-decode §4.3). A capability the platform answers it cannot decode,
+where the sink holds no decoder of its own for it, is not advertised for the
+envelope (platform-decode §3). So a learned capability without a qualifying
+budget is never decoded above a classical fallback the sink can decode, and a
+decode the platform marks power-efficient comes before a software or a learned
+one without a budget. The order changes which capability decodes and nothing
+else: an inert envelope reports the reason kept at step 3, else the one kept at
+step 5, whichever was tried first. A sink whose deployer configures the
+manifest's order instead takes the steps as listed, and says so wherever it
+reports a decode (a capability report, a receipt's notes, its logs). The energy
+order reads no energy figure the envelope carries: a manifest states no energy,
+and a figure in a receipt is the producer's (encode) energy, not the sink's
+decode. Nor is a platform's `powerEfficient` an energy figure: it orders, and
+is never written as one (platform-decode §3).
 
 **Energy budget.** A learned capability carries an energy budget where its
 registration states one ([REGISTRY](REGISTRY.md), *Energy budgets*; the
 registry export's `energy_budget`), or where the sink holds one from a
-published decode table its deployer pins. A budget is the capability's decode
-energy per frame, or per second of content, at a stated resolution, measured on
-a named reference sink, with:
-
-- the figure's class, `OnChipCounter` or `CalibratedInstrument`, with its
-  evidence ([energy-measurement](extensions/energy-measurement.md) §2.3–§2.5),
-  meeting the resolution floor of §2.3 there; a `ModelBased` or `Estimator`
-  figure backs no budget (`budget_not_hardware`), and a budget is a profile
-  defined after the hardware class was refined, so `HwShunt` is refused
-  (`budget_legacy_class`, energy-measurement §2.6, *New profiles*); a class
-  that otherwise breaks those rules is `budget_class_invalid`;
-- the reference sink named, and the SHA-256 of the signed record the figure is
-  in, so that the figure can be found and checked
-  (`budget_malformed` otherwise).
-
-A budget that does not meet these is not held, and a deployer's table is held
-whole or not at all. No registration states a budget in this revision, so a
-sink that applies the energy order takes a classical fallback before every
-learned capability. The reference dispatcher applies it in
-`Wai::dispatch_verified` and `WaiMulti::pick`, takes another order through
-`dispatch_with` and `pick_with`, and holds budgets in `energy_order::Budgets`.
+published decode table its deployer pins: the budget record of
+[energy-measurement](extensions/energy-measurement.md) §2.10, an `OnChipCounter`
+figure of the capability's decode per frame, picture or second, measured on a
+named reference sink, with its evidence and the digest of the record it is in.
+A record that breaks §2.10 is not held, and a deployer's table is held whole or
+not at all; one held qualifies as platform-decode §5 says. No registration
+states a budget in this revision, so a sink that applies the energy order takes
+a classical fallback it can decode before every learned capability. The
+reference dispatcher applies the order in `Wai::dispatch_verified` and
+`WaiMulti::pick`, takes another through `dispatch_with` and `pick_with`, ranks
+with `platform_decode::rank`, and holds budgets in `energy_order::Budgets`.
 
 A capability is **dispatchable** unless this revision registers it as something
 a sink does not decode on its own: a candidate (§5, *Candidate capabilities*), a
@@ -590,10 +590,10 @@ listing names, or one held file); a file the decode needs outside them is
 the algorithm above runs unchanged, so a sink MUST NOT report a file inert because
 of module authorisation while a fallback it can decode without that module remains,
 and an encoder emitting a capability whose decode needs a module MUST declare such a
-fallback (§3). Advertising is per envelope in one other place:
-[platform-decode](extensions/platform-decode.md) §4.3, under which a sink does not
-advertise a learned capability without an energy budget for an envelope whose fallback a
-web platform decodes power-efficiently. A sink configured with no key log holds no module under §7.9, so it
+fallback (§3). The order of steps 3 and 5 is per envelope in one other place,
+the energy order above (platform-decode §4.3), under which a sink tries the fallback
+first for an envelope whose learned capability has no qualifying energy budget and
+whose fallback ranks above it. A sink configured with no key log holds no module under §7.9, so it
 runs no module obtained apart from an envelope, and it does not run check 5. The
 reference dispatcher in `wai-rs` runs no module obtained apart from an envelope; it
 runs check 5 when the sink is configured with a key log (`key_log::SinkKeyLog`,
diff --git a/wai/extensions/browser-sink.md b/wai/extensions/browser-sink.md
index ca3df7516..ebb1decc6 100644
--- a/wai/extensions/browser-sink.md
+++ b/wai/extensions/browser-sink.md
@@ -6,8 +6,9 @@
 > host's or WAI's own WebAssembly decoder (§4): the user agent is asked only about codec strings
 > the WebCodecs Codec Registry lists, and its decoder is preferred where it is exact for the
 > tier the object needs. Among objects that are alternatives of one content, the page decodes
-> the one SPEC §4's energy order puts first: a decode the user agent answers power-efficient
-> before a software or a learned one (§4.7). The page evaluates the constraint sets of
+> the one SPEC §4's energy order puts first, by [platform-decode](platform-decode.md) §4.2's
+> ranks: a decode the user agent answers supported, smooth and power-efficient before a software
+> one, and a learned one without an energy budget last (§4.7). The page evaluates the constraint sets of
 > [capability-constraints](capability-constraints.md) itself (§5), and reports the joules a
 > decode was measured to cost beside the user agent's `powerEfficient` boolean, which stays the
 > user agent's word (§6). Every frame the page decodes carries a **content binding** (§7): the
@@ -62,6 +63,8 @@ Relationship to the core spec and the other extensions:
 - **[capability-constraints](capability-constraints.md).** §5 is its evaluation in a page, over
   the register of its §3.1.
 - **[energy-measurement](energy-measurement.md) §2.** The classes a figure carries (§6).
+- **[platform-decode](platform-decode.md) §3, §4.** How a `decodingInfo()` answer is read, and the
+  ranks §4.7 orders alternatives by.
 - **[jwp-receipts](jwp-receipts.md) §2.1 and §3 step 3.** The content hash a binding names, and
   the link hash of the group receipt.
 - **[determinism-tiers](determinism-tiers.md).** The tier vocabulary a need and a binding use.
@@ -292,29 +295,33 @@ http-delivery §12.1's descriptor, `via` `"ua"` (with the codec strings asked an
 Objects of a report that carry the same `choice` are **alternatives**: renditions of one content
 of which the page decodes one, such as the entries of a `WAI2` envelope or the renditions of one
 track. For each `choice`, in order of its first appearance in `objects`, the page puts the
-alternatives in SPEC §4's energy order:
+alternatives in SPEC §4's energy order, [platform-decode](platform-decode.md) §4.2's ranks, read
+from the report:
 
-1. first, an alternative routed `ua` whose energy entry's `power_efficient` is `true`: the user
-   agent answered that it decodes the configuration supported and power-efficient, which on the
-   platforms that answer so is the hardware decode path;
-2. last, an alternative whose capability is learned (SPEC §4: its replicate class in the
-   registry export is `neural-int-exact`, `neural-entropy-exact`, `neural-float` or `behavioral`)
-   and carries no energy budget (the export's `energy_budget`);
-3. between them, every other alternative;
+- an alternative routed `ua` ranks by the user agent's answer for its codec string, read as
+  platform-decode §3 reads a `decodingInfo()` answer: `first` when its capability is classical
+  and the answer's `supported`, `smooth` and `power_efficient` are all `true`; `smooth` when
+  `smooth` is `true` and `power_efficient` is not; `classical` otherwise;
+- an alternative routed `host` or `wasm` has no platform answer, and ranks `classical`;
+- whatever its route, an alternative whose capability is learned (platform-decode §4.1) ranks
+  `first` with a qualifying energy budget (platform-decode §5; the registry export's
+  `energy_budget`) and `learned-without-budget` with none;
+- an alternative routed `none` comes after every other, with no rank;
 
-in report order within each. A `power_efficient` of `false` or `null` does not put an alternative
-first: no answer is not a power-efficient one. The **chosen** alternative is the first in that
-order whose route is not `none`, and where every route is `none` nothing is chosen
-(`no_alternative`). A page **MUST** decode the chosen alternative of a choice and no other, and
-reads the order as SPEC §4 has it: a learned alternative is decoded only where no alternative
-before it can be routed. The order reads no energy figure (§6 keeps a figure from changing a
-route) and uses the user agent's `powerEfficient` as the user agent gave it.
+in report order within each. A `power_efficient` or `smooth` of `false` or `null` is not a `true`
+one: no answer is not a power-efficient one. The **chosen** alternative is the first in that order
+whose route is not `none`, and where every route is `none` nothing is chosen (`no_alternative`). A
+page **MUST** decode the chosen alternative of a choice and no other, so a learned alternative
+without a budget is decoded only where no classical alternative can be routed. The order reads no
+energy figure (§6 keeps a figure from changing a route) and uses the user agent's `powerEfficient`
+as the user agent gave it, as an order and never as an energy figure (platform-decode §3).
 
 The **choice table** has one entry a choice: `choice`; `order`, the alternatives' names in that
-order, those routed `none` included; `chosen`, a name or `null`; and `reason`, `null` or
-`no_alternative`. An object with no `choice` is in no entry, and a report whose objects carry
-none has an empty table. A page holds the budgets the registrations state; this revision
-registers none, so in a page every learned alternative comes after every other.
+order, those routed `none` included; `ranks`, each one's rank in the same order, `null` for one
+routed `none`; `chosen`, a name or `null`; and `reason`, `null` or `no_alternative`. An object with
+no `choice` is in no entry, and a report whose objects carry none has an empty table. A page holds
+the budgets the registrations state; this revision registers none, so in a page every learned
+alternative comes after every classical one it can route.
 
 ## 5. Constraint sets in the page
 
@@ -580,10 +587,11 @@ written by `wai_browser_sink_vectors gen`. It has:
   not run and taken by one whose probe matched, the host and wasm fallbacks, and a malformed
   report.
 - **Choices**: reports whose objects are alternatives, each with its routing table and the choice
-  table §4.7 gives it: a power-efficient answer first, a classical alternative before a learned
-  one, a learned one chosen where nothing before it routes, no answer read as not power-efficient,
-  two choices beside an object in none, a choice with nothing to choose (`no_alternative`), and an
-  empty and a non-string `choice`, each refused whole.
+  table §4.7 gives it: `first`, `smooth` and `classical` before `learned-without-budget`, a
+  power-efficient answer that is not smooth below a smooth one, a learned alternative chosen where
+  no other routes, no answer read as not power-efficient, two choices beside an object in none, a
+  choice with nothing to choose (`no_alternative`), and an empty and a non-string `choice`, each
+  refused whole.
 - **Constraints**: constraint sets and declared parameters, with §5's outcome: satisfied by one
   set of several, by an empty set, by `enum`, `minimum` and `maximum`; unsatisfied by an
   undeclared parameter and by a value of the wrong type; each malformed form and an unregistered
diff --git a/wai/extensions/energy-measurement.md b/wai/extensions/energy-measurement.md
index 06c0adf32..676ffd335 100644
--- a/wai/extensions/energy-measurement.md
+++ b/wai/extensions/energy-measurement.md
@@ -551,7 +551,7 @@ The reference implementation checks a new profile's class with
 `energy_class::check_new_profile`, which refuses `HwShunt`
 (`AcquisitionError::LegacyInNewProfile`), a class beside a zero figure, a
 refined class without its evidence and a declaration below the resolution
-floor of §2.3. The energy budget of SPEC §4 is the first profile it governs.
+floor of §2.3. The energy budget record of §2.10 is the first profile it governs.
 
 A package counter read through RAPL or the platform's system management unit
 is an on-chip counter (§2.2): a figure read from one is `OnChipCounter`, with its
@@ -755,6 +755,42 @@ three-name level: `sandbox/README.md`, `proof/README.md`,
 same position in prose: vendor counters are real sensor readings, whose
 derivation and error bounds are undisclosed.
 
+### 2.10 Energy budgets
+
+An **energy budget** is a learned capability's decode energy, measured on a reference
+sink, stated so that a sink may dispatch the capability above a classical alternative
+(SPEC §4, *Energy order*; [platform-decode](platform-decode.md) §4.2, §5). It is a record
+of these members, in JSON, the first six the ones platform-decode §5 reads:
+
+| member | value |
+|---|---|
+| `class` | `OnChipCounter` |
+| `joules_micro` | the figure, in microjoules, for one unit of decode, above 0 |
+| `per` | the unit: `frame`, `picture` or `second` of output |
+| `relative_ppm`, `window_us` | the declared uncertainty of §2.3, each above 0, and `joules_micro × relative_ppm` at least 288 676 |
+| `filtering` | the counter's filtering state of §2.4: `On`, `Off` or `Unknown` |
+| `reference_sink` | text naming the reference sink, not only white space |
+| `resolution` | `[width, height]`, two positive integers, the decoded size the figure was measured at; `null` for content with none |
+| `record` | 64 lowercase hexadecimal digits: the SHA-256 of the signed record that holds the measurement, its report (§6) included, so that the figure can be found and checked |
+
+A budget is a profile defined after the hardware class was refined, so it refuses
+`HwShunt` (§2.6, *New profiles*). A reader refuses a record:
+
+| reason | when |
+|---|---|
+| `budget_legacy_class` | its `class` is `HwShunt` |
+| `budget_not_counter` | its `class` is another class (`CalibratedInstrument`, `ModelBased`, `Estimator`): platform-decode §5 reads an `OnChipCounter` figure, and a model or a constant is not a measurement of the decode |
+| `budget_class_invalid` | a zero figure, uncertainty or window, or a declaration below the resolution floor |
+| `budget_malformed` | a member missing, of another form, or one this table does not define |
+
+A registration states a budget in the registry export's `energy_budget`
+([REGISTRY](../REGISTRY.md), *Energy budgets*); a deployer may pin a published table of
+them, held whole or not at all. A budget states what one measurement found on one sink;
+platform-decode §5 decides whether it qualifies (a deployer may set a ceiling per unit).
+No registration states one in this revision. The reference reads and checks a record with
+`energy_order::BudgetRecord`, and gives platform-decode its members
+(`BudgetRecord::order_view`).
+
 ## 3. The reference protocol: bracketed marginal measurement
 
 On-die energy counters report the draw of a whole package or SoC, not of one
diff --git a/wai/http-conformance/http_verify.py b/wai/http-conformance/http_verify.py
index d9d51e30d..131eb6a48 100644
--- a/wai/http-conformance/http_verify.py
+++ b/wai/http-conformance/http_verify.py
@@ -332,24 +332,29 @@ def selectable(e):
     return e.get("role") not in ("companion", "refinement") and dispatchable(e["capability"])
 
 
-# SPEC §4, *Energy order*: the replicate classes of a learned capability, as the registry
-# export labels them; a learned capability whose export entry carries no `energy_budget`
-# goes after every other.
-LEARNED = ("neural-int-exact", "neural-entropy-exact", "neural-float", "behavioral")
+# SPEC §4, *Energy order* (platform-decode §4): a capability is learned unless its
+# registry class is one of the three standard classes (a string the registry does not hold
+# is learned too); a learned capability whose export entry carries no `energy_budget` ranks
+# `learned-without-budget`, after every classical one.
+STANDARD = ("standard-defined", "standard-tolerance", "standard-unclassified")
 
 
-def learned_unbudgeted(cap):
+def energy_rank(cap):
+    """platform-decode §4.2's rank with no platform answer: 0 `first` (learned, with a
+    budget), 2 `classical`, 3 `learned-without-budget`."""
     c = REG.get(cap)
-    return c is not None and c["replicate"] in LEARNED and c.get("energy_budget") is None
+    if c is not None and c["replicate"] in STANDARD:
+        return 2
+    return 0 if c is not None and c.get("energy_budget") is not None else 3
 
 
 def energy_order(entries):
     """SPEC §7.1 step 2's default order: the selectable entries in SPEC §4's energy order
-    (a learned one with no energy budget after every other, table order within each), each
-    in one of the selectable entries' places; every other entry in its own place. The corpus
-    states no platform answer, so no entry is put first for one."""
+    (platform-decode §4.2: with no platform answer every classical entry ranks `classical`,
+    a learned one with no energy budget after them, table order within each), each in one
+    of the selectable entries' places; every other entry in its own place."""
     slots = [i for i, e in enumerate(entries) if selectable(e)]
-    ranked = sorted(slots, key=lambda i: (1 if learned_unbudgeted(entries[i]["capability"]) else 0, i))
+    ranked = sorted(slots, key=lambda i: (energy_rank(entries[i]["capability"]), i))
     out = list(range(len(entries)))
     for s, r in zip(slots, ranked):
         out[s] = r
diff --git a/wai/live-conformance/browser/vectors.json b/wai/live-conformance/browser/vectors.json
index 8ecfa2004..f91f49d2e 100644
--- a/wai/live-conformance/browser/vectors.json
+++ b/wai/live-conformance/browser/vectors.json
@@ -1471,7 +1471,7 @@
   "choices": [
     {
       "name": "hardware_first",
-      "about": "one clip as AV1 the user agent answers supported and power-efficient, as the learned int_hyper on the wasm route, and as VP9 answered supported and not power-efficient: AV1 first, VP9, the learned one last; AV1 chosen",
+      "about": "one clip as AV1 the user agent answers supported, smooth and power-efficient (first), as the learned int_hyper on the wasm route (learned without a budget), and as VP9 answered supported and smooth, not power-efficient (smooth): AV1, VP9, the learned one last; AV1 chosen",
       "report": {
         "browser_sink": 1,
         "ua": {
@@ -1498,6 +1498,12 @@
             "smooth": null,
             "power_efficient": null,
             "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
           }
         },
         "host": {},
@@ -1607,6 +1613,11 @@
             "vp9",
             "int_hyper"
           ],
+          "ranks": [
+            "first",
+            "smooth",
+            "learned-without-budget"
+          ],
           "chosen": "av1",
           "reason": null
         }
@@ -1641,6 +1652,12 @@
             "smooth": null,
             "power_efficient": null,
             "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
           }
         },
         "host": {},
@@ -1721,6 +1738,10 @@
             "int_motion",
             "int_hyper"
           ],
+          "ranks": [
+            "classical",
+            "learned-without-budget"
+          ],
           "chosen": "int_motion",
           "reason": null
         }
@@ -1728,7 +1749,7 @@
     },
     {
       "name": "learned_when_nothing_else_routes",
-      "about": "HEVC the user agent answers unsupported, and the learned int_hyper on the wasm route: the order keeps HEVC first, but it routes none, so the learned alternative is chosen",
+      "about": "HEVC the user agent answers unsupported, and the learned int_hyper on the wasm route: HEVC routes none and comes last with no rank, so the learned alternative is chosen",
       "report": {
         "browser_sink": 1,
         "ua": {
@@ -1755,6 +1776,12 @@
             "smooth": null,
             "power_efficient": null,
             "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
           }
         },
         "host": {},
@@ -1832,8 +1859,12 @@
         {
           "choice": "clip",
           "order": [
-            "hevc",
-            "int_hyper"
+            "int_hyper",
+            "hevc"
+          ],
+          "ranks": [
+            "learned-without-budget",
+            null
           ],
           "chosen": "int_hyper",
           "reason": null
@@ -1842,7 +1873,7 @@
     },
     {
       "name": "power_efficient_not_stated",
-      "about": "AVC answered supported with no powerEfficient answer, and AV1 answered power-efficient: the user agent's power-efficient answer first; no answer is not a power-efficient one",
+      "about": "AVC answered supported and smooth with no powerEfficient answer (smooth), and AV1 answered supported, smooth and power-efficient (first): no answer is not a power-efficient one",
       "report": {
         "browser_sink": 1,
         "ua": {
@@ -1869,6 +1900,12 @@
             "smooth": null,
             "power_efficient": null,
             "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
           }
         },
         "host": {},
@@ -1949,6 +1986,134 @@
             "av1",
             "avc"
           ],
+          "ranks": [
+            "first",
+            "smooth"
+          ],
+          "chosen": "av1",
+          "reason": null
+        }
+      ]
+    },
+    {
+      "name": "smooth_before_power_efficient_but_not_smooth",
+      "about": "HEVC answered supported and power-efficient but not smooth (classical: it drops frames), and AV1 answered supported and smooth (smooth): AV1 first",
+      "report": {
+        "browser_sink": 1,
+        "ua": {
+          "av01.0.04M.08": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": false,
+            "probe": "not_run"
+          },
+          "vp09.00.10.08": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": false,
+            "probe": "not_run"
+          },
+          "avc1.64001f": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": null,
+            "probe": "not_run"
+          },
+          "hvc1.1.6.L93.B0": {
+            "supported": false,
+            "smooth": null,
+            "power_efficient": null,
+            "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
+          }
+        },
+        "host": {},
+        "wasm": [
+          "wai.video.int_motion",
+          "wai.video.int_hyper",
+          "wai.neural.int_hyper"
+        ],
+        "constraints": {},
+        "energy": {},
+        "objects": [
+          {
+            "name": "hevc",
+            "capability": "wai.video.hevc",
+            "codec": "hev1.1.6.L63.B0",
+            "need": "none",
+            "params": {
+              "wai:frame_width": 640,
+              "wai:frame_height": 360
+            },
+            "choice": "clip"
+          },
+          {
+            "name": "av1",
+            "capability": "wai.video.av1",
+            "codec": "av01.0.04M.08",
+            "need": "none",
+            "params": {
+              "wai:frame_width": 640,
+              "wai:frame_height": 360
+            },
+            "choice": "clip"
+          }
+        ]
+      },
+      "outcome": "chosen",
+      "reason": null,
+      "table": [
+        {
+          "name": "hevc",
+          "route": "ua",
+          "reason": null,
+          "legs": {
+            "ua": "taken",
+            "host": "not_reached",
+            "wasm": "not_reached"
+          },
+          "asked": true,
+          "tier": "none",
+          "energy": {
+            "power_efficient": true,
+            "figure": null,
+            "reason": null
+          }
+        },
+        {
+          "name": "av1",
+          "route": "ua",
+          "reason": null,
+          "legs": {
+            "ua": "taken",
+            "host": "not_reached",
+            "wasm": "not_reached"
+          },
+          "asked": true,
+          "tier": "none",
+          "energy": {
+            "power_efficient": false,
+            "figure": null,
+            "reason": null
+          }
+        }
+      ],
+      "choices": [
+        {
+          "choice": "clip",
+          "order": [
+            "av1",
+            "hevc"
+          ],
+          "ranks": [
+            "smooth",
+            "classical"
+          ],
           "chosen": "av1",
           "reason": null
         }
@@ -1983,6 +2148,12 @@
             "smooth": null,
             "power_efficient": null,
             "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
           }
         },
         "host": {},
@@ -2143,6 +2314,10 @@
             "b_motion",
             "b_neural"
           ],
+          "ranks": [
+            "classical",
+            "learned-without-budget"
+          ],
           "chosen": "b_motion",
           "reason": null
         },
@@ -2152,6 +2327,10 @@
             "a_av1",
             "a_vp9"
           ],
+          "ranks": [
+            "first",
+            "smooth"
+          ],
           "chosen": "a_av1",
           "reason": null
         }
@@ -2186,6 +2365,12 @@
             "smooth": null,
             "power_efficient": null,
             "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
           }
         },
         "host": {},
@@ -2266,6 +2451,10 @@
             "hevc",
             "vvc"
           ],
+          "ranks": [
+            null,
+            null
+          ],
           "chosen": null,
           "reason": "no_alternative"
         }
@@ -2300,6 +2489,12 @@
             "smooth": null,
             "power_efficient": null,
             "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
           }
         },
         "host": {},
@@ -2358,6 +2553,12 @@
             "smooth": null,
             "power_efficient": null,
             "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
           }
         },
         "host": {},
diff --git a/wai/live-conformance/browser_sink_verify.py b/wai/live-conformance/browser_sink_verify.py
index 2191fcf78..d5cad4aad 100644
--- a/wai/live-conformance/browser_sink_verify.py
+++ b/wai/live-conformance/browser_sink_verify.py
@@ -395,14 +395,15 @@ def route_report(r):
 
 # ─────────────────────────────── §7 ───────────────────────────────
 
-# SPEC §4, *Energy order*: the replicate classes of a learned capability, as the registry
-# export labels them.
-LEARNED = ("neural-int-exact", "neural-entropy-exact", "neural-float", "behavioral")
+# platform-decode §4.1: a learned capability is one whose registry class is not one of the
+# three standard classes, or a string this revision does not register.
+STANDARD = ("standard-defined", "standard-tolerance", "standard-unclassified")
+RANKS = ["first", "smooth", "classical", "learned-without-budget"]
 
 
-def learned_unbudgeted(cap):
+def learned(cap):
     c = CAPS.get(cap)
-    return bool(c) and c["replicate"] in LEARNED and c.get("energy_budget") is None
+    return c is None or c["replicate"] not in STANDARD
 
 
 def choose_report(r):
@@ -420,16 +421,30 @@ def choose_report(r):
                 break
         else:
             groups.append((o["choice"], [i]))
+
+    def rank(i):
+        e, o = table[i], r["objects"][i]
+        if e["route"] == "none":
+            return None
+        cap = o["capability"]
+        if learned(cap):
+            budget = (CAPS.get(cap) or {}).get("energy_budget")
+            return "first" if budget is not None and budget.get("class") == "OnChipCounter" else "learned-without-budget"
+        if e["route"] == "ua":
+            a = r["ua"].get(o["codec"]) or {}
+            if a.get("supported") is True and a.get("smooth") is True and a.get("power_efficient") is True:
+                return "first"
+            if a.get("smooth") is True:
+                return "smooth"
+        return "classical"
+
     out = []
     for choice, members in groups:
-        def place(i):
-            e = table[i]
-            if e["route"] == "ua" and e["energy"]["power_efficient"] is True:
-                return 0
-            return 2 if learned_unbudgeted(r["objects"][i]["capability"]) else 1
-        order = sorted(members, key=lambda i: (place(i), i))
-        chosen = next((i for i in order if table[i]["route"] != "none"), None)
-        out.append({"choice": choice, "order": [r["objects"][i]["name"] for i in order],
+        ranked = [(rank(i), i) for i in members]
+        order = sorted(ranked, key=lambda x: (RANKS.index(x[0]) if x[0] is not None else len(RANKS), x[1]))
+        chosen = next((i for rk, i in order if rk is not None), None)
+        out.append({"choice": choice, "order": [r["objects"][i]["name"] for _, i in order],
+                    "ranks": [rk for rk, _ in order],
                     "chosen": None if chosen is None else r["objects"][chosen]["name"],
                     "reason": None if chosen is not None else "no_alternative"})
     return out, None
@@ -717,7 +732,10 @@ def mutations(doc):
     out.append(("no answer read as power-efficient", m(lambda d: find(d, "choices", "power_efficient_not_stated")["report"]["ua"]["avc1.64001f"].update(power_efficient=True)), None))
     out.append(("an alternative routed none chosen", m(lambda d: find(d, "choices", "no_alternative")["choices"][0].update(chosen="hevc", reason=None)), None))
     out.append(("an empty choice read", m(lambda d: find(d, "choices", "empty_choice")["report"]["objects"][0].update(choice="clip")), None))
-    out.append(("a learned capability given a budget", m(lambda d: CAPS["wai.video.int_hyper"].__setitem__("energy_budget", {})), None))
+    out.append(("a learned capability given a budget", m(lambda d: CAPS["wai.video.int_hyper"].__setitem__("energy_budget", {"class": "OnChipCounter"})), None))
+    out.append(("a power-efficient answer that is not smooth put first", m(lambda d: find(d, "choices", "smooth_before_power_efficient_but_not_smooth")["choices"][0].update(order=["hevc", "av1"], ranks=["first", "smooth"], chosen="hevc")), None))
+    out.append(("a rank renamed", m(lambda d: find(d, "choices", "hardware_first")["choices"][0]["ranks"].__setitem__(1, "classical")), None))
+    out.append(("a route of none ranked before a learned alternative", m(lambda d: find(d, "choices", "learned_when_nothing_else_routes")["choices"][0].update(order=["hevc", "int_hyper"], ranks=[None, "learned-without-budget"])), None))
     out.append(("a constraint bound moved", m(lambda d: find(d, "constraints", "bounds_inclusive")["sets"][0]["wai:frame_height"].update(minimum=1081)), None))
     out.append(("an unregistered parameter registered", m(lambda d: find(d, "constraints", "unregistered").update(outcome="unsatisfied", reason="constraints_unmet")), None))
     out.append(("a digest upper-cased", m(lambda d: find(d, "bindings", "canonical")["value"].update(digest="1F" * 32)), None))
diff --git a/wai/registry/capabilities.schema.json b/wai/registry/capabilities.schema.json
index 6b9900298..0659b912c 100644
--- a/wai/registry/capabilities.schema.json
+++ b/wai/registry/capabilities.schema.json
@@ -244,18 +244,23 @@
           },
           "energy_budget": {
             "type": "object",
-            "description": "A learned capability's decode energy, measured on a reference sink under OnChipCounter or CalibratedInstrument (SPEC §4, Energy budget). Absent for a capability whose registration states none; no registration states one in this revision.",
+            "description": "A learned capability's energy budget (energy-measurement §2.10): its decode figure measured on a reference sink under OnChipCounter, with its evidence, in a signed record named by its digest; platform-decode §5 reads class, joules_micro, per, relative_ppm, window_us and reference_sink. Absent for a capability whose registration states none; no registration states one in this revision.",
             "additionalProperties": false,
             "required": [
+              "class",
               "joules_micro",
               "per",
+              "relative_ppm",
+              "window_us",
+              "filtering",
+              "reference_sink",
               "resolution",
-              "energy_provenance",
-              "energy_uncertainty",
-              "sink",
               "record"
             ],
             "properties": {
+              "class": {
+                "const": "OnChipCounter"
+              },
               "joules_micro": {
                 "type": "integer",
                 "minimum": 1
@@ -263,9 +268,29 @@
               "per": {
                 "enum": [
                   "frame",
+                  "picture",
                   "second"
                 ]
               },
+              "relative_ppm": {
+                "type": "integer",
+                "minimum": 1
+              },
+              "window_us": {
+                "type": "integer",
+                "minimum": 1
+              },
+              "filtering": {
+                "enum": [
+                  "On",
+                  "Off",
+                  "Unknown"
+                ]
+              },
+              "reference_sink": {
+                "type": "string",
+                "minLength": 1
+              },
               "resolution": {
                 "oneOf": [
                   {
@@ -282,45 +307,6 @@
                   }
                 ]
               },
-              "energy_provenance": {
-                "enum": [
-                  "OnChipCounter",
-                  "CalibratedInstrument"
-                ]
-              },
-              "energy_uncertainty": {
-                "type": "object",
-                "additionalProperties": false,
-                "required": [
-                  "relative_ppm",
-                  "window_us"
-                ],
-                "properties": {
-                  "relative_ppm": {
-                    "type": "integer",
-                    "minimum": 1
-                  },
-                  "window_us": {
-                    "type": "integer",
-                    "minimum": 1
-                  }
-                }
-              },
-              "energy_counter_filtering": {
-                "enum": [
-                  "On",
-                  "Off",
-                  "Unknown"
-                ]
-              },
-              "energy_calibration_ref": {
-                "type": "string",
-                "minLength": 1
-              },
-              "sink": {
-                "type": "string",
-                "minLength": 1
-              },
               "record": {
                 "type": "string",
                 "pattern": "^[0-9a-f]{64}$"
diff --git a/wai/wai-rs/include/wai.h b/wai/wai-rs/include/wai.h
index 1e87ee8ba..7ae4fc8e3 100644
--- a/wai/wai-rs/include/wai.h
+++ b/wai/wai-rs/include/wai.h
@@ -463,11 +463,23 @@
  */
 #define TRITS_PER_BYTE 5
 
+/**
+ * The piece kind of a piece no source classifies: a floor-only component's (packaging
+ * §7.8).
+ */
+#define PIECE_KIND_NONE 6
+
 /**
  * Q32.32 fixed-point value.
  */
 typedef struct Fx Fx;
 
+/**
+ * The rules the order applies; [`Rules::DEFAULT`] is §4's. A test turns one off to show
+ * the vectors catch it.
+ */
+typedef struct Rules Rules;
+
 typedef struct wai_buffer_t {
   uint8_t *data;
   uintptr_t len;
@@ -523,6 +535,10 @@ typedef struct wai_decoded_t {
 
 
 
+
+
+
+
 #ifdef __cplusplus
 extern "C" {
 #endif // __cplusplus
diff --git a/wai/wai-rs/src/browser_sink.rs b/wai/wai-rs/src/browser_sink.rs
index d9589e05a..e66e3343f 100644
--- a/wai/wai-rs/src/browser_sink.rs
+++ b/wai/wai-rs/src/browser_sink.rs
@@ -631,16 +631,20 @@ pub fn route_report(report: &Value) -> Result, Reason> {
 // ─────────────────────────────── §4.7: alternatives ───────────────────────────────
 
 /// §4.7: the choice table of a report: for each `choice`, in order of first appearance,
-/// its alternatives' names in SPEC §4's energy order and the one the page decodes; or the
-/// report refused whole (`report_malformed`). A report whose objects carry no `choice`
-/// has an empty table.
+/// its alternatives in SPEC §4's energy order (platform-decode §4.2's ranks), the rank of
+/// each, and the one the page decodes; or the report refused whole (`report_malformed`). A
+/// report whose objects carry no `choice` has an empty table.
 ///
-/// The order: an alternative routed `ua` whose energy entry's `power_efficient` is `true`
-/// first; an alternative whose capability is learned and carries no energy budget
-/// ([`crate::energy_order`]) last; every other between; report order within each. The
-/// chosen alternative is the first in that order whose route is not `none`.
+/// An alternative routed `ua` ranks by the user agent's answer for its codec string, read
+/// as platform-decode §3 reads `decodingInfo()` (`supported`, `smooth`, `powerEfficient`;
+/// an answer of `null` is not a `true` one); one routed `host` or `wasm` has no platform
+/// answer and ranks `classical`, or `learned-without-budget` where its capability is learned
+/// with no energy budget ([`crate::energy_order`]); one routed `none` comes last, with no
+/// rank. Report order within a rank. The chosen alternative is the first in that order
+/// whose route is not `none`.
 pub fn choose_report(report: &Value) -> Result, Reason> {
-    use crate::energy_order::{DispatchPolicy, EnergyRank, PlatformAnswer};
+    use crate::energy_order::DispatchPolicy;
+    use crate::platform_decode::{Answers, DecodingInfo};
     let table = route_report(report)?;
     let objects = report["objects"].as_array().expect("read");
     let mut groups: Vec<(String, Vec)> = Vec::new();
@@ -651,24 +655,32 @@ pub fn choose_report(report: &Value) -> Result, Reason> {
             None => groups.push((c.to_string(), vec![i])),
         }
     }
+    // The rank of one alternative: `None` for a route of `none`.
+    let rank = |i: usize| -> Option {
+        let e = &table[i];
+        if e["route"] == "none" {
+            return None;
+        }
+        let capability = objects[i]["capability"].as_str().unwrap_or_default();
+        let answers = (e["route"] == "ua").then(|| {
+            let a = objects[i]["codec"].as_str().and_then(|c| report["ua"].get(c)).cloned().unwrap_or(Value::Null);
+            let yes = |k: &str| a.get(k) == Some(&Value::Bool(true));
+            Answers { decoding_info: Some(DecodingInfo { supported: yes("supported"), smooth: yes("smooth"), power_efficient: yes("power_efficient") }), ..Answers::default() }
+        });
+        let platform = move |_: &str| answers.clone();
+        DispatchPolicy::energy().with_platform(&platform).rank(capability).ok()
+    };
     Ok(groups
         .into_iter()
         .map(|(choice, members)| {
-            let rank = |i: usize| {
-                let e = &table[i];
-                let capability = objects[i]["capability"].as_str().unwrap_or_default();
-                // The user agent's answer, for this object's route alone: only a `ua` route
-                // states one (§6), and only `true` puts it first.
-                let answered = e["route"] == "ua" && e["energy"]["power_efficient"] == Value::Bool(true);
-                let platform = move |_: &str| answered.then_some(PlatformAnswer { supported: true, power_efficient: true });
-                DispatchPolicy::energy().with_platform(&platform).rank(capability)
-            };
-            let mut ordered: Vec<(EnergyRank, usize)> = members.iter().map(|&i| (rank(i), i)).collect();
-            ordered.sort();
-            let chosen = ordered.iter().map(|&(_, i)| i).find(|&i| table[i]["route"] != "none");
+            let mut ordered: Vec<(u8, usize, Option)> =
+                members.iter().map(|&i| { let r = rank(i); (r.map_or(u8::MAX, |r| r as u8), i, r) }).collect();
+            ordered.sort_by_key(|&(k, i, _)| (k, i));
+            let chosen = ordered.iter().find(|(_, _, r)| r.is_some()).map(|&(_, i, _)| i);
             json!({
                 "choice": choice,
-                "order": ordered.iter().map(|&(_, i)| objects[i]["name"].clone()).collect::>(),
+                "order": ordered.iter().map(|&(_, i, _)| objects[i]["name"].clone()).collect::>(),
+                "ranks": ordered.iter().map(|(_, _, r)| r.map_or(Value::Null, |r| json!(r.as_str()))).collect::>(),
                 "chosen": chosen.map(|i| objects[i]["name"].clone()).unwrap_or(Value::Null),
                 "reason": if chosen.is_some() { Value::Null } else { json!(Reason::NoAlternative.code()) },
             })
diff --git a/wai/wai-rs/src/browser_sink/corpus.rs b/wai/wai-rs/src/browser_sink/corpus.rs
index e2da6558f..c24e71070 100644
--- a/wai/wai-rs/src/browser_sink/corpus.rs
+++ b/wai/wai-rs/src/browser_sink/corpus.rs
@@ -457,13 +457,14 @@ fn choice_cases() -> Vec {
         "vp09.00.10.08": answer(true, Some(true), Some(false), "not_run"),
         "avc1.64001f": answer(true, Some(true), None, "not_run"),
         "hvc1.1.6.L93.B0": answer(false, None, None, "not_run"),
+        "hev1.1.6.L63.B0": answer(true, Some(false), Some(true), "not_run"),
     });
     let wasm = json!(["wai.video.int_motion", "wai.video.int_hyper", "wai.neural.int_hyper"]);
     let rep = |objects: Vec| report(ua.clone(), json!({}), wasm.clone(), json!({}), json!({}), objects);
     vec![
         (
             "hardware_first",
-            "one clip as AV1 the user agent answers supported and power-efficient, as the learned int_hyper on the wasm route, and as VP9 answered supported and not power-efficient: AV1 first, VP9, the learned one last; AV1 chosen",
+            "one clip as AV1 the user agent answers supported, smooth and power-efficient (first), as the learned int_hyper on the wasm route (learned without a budget), and as VP9 answered supported and smooth, not power-efficient (smooth): AV1, VP9, the learned one last; AV1 chosen",
             rep(vec![
                 alt("int_hyper", "wai.video.int_hyper", None, "clip"),
                 alt("vp9", "wai.video.vp9", Some("vp09.00.10.08"), "clip"),
@@ -482,22 +483,35 @@ fn choice_cases() -> Vec {
         ),
         (
             "learned_when_nothing_else_routes",
-            "HEVC the user agent answers unsupported, and the learned int_hyper on the wasm route: the order keeps HEVC first, but it routes none, so the learned alternative is chosen",
+            "HEVC the user agent answers unsupported, and the learned int_hyper on the wasm route: HEVC routes none and comes last with no rank, so the learned alternative is chosen",
             rep(vec![
                 alt("int_hyper", "wai.video.int_hyper", None, "clip"),
                 alt("hevc", "wai.video.hevc", Some("hvc1.1.6.L93.B0"), "clip"),
             ]),
-            vec![("clip", vec!["hevc", "int_hyper"], Some("int_hyper"))],
+            vec![("clip", vec!["int_hyper", "hevc"], Some("int_hyper"))],
         ),
         (
             "power_efficient_not_stated",
-            "AVC answered supported with no powerEfficient answer, and AV1 answered power-efficient: the user agent's power-efficient answer first; no answer is not a power-efficient one",
+            "AVC answered supported and smooth with no powerEfficient answer (smooth), and AV1 answered supported, smooth and power-efficient (first): no answer is not a power-efficient one",
             rep(vec![
                 alt("avc", "wai.video.avc", Some("avc1.64001f"), "clip"),
                 alt("av1", "wai.video.av1", Some("av01.0.04M.08"), "clip"),
             ]),
             vec![("clip", vec!["av1", "avc"], Some("av1"))],
         ),
+        (
+            "smooth_before_power_efficient_but_not_smooth",
+            "HEVC answered supported and power-efficient but not smooth (classical: it drops frames), and AV1 answered supported and smooth (smooth): AV1 first",
+            {
+                let mut ua2 = ua.clone();
+                ua2["av01.0.04M.08"] = answer(true, Some(true), Some(false), "not_run");
+                report(ua2, json!({}), wasm.clone(), json!({}), json!({}), vec![
+                    alt("hevc", "wai.video.hevc", Some("hev1.1.6.L63.B0"), "clip"),
+                    alt("av1", "wai.video.av1", Some("av01.0.04M.08"), "clip"),
+                ])
+            },
+            vec![("clip", vec!["av1", "hevc"], Some("av1"))],
+        ),
         (
             "two_choices_and_one_alone",
             "two contents, each with its alternatives, and an object that carries no choice: one table entry per choice, in order of first appearance, and the lone object in none",
diff --git a/wai/wai-rs/src/codecs/registry.rs b/wai/wai-rs/src/codecs/registry.rs
index 75256e200..42f4b2cf2 100644
--- a/wai/wai-rs/src/codecs/registry.rs
+++ b/wai/wai-rs/src/codecs/registry.rs
@@ -1072,36 +1072,29 @@ fn nullable_enum(labels: &[&str]) -> serde_json::Value {
 }
 
 /// The schema of a capability's `ops` member (`extensions/integer-operators.md` §11).
-/// The registry export's `energy_budget` (SPEC §4, *Energy budget*;
-/// `energy_order::EnergyBudget::to_json`).
+/// The registry export's `energy_budget`: the budget record of energy-measurement §2.10
+/// (`energy_order::BudgetRecord::to_json`), whose first six members platform-decode §5
+/// reads.
 fn energy_budget_schema() -> serde_json::Value {
     serde_json::json!({
         "type": "object",
-        "description": "A learned capability's decode energy, measured on a reference sink under OnChipCounter or CalibratedInstrument (SPEC §4, Energy budget). Absent for a capability whose registration states none; no registration states one in this revision.",
+        "description": "A learned capability's energy budget (energy-measurement §2.10): its decode figure measured on a reference sink under OnChipCounter, with its evidence, in a signed record named by its digest; platform-decode §5 reads class, joules_micro, per, relative_ppm, window_us and reference_sink. Absent for a capability whose registration states none; no registration states one in this revision.",
         "additionalProperties": false,
-        "required": ["joules_micro", "per", "resolution", "energy_provenance", "energy_uncertainty", "sink", "record"],
+        "required": ["class", "joules_micro", "per", "relative_ppm", "window_us", "filtering", "reference_sink", "resolution", "record"],
         "properties": {
+            "class": { "const": "OnChipCounter" },
             "joules_micro": { "type": "integer", "minimum": 1 },
-            "per": { "enum": ["frame", "second"] },
+            "per": { "enum": ["frame", "picture", "second"] },
+            "relative_ppm": { "type": "integer", "minimum": 1 },
+            "window_us": { "type": "integer", "minimum": 1 },
+            "filtering": { "enum": ["On", "Off", "Unknown"] },
+            "reference_sink": { "type": "string", "minLength": 1 },
             "resolution": {
                 "oneOf": [
                     { "type": "null" },
                     { "type": "array", "minItems": 2, "maxItems": 2, "items": { "type": "integer", "minimum": 1 } }
                 ]
             },
-            "energy_provenance": { "enum": ["OnChipCounter", "CalibratedInstrument"] },
-            "energy_uncertainty": {
-                "type": "object",
-                "additionalProperties": false,
-                "required": ["relative_ppm", "window_us"],
-                "properties": {
-                    "relative_ppm": { "type": "integer", "minimum": 1 },
-                    "window_us": { "type": "integer", "minimum": 1 }
-                }
-            },
-            "energy_counter_filtering": { "enum": ["On", "Off", "Unknown"] },
-            "energy_calibration_ref": { "type": "string", "minLength": 1 },
-            "sink": { "type": "string", "minLength": 1 },
             "record": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
         }
     })
diff --git a/wai/wai-rs/src/container.rs b/wai/wai-rs/src/container.rs
index 8fc3eadd6..16f54d0b0 100644
--- a/wai/wai-rs/src/container.rs
+++ b/wai/wai-rs/src/container.rs
@@ -26,7 +26,7 @@
 //! code that builds them.
 
 use serde::{Deserialize, Serialize};
-pub use crate::energy_order::{DispatchPolicy, PlatformAnswer};
+pub use crate::energy_order::DispatchPolicy;
 use serde_json::{Map, Value};
 use std::fs;
 use std::path::Path;
@@ -1384,9 +1384,11 @@ impl Wai {
         self.dispatch_with(&DispatchPolicy::energy(), advertises, verify)
     }
 
-    /// [`Self::dispatch_verified`] in the order `policy` gives (SPEC §4, *Energy order*):
-    /// the fallback is tried first when it ranks before the capability, and the
-    /// capability first otherwise. The order changes which capability decodes and
+    /// [`Self::dispatch_verified`] in the order `policy` gives (SPEC §4, *Energy order*;
+    /// platform-decode §4.2's ranks): the fallback is tried first when it ranks before the
+    /// capability, and the capability first otherwise; a capability the platform answers
+    /// it cannot decode, with no decoder of the sink's own, is not advertised for the
+    /// envelope (platform-decode §3). The order changes which capability decodes and
     /// nothing else: an inert envelope reports the reason kept for the capability, else
     /// the one kept for the fallback, whichever was tried first.
     pub fn dispatch_with(
@@ -1409,13 +1411,17 @@ impl Wai {
         }
         // (is the capability, not the fallback; the string), in the order tried.
         let mut tries: Vec<(bool, &str)> = [Some((true, primary)), self.fallback().map(|f| (false, f))].into_iter().flatten().collect();
-        if tries.len() == 2 && policy.rank(tries[1].1) < policy.rank(tries[0].1) {
+        let ranks: Vec> = tries.iter().map(|(_, c)| policy.rank(c).ok()).collect();
+        if let [Some(cap), Some(fb)] = ranks[..]
+            && fb < cap
+        {
             tries.swap(0, 1);
         }
+        let refused: Vec<&str> = tries.iter().zip(&ranks).filter(|(_, r)| r.is_none()).map(|((_, c), _)| *c).collect();
         // The reason kept at step 3 (the capability), else at step 5 (the fallback).
         let mut kept: [Option; 2] = [None, None];
         for (is_primary, cap) in tries {
-            if !crate::codecs::is_dispatchable(cap) || !advertises(cap) {
+            if !crate::codecs::is_dispatchable(cap) || !advertises(cap) || refused.contains(&cap) {
                 continue;
             }
             match self.prior() {
@@ -3061,8 +3067,8 @@ impl WaiMulti {
         advertises: impl Fn(&str) -> bool,
         verify: impl FnMut(&str, &Prior) -> Result,
     ) -> Result, Vec<(usize, Skip)>> {
-        let order = energy_order(&self.manifest, policy);
-        self.pick_in(&order, |_, m| if advertises(&m.capability) { Ok(()) } else { Err(Skip::NotEligible) }, verify)
+        let (order, refused) = energy_walk(&self.manifest, policy);
+        self.pick_in(&order, |i, m| if advertises(&m.capability) && !refused.contains(&i) { Ok(()) } else { Err(Skip::NotEligible) }, verify)
     }
 
     /// [`Self::pick`] at a sink that advertises every capability — the first entry
@@ -3228,14 +3234,21 @@ impl WaiMulti {
 /// selectable is reordered the walk is table order. Under
 /// [`DispatchPolicy::manifest_order`] it is table order.
 pub fn energy_order(manifest: &ManifestV2, policy: &DispatchPolicy<'_>) -> Vec {
+    energy_walk(manifest, policy).0
+}
+
+/// [`energy_order`], and the entries in it the platform answered it cannot decode with no
+/// decoder of the sink's own (platform-decode §3), which come after every other selectable
+/// entry and are skipped as `missing_capability`.
+pub fn energy_walk(manifest: &ManifestV2, policy: &DispatchPolicy<'_>) -> (Vec, Vec) {
     let entries = &manifest.renditions;
     let slots: Vec = (0..entries.len()).filter(|&i| entries[i].is_selectable()).collect();
-    let ranked = policy.order(slots.iter().map(|&i| entries[i].capability.as_str()));
+    let (ranked, refused) = policy.order(slots.iter().map(|&i| entries[i].capability.as_str()));
     let mut out: Vec = (0..entries.len()).collect();
-    for (slot, r) in slots.iter().zip(ranked) {
-        out[*slot] = slots[r];
+    for (slot, r) in slots.iter().zip(ranked.iter().chain(refused.iter())) {
+        out[*slot] = slots[*r];
     }
-    out
+    (out, refused.iter().map(|&r| slots[r]).collect())
 }
 
 /// SPEC §7.1 selection over a `WAI2` manifest's entries alone, with no payload in
@@ -4053,14 +4066,18 @@ pub(crate) mod tests {
         assert_eq!(table.meta.capability, "wai.neural.encodec32");
     }
 
-    /// SPEC §4, *Energy order*, for a `WAI1`: a learned capability with no energy budget
-    /// is tried after a fallback that is not learned; with a budget, or under the
-    /// manifest's order, it keeps its place; the platform's power-efficient answer for
-    /// the fallback puts the fallback first even then; and the order changes no reason.
+    /// SPEC §4, *Energy order*, for a `WAI1`, by platform-decode §4.2's ranks: a learned
+    /// capability with no energy budget is tried after a classical fallback the sink can
+    /// decode; with a qualifying budget it ranks first and keeps its place, as it does under
+    /// the manifest's order; a classical fallback the platform marks supported, smooth and
+    /// power-efficient shares the first rank with it; a capability the platform refuses,
+    /// with no decoder of the sink's own, is not advertised; and the order changes no
+    /// reason.
     #[test]
     fn wai1_dispatch_tries_a_classical_fallback_before_an_unbudgeted_learned_capability() {
-        use crate::energy_order::{Budgets, BudgetUnit, EnergyBudget};
+        use crate::energy_order::{BudgetRecord, BudgetUnit, Budgets};
         use crate::energy_class::{CounterFiltering, EnergyProvenance, Uncertainty};
+        use crate::platform_decode::{Answers, DecodingInfo};
         let env = |cap: &str, fb: Option<&str>| {
             let mut req = ModelRequirement::new(cap);
             req.fallback = fb.map(String::from);
@@ -4073,30 +4090,34 @@ pub(crate) mod tests {
         assert_eq!(dispatched(&w, |c| c == learned), Some(learned), "the learned capability still decodes where the fallback is not advertised");
         assert_eq!(w.dispatch_with(&DispatchPolicy::manifest_order(), all, no_parameter_sets()).unwrap().capability, learned);
         let chip = EnergyProvenance::on_chip_counter(Uncertainty { relative_ppm: 25_000, window_us: 7_000_000 }, CounterFiltering::Unknown).unwrap();
-        let budget = EnergyBudget { joules_micro: 41_250, per: BudgetUnit::Frame, resolution: Some((1920, 1080)), class: chip, sink: "a reference sink".into(), record: "ab".repeat(32) };
-        let held = Budgets::registry().with_table(&serde_json::json!({ learned: budget.to_json() })).unwrap();
+        let budget = |_: ()| BudgetRecord { joules_micro: 41_250, per: BudgetUnit::Frame, class: chip.clone(), resolution: Some((1920, 1080)), reference_sink: "a reference sink".into(), record: "ab".repeat(32) };
+        let held = Budgets::registry().with_table(&serde_json::json!({ learned: budget(()).to_json(), "wai.neural.int_synth": budget(()).to_json() })).unwrap();
         assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_budgets(&held), all, no_parameter_sets()).unwrap().capability, learned, "a budget keeps the learned capability's place");
-        let hw = |c: &str| (c == classical).then_some(PlatformAnswer { supported: true, power_efficient: true });
-        assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_budgets(&held).with_platform(&hw), all, no_parameter_sets()).unwrap().capability, classical, "the hardware decode path first");
+        let pe = |c: &str| (c == classical).then_some(Answers { decoding_info: Some(DecodingInfo { supported: true, smooth: true, power_efficient: true }), ..Answers::default() });
+        assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_budgets(&held).with_platform(&pe), all, no_parameter_sets()).unwrap().capability, learned, "first rank both: the manifest's order");
+        assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_platform(&pe), all, no_parameter_sets()).unwrap().capability, classical, "the power-efficient decode first");
+        let no = |c: &str| (c == classical).then_some(Answers { decoding_info: Some(DecodingInfo { supported: false, smooth: false, power_efficient: false }), ..Answers::default() });
+        assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_platform(&no), all, no_parameter_sets()).unwrap().capability, learned, "a fallback the platform cannot decode is not advertised");
         // Two classical capabilities, or a classical capability over a learned fallback,
-        // keep the manifest's order.
+        // keep the manifest's order; so do two learned ones, and a string this revision
+        // does not register, which ranks as learned.
         assert_eq!(dispatched(&env("wai.image.jxl", Some("wai.image.png")), all), Some("wai.image.jxl"));
         assert_eq!(dispatched(&env(classical, Some(learned)), all), Some(classical));
         assert_eq!(dispatched(&env(learned, Some("wai.image.jpegai")), all), Some(learned), "two learned capabilities keep their order");
+        assert_eq!(dispatched(&env("wai.future.codec", Some("wai.image.png")), all), Some("wai.image.png"), "an unregistered capability ranks as learned");
         // The reason an inert envelope reports is still step 3's before step 5's, whichever
-        // was tried first.
+        // was tried first: a fallback with a budget is tried before a capability without.
         let pin = Prior::new("m", MODEL_SHA, "int");
         let mut c = Conditioning::new("int");
         c.prior = Some(pin);
         let mut req = ModelRequirement::new("wai.neural.int_mlicpp");
-        // A string this revision does not register: not learned, and a pin applies to it.
-        req.fallback = Some("wai.future.codec".into());
+        req.fallback = Some("wai.neural.int_synth".into());
         let pinned = Wai::new(Manifest::new("image", "replicate", req, c), vec![]);
         let mut seen = Vec::new();
         let e = pinned
-            .dispatch_verified(all, |cap, _| { seen.push(cap.to_string()); Err::<(), _>(PinRefusal::NotHeld { capability: cap.into() }) })
+            .dispatch_with(&DispatchPolicy::energy().with_budgets(&held), all, |cap, _| { seen.push(cap.to_string()); Err::<(), _>(PinRefusal::NotHeld { capability: cap.into() }) })
             .unwrap_err();
-        assert_eq!(seen, ["wai.future.codec", "wai.neural.int_mlicpp"], "the fallback that is not learned tried first");
+        assert_eq!(seen, ["wai.neural.int_synth", "wai.neural.int_mlicpp"], "the budgeted fallback tried first");
         assert_eq!(e, Inert::PinRefused { capability: "wai.neural.int_mlicpp".into(), refusal: PinRefusal::NotHeld { capability: "wai.neural.int_mlicpp".into() } });
     }
 
@@ -4125,8 +4146,18 @@ pub(crate) mod tests {
         assert_eq!(energy_order(&alone.manifest, &DispatchPolicy::energy()), vec![0, 1], "nothing selectable to reorder: table order");
         assert_eq!(m.pick(|_| true, accept).unwrap().meta.capability, "wai.image.jxl");
         assert_eq!(m.pick(|c| c.starts_with("wai.neural") || c == "wai.image.jpegai", accept).unwrap().meta.capability, "wai.neural.elic");
-        let hw = |c: &str| (c == "wai.image.png").then_some(PlatformAnswer { supported: true, power_efficient: true });
-        assert_eq!(m.pick_with(&DispatchPolicy::energy().with_platform(&hw), |_| true, accept).unwrap().meta.capability, "wai.image.png");
+        use crate::platform_decode::{Answers, DecodingInfo};
+        let ans = |c: &str| match c {
+            "wai.image.png" => Some(Answers { decoding_info: Some(DecodingInfo { supported: true, smooth: true, power_efficient: true }), ..Answers::default() }),
+            "wai.image.jxl" => Some(Answers { decoding_info: Some(DecodingInfo { supported: false, smooth: false, power_efficient: false }), ..Answers::default() }),
+            _ => None,
+        };
+        let p = m.pick_with(&DispatchPolicy::energy().with_platform(&ans), |_| true, accept).unwrap();
+        assert_eq!(p.meta.capability, "wai.image.png", "the power-efficient decode first");
+        // The entry the platform cannot decode is walked after the learned ones and skipped.
+        assert_eq!(energy_walk(&m.manifest, &DispatchPolicy::energy().with_platform(&ans)), (vec![3, 0, 2, 1], vec![1]));
+        let e = m.pick_with(&DispatchPolicy::energy().with_platform(&ans), |c| c == "wai.image.jxl", accept).unwrap_err();
+        assert_eq!(e.iter().find(|(i, _)| *i == 1).map(|(_, k)| k.code()), Some("missing_capability"));
     }
 
     /// SPEC §5, *Candidate capabilities*: a candidate is never dispatched, picked
@@ -4186,8 +4217,12 @@ pub(crate) mod tests {
         assert_eq!(dispatched(&v1("wai.pc.gpcc", None), all), Some("wai.pc.gpcc"));
         assert_eq!(v1("wai.pc.gpcc", None).check_candidates(), Ok(()));
         // A string this revision does not register is the sink's to advertise
-        // (SPEC §4, §8): taken when advertised, the fallback otherwise.
-        assert_eq!(dispatched(&v1("wai.image.nope", Some("wai.image.png")), all), Some("wai.image.nope"));
+        // (SPEC §4, §8): taken when advertised, the fallback otherwise. It ranks as learned
+        // (platform-decode §4.1), so by default a classical fallback the sink advertises
+        // is tried first, and under the manifest's order the string itself.
+        assert_eq!(dispatched(&v1("wai.image.nope", Some("wai.image.png")), all), Some("wai.image.png"));
+        assert_eq!(v1("wai.image.nope", Some("wai.image.png")).dispatch_with(&DispatchPolicy::manifest_order(), all, no_parameter_sets()).unwrap().capability, "wai.image.nope");
+        assert_eq!(dispatched(&v1("wai.image.nope", Some("wai.image.png")), |c| c == "wai.image.nope"), Some("wai.image.nope"));
         assert_eq!(dispatched(&v1("wai.image.nope", Some("wai.image.png")), |c| c == "wai.image.png"),
                    Some("wai.image.png"));
         // A record or derivation names no payload: never taken, whatever is advertised.
diff --git a/wai/wai-rs/src/energy_order.rs b/wai/wai-rs/src/energy_order.rs
index d6541cda9..b46a0947c 100644
--- a/wai/wai-rs/src/energy_order.rs
+++ b/wai/wai-rs/src/energy_order.rs
@@ -1,28 +1,29 @@
-//! The energy order of dispatch (SPEC §4, *Energy order*; §7.1 step 2): which of the
-//! capabilities an envelope offers a sink tries first when it applies no deployer policy
-//! of its own.
+//! The energy order of dispatch (SPEC §4, *Energy order*; §7.1 step 2): the order a sink
+//! tries the capabilities an envelope offers in when its deployer configures none. It is
+//! [`crate::platform_decode`]'s default order (`extensions/platform-decode.md` §4), applied
+//! by the reference dispatcher by default rather than only on request:
 //!
-//! - A decode the sink's platform answers is **supported and power-efficient** (a page's
-//!   Media Capabilities `decodingInfo`, a native platform's hardware-decode query) comes
-//!   first: on the platforms that answer so, that is the hardware decode path.
-//! - A **learned** capability (replicate class `NeuralIntegerExact`, `NeuralEntropyExact`,
-//!   `NeuralFloat` or `Behavioral`) that carries no [`EnergyBudget`] comes after every
-//!   other capability, so it is never tried above a classical fallback by default.
-//! - Everything else keeps the envelope's order, and so does every tie.
+//! - platform-decode §4.2's ranks, from what the sink's platform answers about a decode
+//!   (Media Capabilities, WebCodecs; [`crate::platform_decode::Answers`]) and from the
+//!   energy budgets of learned entries: `first` (classical decode the platform marks
+//!   supported, smooth and power-efficient, and learned decode with a qualifying budget),
+//!   `smooth`, `classical` (any other classical decode the sink can make, a sink with no
+//!   platform to ask included), and `learned-without-budget` last;
+//! - the envelope's order within a rank.
 //!
-//! The order changes which capability decodes, never a verdict or a refusal: a sink that
-//! cannot take the first capability in it goes on to the next, exactly as SPEC §4 and
-//! §7.1 walk them.
+//! So a learned capability with no qualifying budget is never tried above a classical
+//! fallback the sink can decode, and a decode the platform answers power-efficient comes
+//! before a software or a learned one. The order changes which capability decodes, never a
+//! verdict or a refusal.
 //!
-//! An [`EnergyBudget`] is the one thing that lifts a learned capability back to its place:
-//! a decode figure per frame or per second of content, measured on a named reference sink
-//! under `OnChipCounter` or `CalibratedInstrument` with its evidence
-//! (`extensions/energy-measurement.md` §2.3), in a record named by its digest. A budget is
-//! a profile defined after the hardware class was refined, so it refuses `HwShunt`
-//! (energy-measurement §2.6, *New profiles*). A registration may state one (REGISTRY.md,
-//! the registry export's `energy_budget`), and a deployer may hold more from a published
-//! table it pins ([`Budgets::with_table`]). No registration states one in this revision,
-//! so the default takes every classical fallback before every learned capability.
+//! What this module adds to platform-decode is where the order is applied
+//! ([`DispatchPolicy`], taken by `Wai::dispatch_with` and `WaiMulti::pick_with`, and the
+//! default of `Wai::dispatch_verified` and `WaiMulti::pick`), and the energy budget as
+//! `extensions/energy-measurement.md` §2.10 defines it ([`BudgetRecord`]): the record a
+//! registration states (REGISTRY.md, the registry export's `energy_budget`) or a deployer
+//! pins in a table ([`Budgets::with_table`]), checked whole, of which platform-decode §5
+//! reads its members (`class`, `joules_micro`, `per`, `relative_ppm`, `window_us`,
+//! `reference_sink`). No registration states one in this revision.
 //!
 //! Pure std plus `serde_json`, compiled unconditionally, so the browser sink's wasm build
 //! applies the same order.
@@ -31,15 +32,17 @@ use std::collections::BTreeMap;
 
 use serde_json::{json, Value};
 
-use crate::codecs::{self, ReplicateClass};
-use crate::energy_class::{self, AcquisitionError, EnergyProvenance};
+use crate::container::Skip;
+use crate::energy_class::{self, AcquisitionError, CounterFiltering, EnergyProvenance, Uncertainty};
+use crate::platform_decode::{self as pd, Answers, Rank, Rules};
 
-/// What a budget's figure is per.
+pub use crate::platform_decode::is_learned;
+
+/// What a budget's figure is per (platform-decode §5's units).
 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
 pub enum BudgetUnit {
-    /// One decoded frame (an image is one frame).
     Frame,
-    /// One second of decoded content.
+    Picture,
     ContentSecond,
 }
 
@@ -47,49 +50,55 @@ impl BudgetUnit {
     pub const fn token(self) -> &'static str {
         match self {
             BudgetUnit::Frame => "frame",
+            BudgetUnit::Picture => "picture",
             BudgetUnit::ContentSecond => "second",
         }
     }
+
+    fn read(s: &str) -> Option {
+        [BudgetUnit::Frame, BudgetUnit::Picture, BudgetUnit::ContentSecond].into_iter().find(|u| u.token() == s)
+    }
 }
 
-/// A learned capability's declared decode energy, backed by a hardware-class figure on a
-/// reference sink (SPEC §4, *Energy budget*).
+/// An energy budget as energy-measurement §2.10 defines it: a learned capability's decode
+/// figure, `OnChipCounter` with its evidence, measured on a named reference sink, in a
+/// record named by its digest.
 #[derive(Clone, Debug, PartialEq, Eq)]
-pub struct EnergyBudget {
+pub struct BudgetRecord {
     /// The figure, in microjoules per [`Self::per`].
     pub joules_micro: u64,
     pub per: BudgetUnit,
+    /// `OnChipCounter`, with its declared uncertainty and filtering state.
+    pub class: EnergyProvenance,
     /// The decoded resolution the figure was measured at, width × height; `None` for
     /// content without one (audio).
     pub resolution: Option<(u32, u32)>,
-    /// `OnChipCounter` or `CalibratedInstrument`, with its evidence.
-    pub class: EnergyProvenance,
     /// The reference sink the figure was measured on.
-    pub sink: String,
+    pub reference_sink: String,
     /// SHA-256, 64 lowercase hexadecimal digits, of the signed record the figure is in.
     pub record: String,
 }
 
-/// Why a budget does not read, or does not count.
+/// Why a budget record does not read or does not check (energy-measurement §2.10).
 #[derive(Clone, Debug, PartialEq, Eq)]
 pub enum BudgetError {
     /// A member missing or of the wrong form; the member named.
     Malformed(&'static str),
-    /// The class is `ModelBased` or `Estimator`: a budget rests on a hardware-class
-    /// figure, and a model or a constant does not back one.
-    NotHardware,
+    /// The class is not `OnChipCounter` (platform-decode §5): a model, a constant or a
+    /// calibrated instrument's figure is not the budget this revision reads.
+    NotCounter,
     /// The class or the figure breaks energy-measurement §2.6 (*New profiles*), §2.3 or
-    /// §2's coupling: `HwShunt`, a class beside zero, a refined class without its
-    /// evidence, or a declaration below the resolution floor.
+    /// §2's coupling: `HwShunt` (`LegacyInNewProfile`), a class beside zero, a refined class
+    /// without its evidence, or a declaration below the resolution floor.
     Class(AcquisitionError),
 }
 
 impl BudgetError {
-    /// The reason code SPEC §4 gives this refusal.
+    /// energy-measurement §2.10's reason for this refusal.
     pub fn code(&self) -> &'static str {
         match self {
             BudgetError::Malformed(_) => "budget_malformed",
-            BudgetError::NotHardware => "budget_not_hardware",
+            BudgetError::NotCounter => "budget_not_counter",
             BudgetError::Class(AcquisitionError::LegacyInNewProfile) => "budget_legacy_class",
             BudgetError::Class(_) => "budget_class_invalid",
         }
@@ -100,7 +109,7 @@ impl std::fmt::Display for BudgetError {
     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
         match self {
             BudgetError::Malformed(m) => write!(f, "budget_malformed: {m}"),
-            BudgetError::NotHardware => f.write_str("budget_not_hardware: a budget rests on an OnChipCounter or CalibratedInstrument figure"),
+            BudgetError::NotCounter => f.write_str("budget_not_counter: a budget is an OnChipCounter figure"),
             BudgetError::Class(e) => write!(f, "{}: {e}", self.code()),
         }
     }
@@ -112,17 +121,25 @@ fn is_hex64(s: &str) -> bool {
     s.len() == 64 && s.bytes().all(|b| b.is_ascii_digit() || (b'a'..=b'f').contains(&b))
 }
 
-impl EnergyBudget {
-    /// SPEC §4, *Energy budget*: the class is a hardware class that passes
-    /// [`energy_class::check_new_profile`] beside the figure; the sink is named; the
-    /// record is a SHA-256 digest; a resolution is two positive integers.
+/// The record's members, energy-measurement §2.10's table: platform-decode §5's six and
+/// three more.
+const MEMBERS: [&str; 9] = ["class", "joules_micro", "per", "relative_ppm", "window_us", "filtering", "reference_sink", "resolution", "record"];
+
+impl BudgetRecord {
+    /// energy-measurement §2.10: `HwShunt` refused as in every new profile, then the class
+    /// `OnChipCounter` with its evidence beside a figure that meets the resolution floor
+    /// ([`energy_class::check_new_profile`]); the reference sink named; the record a SHA-256
+    /// digest; a resolution two positive integers.
     pub fn check(&self) -> Result<(), BudgetError> {
-        energy_class::check_new_profile(self.joules_micro, &self.class).map_err(BudgetError::Class)?;
-        if !matches!(self.class, EnergyProvenance::OnChipCounter { .. } | EnergyProvenance::CalibratedInstrument { .. }) {
-            return Err(BudgetError::NotHardware);
+        if self.class.is_legacy() {
+            return Err(BudgetError::Class(AcquisitionError::LegacyInNewProfile));
         }
-        if self.sink.trim().is_empty() {
-            return Err(BudgetError::Malformed("sink"));
+        if !matches!(self.class, EnergyProvenance::OnChipCounter { .. }) {
+            return Err(BudgetError::NotCounter);
+        }
+        energy_class::check_new_profile(self.joules_micro, &self.class).map_err(BudgetError::Class)?;
+        if self.reference_sink.trim().is_empty() {
+            return Err(BudgetError::Malformed("reference_sink"));
         }
         if !is_hex64(&self.record) {
             return Err(BudgetError::Malformed("record"));
@@ -133,39 +150,47 @@ impl EnergyBudget {
         Ok(())
     }
 
-    /// The budget as JSON: `joules_micro`, `per`, `resolution` (`[w, h]` or `null`), the
-    /// class in energy-measurement §2.7's snake_case fields, `sink` and `record`.
+    /// The record's JSON form (energy-measurement §2.10).
     pub fn to_json(&self) -> Value {
-        let mut o = serde_json::Map::new();
-        o.insert("joules_micro".into(), json!(self.joules_micro));
-        o.insert("per".into(), json!(self.per.token()));
-        o.insert("resolution".into(), self.resolution.map(|(w, h)| json!([w, h])).unwrap_or(Value::Null));
-        for (k, v) in energy_class::json_fields(&self.class) {
-            o.insert(k.into(), v);
-        }
-        o.insert("sink".into(), json!(self.sink));
-        o.insert("record".into(), json!(self.record));
-        Value::Object(o)
+        let (ppm, window, filtering) = match &self.class {
+            EnergyProvenance::OnChipCounter { uncertainty, filtering } => (uncertainty.relative_ppm, uncertainty.window_us, filtering.label()),
+            _ => (0, 0, "Unknown"),
+        };
+        json!({
+            "class": self.class.label(),
+            "joules_micro": self.joules_micro,
+            "per": self.per.token(),
+            "relative_ppm": ppm,
+            "window_us": window,
+            "filtering": filtering,
+            "reference_sink": self.reference_sink,
+            "resolution": self.resolution.map(|(w, h)| json!([w, h])).unwrap_or(Value::Null),
+            "record": self.record,
+        })
     }
 
-    /// Read a budget from [`Self::to_json`]'s form and [`Self::check`] it. A member this
-    /// form does not define is refused: a budget is a statement about a measurement, and
-    /// a member nobody reads could change what it states.
-    pub fn from_json(v: &Value) -> Result {
-        const MEMBERS: [&str; 9] = [
-            "joules_micro", "per", "resolution", energy_class::JSON_CLASS, energy_class::JSON_UNCERTAINTY,
-            energy_class::JSON_FILTERING, energy_class::JSON_CALIBRATION_REF, "sink", "record",
-        ];
+    /// Read a record from [`Self::to_json`]'s form and [`Self::check`] it. A member the form
+    /// does not define is refused: a budget states a measurement, and a member nobody
+    /// reads could change what it states.
+    pub fn from_json(v: &Value) -> Result {
         let o = v.as_object().ok_or(BudgetError::Malformed("not an object"))?;
         if o.keys().any(|k| !MEMBERS.contains(&k.as_str())) {
             return Err(BudgetError::Malformed("a member this form does not define"));
         }
-        let joules_micro = o.get("joules_micro").and_then(Value::as_u64).ok_or(BudgetError::Malformed("joules_micro"))?;
-        let per = match o.get("per").and_then(Value::as_str) {
-            Some("frame") => BudgetUnit::Frame,
-            Some("second") => BudgetUnit::ContentSecond,
-            _ => return Err(BudgetError::Malformed("per")),
-        };
+        let text = |k: &'static str| o.get(k).and_then(Value::as_str).ok_or(BudgetError::Malformed(k));
+        let int = |k: &'static str| o.get(k).and_then(Value::as_u64).ok_or(BudgetError::Malformed(k));
+        let label = text("class")?;
+        if label == "HwShunt" {
+            return Err(BudgetError::Class(AcquisitionError::LegacyInNewProfile));
+        }
+        if label != "OnChipCounter" {
+            return Err(if EnergyProvenance::from_label(label).is_ok() || label == "CalibratedInstrument" { BudgetError::NotCounter } else { BudgetError::Malformed("class") });
+        }
+        let ppm = u32::try_from(int("relative_ppm")?).map_err(|_| BudgetError::Malformed("relative_ppm"))?;
+        let uncertainty = Uncertainty::new(ppm, int("window_us")?).map_err(BudgetError::Class)?;
+        let filtering = CounterFiltering::from_label(text("filtering")?).ok_or(BudgetError::Malformed("filtering"))?;
+        let class = EnergyProvenance::on_chip_counter(uncertainty, filtering).map_err(BudgetError::Class)?;
+        let per = BudgetUnit::read(text("per")?).ok_or(BudgetError::Malformed("per"))?;
         let resolution = match o.get("resolution") {
             Some(Value::Null) => None,
             Some(Value::Array(a)) if a.len() == 2 => {
@@ -177,53 +202,47 @@ impl EnergyBudget {
             }
             _ => return Err(BudgetError::Malformed("resolution")),
         };
-        let label = o.get(energy_class::JSON_CLASS).and_then(Value::as_str).ok_or(BudgetError::Malformed(energy_class::JSON_CLASS))?;
-        let uncertainty = match o.get(energy_class::JSON_UNCERTAINTY) {
-            None => None,
-            Some(u) => {
-                let ppm = u.get("relative_ppm").and_then(Value::as_u64).and_then(|n| u32::try_from(n).ok());
-                let win = u.get("window_us").and_then(Value::as_u64);
-                match (ppm, win, u.as_object().map(|m| m.len())) {
-                    (Some(p), Some(w), Some(2)) => Some(energy_class::Uncertainty::new(p, w).map_err(BudgetError::Class)?),
-                    _ => return Err(BudgetError::Malformed(energy_class::JSON_UNCERTAINTY)),
-                }
-            }
+        let b = BudgetRecord {
+            joules_micro: int("joules_micro")?,
+            per,
+            class,
+            resolution,
+            reference_sink: text("reference_sink")?.to_string(),
+            record: text("record")?.to_string(),
         };
-        let filtering = match o.get(energy_class::JSON_FILTERING) {
-            None => None,
-            Some(f) => Some(
-                f.as_str()
-                    .and_then(energy_class::CounterFiltering::from_label)
-                    .ok_or(BudgetError::Malformed(energy_class::JSON_FILTERING))?,
-            ),
-        };
-        let calibration_ref = match o.get(energy_class::JSON_CALIBRATION_REF) {
-            None => None,
-            Some(c) => Some(c.as_str().ok_or(BudgetError::Malformed(energy_class::JSON_CALIBRATION_REF))?),
-        };
-        let class = EnergyProvenance::from_parts(label, uncertainty, filtering, calibration_ref).map_err(BudgetError::Class)?;
-        let text = |k: &'static str| o.get(k).and_then(Value::as_str).map(str::to_string).ok_or(BudgetError::Malformed(k));
-        let b = EnergyBudget { joules_micro, per, resolution, class, sink: text("sink")?, record: text("record")? };
         b.check()?;
         Ok(b)
     }
+
+    /// What platform-decode §5 reads of the record.
+    pub fn order_view(&self) -> pd::EnergyBudget {
+        let (ppm, window) = self.class.uncertainty().map_or((0, 0), |u| (u64::from(u.relative_ppm), u.window_us));
+        pd::EnergyBudget {
+            class: self.class.label().to_string(),
+            joules_micro: self.joules_micro,
+            per: self.per.token().to_string(),
+            relative_ppm: ppm,
+            window_us: window,
+            reference_sink: self.reference_sink.clone(),
+        }
+    }
 }
 
 /// The budgets registrations state, by capability (REGISTRY.md, *Energy budgets*): none in
 /// this revision. A row is added with the registration that states it, and the registry
 /// export writes it as the capability's `energy_budget`.
-pub const REGISTERED: &[(&str, fn() -> EnergyBudget)] = &[];
+pub const REGISTERED: &[(&str, fn() -> BudgetRecord)] = &[];
 
 /// The budget a capability's registration states, if any.
-pub fn registered(capability: &str) -> Option {
+pub fn registered(capability: &str) -> Option {
     REGISTERED.iter().find(|(c, _)| *c == capability).map(|(_, b)| b())
 }
 
-/// The budgets a sink holds: the registrations' ([`Budgets::registry`]), and any a
-/// deployer adds from a published table it pins ([`Budgets::with_table`]).
+/// The budgets a sink holds: the registrations' ([`Budgets::registry`]), and any a deployer
+/// adds from a published table it pins ([`Budgets::with_table`]).
 #[derive(Clone, Debug, Default, PartialEq, Eq)]
 pub struct Budgets {
-    table: BTreeMap,
+    table: BTreeMap,
 }
 
 impl Budgets {
@@ -232,52 +251,24 @@ impl Budgets {
         Budgets { table: REGISTERED.iter().map(|(c, b)| (c.to_string(), b())).collect() }
     }
 
-    /// Add a deployer's table, `{"": , …}`. Every entry must read and
+    /// Add a deployer's table, `{"": , …}`. Every record must read and
     /// check, or the whole table is refused with the first capability that does not: a
     /// sink does not hold half a table it pinned.
     pub fn with_table(mut self, table: &Value) -> Result {
         let t = table.as_object().ok_or_else(|| (String::new(), BudgetError::Malformed("not an object")))?;
         for (cap, v) in t {
-            let b = EnergyBudget::from_json(v).map_err(|e| (cap.clone(), e))?;
+            let b = BudgetRecord::from_json(v).map_err(|e| (cap.clone(), e))?;
             self.table.insert(cap.clone(), b);
         }
         Ok(self)
     }
 
     /// The budget held for `capability`.
-    pub fn get(&self, capability: &str) -> Option<&EnergyBudget> {
+    pub fn get(&self, capability: &str) -> Option<&BudgetRecord> {
         self.table.get(capability)
     }
 }
 
-/// SPEC §4: a learned capability, by its replicate class (§7).
-pub fn is_learned(capability: &str) -> bool {
-    matches!(
-        codecs::capability_replicate_class(capability),
-        Some(ReplicateClass::NeuralIntegerExact | ReplicateClass::NeuralEntropyExact | ReplicateClass::NeuralFloat | ReplicateClass::Behavioral)
-    )
-}
-
-/// What a sink's platform answers about decoding one capability, where it can ask: a
-/// page's Media Capabilities `decodingInfo` for the capability's configuration, a native
-/// platform's hardware-decode query.
-#[derive(Clone, Copy, Debug, PartialEq, Eq)]
-pub struct PlatformAnswer {
-    pub supported: bool,
-    pub power_efficient: bool,
-}
-
-/// A capability's place in the energy order, lowest first.
-#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
-pub enum EnergyRank {
-    /// The platform answers the decode supported and power-efficient.
-    PowerEfficient,
-    /// Every other capability, in the envelope's order.
-    Other,
-    /// A learned capability that carries no budget.
-    LearnedUnbudgeted,
-}
-
 /// Whether a sink applies the energy order or the envelope's own.
 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
 pub enum OrderKind {
@@ -291,10 +282,14 @@ pub enum OrderKind {
 /// The order a sink tries an envelope's capabilities in.
 pub struct DispatchPolicy<'a> {
     pub kind: OrderKind,
-    /// The platform's answer for a capability, where the sink can ask.
-    pub platform: Option<&'a dyn Fn(&str) -> Option>,
+    /// The platform's answers for a capability, where the sink can ask
+    /// (platform-decode §2, §3); `None` for a sink with no platform to ask.
+    pub platform: Option<&'a dyn Fn(&str) -> Option>,
     /// The budgets the sink holds; `None` is the registrations' alone.
     pub budgets: Option<&'a Budgets>,
+    /// platform-decode's rules: [`Rules::DEFAULT`], with the deployer's ceiling where it
+    /// sets one.
+    pub rules: Rules,
 }
 
 impl Default for DispatchPolicy<'_> {
@@ -307,16 +302,16 @@ impl<'a> DispatchPolicy<'a> {
     /// SPEC §4's default: the energy order, with the registrations' budgets and no
     /// platform answer.
     pub fn energy() -> DispatchPolicy<'a> {
-        DispatchPolicy { kind: OrderKind::Energy, platform: None, budgets: None }
+        DispatchPolicy { kind: OrderKind::Energy, platform: None, budgets: None, rules: Rules::DEFAULT }
     }
 
     /// The envelope's own order, as a deployer may configure.
     pub fn manifest_order() -> DispatchPolicy<'a> {
-        DispatchPolicy { kind: OrderKind::Manifest, platform: None, budgets: None }
+        DispatchPolicy { kind: OrderKind::Manifest, platform: None, budgets: None, rules: Rules::DEFAULT }
     }
 
     /// The energy order with the platform's answers.
-    pub fn with_platform(mut self, platform: &'a dyn Fn(&str) -> Option) -> Self {
+    pub fn with_platform(mut self, platform: &'a dyn Fn(&str) -> Option) -> Self {
         self.platform = Some(platform);
         self
     }
@@ -327,57 +322,56 @@ impl<'a> DispatchPolicy<'a> {
         self
     }
 
-    fn has_budget(&self, capability: &str) -> bool {
+    /// The budget this policy holds for `capability`, as platform-decode §5 reads it.
+    pub fn budget(&self, capability: &str) -> Option {
         match self.budgets {
-            Some(b) => b.get(capability).is_some(),
-            None => registered(capability).is_some(),
+            Some(b) => b.get(capability).map(BudgetRecord::order_view),
+            None => registered(capability).map(|b| b.order_view()),
         }
     }
 
-    /// `capability`'s rank under this policy. Under the envelope's order every capability
-    /// ranks [`EnergyRank::Other`].
-    pub fn rank(&self, capability: &str) -> EnergyRank {
+    /// `capability`'s rank (platform-decode §4.2), or `Err` where the platform answered
+    /// that it cannot decode it and the sink holds no decoder of its own (§3). Under the
+    /// envelope's order every capability ranks alike.
+    pub fn rank(&self, capability: &str) -> Result {
         if self.kind == OrderKind::Manifest {
-            return EnergyRank::Other;
+            return Ok(Rank::Classical);
         }
-        if self.platform.and_then(|p| p(capability)).is_some_and(|a| a.supported && a.power_efficient) {
-            return EnergyRank::PowerEfficient;
-        }
-        if is_learned(capability) && !self.has_budget(capability) {
-            return EnergyRank::LearnedUnbudgeted;
-        }
-        EnergyRank::Other
+        let answers = self.platform.and_then(|p| p(capability));
+        let budget = self.budget(capability);
+        pd::rank(&pd::Entry { capability, answers: answers.as_ref(), budget: budget.as_ref() }, &self.rules)
     }
 
-    /// The positions of `capabilities` in the order this policy tries them: by rank, the
-    /// envelope's order within a rank.
-    pub fn order<'c>(&self, capabilities: impl IntoIterator) -> Vec {
-        let mut ranked: Vec<(EnergyRank, usize)> = capabilities.into_iter().enumerate().map(|(i, c)| (self.rank(c), i)).collect();
+    /// The positions of `capabilities` in the order this policy tries them, by rank and
+    /// the envelope's order within a rank; then those the platform cannot decode, in the
+    /// envelope's order, which a sink skips (`missing_capability`).
+    pub fn order<'c>(&self, capabilities: impl IntoIterator) -> (Vec, Vec) {
+        let mut ranked: Vec<(Rank, usize)> = Vec::new();
+        let mut refused = Vec::new();
+        for (i, c) in capabilities.into_iter().enumerate() {
+            match self.rank(c) {
+                Ok(r) => ranked.push((r, i)),
+                Err(_) => refused.push(i),
+            }
+        }
         ranked.sort();
-        ranked.into_iter().map(|(_, i)| i).collect()
+        (ranked.into_iter().map(|(_, i)| i).collect(), refused)
     }
 }
 
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::energy_class::{CounterFiltering, Uncertainty};
+    use crate::platform_decode::DecodingInfo;
 
-    fn chip() -> EnergyProvenance {
-        EnergyProvenance::on_chip_counter(Uncertainty { relative_ppm: 25_000, window_us: 7_000_000 }, CounterFiltering::Unknown).unwrap()
-    }
-
-    fn budget() -> EnergyBudget {
-        EnergyBudget { joules_micro: 41_250, per: BudgetUnit::Frame, resolution: Some((1920, 1080)), class: chip(), sink: "a reference sink".into(), record: "ab".repeat(32) }
-    }
-
-    #[test]
-    fn learned_capabilities_are_the_neural_and_behavioral_classes() {
-        for c in ["wai.neural.int_hyper", "wai.video.int_hyper", "wai.image.jpegai", "wai.neural.bmshj2018", "wai.semantic.clip"] {
-            assert!(is_learned(c), "{c}");
-        }
-        for c in ["wai.video.av1", "wai.image.png", "wai.video.int_motion", "wai.generate.spectral", "wai.unregistered.string"] {
-            assert!(!is_learned(c), "{c}");
+    fn record() -> BudgetRecord {
+        BudgetRecord {
+            joules_micro: 41_250,
+            per: BudgetUnit::Frame,
+            class: EnergyProvenance::on_chip_counter(Uncertainty { relative_ppm: 25_000, window_us: 7_000_000 }, CounterFiltering::Unknown).unwrap(),
+            resolution: Some((1920, 1080)),
+            reference_sink: "a reference sink".into(),
+            record: "ab".repeat(32),
         }
     }
 
@@ -388,58 +382,68 @@ mod tests {
         for (cap, b) in REGISTERED {
             assert!(is_learned(cap), "{cap}: a budget names a learned capability");
             assert_eq!(b().check(), Ok(()), "{cap}");
-            assert_eq!(registered(cap), Some(b()));
         }
         assert!(REGISTERED.is_empty(), "no registration states a budget in this revision");
         assert_eq!(registered("wai.neural.int_hyper"), None);
     }
 
-    /// A learned capability with no budget goes after the classical one; with a budget it
-    /// keeps its place; a power-efficient platform answer goes first; the envelope's order
-    /// breaks every tie, and the manifest order keeps it whole.
+    /// platform-decode §4.2 applied by default: a learned capability with no budget after
+    /// the classical one; with a qualifying budget it ranks first with power-efficient
+    /// classical decode; a smooth, power-efficient platform answer first; the envelope's
+    /// order within a rank; and a manifest order that keeps it whole.
     #[test]
     fn the_energy_order() {
-        let (neural, av1, png) = ("wai.neural.int_hyper", "wai.video.av1", "wai.image.png");
+        let (neural, av1, png, hevc) = ("wai.neural.int_hyper", "wai.video.av1", "wai.image.png", "wai.video.hevc");
         let e = DispatchPolicy::energy();
-        assert_eq!(e.order([neural, av1]), vec![1, 0]);
-        assert_eq!(e.order([av1, neural]), vec![0, 1]);
-        assert_eq!(e.order([neural, "wai.image.jpegai", av1, png]), vec![2, 3, 0, 1], "two learned, kept in their order, after both classical");
-        assert_eq!(DispatchPolicy::manifest_order().order([neural, av1]), vec![0, 1]);
-        let held = Budgets::registry().with_table(&json!({ neural: budget().to_json() })).unwrap();
-        assert_eq!(DispatchPolicy::energy().with_budgets(&held).order([neural, av1]), vec![0, 1]);
-        let hw = |c: &str| (c == av1).then_some(PlatformAnswer { supported: true, power_efficient: true });
-        assert_eq!(DispatchPolicy::energy().with_budgets(&held).with_platform(&hw).order([neural, png, av1]), vec![2, 0, 1], "the hardware decode first, even above a budgeted learned one");
-        let sw = |_: &str| Some(PlatformAnswer { supported: true, power_efficient: false });
-        assert_eq!(DispatchPolicy::energy().with_platform(&sw).order([neural, av1]), vec![1, 0], "supported but not power-efficient is not the hardware path");
+        assert_eq!(e.order([neural, av1]), (vec![1, 0], vec![]));
+        assert_eq!(e.order([av1, neural]), (vec![0, 1], vec![]));
+        assert_eq!(e.order([neural, "wai.image.jpegai", av1, png]).0, vec![2, 3, 0, 1], "two learned, kept in their order, after both classical");
+        assert_eq!(DispatchPolicy::manifest_order().order([neural, av1]).0, vec![0, 1]);
+        let held = Budgets::registry().with_table(&json!({ neural: record().to_json() })).unwrap();
+        assert_eq!(DispatchPolicy::energy().with_budgets(&held).order([av1, neural]).0, vec![1, 0], "a qualifying budget ranks first, above software classical decode");
+        let answers = |c: &str| match c {
+            "wai.video.av1" => Some(Answers { decoding_info: Some(DecodingInfo { supported: true, smooth: true, power_efficient: true }), ..Answers::default() }),
+            "wai.video.hevc" => Some(Answers { decoding_info: Some(DecodingInfo { supported: true, smooth: true, power_efficient: false }), ..Answers::default() }),
+            "wai.video.vvc" => Some(Answers { decoding_info: Some(DecodingInfo { supported: false, smooth: false, power_efficient: false }), ..Answers::default() }),
+            _ => None,
+        };
+        let p = DispatchPolicy::energy().with_platform(&answers);
+        assert_eq!(p.order([neural, hevc, png, av1]), (vec![3, 1, 2, 0], vec![]), "first, smooth, classical, learned last");
+        assert_eq!(p.order([neural, "wai.video.vvc"]), (vec![0], vec![1]), "a decode the platform refuses, with no decoder of its own, is skipped");
+        let both = DispatchPolicy::energy().with_platform(&answers).with_budgets(&held);
+        assert_eq!(both.order([neural, av1]).0, vec![0, 1], "a qualifying budget and a power-efficient decode share the first rank: the envelope's order");
     }
 
     #[test]
-    fn a_budget_reads_back_and_refuses_what_does_not_back_it() {
-        let b = budget();
-        assert_eq!(EnergyBudget::from_json(&b.to_json()), Ok(b.clone()));
+    fn a_budget_record_reads_back_and_refuses_what_does_not_back_it() {
+        let b = record();
+        assert_eq!(BudgetRecord::from_json(&b.to_json()), Ok(b.clone()));
+        // platform-decode reads the same JSON, and the budget qualifies there.
+        let view = pd::budget_from_json(&b.to_json()).unwrap();
+        assert_eq!(view, b.order_view());
+        assert_eq!(view.qualifies(None), Ok(()));
         let with = |f: &dyn Fn(&mut serde_json::Map)| {
             let mut v = b.to_json();
             f(v.as_object_mut().unwrap());
-            EnergyBudget::from_json(&v).map_err(|e| e.code())
+            BudgetRecord::from_json(&v).map_err(|e| e.code())
         };
-        assert_eq!(with(&|o| { o.insert("energy_provenance".into(), json!("HwShunt")); o.remove("energy_uncertainty"); o.remove("energy_counter_filtering"); }), Err("budget_legacy_class"));
-        assert_eq!(with(&|o| { o.insert("energy_provenance".into(), json!("ModelBased")); o.remove("energy_uncertainty"); o.remove("energy_counter_filtering"); }), Err("budget_not_hardware"));
-        assert_eq!(with(&|o| { o.insert("energy_provenance".into(), json!("Estimator")); o.remove("energy_uncertainty"); o.remove("energy_counter_filtering"); }), Err("budget_not_hardware"));
+        assert_eq!(with(&|o| { o.insert("class".into(), json!("HwShunt")); }), Err("budget_legacy_class"));
+        for class in ["ModelBased", "Estimator", "CalibratedInstrument"] {
+            assert_eq!(with(&|o| { o.insert("class".into(), json!(class)); }), Err("budget_not_counter"), "{class}");
+        }
         assert_eq!(with(&|o| { o.insert("joules_micro".into(), json!(0)); }), Err("budget_class_invalid"));
         assert_eq!(with(&|o| { o.insert("joules_micro".into(), json!(11)); }), Err("budget_class_invalid"), "below the resolution floor");
-        assert_eq!(with(&|o| { o.remove("energy_uncertainty"); }), Err("budget_class_invalid"));
+        assert_eq!(with(&|o| { o.insert("relative_ppm".into(), json!(0)); }), Err("budget_class_invalid"));
         assert_eq!(with(&|o| { o.insert("record".into(), json!("AB".repeat(32))); }), Err("budget_malformed"));
-        assert_eq!(with(&|o| { o.insert("sink".into(), json!(" ")); }), Err("budget_malformed"));
+        assert_eq!(with(&|o| { o.insert("reference_sink".into(), json!(" ")); }), Err("budget_malformed"));
         assert_eq!(with(&|o| { o.insert("per".into(), json!("decode")); }), Err("budget_malformed"));
+        assert_eq!(with(&|o| { o.insert("filtering".into(), json!("Maybe")); }), Err("budget_malformed"));
         assert_eq!(with(&|o| { o.insert("resolution".into(), json!([0, 1080])); }), Err("budget_malformed"));
         assert_eq!(with(&|o| { o.insert("note".into(), json!("x")); }), Err("budget_malformed"));
         // A table is held whole or not at all.
         let mut bad = b.to_json();
-        bad["energy_provenance"] = json!("Estimator");
-        let o = bad.as_object_mut().unwrap();
-        o.remove("energy_uncertainty");
-        o.remove("energy_counter_filtering");
+        bad["class"] = json!("Estimator");
         let t = json!({ "wai.neural.int_hyper": b.to_json(), "wai.neural.elic": bad });
-        assert_eq!(Budgets::registry().with_table(&t).map(|_| ()).map_err(|(c, e)| (c, e.code())), Err(("wai.neural.elic".into(), "budget_not_hardware")));
+        assert_eq!(Budgets::registry().with_table(&t).map(|_| ()).map_err(|(c, e)| (c, e.code())), Err(("wai.neural.elic".into(), "budget_not_counter")));
     }
 }
-- 
2.54.0 (Apple Git-157)


From ce38948dad814d33469dba2aa4f259e385ec41bb Mon Sep 17 00:00:00 2001
From: Transaction Science 
Date: Sat, 24 Oct 2026 20:57:21 -0400
Subject: [PATCH 46/50] platform-decode: keep the query, move the order into
 browser-sink's routing, drop the budget
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The review of #452 (M4–M9) found its platform-decode part at odds with
browser-sink on main. Reworked inside EN-C:

- Kept: the query read from the payload (AV1-ISOBMFF codec string from the
  sequence header, Annex E.3 from an HEVC SPS) with queries.json; the rule that
  powerEfficient and prefer-hardware are hints, never energy and never evidence
  of hardware.
- Reworked: the answers enter browser-sink §3's report, one shape
  (report_answer): supported from isConfigSupported() alone, smooth and
  power_efficient from decodingInfo() only once WebCodecs said supported, so a
  Media Capabilities supported:false overrides nothing (http-delivery §12.2).
  The extension defines no order and no second meaning of advertising: the order
  is SPEC §4's energy order inside browser-sink §4.7, where an answer counts only
  for an object routed ua (AV1's user-agent tier is none; a decode-equivalence
  need with no probe run routes elsewhere).
- Dropped: rank/order/select, advertise_for_envelope (a second advertising
  definition that could make a decodable WAI1 inert), the EnergyBudget and its
  ceiling, and order.json. A learned entry's measurement is browser-sink §6's
  energy entry.
- wai-web: the platform bundle binds platformQuery, platformAnswer and
  platformChoose (browser-sink §4.7) on the browser_sink feature; the demo builds
  every query from a payload (the hand-written 1920x1080 query is gone), asks
  Media Capabilities after WebCodecs, and marks its one figure synthetic. The
  wording calls the HEVC source the platform's encoder configured with
  prefer-hardware. wai-web-wasm.yml builds the bundle.
- int_kernels_vectors: the two new corpora's sidecar exclusions (review M1).

Co-Authored-By: Claude Opus 5.5 
---
 .github/workflows/wai-web-wasm.yml           |  13 +
 wai/extensions/platform-decode.md            | 239 +++++--------
 wai/platform-decode-conformance/README.md    |  29 +-
 wai/platform-decode-conformance/order.json   | 185 ----------
 wai/platform-decode-conformance/queries.json |   4 +-
 wai/registry/capabilities.schema.json        |  71 ----
 wai/wai-rs/src/platform_decode.rs            | 341 ++-----------------
 wai/wai-rs/src/platform_decode/tests.rs      | 127 ++-----
 wai/wai-rs/tests/int_kernels_vectors.rs      |   2 +
 wai/wai-web/Cargo.toml                       |  11 +-
 wai/wai-web/demo/platform_decode.js          |  90 ++---
 wai/wai-web/demo/verify_platform_decode.mjs  |  18 +-
 wai/wai-web/src/platform_decode.rs           |  58 ++--
 13 files changed, 254 insertions(+), 934 deletions(-)
 delete mode 100644 wai/platform-decode-conformance/order.json

diff --git a/.github/workflows/wai-web-wasm.yml b/.github/workflows/wai-web-wasm.yml
index 44e58e8f2..2f7c735a2 100644
--- a/.github/workflows/wai-web-wasm.yml
+++ b/.github/workflows/wai-web-wasm.yml
@@ -135,6 +135,19 @@ jobs:
           cargo build --locked --release --target wasm32-unknown-unknown
           wasm-bindgen --target nodejs --out-dir demo/pkg-node --out-name wai_web \
             target/wasm32-unknown-unknown/release/wai_web.wasm
+      # The platform bundle (feature platform_decode: platform-decode's query, the answer in
+      # browser-sink's report, and browser-sink §4.7's choice), a bundle of its own that the
+      # main one does not carry, so nothing above builds it.
+      - name: Build wai-web's platform bundle for wasm32 (feature platform_decode)
+        shell: bash
+        working-directory: wai/wai-web
+        run: |
+          set -euo pipefail
+          cargo build --locked --release --target wasm32-unknown-unknown --features platform_decode
+          wasm-bindgen --target web --out-dir demo/pkg-platform --out-name wai_platform_decode \
+            target/wasm32-unknown-unknown/release/wai_web.wasm
+          test -s demo/pkg-platform/wai_platform_decode.js
+          grep -q "platformChoose" demo/pkg-platform/wai_platform_decode.js
       # The JS surface itself (pick, companionsOf, verifyPin, rendition() and
       # companion() refusing what is never presented or does not match its digest,
       # the held-sets conversion, and the WAI2 parse at 32-bit usize) runs only on
diff --git a/wai/extensions/platform-decode.md b/wai/extensions/platform-decode.md
index c73d65e9e..d991b2cec 100644
--- a/wai/extensions/platform-decode.md
+++ b/wai/extensions/platform-decode.md
@@ -1,14 +1,13 @@
-# WAI Extension: Platform Decode Capabilities in Dispatch
+# WAI Extension: Platform Decode Capabilities
 
 > Status: Draft. Maps two web platform interfaces, Media Capabilities `decodingInfo()`
-> and WebCodecs `isConfigSupported()` with its hardware-acceleration preference, onto WAI
-> capability dispatch ([SPEC.md §4](../SPEC.md)) and rendition selection (SPEC §7.1):
-> what a sink asks the platform about an entry, what each answer means for selection,
-> and a default order, which SPEC §4 and §7.1 apply unless a deployer configures another
-> (SPEC §4, *Energy order*), that tries classical decode
-> the platform marks power-efficient before any learned reconstruction that carries no
-> energy budget. No manifest member and no wire format: the order is a function of the
-> manifest, the payloads, the platform's answers and the budgets.
+> and WebCodecs `isConfigSupported()` with its hardware-acceleration preference, onto the
+> capability report of [browser-sink](browser-sink.md) §3: what a sink asks the platform
+> about an entry, read from the entry's payload (§2), and how the answers enter the report
+> (§3). The answers are hints. They order the alternatives a page can decode, inside
+> browser-sink's routing, by SPEC §4's energy order (browser-sink §4.7); they never change a
+> route, are never an energy figure and are never evidence of hardware. No manifest member
+> and no wire format.
 > Keywords **MUST**, **MUST NOT**, **SHOULD**, **MAY** are RFC 2119/8174.
 
 ## 1. Scope
@@ -19,9 +18,10 @@ own: WebAssembly, or a learned reconstruction such as WAI's integer codecs. The
 says, for a configuration, whether it can decode it, whether it can do so without
 dropping frames, and whether it judges the decode power-efficient (Media Capabilities
 §2.2). A learned reconstruction runs on the sink's CPU, GPU or neural engine, and what it
-draws there is known only where it has been measured. This extension lets a WAI sink use
-what the platform says when it chooses among the entries an envelope offers, and lets a
-learned entry rank with the platform's power-efficient decode only on a measured figure.
+draws there is known only where it has been measured. This extension says how a WAI sink
+asks the platform about an entry, and how it enters what the platform says in browser-sink's
+capability report, where the routing (browser-sink §4) decides what the page can decode and
+the energy order (SPEC §4, *Energy order*; browser-sink §4.7) orders what it can.
 
 It reads these documents:
 
@@ -39,14 +39,14 @@ It reads these documents:
 ISO/IEC 14496-15 was not read. The HEVC codec string §2 writes follows the form the HEVC
 registration describes (four dot-separated fields of Annex E.3 and the constraint bytes
 after them), checked against an open-source parser of that form (Chromium's
-`ParseHEVCCodecId`) and against a platform that decodes with it (§6).
+`ParseHEVCCodecId`) and against a platform that decodes with it (§5).
 
 ## 2. The query
 
 For an entry whose capability the table maps, the sink forms the query from the entry's
 payload. It **MUST NOT** form it from anything the envelope declares apart from the
 payload: the codec string a payload's encoder declared can differ from the stream
-(§6 records one that did).
+(§5 records one that did).
 
 | capability | codec string | size | frame rate | bit rate |
 |---|---|---|---|---|
@@ -68,28 +68,41 @@ The sink asks:
   will configure, when it decodes the entry through WebCodecs.
 
 WebCodecs gives no smoothness or power answer, and Media Capabilities has no WebCodecs
-decoding type. A sink that decodes through WebCodecs reads `smooth` and `powerEfficient`
-from the `media-source` query of the same configuration: the platform's statement about
-that configuration, which the order uses as a ranking signal and nothing more (§3).
+decoding type. A sink that decodes through WebCodecs asks `isConfigSupported()` first, and
+asks `decodingInfo()` of the `media-source` query of the same configuration only once
+`isConfigSupported()` answers supported, and only for a codec string browser-sink §4.2's
+registry gate passes: Media Capabilities is a further question about a decoder already
+found (http-delivery §12.2). It reads `smooth` and `powerEfficient` from that answer as
+hints and nothing more (§3).
 
 ## 3. The answers
 
-**`supported`.** A `decodingInfo()` answer of `supported: false`, or an
-`isConfigSupported()` answer of `supported: false` for the preference the sink will
-configure, makes the capability unsupported for that object through the platform. It is
-not a decode error and not a reason to try the decode anyway
-([capability-constraints](capability-constraints.md) §2 reads an unmet constraint set the
-same way). A sink that holds a decoder of its own for the capability decodes the entry
-with it, as an entry with no platform answer; otherwise the entry is skipped with the
-reason `missing_capability` (SPEC §7.1 step 5).
+A page enters what the platform said in browser-sink §3's capability report, one answer per
+codec string, `{supported, smooth, power_efficient, probe}`, and in no other shape
+(`platform_decode::report_answer`):
 
-**`smooth` and `powerEfficient`.** Both order the entries a sink can decode (§4) and do
-nothing else. `powerEfficient` is the user agent's judgement that the decode's power draw
-is optimal, its definition left to the user agent, which **SHOULD NOT** mark hardware
-decoding power-efficient by default (Media Capabilities §2.2). It is not a measurement. A
-sink **MUST NOT** write it, or anything derived from it, into a receipt, a measurement
-claim or an energy figure, and **MUST NOT** present it as an acquisition class
-([energy-measurement](energy-measurement.md) §2).
+- **`supported`** is `isConfigSupported()`'s answer for the preference the sink will
+  configure, alone. A Media Capabilities `supported` is not read: a `media-source` answer is
+  about the media-source pipeline, its container support included, not about the decoder
+  WebCodecs found, so a `decodingInfo()` answer of `supported: false` overrides nothing.
+  `supported: false` makes the user agent's leg unavailable for that object
+  (browser-sink §4.3 step 4.5, `ua_unsupported`); the object then routes to a host or a
+  wasm decoder where the page holds one, or nowhere. It is not a decode error and not a
+  reason to try the decode anyway.
+- **`smooth` and `power_efficient`** are `decodingInfo()`'s, entered only where
+  `supported` is true, and `null` otherwise or where nothing was asked. They order the
+  alternatives a page can decode, and only for an object routed `ua` (browser-sink §4.7): an
+  object the page routes to a host or a wasm decoder, because the user agent's tier is below
+  what the object needs (AV1's user-agent tier is `none`, browser-sink §4.1) or because no
+  probe ran for a codec whose need is `decode-equivalence` (browser-sink §4.4), is not
+  ranked on an answer about a decoder that will not run it. `powerEfficient` is the user
+  agent's judgement that the decode's power draw is optimal, its definition left to the user
+  agent, which **SHOULD NOT** mark hardware decoding power-efficient by default (Media
+  Capabilities §2.2). It is a hint, not a measurement and not evidence of hardware. A sink
+  **MUST NOT** write it, or anything derived from it, into a receipt, a measurement claim or
+  an energy figure, and **MUST NOT** present it as an acquisition class
+  ([energy-measurement](energy-measurement.md) §2).
+- **`probe`** is `not_run`: this extension runs no probe (browser-sink §4.4).
 
 **The hardware-acceleration preference.** `prefer-hardware` and `prefer-software` are
 hints a user agent may ignore for any reason (WebCodecs §7.9). An `isConfigSupported()`
@@ -103,143 +116,67 @@ where the answers are. A platform that fakes its capabilities to resist fingerpr
 (§3.2 recommends a fixed set rather than always yes or always no) gives answers the order
 uses as given: the result is a choice that platform made, and the decode still conforms.
 
-## 4. The default order
+## 4. The order the answers feed
 
-### 4.1 Classical and learned entries
+This extension defines no order of its own, and no second meaning of "the sink advertises
+`cap`". What a page advertises for an object is its route (browser-sink §4.3, SPEC §4).
+Among alternatives the page can route, SPEC §4's energy order applies, as browser-sink §4.7
+writes it: `first` for classical decode routed `ua` that the platform answers supported,
+smooth and power-efficient, then `smooth`, then `classical` (any other routed classical
+decode, and a learned one with a qualifying sink-metered figure in browser-sink §6's energy
+entry), then `learned-without-budget`. A `WAI1` envelope's capability and fallback are two
+such alternatives. The order reads no figure's value (browser-sink §6).
 
-An entry is **learned** when its capability's registry class (SPEC §7) is one of the
-neural, generative or behavioural classes: `NeuralIntegerExact`, `NeuralEntropyExact`,
-`NeuralFloat`, `GenerativeDeterministic`, `Behavioral`. It is **classical** when the class
-is one of the standard classes: `StandardDefined`, `StandardTolerance`,
-`StandardUnclassified`, the WAI-native integer codecs that are not learned among them. A
-capability this revision does not register is ranked as learned: nothing says it is
-classical.
-
-### 4.2 The ranks
-
-Each entry SPEC §7.1 step 2 considers has a rank, tried in this order:
-
-1. **first**: a classical entry the platform marks `supported`, `smooth` and
-   `powerEfficient`; and a learned entry whose energy budget qualifies (§5);
-2. **smooth**: a classical entry the platform marks `supported` and `smooth`, and not
-   `powerEfficient`;
-3. **classical**: any other classical entry the sink can decode: one the platform marks
-   not `smooth`, one it has no answer for, and one the sink decodes with a decoder of its
-   own after the platform answered `supported: false`;
-4. **learned without a budget**: a learned entry whose budget is absent or does not
-   qualify.
-
-Within a rank, entries keep the manifest's order, the encoder's preference. An entry the
-sink cannot decode (§3) is skipped as `missing_capability`. The order is SPEC §7.1 step 2's
-default order (SPEC §4, *Energy order*), which a deployer may replace: it reorders the
-entries the sink considers and leaves out the ones it cannot decode, and every rule of §7.1
-still holds, so an entry skipped for its digest or its pin is skipped whatever its rank.
-
-The order therefore decodes through a classical entry before a learned one without a
-budget whenever the sink can decode both, and through a power-efficient classical entry
-before a learned one with a budget only where the manifest lists it first. A learned
-reconstruction is dispatched above a classical one by default only when it carries a
-measured energy figure (§5).
-
-### 4.3 A `WAI1` envelope
-
-SPEC §4 tries `model_requirement.capability`, then `model_requirement.fallback`. Under the
-default order (SPEC §4, *Energy order*) a sink takes step 5 before step 3 for an envelope
-whose capability is learned without a qualifying budget and whose fallback ranks above it
-(§4.2): a classical capability the sink can decode, whether or not the platform marks it
-`powerEfficient`, or a learned one with a qualifying budget. Step 3 then decodes only if
-step 5 does not, so the rule never leaves inert an envelope the capability could decode.
-In every other case the capability is tried first, as the sink otherwise would. The
-choice is per envelope, as module authorisation is (SPEC §4, *Module authorisation*).
-This is §4.2's order applied to the two capabilities: a learned capability without a
-budget ranks below every classical one the sink can decode.
-
-### 4.4 What the order is not
-
-The order is a choice among decodes the sink can make, not a statement about energy. It
-claims no figure for the entry it picks, and a receipt over that entry's decode states its
-energy by [energy-measurement](energy-measurement.md)'s rules, or states none. A deployer
-**MAY** use another order (SPEC §7.1 step 2); it **MUST NOT** describe another order as
-this extension's.
-
-## 5. Energy budgets
-
-A learned entry's **energy budget** is a figure the energy-measurement extension defines
-for a learned capability and parameter set: an `OnChipCounter` figure (energy-measurement
-§2) measured on a reference sink. How a budget is carried and checked is that extension's;
-this extension reads only these members:
-
-| member | meaning |
-|---|---|
-| `class` | the acquisition class; the budget qualifies only when it is `OnChipCounter` |
-| `joules_micro` | the figure, in microjoules, for one unit of decode |
-| `per` | the unit: `frame`, `picture` or `second` of output |
-| `relative_ppm`, `window_us` | the declared standard uncertainty and the integration window (energy-measurement §2.3) |
-| `reference_sink` | the reference sink it was measured on |
-
-A budget qualifies when its class is `OnChipCounter`, `joules_micro`, `relative_ppm` and
-`window_us` are each non-zero, `reference_sink` names a sink, `per` is one of the units
-above, and, where the deployer sets a ceiling for that unit, `joules_micro` is at or below
-it. A budget of another class does not qualify: a `ModelBased` or `Estimator` figure is not
-a measurement of the reconstruction. Until a learned capability has a budget that
-qualifies, it ranks last (§4.2).
-
-## 6. Conformance
+## 5. Conformance
 
 The reference implementation is `wai::platform_decode` (`wai/wai-rs/src/platform_decode.rs`):
-`query` forms §2's query, `rank` and `order` give §4.2's order, `select` runs SPEC §7.1
-selection in it, and `advertise_for_envelope` applies §4.3. The reference dispatcher
-applies this order by default (SPEC §4, *Energy order*; `energy_order::DispatchPolicy`,
-which ranks with `rank`). It calls no platform: the
-answers are inputs. The vectors are in `wai/platform-decode-conformance/`:
+`query` forms §2's query, and `report_answer` §3's answer. It calls no platform: the
+answers are inputs. The vectors are in `wai/platform-decode-conformance/`: `queries.json`,
+two floor objects of the packaging corpus, whose codec string is the one the packager wrote
+into its HLS master, and an HEVC SPS the platform's encoder wrote through WebCodecs,
+configured with `prefer-hardware`. The order's vectors are the `choices` of
+[`live-conformance/browser/`](../live-conformance/browser/).
 
-- `order.json`: manifests of classical and learned entries with the platform's answers and
-  budgets, and each entry's rank, the order, the entries skipped with their reason, and
-  the entry SPEC §7.1 picks; and `WAI1` envelopes with whether their capability is
-  tried first (§4.3);
-- `queries.json`: two floor objects of the packaging corpus, whose codec string is the one
-  the packager wrote into its HLS master, and an HEVC SPS a platform's hardware encoder
-  wrote through WebCodecs.
-
-An implementation conforms when it gives every vector's result. The reference's tests
+An implementation conforms when it gives every query's members. The reference's tests
 (`platform_decode::tests`) also hold the AV1 codec string to the AV1-ISOBMFF binding's own
 examples, derive every floor of the packaging corpus to the codec string and size the
 packager wrote into the pack's HLS master, read constructed SPSs with sub-layers and with
-emulation-prevention bytes, and turn each rule of §4 off in turn to show that a vector
-catches it.
+emulation-prevention bytes, and hold `report_answer` to §3.
 
-`wai-web`'s `platform_decode` bundle binds the same code for a page
-(`platformQuery`, `platformOrder`), and `wai-web/demo/platform_decode.html`
-(`verify_platform_decode.mjs`) runs it against a browser's platform: every AV1 floor object
-of the packaging corpus, queried and decoded through WebCodecs with the configuration the
-query gives; the same codec family at 1920×1080; an HEVC stream the platform's own encoder
-writes, queried and decoded back; and the order over a learned entry and an AV1 entry from
-the answers the platform gave.
+`wai-web`'s `platform_decode` bundle binds the same code for a page (`platformQuery`,
+`platformAnswer`, and `platformChoose`, browser-sink §4.7's choice), and
+`wai-web/demo/platform_decode.html` (`verify_platform_decode.mjs`) runs it against a
+browser's platform: every AV1 floor object of the packaging corpus, queried and decoded
+through WebCodecs with the configuration its payload's query gives; an HEVC stream the
+platform's encoder writes, queried from that stream and decoded back; and the choice between
+a learned alternative and an AV1 floor object, from the report the page built from those
+answers. Every query the page asks is read from a payload.
 
 Measured 2026-10-22 with that page on an arm64 desktop (macOS 27.0.1), in headless
-Chromium 148 and a Chromium-based browser at 155, with the same results in both:
+Chromium 148 and a Chromium-based browser at 155, with the same results in both, before the
+page's order moved into browser-sink's routing:
 
 - every AV1 floor object of the packaging corpus (64×36, `av01.0.00M.08`) decoded every
   temporal unit through WebCodecs. The platform answered `supported` and `smooth`, not
-  `powerEfficient`, and did not accept `prefer-hardware` at that size; at 1920×1080 it
-  answered `supported`, `smooth` and `powerEfficient`, and accepted `prefer-hardware`;
-- the platform's HEVC encoder, configured as `hvc1.1.6.L93.B0` for 640×360, wrote an SPS
-  with `general_level_idc` 63, and the codec string it declared for its output repeated the
-  configured one. The query read `hev1.1.6.L63.B0` from the stream; the platform accepted
-  that configuration with both preferences, answered `supported`, `smooth` and
-  `powerEfficient`, and decoded every picture back with it;
-- with those answers, the order put the AV1 entry first and the learned entry without a
-  budget last, and picked the AV1 entry; with a qualifying budget on the learned entry,
-  both ranked first and the manifest's order picked the learned entry.
+  `powerEfficient`, and did not accept `prefer-hardware` at that size;
+- the platform's HEVC encoder, configured as `hvc1.1.6.L93.B0` for 640×360 with
+  `prefer-hardware`, wrote an SPS with `general_level_idc` 63, and the codec string it
+  declared for its output repeated the configured one. The query read `hev1.1.6.L63.B0` from
+  the stream; the platform accepted that configuration with both preferences, answered
+  `supported`, `smooth` and `powerEfficient`, and decoded every picture back with it.
 
-Not measured: a platform without hardware AV1 or HEVC decode, a platform that fakes its
-answers, and any engine but Chromium's.
+The choice step of the page was rewritten with the order and has not been run in a browser
+in this revision; a 1920×1080 answer the earlier page reported was for a configuration
+written by hand, not read from a payload, and is not restated. Not measured: a platform
+without hardware AV1 or HEVC decode, a platform that fakes its answers, and any engine but
+Chromium's.
 
-## 7. Security and privacy considerations
+## 6. Security and privacy considerations
 
 The answers are fingerprinting surface (§3, *Privacy*). The order reads them where they
 are produced and sends nothing. The query reads only the payload's headers; a malformed
 payload gives no query, and the entry is decoded, or not, as it would be without this
 extension. An encoder cannot raise an entry's rank by what it declares: the codec string
-is read from the payload, the class from the registry, and a budget qualifies only as §5
-says.
+is read from the payload, the class from the registry, the route from browser-sink's
+routing, and a learned entry ranks with classical decode only on a sink-metered figure the
+sink holds, never on one an envelope carries.
diff --git a/wai/platform-decode-conformance/README.md b/wai/platform-decode-conformance/README.md
index 1bc015687..39ac460d4 100644
--- a/wai/platform-decode-conformance/README.md
+++ b/wai/platform-decode-conformance/README.md
@@ -1,33 +1,22 @@
-# platform-decode-conformance — platform decode capabilities in dispatch
+# platform-decode-conformance — the query a sink asks a web platform
 
 Vectors for [`extensions/platform-decode.md`](../extensions/platform-decode.md): the query
 a sink reads from an entry's payload for a web platform's Media Capabilities and WebCodecs
-(§2), and the default order the platform's answers and the entries' energy budgets give
-SPEC §7.1 selection and SPEC §4 advertising (§4, §5).
+(§2). The order the platform's answers feed is SPEC §4's energy order inside browser-sink's
+routing, and its vectors are the `choices` of [`../live-conformance/browser/`](../live-conformance/browser/).
 
-**Provenance.** `order.json` is written by hand, one case per rule of §4 and §5, each with
-the reason it exists. `queries.json` names two floor objects of the packaging corpus
+**Provenance.** `queries.json` names two floor objects of the packaging corpus
 (`../pack-conformance/packs/`), whose codec strings are the ones the packager wrote into
-the packs' HLS masters, and carries one HEVC SPS that a platform's hardware encoder wrote
-through WebCodecs (§6 of the extension records the run).
+the packs' HLS masters, and carries one HEVC SPS that the platform's encoder wrote through
+WebCodecs, configured with `prefer-hardware`, a hint the user agent may ignore (§6 of the
+extension records the run).
 
 ## Layout
 
-- `order.json` — `cases`: a `WAI2` manifest's `entries`, each a `capability`, optional
-  `answers` (`decodingInfo`: `supported`, `smooth`, `powerEfficient`; `webcodecs`:
-  `hardwareAcceleration`, `supported`; `ownDecoder`) and an optional `budget` (§5's
-  members), and optional `rules` (`ceiling`, microjoules); `expect`: each entry's rank
-  (`first`, `smooth`, `classical`, `learned-without-budget`, or `null` for an entry the
-  sink cannot decode), the `order`, the entries `refused` with their reason, and the entry
-  `picked` at a sink that advertises every capability, checks no digest and holds no
-  parameter set. `wai1`: a `capability` and a `fallback` entry, whether the capability
-  is tried first for the envelope (`advertise`), and which of the two decodes where the
-  sink can decode both (§4.3).
 - `queries.json` — `cases`: a `capability`, a `payload_file` (a `WAI1` envelope, relative
   to `wai/`) or an `sps_hex`, and the query's members.
 
 ## Equivalence
 
-An implementation conforms when it gives every vector's ranks, order, refusals, pick and
-advertising decision, and every query's members. The reference is `wai::platform_decode`
-(`wai-rs/src/platform_decode.rs`), whose tests read these files.
+An implementation conforms when it gives every query's members. The reference is
+`wai::platform_decode` (`wai-rs/src/platform_decode.rs`), whose tests read this file.
diff --git a/wai/platform-decode-conformance/order.json b/wai/platform-decode-conformance/order.json
deleted file mode 100644
index c48cf7b9d..000000000
--- a/wai/platform-decode-conformance/order.json
+++ /dev/null
@@ -1,185 +0,0 @@
-{
-  "about": "platform-decode §4: the default order over a WAI2 manifest's entries, from each entry's capability, the platform's answers (Media Capabilities decodingInfo, WebCodecs isConfigSupported) and any energy budget; and §4.3, whether a WAI1 envelope's capability is advertised. Every entry's capability is advertised, no entry states a sha256 or a prior, so the pick is the first entry in the order. A budget is the energy-measurement extension's: here only the members this extension reads.",
-  "cases": [
-    {
-      "id": "power-efficient-classical-before-learned",
-      "why": "A learned reconstruction without a budget ranks below the AV1 rendition the platform marks supported, smooth and power-efficient, though the manifest lists it first.",
-      "entries": [
-        { "capability": "wai.neural.int_synth" },
-        { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": true } } }
-      ],
-      "expect": { "ranks": ["learned-without-budget", "first"], "order": [1, 0], "refused": [], "picked": 1 }
-    },
-    {
-      "id": "learned-with-a-budget-keeps-manifest-order",
-      "why": "With an OnChipCounter budget measured on a reference sink, the learned entry ranks with power-efficient classical decode, and the manifest order decides between them.",
-      "entries": [
-        { "capability": "wai.neural.int_hyper", "budget": { "class": "OnChipCounter", "joules_micro": 41000, "per": "frame", "relative_ppm": 20000, "window_us": 5000000, "reference_sink": "reference sink: arm64 desktop, SoC energy counter" } },
-        { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": true } } }
-      ],
-      "expect": { "ranks": ["first", "first"], "order": [0, 1], "refused": [], "picked": 0 }
-    },
-    {
-      "id": "a-modelled-budget-does-not-qualify",
-      "why": "A budget of the Estimator class is not a measurement: the learned entry ranks last.",
-      "entries": [
-        { "capability": "wai.neural.int_hyper", "budget": { "class": "Estimator", "joules_micro": 41000, "per": "frame", "relative_ppm": 20000, "window_us": 5000000, "reference_sink": "reference sink: arm64 desktop" } },
-        { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": true } } }
-      ],
-      "expect": { "ranks": ["learned-without-budget", "first"], "order": [1, 0], "refused": [], "picked": 1 }
-    },
-    {
-      "id": "a-budget-without-its-uncertainty-does-not-qualify",
-      "why": "An OnChipCounter figure with no declared uncertainty is not one energy-measurement §2.3 admits.",
-      "entries": [
-        { "capability": "wai.neural.int_hyper", "budget": { "class": "OnChipCounter", "joules_micro": 41000, "per": "frame", "relative_ppm": 0, "window_us": 5000000, "reference_sink": "reference sink: arm64 desktop" } },
-        { "capability": "wai.video.hevc", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": true } } }
-      ],
-      "expect": { "ranks": ["learned-without-budget", "first"], "order": [1, 0], "refused": [], "picked": 1 }
-    },
-    {
-      "id": "a-budget-above-the-deployers-ceiling",
-      "why": "The deployer sets a ceiling of 10000 microjoules a frame; a budget above it does not qualify.",
-      "rules": { "ceiling": 10000 },
-      "entries": [
-        { "capability": "wai.neural.int_hyper", "budget": { "class": "OnChipCounter", "joules_micro": 41000, "per": "frame", "relative_ppm": 20000, "window_us": 5000000, "reference_sink": "reference sink: arm64 desktop" } },
-        { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": true } } }
-      ],
-      "expect": { "ranks": ["learned-without-budget", "first"], "order": [1, 0], "refused": [], "picked": 1 }
-    },
-    {
-      "id": "learned-below-a-software-classical-decode",
-      "why": "A classical entry the sink decodes with a decoder of its own, with no platform answer, still ranks above a learned entry without a budget.",
-      "entries": [
-        { "capability": "wai.neural.int_synth" },
-        { "capability": "wai.video.av1" }
-      ],
-      "expect": { "ranks": ["learned-without-budget", "classical"], "order": [1, 0], "refused": [], "picked": 1 }
-    },
-    {
-      "id": "unsupported-by-the-platform-and-no-decoder-of-its-own",
-      "why": "decodingInfo answers supported: false and the sink holds no AV1 decoder of its own: the entry is skipped as missing_capability, and the learned entry is picked.",
-      "entries": [
-        { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": false, "smooth": false, "powerEfficient": false }, "ownDecoder": false } },
-        { "capability": "wai.neural.int_synth" }
-      ],
-      "expect": { "ranks": [null, "learned-without-budget"], "order": [1], "refused": [[0, "missing_capability"]], "picked": 1 }
-    },
-    {
-      "id": "unsupported-by-the-platform-with-a-decoder-of-its-own",
-      "why": "The platform cannot decode it, the sink's own decoder can: a classical entry with no platform answer, still above learned decode without a budget.",
-      "entries": [
-        { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": false, "smooth": false, "powerEfficient": false }, "ownDecoder": true } },
-        { "capability": "wai.neural.int_synth" }
-      ],
-      "expect": { "ranks": ["classical", "learned-without-budget"], "order": [0, 1], "refused": [], "picked": 0 }
-    },
-    {
-      "id": "webcodecs-refuses-the-configuration",
-      "why": "Media Capabilities marks the configuration power-efficient, but the sink decodes through WebCodecs and isConfigSupported refuses it with the preference the sink configures: unsupported through the platform.",
-      "entries": [
-        { "capability": "wai.video.hevc", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": true }, "webcodecs": { "hardwareAcceleration": "prefer-hardware", "supported": false } } },
-        { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": false }, "webcodecs": { "hardwareAcceleration": "no-preference", "supported": true } } }
-      ],
-      "expect": { "ranks": [null, "smooth"], "order": [1], "refused": [[0, "missing_capability"]], "picked": 1 }
-    },
-    {
-      "id": "smooth-and-power-efficient-before-smooth",
-      "why": "Two classical entries: the power-efficient one ranks first though listed second.",
-      "entries": [
-        { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": false } } },
-        { "capability": "wai.video.hevc", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": true } } }
-      ],
-      "expect": { "ranks": ["smooth", "first"], "order": [1, 0], "refused": [], "picked": 1 }
-    },
-    {
-      "id": "smooth-before-power-efficient-but-not-smooth",
-      "why": "A decode the platform calls power-efficient but not smooth drops frames: it ranks below a smooth one.",
-      "entries": [
-        { "capability": "wai.video.hevc", "answers": { "decodingInfo": { "supported": true, "smooth": false, "powerEfficient": true } } },
-        { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": false } } }
-      ],
-      "expect": { "ranks": ["classical", "smooth"], "order": [1, 0], "refused": [], "picked": 1 }
-    },
-    {
-      "id": "manifest-order-within-a-rank",
-      "why": "Two power-efficient classical entries keep the manifest's order.",
-      "entries": [
-        { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": true } } },
-        { "capability": "wai.video.hevc", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": true } } }
-      ],
-      "expect": { "ranks": ["first", "first"], "order": [0, 1], "refused": [], "picked": 0 }
-    },
-    {
-      "id": "an-unregistered-capability-ranks-as-learned",
-      "why": "Nothing says a capability this revision does not register is classical.",
-      "entries": [
-        { "capability": "x-example.video.codec" },
-        { "capability": "wai.video.av1" }
-      ],
-      "expect": { "ranks": ["learned-without-budget", "classical"], "order": [1, 0], "refused": [], "picked": 1 }
-    },
-    {
-      "id": "a-float-learned-decode-and-an-integer-one",
-      "why": "Two learned entries, one with a budget: it ranks first.",
-      "entries": [
-        { "capability": "wai.neural.mbt2018_mean" },
-        { "capability": "wai.neural.int_hyper", "budget": { "class": "OnChipCounter", "joules_micro": 52000, "per": "picture", "relative_ppm": 15000, "window_us": 2000000, "reference_sink": "reference sink: x86_64 desktop, package energy counter" } }
-      ],
-      "expect": { "ranks": ["learned-without-budget", "first"], "order": [1, 0], "refused": [], "picked": 1 }
-    },
-    {
-      "id": "lossless-av1-is-classical",
-      "why": "wai.video.av1.lossless is a standard codec: with no answer it ranks as classical decode.",
-      "entries": [
-        { "capability": "wai.neural.int_synth" },
-        { "capability": "wai.video.av1.lossless" }
-      ],
-      "expect": { "ranks": ["learned-without-budget", "classical"], "order": [1, 0], "refused": [], "picked": 1 }
-    }
-  ],
-  "wai1": [
-    {
-      "id": "learned-capability-power-efficient-fallback",
-      "why": "SPEC §4 with a learned capability and no budget, over an AV1 fallback the platform marks power-efficient: the capability is not advertised for this envelope, and step 5 decodes the fallback.",
-      "capability": { "capability": "wai.neural.int_hyper" },
-      "fallback": { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": true } } },
-      "expect": { "advertise": false, "decodes": "fallback" }
-    },
-    {
-      "id": "learned-capability-with-a-budget",
-      "why": "With a qualifying budget the capability is advertised as usual, and step 3 decodes it.",
-      "capability": { "capability": "wai.neural.int_hyper", "budget": { "class": "OnChipCounter", "joules_micro": 41000, "per": "frame", "relative_ppm": 20000, "window_us": 5000000, "reference_sink": "reference sink: arm64 desktop" } },
-      "fallback": { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": true } } },
-      "expect": { "advertise": true, "decodes": "capability" }
-    },
-    {
-      "id": "learned-capability-fallback-not-power-efficient",
-      "why": "A smooth classical fallback the platform does not mark power-efficient still ranks above a learned capability without a budget (§4.2): step 5 is tried first, and decodes the fallback.",
-      "capability": { "capability": "wai.neural.int_hyper" },
-      "fallback": { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": true, "powerEfficient": false } } },
-      "expect": { "advertise": false, "decodes": "fallback" }
-    },
-    {
-      "id": "learned-capability-classical-fallback-no-platform",
-      "why": "A sink with no platform to ask, or one that decodes the fallback with its own decoder: the classical fallback ranks classical, above a learned capability without a budget, and decodes.",
-      "capability": { "capability": "wai.neural.int_hyper" },
-      "fallback": { "capability": "wai.video.av1" },
-      "expect": { "advertise": false, "decodes": "fallback" }
-    },
-    {
-      "id": "classical-capability-learned-fallback",
-      "why": "A classical capability is advertised as usual.",
-      "capability": { "capability": "wai.video.av1", "answers": { "decodingInfo": { "supported": true, "smooth": false, "powerEfficient": false } } },
-      "fallback": { "capability": "wai.neural.int_synth" },
-      "expect": { "advertise": true, "decodes": "capability" }
-    },
-    {
-      "id": "learned-capability-no-fallback",
-      "why": "With no fallback there is nothing to prefer: the capability is advertised as usual.",
-      "capability": { "capability": "wai.neural.int_synth" },
-      "fallback": null,
-      "expect": { "advertise": true, "decodes": "capability" }
-    }
-  ]
-}
diff --git a/wai/platform-decode-conformance/queries.json b/wai/platform-decode-conformance/queries.json
index 7d0236360..712fed81d 100644
--- a/wai/platform-decode-conformance/queries.json
+++ b/wai/platform-decode-conformance/queries.json
@@ -1,5 +1,5 @@
 {
-  "about": "platform-decode §2: the query a sink reads from an entry's payload. payload_file names a WAI1 envelope under wai/ whose payload is the entry's; sps_hex is an HEVC SPS NAL unit, header included, as an Annex B stream carries it. The two AV1 objects are floor objects of the packaging corpus (SPEC §5's AV1 framing); their codec string is the one the packager wrote into the pack's HLS master. The SPS is the one a platform's hardware HEVC encoder wrote through WebCodecs, configured as hvc1.1.6.L93.B0 for 640x360: it states general_level_idc 63 (level 2.1), and the codec string the encoder declared for its output repeated the configured one.",
+  "about": "platform-decode §2: the query a sink reads from an entry's payload. payload_file names a WAI1 envelope under wai/ whose payload is the entry's; sps_hex is an HEVC SPS NAL unit, header included, as an Annex B stream carries it. The two AV1 objects are floor objects of the packaging corpus (SPEC §5's AV1 framing); their codec string is the one the packager wrote into the pack's HLS master. The SPS is the one the platform's HEVC encoder wrote through WebCodecs, configured as hvc1.1.6.L93.B0 for 640x360 with prefer-hardware (a hint the user agent may ignore, so nothing here says which encoder ran): it states general_level_idc 63 (level 2.1), and the codec string the encoder declared for its output repeated the configured one.",
   "cases": [
     {
       "id": "corpus-floor-object-60-units",
@@ -14,7 +14,7 @@
       "expect": { "codec": "av01.0.00M.08", "width": 64, "height": 36, "codedWidth": 64, "codedHeight": 36, "framerate": [25, 1], "bitrate": 8715, "bitDepth": 8 }
     },
     {
-      "id": "hardware-encoder-sps",
+      "id": "platform-encoder-sps",
       "capability": "wai.video.hevc",
       "sps_hex": "420101016000000300b0000003000003003fa005020171f2e206ee45914bff2e7f13fa9b8086808040",
       "expect": { "codec": "hev1.1.6.L63.B0", "width": 640, "height": 360, "codedWidth": 640, "codedHeight": 368, "bitDepth": 8 }
diff --git a/wai/registry/capabilities.schema.json b/wai/registry/capabilities.schema.json
index 0659b912c..8cc578282 100644
--- a/wai/registry/capabilities.schema.json
+++ b/wai/registry/capabilities.schema.json
@@ -241,77 +241,6 @@
                 }
               }
             }
-          },
-          "energy_budget": {
-            "type": "object",
-            "description": "A learned capability's energy budget (energy-measurement §2.10): its decode figure measured on a reference sink under OnChipCounter, with its evidence, in a signed record named by its digest; platform-decode §5 reads class, joules_micro, per, relative_ppm, window_us and reference_sink. Absent for a capability whose registration states none; no registration states one in this revision.",
-            "additionalProperties": false,
-            "required": [
-              "class",
-              "joules_micro",
-              "per",
-              "relative_ppm",
-              "window_us",
-              "filtering",
-              "reference_sink",
-              "resolution",
-              "record"
-            ],
-            "properties": {
-              "class": {
-                "const": "OnChipCounter"
-              },
-              "joules_micro": {
-                "type": "integer",
-                "minimum": 1
-              },
-              "per": {
-                "enum": [
-                  "frame",
-                  "picture",
-                  "second"
-                ]
-              },
-              "relative_ppm": {
-                "type": "integer",
-                "minimum": 1
-              },
-              "window_us": {
-                "type": "integer",
-                "minimum": 1
-              },
-              "filtering": {
-                "enum": [
-                  "On",
-                  "Off",
-                  "Unknown"
-                ]
-              },
-              "reference_sink": {
-                "type": "string",
-                "minLength": 1
-              },
-              "resolution": {
-                "oneOf": [
-                  {
-                    "type": "null"
-                  },
-                  {
-                    "type": "array",
-                    "minItems": 2,
-                    "maxItems": 2,
-                    "items": {
-                      "type": "integer",
-                      "minimum": 1
-                    }
-                  }
-                ]
-              },
-              "record": {
-                "type": "string",
-                "pattern": "^[0-9a-f]{64}$"
-              }
-            }
           }
         }
       }
diff --git a/wai/wai-rs/src/platform_decode.rs b/wai/wai-rs/src/platform_decode.rs
index ddb117594..5d3ed6ca2 100644
--- a/wai/wai-rs/src/platform_decode.rs
+++ b/wai/wai-rs/src/platform_decode.rs
@@ -1,31 +1,24 @@
-//! Platform decode capabilities in dispatch ([platform-decode](../../extensions/platform-decode.md)):
+//! Platform decode capabilities ([platform-decode](../../extensions/platform-decode.md)):
 //! what a sink asks a web platform about an entry it could decode through the platform's
 //! own decoders — Media Capabilities `decodingInfo()` and WebCodecs `isConfigSupported()` —
-//! and how the answers order and restrict WAI's selection (SPEC §4, §7.1).
+//! read from the entry's payload, and how the answers enter browser-sink's capability
+//! report.
 //!
 //! - [`query`]: the configuration a sink asks about for an entry (§2): the codec string,
-//!   the size, the frame rate and the bit rate, read from the payload.
-//! - [`Answers`]: what the platform answered (§3). `supported: false` makes the capability
-//!   unsupported for that object through the platform; `smooth` and `powerEfficient` only
-//!   order the entries. Neither is an energy figure.
-//! - [`EnergyBudget`]: what lets a learned reconstruction rank with power-efficient
-//!   classical decode (§5): a figure of the `OnChipCounter` class measured on a reference
-//!   sink, as [energy-measurement](../../extensions/energy-measurement.md) defines one.
-//! - [`rank`] and [`order`]: the default order (§4), a deployer policy SPEC §7.1 step 2
-//!   allows: power-efficient classical decode and learned decode with a budget first, then
-//!   smooth classical decode, then any other classical decode, then learned decode without
-//!   a budget; within a rank, manifest order.
-//! - [`select`]: SPEC §7.1 selection over a `WAI2` manifest in that order, and
-//!   [`advertise_for_envelope`]: SPEC §4 for a `WAI1` envelope, where the rule decides
-//!   whether a learned capability is advertised for an envelope whose fallback a platform
-//!   decodes power-efficiently.
+//!   the size, the frame rate and the bit rate, read from the payload, never from what an
+//!   encoder declared.
+//! - [`report_answer`]: the answer in browser-sink §3's shape (§3): `supported` from
+//!   WebCodecs, `smooth` and `power_efficient` from Media Capabilities only once WebCodecs
+//!   said supported. Hints, never an energy figure and never evidence of hardware.
+//! - [`HardwareAcceleration`]: WebCodecs' preference, a hint the user agent may ignore.
 //!
-//! Nothing here calls a platform: the answers are inputs, so the order is a function of
-//! the manifest, the answers and the budgets, and its vectors
-//! (`wai/platform-decode-conformance/`) run on every target.
+//! The order the answers feed is SPEC §4's energy order, applied inside browser-sink's
+//! routing (browser-sink §4.7, `crate::energy_order`): an answer counts only for an object
+//! the page routes to the user agent's decoder. Nothing here calls a platform: the answers
+//! are inputs, and the query's vectors (`wai/platform-decode-conformance/`) run on every
+//! target.
 
-use crate::codecs::{self, ReplicateClass};
-use crate::container::{self, ManifestV2, PinRefusal, Prior, RenditionMeta, Skip};
+use crate::codecs;
 
 // ---------------------------------------------------------------- the query (§2)
 
@@ -606,275 +599,20 @@ impl HardwareAcceleration {
     }
 }
 
-/// `MediaCapabilitiesInfo` (Media Capabilities §2.2) for the entry's query.
-#[derive(Debug, Clone, Copy, PartialEq, Eq)]
-pub struct DecodingInfo {
-    pub supported: bool,
-    pub smooth: bool,
-    /// The user agent's judgement that the decode's power draw is optimal, its definition
-    /// left to the user agent (§2.2): an ordering signal, never an energy figure.
-    pub power_efficient: bool,
-}
-
-/// What the platform answered about one entry, through the path the sink decodes it by.
-#[derive(Debug, Clone, PartialEq, Eq, Default)]
-pub struct Answers {
-    /// `decodingInfo()` for the entry's query.
-    pub decoding_info: Option,
-    /// `VideoDecoder.isConfigSupported()` for the entry's query with the hardware
-    /// acceleration the sink will configure: `(that preference, supported)`. Present when
-    /// the sink decodes the entry through WebCodecs.
-    pub webcodecs: Option<(HardwareAcceleration, bool)>,
-    /// Whether the sink holds a decoder of its own for the capability, apart from the
-    /// platform's (a WebAssembly AV1 decoder, say), which it uses when the platform's
-    /// path is unsupported.
-    pub own_decoder: bool,
-}
-
-// ---------------------------------------------------------------- the budget (§5)
-
-/// An energy budget for a learned reconstruction (§5): the energy-measurement extension
-/// defines it and how it is carried and checked; the order reads only these members.
-#[derive(Debug, Clone, PartialEq, Eq)]
-pub struct EnergyBudget {
-    /// The acquisition class (energy-measurement §2), by its name.
-    pub class: String,
-    /// The figure: microjoules for one unit of decode.
-    pub joules_micro: u64,
-    /// What one unit is: `frame`, `picture` or `second` of output.
-    pub per: String,
-    /// The declared standard uncertainty, parts per million (energy-measurement §2.3).
-    pub relative_ppm: u64,
-    /// The integration window, microseconds (energy-measurement §2.3).
-    pub window_us: u64,
-    /// The reference sink it was measured on.
-    pub reference_sink: String,
-}
-
-/// Why a budget does not let a learned entry rank with power-efficient classical decode.
-#[derive(Debug, Clone, PartialEq, Eq)]
-pub enum BudgetRefusal {
-    /// Its class is not `OnChipCounter`.
-    Class(String),
-    /// A zero figure, uncertainty or window, or no reference sink: not a measurement.
-    NotMeasured,
-    /// A unit other than `frame`, `picture` or `second`.
-    Unit(String),
-    /// Above the ceiling the deployer set for that unit.
-    Ceiling { joules_micro: u64, ceiling: u64 },
-}
-
-impl EnergyBudget {
-    /// Whether the budget lets its entry rank first (§5): of the `OnChipCounter` class,
-    /// measured (a figure, an uncertainty and a window, each non-zero, on a named reference
-    /// sink), per a unit this extension reads, and, where the deployer sets a ceiling for
-    /// that unit, at or below it.
-    pub fn qualifies(&self, ceiling: Option) -> Result<(), BudgetRefusal> {
-        if self.class != "OnChipCounter" {
-            return Err(BudgetRefusal::Class(self.class.clone()));
-        }
-        if self.joules_micro == 0 || self.relative_ppm == 0 || self.window_us == 0 || self.reference_sink.is_empty() {
-            return Err(BudgetRefusal::NotMeasured);
-        }
-        if !matches!(self.per.as_str(), "frame" | "picture" | "second") {
-            return Err(BudgetRefusal::Unit(self.per.clone()));
-        }
-        match ceiling {
-            Some(c) if self.joules_micro > c => Err(BudgetRefusal::Ceiling { joules_micro: self.joules_micro, ceiling: c }),
-            _ => Ok(()),
-        }
-    }
-}
-
-// ---------------------------------------------------------------- the order (§4)
-
-/// Whether an entry's capability is decoded by a learned reconstruction (§4.1): its
-/// registry class is a neural, generative or behavioural one. A capability this revision
-/// does not register is ranked as learned: nothing says it is classical.
-pub fn is_learned(capability: &str) -> bool {
-    use ReplicateClass::*;
-    !matches!(codecs::capability_replicate_class(capability), Some(StandardDefined | StandardTolerance | StandardUnclassified))
-}
-
-/// An entry's rank under the default order (§4.2); lower ranks are tried first.
-#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
-pub enum Rank {
-    /// Classical decode the platform marks supported, smooth and power-efficient; or a
-    /// learned reconstruction whose budget qualifies (§5).
-    First = 0,
-    /// Classical decode the platform marks supported and smooth, not power-efficient.
-    Smooth = 1,
-    /// Any other classical decode the sink can make: not smooth, or with no platform
-    /// answer (its own decoder).
-    Classical = 2,
-    /// A learned reconstruction without a qualifying budget.
-    LearnedWithoutBudget = 3,
-}
-
-impl Rank {
-    pub fn as_str(self) -> &'static str {
-        match self {
-            Self::First => "first",
-            Self::Smooth => "smooth",
-            Self::Classical => "classical",
-            Self::LearnedWithoutBudget => "learned-without-budget",
-        }
-    }
-}
-
-/// One entry as the order reads it.
-#[derive(Debug, Clone, Copy)]
-pub struct Entry<'a> {
-    pub capability: &'a str,
-    /// The platform's answers, for a classical entry the sink could decode through the
-    /// platform; `None` when it asks nothing (a learned entry, or no platform).
-    pub answers: Option<&'a Answers>,
-    pub budget: Option<&'a EnergyBudget>,
-}
-
-/// The rules the order applies; [`Rules::DEFAULT`] is §4's. A test turns one off to show
-/// the vectors catch it.
-#[derive(Debug, Clone, Copy, PartialEq, Eq)]
-pub struct Rules {
-    /// §4.2: a learned entry without a qualifying budget ranks below every classical entry.
-    pub learned_below_classical: bool,
-    /// §3: `supported: false` makes the platform path unsupported.
-    pub unsupported_is_unsupported: bool,
-    /// §5: a budget qualifies only as [`EnergyBudget::qualifies`] says.
-    pub budget_must_qualify: bool,
-    /// The deployer's ceiling on a budget's figure, if any.
-    pub budget_ceiling: Option,
-}
-
-impl Rules {
-    pub const DEFAULT: Rules = Rules { learned_below_classical: true, unsupported_is_unsupported: true, budget_must_qualify: true, budget_ceiling: None };
-}
-
-/// An entry's rank, or `Err` when the sink cannot decode it at all: the platform answered
-/// `supported: false` for the path it decodes by and it holds no decoder of its own.
-pub fn rank(e: &Entry<'_>, rules: &Rules) -> Result {
-    if is_learned(e.capability) {
-        let qualified = e.budget.is_some_and(|b| !rules.budget_must_qualify || b.qualifies(rules.budget_ceiling).is_ok());
-        return Ok(if qualified || !rules.learned_below_classical { Rank::First } else { Rank::LearnedWithoutBudget });
-    }
-    let Some(a) = e.answers else { return Ok(Rank::Classical) };
-    let platform_says_no = a.decoding_info.is_some_and(|d| !d.supported) || a.webcodecs.is_some_and(|(_, s)| !s);
-    if platform_says_no && rules.unsupported_is_unsupported {
-        return if a.own_decoder { Ok(Rank::Classical) } else { Err(Skip::NotEligible) };
-    }
-    Ok(match a.decoding_info {
-        Some(d) if d.smooth && d.power_efficient => Rank::First,
-        Some(d) if d.smooth => Rank::Smooth,
-        _ => Rank::Classical,
-    })
-}
-
-/// The default order over `entries` (§4.2): their indices by rank, manifest order within a
-/// rank, and those the sink cannot decode with their reason (`missing_capability`).
-pub fn order(entries: &[Entry<'_>], rules: &Rules) -> (Vec, Vec<(usize, Skip)>) {
-    let mut ranked: Vec<(Rank, usize)> = Vec::new();
-    let mut out = Vec::new();
-    for (i, e) in entries.iter().enumerate() {
-        match rank(e, rules) {
-            Ok(r) => ranked.push((r, i)),
-            Err(s) => out.push((i, s)),
-        }
-    }
-    ranked.sort();
-    (ranked.into_iter().map(|(_, i)| i).collect(), out)
-}
-
-/// What [`select`] gives: the picked index, what `verify` returned for it and the entries
-/// skipped before it; or every entry's index and reason.
-pub type Selection = Result<(usize, Option, Vec<(usize, Skip)>), Vec<(usize, Skip)>>;
-
-/// SPEC §7.1 selection in the default order: `answers` and `budgets` give each entry's,
-/// by index; `advertises` is the sink's capability test; `digest_ok` and `verify` are
-/// [`container::select_entries`]'s. An entry the platform cannot decode is skipped as
-/// `missing_capability`, and an entry the order puts later is tried later; the digest and
-/// pin checks are SPEC §7.1's, unchanged.
-#[allow(clippy::too_many_arguments)]
-pub fn select(
-    manifest: &ManifestV2,
-    answers: impl Fn(usize, &RenditionMeta) -> Option,
-    budgets: impl Fn(usize, &RenditionMeta) -> Option,
-    advertises: impl Fn(&str) -> bool,
-    rules: &Rules,
-    digest_ok: impl Fn(usize, &RenditionMeta) -> bool,
-    verify: impl FnMut(&str, &Prior) -> Result,
-) -> Selection {
-    let metas = &manifest.renditions;
-    let held_answers: Vec> = metas.iter().enumerate().map(|(i, m)| answers(i, m)).collect();
-    let held_budgets: Vec> = metas.iter().enumerate().map(|(i, m)| budgets(i, m)).collect();
-    let entries: Vec> = metas
-        .iter()
-        .enumerate()
-        .map(|(i, m)| Entry { capability: m.capability.as_str(), answers: held_answers[i].as_ref(), budget: held_budgets[i].as_ref() })
-        .collect();
-    let (mut ord, refused) = order(&entries, rules);
-    // The refused entries are still walked, last, so their reason is reported in place.
-    ord.extend(refused.iter().map(|(i, _)| *i));
-    let refused_at: Vec = refused.iter().map(|(i, _)| *i).collect();
-    container::select_entries(
-        manifest,
-        &ord,
-        |i, m| {
-            if refused_at.contains(&i) || !advertises(&m.capability) {
-                Err(Skip::NotEligible)
-            } else {
-                Ok(())
-            }
-        },
-        digest_ok,
-        verify,
-    )
-}
-
-/// SPEC §4 for a `WAI1` envelope under the default order: whether the sink tries
-/// `capability` first (step 3 before step 5) for this envelope. A learned capability
-/// without a qualifying budget is not tried first when the envelope's `fallback` ranks
-/// above it (§4.2): a classical capability the sink can decode, or a learned one with a
-/// qualifying budget. Step 5 then comes first, and step 3 only if step 5 does not decode,
-/// as `Wai::dispatch_with` takes them. Anything else is tried as the sink otherwise would
-/// (`advertised`).
-pub fn advertise_for_envelope(capability: &Entry<'_>, fallback: Option<&Entry<'_>>, advertised: bool, rules: &Rules) -> bool {
-    if !advertised {
-        return false;
-    }
-    let Some(fb) = fallback else { return true };
-    match (rank(capability, rules), rank(fb, rules)) {
-        (Ok(Rank::LearnedWithoutBudget), Ok(f)) => f >= Rank::LearnedWithoutBudget,
-        _ => true,
-    }
-}
-
-// ---------------------------------------------------------------- JSON forms
-
-/// [`Answers`] from the JSON the vectors and the browser binding use:
-/// `{"decodingInfo": {"supported", "smooth", "powerEfficient"}, "webcodecs":
-/// {"hardwareAcceleration", "supported"}, "ownDecoder"}`, each member optional.
-pub fn answers_from_json(v: &serde_json::Value) -> Result {
-    let flag = |o: &serde_json::Value, k: &str| o.get(k).and_then(serde_json::Value::as_bool).ok_or(format!("answers: no boolean {k}"));
-    let decoding_info = match v.get("decodingInfo") {
-        None | Some(serde_json::Value::Null) => None,
-        Some(d) => Some(DecodingInfo { supported: flag(d, "supported")?, smooth: flag(d, "smooth")?, power_efficient: flag(d, "powerEfficient")? }),
+/// The answer a page enters in browser-sink's capability report for one codec string
+/// (browser-sink §3: `supported`, `smooth`, `power_efficient`, `probe`), from what the
+/// platform said (§3): `supported` from `isConfigSupported()` for the preference the sink
+/// will configure, and `smooth` and `power_efficient` from `decodingInfo()`'s answer, read
+/// only where `isConfigSupported()` said supported (Media Capabilities is a further question
+/// about a decoder already found, http-delivery §12.2): a Media Capabilities `supported` of
+/// `false` overrides nothing. `probe` is `not_run`: this extension runs none (browser-sink
+/// §4.4). One shape, the report's, carries the answers; nothing here is an energy figure.
+pub fn report_answer(webcodecs_supported: bool, decoding_info: Option<(bool, bool)>) -> serde_json::Value {
+    let (smooth, power_efficient) = match decoding_info {
+        Some((s, p)) if webcodecs_supported => (serde_json::Value::Bool(s), serde_json::Value::Bool(p)),
+        _ => (serde_json::Value::Null, serde_json::Value::Null),
     };
-    let webcodecs = match v.get("webcodecs") {
-        None | Some(serde_json::Value::Null) => None,
-        Some(w) => {
-            let h = w.get("hardwareAcceleration").and_then(serde_json::Value::as_str).and_then(HardwareAcceleration::parse).ok_or("answers: webcodecs.hardwareAcceleration is not a HardwareAcceleration")?;
-            Some((h, flag(w, "supported")?))
-        }
-    };
-    Ok(Answers { decoding_info, webcodecs, own_decoder: v.get("ownDecoder").and_then(serde_json::Value::as_bool).unwrap_or(false) })
-}
-
-/// [`EnergyBudget`] from its JSON form: `class`, `joules_micro`, `per`, `relative_ppm`,
-/// `window_us`, `reference_sink`.
-pub fn budget_from_json(v: &serde_json::Value) -> Result {
-    let s = |k: &str| v.get(k).and_then(serde_json::Value::as_str).map(str::to_string).ok_or(format!("budget: no string {k}"));
-    let n = |k: &str| v.get(k).and_then(serde_json::Value::as_u64).ok_or(format!("budget: no integer {k}"));
-    Ok(EnergyBudget { class: s("class")?, joules_micro: n("joules_micro")?, per: s("per")?, relative_ppm: n("relative_ppm")?, window_us: n("window_us")?, reference_sink: s("reference_sink")? })
+    serde_json::json!({ "supported": webcodecs_supported, "smooth": smooth, "power_efficient": power_efficient, "probe": "not_run" })
 }
 
 /// A query's JSON form for a caller that asks a platform: its members, with the
@@ -896,28 +634,5 @@ pub fn query_json(q: &Query) -> serde_json::Value {
     })
 }
 
-/// The default order over a `WAI2` manifest's entries as JSON, from each entry's answers
-/// and budget (arrays aligned with the entries, `null` where none): `ranks` (each rank's
-/// name, `null` for an entry the sink cannot decode), `order`, `refused` (`[index,
-/// reason]`), and `picked`, the entry SPEC §7.1 picks at a sink that advertises every
-/// capability, holds no parameter set and checks no digest.
-pub fn order_json(manifest: &ManifestV2, answers: &[Option], budgets: &[Option], rules: &Rules) -> serde_json::Value {
-    let n = manifest.renditions.len();
-    let a = |i: usize| answers.get(i).cloned().flatten();
-    let b = |i: usize| budgets.get(i).cloned().flatten();
-    let held_a: Vec> = (0..n).map(a).collect();
-    let held_b: Vec> = (0..n).map(b).collect();
-    let entries: Vec> = manifest.renditions.iter().enumerate().map(|(i, m)| Entry { capability: m.capability.as_str(), answers: held_a[i].as_ref(), budget: held_b[i].as_ref() }).collect();
-    let ranks: Vec = entries.iter().map(|e| rank(e, rules).map_or(serde_json::Value::Null, |r| r.as_str().into())).collect();
-    let (ord, refused) = order(&entries, rules);
-    let picked = select(manifest, |i, _| a(i), |i, _| b(i), |_| true, rules, |_, _| true, container::no_parameter_sets()).ok().map(|(i, _, _)| i);
-    serde_json::json!({
-        "ranks": ranks,
-        "order": ord,
-        "refused": refused.iter().map(|(i, s)| serde_json::json!([i, s.code()])).collect::>(),
-        "picked": picked,
-    })
-}
-
 #[cfg(test)]
 mod tests;
diff --git a/wai/wai-rs/src/platform_decode/tests.rs b/wai/wai-rs/src/platform_decode/tests.rs
index 762d6600b..3a489a4e9 100644
--- a/wai/wai-rs/src/platform_decode/tests.rs
+++ b/wai/wai-rs/src/platform_decode/tests.rs
@@ -1,11 +1,11 @@
-//! The queries against real AV1 floors and constructed sequence headers and SPSs, and the
-//! default order against `wai/platform-decode-conformance/order.json`; then each rule of
-//! the order, turned off, is shown to be caught by a vector.
+//! The queries against real AV1 floors and constructed sequence headers and SPSs, the
+//! query vectors of `wai/platform-decode-conformance/queries.json`, and the answer a page
+//! enters in browser-sink's report. The order the answers feed is `energy_order`'s and
+//! browser-sink §4.7's, tested there.
 
 use super::*;
 use serde_json::Value;
 
-const ORDER: &str = include_str!("../../../platform-decode-conformance/order.json");
 const QUERIES: &str = include_str!("../../../platform-decode-conformance/queries.json");
 
 // ---------------------------------------------------------------- a bit writer
@@ -424,113 +424,26 @@ fn hevc_codec_strings_and_queries() {
     assert!(matches!(query(codecs::CAP_VIDEO_HEVC, &[0, 0, 1, 2, 1, 0x80], None), Err(QueryError::Malformed(_))), "no SPS");
 }
 
-// ---------------------------------------------------------------- the order
-
-fn answers_of(v: &Value) -> Option {
-    v.get("answers").map(|a| answers_from_json(a).unwrap())
-}
-
-fn budget_of(v: &Value) -> Option {
-    v.get("budget").map(|b| budget_from_json(b).unwrap())
-}
-
-fn rules_of(case: &Value, base: Rules) -> Rules {
-    Rules { budget_ceiling: case.get("rules").and_then(|r| r.get("ceiling")).and_then(Value::as_u64), ..base }
-}
-
-/// Every vector of `order.json` under `base`; `Err` names the first that differs.
-fn run_vectors(base: Rules) -> Result {
-    let v: Value = serde_json::from_str(ORDER).unwrap();
-    let mut n = 0;
-    for case in v["cases"].as_array().unwrap() {
-        let id = case["id"].as_str().unwrap();
-        let rules = rules_of(case, base);
-        let es = case["entries"].as_array().unwrap();
-        let answers: Vec> = es.iter().map(answers_of).collect();
-        let budgets: Vec> = es.iter().map(budget_of).collect();
-        let entries: Vec> = es.iter().enumerate().map(|(i, e)| Entry { capability: e["capability"].as_str().unwrap(), answers: answers[i].as_ref(), budget: budgets[i].as_ref() }).collect();
-        let want = &case["expect"];
-        let renditions: Vec = es.iter().map(|e| serde_json::json!({ "capability": e["capability"], "kind": "bytes" })).collect();
-        let manifest: ManifestV2 = serde_json::from_value(serde_json::json!({ "wai": "1.1", "media": "video", "intent": "display", "renditions": renditions, "target": null })).unwrap();
-        let got = order_json(&manifest, &answers, &budgets, &rules);
-        for k in ["ranks", "order", "refused", "picked"] {
-            if got[k] != want[k] {
-                return Err(format!("{id}: {k} {}, not {}", got[k], want[k]));
-            }
-        }
-        // The same ranks, entry by entry, through rank() directly.
-        for (i, e) in entries.iter().enumerate() {
-            let r = rank(e, &rules).map_or(Value::Null, |r| Value::from(r.as_str()));
-            if r != want["ranks"][i] {
-                return Err(format!("{id}: entry {i} ranks {r}"));
-            }
-        }
-        n += 1;
-    }
-    for case in v["wai1"].as_array().unwrap() {
-        let id = case["id"].as_str().unwrap();
-        let rules = rules_of(case, base);
-        let (ca, cb) = (answers_of(&case["capability"]), budget_of(&case["capability"]));
-        let cap = Entry { capability: case["capability"]["capability"].as_str().unwrap(), answers: ca.as_ref(), budget: cb.as_ref() };
-        let (fa, fbud) = if case["fallback"].is_null() { (None, None) } else { (answers_of(&case["fallback"]), budget_of(&case["fallback"])) };
-        let fb = (!case["fallback"].is_null()).then(|| Entry { capability: case["fallback"]["capability"].as_str().unwrap(), answers: fa.as_ref(), budget: fbud.as_ref() });
-        let adv = advertise_for_envelope(&cap, fb.as_ref(), true, &rules);
-        let decodes = if adv { "capability" } else { "fallback" };
-        if Value::from(adv) != case["expect"]["advertise"] || case["expect"]["decodes"] != decodes {
-            return Err(format!("{id}: advertise {adv}"));
-        }
-        n += 1;
-    }
-    Ok(n)
-}
+// ---------------------------------------------------------------- the answers
 
+/// browser-sink §3's answer from what the platform said: `supported` is WebCodecs' alone, a
+/// Media Capabilities `supported: false` overrides nothing, and `smooth` and
+/// `power_efficient` are read only once WebCodecs said supported.
 #[test]
-fn the_default_order_gives_every_vector() {
-    let n = run_vectors(Rules::DEFAULT).unwrap_or_else(|e| panic!("{e}"));
-    assert!(n >= 20, "{n} vectors");
+fn the_report_answer_takes_supported_from_webcodecs() {
+    let a = report_answer(true, Some((true, true)));
+    assert_eq!(a, serde_json::json!({ "supported": true, "smooth": true, "power_efficient": true, "probe": "not_run" }));
+    // Media Capabilities' own `supported` is not an input at all: a `media-source` answer is
+    // about the MSE pipeline, not the decoder WebCodecs found.
+    assert_eq!(report_answer(true, Some((false, false)))["supported"], true);
+    let no = report_answer(false, Some((true, true)));
+    assert_eq!((&no["supported"], &no["smooth"], &no["power_efficient"]), (&Value::Bool(false), &Value::Null, &Value::Null));
+    assert_eq!(report_answer(true, None)["power_efficient"], Value::Null, "nothing asked: not a power-efficient answer");
 }
 
-/// Each rule of the order, turned off, is caught: some vector differs.
-#[test]
-fn each_rule_turned_off_is_caught_by_a_vector() {
-    let off = [
-        ("learned below classical", Rules { learned_below_classical: false, ..Rules::DEFAULT }),
-        ("unsupported is unsupported", Rules { unsupported_is_unsupported: false, ..Rules::DEFAULT }),
-        ("a budget must qualify", Rules { budget_must_qualify: false, ..Rules::DEFAULT }),
-    ];
-    for (name, rules) in off {
-        let e = run_vectors(rules).err();
-        assert!(e.is_some(), "with \"{name}\" off every vector still passed");
-        println!("platform-decode rule off: {name}: caught by {}", e.unwrap());
-    }
-}
-
-#[test]
-fn a_budget_qualifies_only_as_a_measurement() {
-    let good = EnergyBudget { class: "OnChipCounter".into(), joules_micro: 1, per: "frame".into(), relative_ppm: 1, window_us: 1, reference_sink: "r".into() };
-    assert_eq!(good.qualifies(None), Ok(()));
-    assert_eq!(good.qualifies(Some(1)), Ok(()));
-    assert_eq!(good.qualifies(Some(0)), Err(BudgetRefusal::Ceiling { joules_micro: 1, ceiling: 0 }));
-    for class in ["ModelBased", "Estimator", "HwShunt", "CalibratedInstrument", ""] {
-        assert_eq!(EnergyBudget { class: class.into(), ..good.clone() }.qualifies(None), Err(BudgetRefusal::Class(class.into())));
-    }
-    assert_eq!(EnergyBudget { window_us: 0, ..good.clone() }.qualifies(None), Err(BudgetRefusal::NotMeasured));
-    assert_eq!(EnergyBudget { reference_sink: String::new(), ..good.clone() }.qualifies(None), Err(BudgetRefusal::NotMeasured));
-    assert_eq!(EnergyBudget { per: "byte".into(), ..good.clone() }.qualifies(None), Err(BudgetRefusal::Unit("byte".into())));
-}
-
-#[test]
-fn learned_is_read_from_the_registry_class() {
-    for c in [codecs::CAP_NEURAL_INT_SYNTH, codecs::CAP_NEURAL_INT_HYPER, codecs::CAP_IMAGE_JPEGAI, codecs::CAP_NEURAL_MBT2018_MEAN, codecs::CAP_SEMANTIC_CLIP, codecs::CAP_GENERATE_SPECTRAL] {
-        assert!(is_learned(c), "{c}");
-    }
-    for c in MAPPED.iter().copied().chain([codecs::CAP_VIDEO_INT_MOTION, codecs::CAP_IMAGE_PNG, codecs::CAP_VIDEO_VP9]) {
-        assert!(!is_learned(c), "{c}");
-    }
-}
-
-/// `queries.json`: two floor objects of the packaging corpus, and an SPS a hardware
-/// encoder wrote, whose level is not the one the encoder was configured with.
+/// `queries.json`: two floor objects of the packaging corpus, and an SPS the platform's
+/// encoder wrote, configured with `prefer-hardware`, whose level is not the one the encoder
+/// was configured with.
 #[test]
 fn the_query_vectors() {
     let v: Value = serde_json::from_str(QUERIES).unwrap();
diff --git a/wai/wai-rs/tests/int_kernels_vectors.rs b/wai/wai-rs/tests/int_kernels_vectors.rs
index b302a4006..687ed162d 100644
--- a/wai/wai-rs/tests/int_kernels_vectors.rs
+++ b/wai/wai-rs/tests/int_kernels_vectors.rs
@@ -221,6 +221,8 @@ fn every_decoded_output_states_a_sha256() {
         ("oer-conformance", "OER/2 receipts: receipt content, no decoded output"),
         ("pack-conformance", "encode/expected.json states the SHA-256 of every decoded frame (RGB8); the rest are policies, refusals, conversions and scene cuts, with no decoded output"),
         ("pin-conformance", "parameter-set pins: every digest there is a SHA-256 of a parameter set"),
+        ("platform-decode-conformance", "platform queries: codec strings and sizes read from payload headers; no case decodes a payload"),
+        ("wgsl-conformance", "WGSL's integer semantics: every case states its result word in full, never a digest of decoded output"),
         ("ops-conformance", "integer operators: every operator, stage and graph vector, the lower_* decodes of the sets under sets/ among them, states its output integers in full or its refusal code, never a digest of them; certificates/ states each lowered set's SHA-256 (a parameter-set identity) and holds the lowered graphs as bytes, compared byte for byte; the output digests a capability decoded through its lowering reproduces (integer-operators §14.4) are stated by that capability's own corpus"),
         ("signer-conformance", "key logs, grants and statuses: signed documents, no decoded output"),
         ("edge-conformance", "derivation records of a deriving edge: each replicate-tier output is recomputed and compared byte for byte by its verifier, and every output is named by its content hash in the record"),
diff --git a/wai/wai-web/Cargo.toml b/wai/wai-web/Cargo.toml
index 34389a271..a5ddee853 100644
--- a/wai/wai-web/Cargo.toml
+++ b/wai/wai-web/Cargo.toml
@@ -38,11 +38,12 @@ quantum_webgpu = ["wai/quantum_fabric", "wai/quantum_fabric_webgpu", "dep:wasm-b
 # into the IDE's bundle (scripts/wasm-pkgs.tsv on the site), which the console
 # also loads; off by default, so the main bundle is unchanged.
 quantum_engine = ["wai/quantum_engine"]
-# Platform decode capabilities in dispatch (src/platform_decode.rs,
-# extensions/platform-decode.md): the query a page makes of Media Capabilities and
-# WebCodecs for an entry, and the default order. Built as its own bundle with its own
-# --out-name (demo/platform_decode.html); off by default, so the main bundle is unchanged.
-platform_decode = []
+# Platform decode capabilities (src/platform_decode.rs, extensions/platform-decode.md): the
+# query a page makes of Media Capabilities and WebCodecs for an entry, the answer in
+# browser-sink's report, and browser-sink §4.7's choice among alternatives. Built as its own
+# bundle with its own --out-name (demo/platform_decode.html); off by default, so the main
+# bundle is unchanged.
+platform_decode = ["wai/browser_sink"]
 
 [dev-dependencies]
 # Pinned to the wasm-bindgen release Cargo.lock holds, so the test runner and the
diff --git a/wai/wai-web/demo/platform_decode.js b/wai/wai-web/demo/platform_decode.js
index 91bfe0874..fc352e117 100644
--- a/wai/wai-web/demo/platform_decode.js
+++ b/wai/wai-web/demo/platform_decode.js
@@ -1,16 +1,21 @@
-// Platform decode capabilities in dispatch (extensions/platform-decode.md), in a page.
+// Platform decode capabilities (extensions/platform-decode.md) and browser-sink §4.7's
+// choice, in a page.
 //
 // For each AV1 floor object of the packaging corpus (WAI1 envelopes whose payload is SPEC
 // §5's AV1 framing): the query the reference reads from the payload (platformQuery), the
-// platform's answers to it (Media Capabilities decodingInfo, WebCodecs isConfigSupported
-// with prefer-hardware and no-preference), and a decode of every temporal unit through
-// WebCodecs with the configuration the query gives. Then the same codec family at a
-// broadcast size; then an HEVC Annex B stream the platform's own encoder writes, read by
-// the reference's query and decoded back; then the default order (platformOrder) over a
-// manifest of a learned entry and an AV1 entry, from the answers this platform gave.
+// platform's answers to it (WebCodecs isConfigSupported with prefer-hardware and
+// no-preference; Media Capabilities decodingInfo, asked only once isConfigSupported said
+// supported for the preference the page configures), and a decode of every temporal unit
+// through WebCodecs with the configuration the query gives. Then an HEVC Annex B stream the
+// platform's encoder writes, configured with prefer-hardware (a hint), read by the
+// reference's query and decoded back. Then browser-sink §4.7's choice (platformChoose) over
+// a capability report of a learned alternative on the page's wasm decoder and the first
+// AV1 floor object, from the answers the platform gave for that object's own query: with no
+// figure for the learned alternative, and with a synthetic one. Every query is read from a
+// payload; none is written by hand.
 //
 // The report is left in window.platformDecode for verify_platform_decode.mjs to read.
-import init, { parse, platformQuery, platformOrder } from "./pkg-platform/wai_platform_decode.js";
+import init, { parse, platformQuery, platformAnswer, platformChoose } from "./pkg-platform/wai_platform_decode.js";
 
 const lines = [];
 const say = (l) => lines.push(l);
@@ -45,14 +50,16 @@ function hasSequenceHeader(tu) {
   return false;
 }
 
+/// WebCodecs first; Media Capabilities only once isConfigSupported has said supported for the
+/// preference the page configures (http-delivery §12.2), its own `supported` not read.
 async function answers(q) {
   const out = { decodingInfo: null, preferHardware: null, noPreference: null };
-  if (q.decodingConfiguration) {
+  out.preferHardware = (await VideoDecoder.isConfigSupported(q.decoderConfigPreferHardware)).supported;
+  out.noPreference = (await VideoDecoder.isConfigSupported(q.decoderConfigNoPreference)).supported;
+  if (q.decodingConfiguration && (out.preferHardware || out.noPreference)) {
     const d = await navigator.mediaCapabilities.decodingInfo(q.decodingConfiguration);
     out.decodingInfo = { supported: d.supported, smooth: d.smooth, powerEfficient: d.powerEfficient };
   }
-  out.preferHardware = (await VideoDecoder.isConfigSupported(q.decoderConfigPreferHardware)).supported;
-  out.noPreference = (await VideoDecoder.isConfigSupported(q.decoderConfigNoPreference)).supported;
   return out;
 }
 
@@ -68,7 +75,7 @@ async function decodeAll(config, chunks, frameUs) {
 }
 
 async function av1Objects(paths) {
-  let firstAnswers = null;
+  let first = null;
   for (const path of paths) {
     const bytes = new Uint8Array(await (await fetch(path)).arrayBuffer());
     const env = parse(bytes);
@@ -80,22 +87,9 @@ async function av1Objects(paths) {
     const config = { ...(a.preferHardware ? q.decoderConfigPreferHardware : q.decoderConfigNoPreference) };
     const r = await decodeAll(config, units.map((u) => [u, hasSequenceHeader(u)]), Math.round(1e6 * q.framerate[1] / q.framerate[0]));
     say(`platform av1 object: ${path.split("/").slice(-4).join("/")} codec=${q.codec} size=${q.width}x${q.height} rate=${q.framerate.join("/")} bitrate=${q.bitrate} decodingInfo=[${info(a.decodingInfo)}] isConfigSupported prefer-hardware=${a.preferHardware} no-preference=${a.noPreference} decoded=${r.frames}/${units.length} with ${config.hardwareAcceleration}${r.error ? " error=" + r.error : ""}`);
-    firstAnswers = firstAnswers || a;
+    first = first || { q, a };
   }
-  return firstAnswers;
-}
-
-/// The same codec family at a broadcast size, through the same query form.
-async function av1Broadcast() {
-  const q = {
-    codec: "av01.0.08M.08",
-    decodingConfiguration: { type: "media-source", video: { contentType: 'video/mp4; codecs="av01.0.08M.08"', width: 1920, height: 1080, bitrate: 5000000, framerate: 30 } },
-    decoderConfigPreferHardware: { codec: "av01.0.08M.08", codedWidth: 1920, codedHeight: 1080, hardwareAcceleration: "prefer-hardware" },
-    decoderConfigNoPreference: { codec: "av01.0.08M.08", codedWidth: 1920, codedHeight: 1080, hardwareAcceleration: "no-preference" },
-  };
-  const a = await answers(q);
-  say(`platform av1 1920x1080: codec=${q.codec} decodingInfo=[${info(a.decodingInfo)}] isConfigSupported prefer-hardware=${a.preferHardware} no-preference=${a.noPreference}`);
-  return a;
+  return first;
 }
 
 /// The first SPS NAL unit (type 33) of an Annex B stream, as hexadecimal.
@@ -115,7 +109,7 @@ async function hevcRoundTrip() {
   const [w, h, n] = [640, 360, 12];
   const enc = { codec: configured, width: w, height: h, bitrate: 1000000, framerate: 30, hevc: { format: "annexb" }, hardwareAcceleration: "prefer-hardware" };
   const es = await VideoEncoder.isConfigSupported(enc);
-  if (!es.supported) { say(`platform hevc encoder: not supported (${configured} ${w}x${h} prefer-hardware)`); return; }
+  if (!es.supported) { say(`platform hevc encoder: not supported (${configured} ${w}x${h}, prefer-hardware requested)`); return; }
   const chunks = [];
   let declared = "";
   const e = new VideoEncoder({ output: (c, meta) => { const b = new Uint8Array(c.byteLength); c.copyTo(b); chunks.push([b, c.type === "key"]); if (meta && meta.decoderConfig) declared = meta.decoderConfig.codec; }, error: (x) => say(`platform hevc encoder: error ${x}`) });
@@ -138,17 +132,30 @@ async function hevcRoundTrip() {
   say(`platform hevc encoder: configured=${configured} encoder-declares=${declared || "nothing"} derived=${q.codec} size=${q.width}x${q.height} coded=${q.codedWidth}x${q.codedHeight} depth=${q.bitDepth} bitrate=${q.bitrate} decodingInfo=[${info(a.decodingInfo)}] isConfigSupported prefer-hardware=${a.preferHardware} no-preference=${a.noPreference} decoded=${r.frames}/${chunks.length}${r.error ? " error=" + r.error : ""} sps=${firstSps(stream)}`);
 }
 
-function order(a) {
-  const manifest = { wai: "1.1", media: "video", intent: "display", target: null, renditions: [{ capability: "wai.neural.int_synth", kind: "bytes" }, { capability: "wai.video.av1", kind: "bytes" }] };
-  // The sink configures prefer-hardware when the platform accepts it, and otherwise
-  // no-preference; the answer it passes is for the preference it configures.
-  const webcodecs = a.preferHardware ? { hardwareAcceleration: "prefer-hardware", supported: true } : { hardwareAcceleration: "no-preference", supported: a.noPreference };
-  const av1 = { decodingInfo: a.decodingInfo, webcodecs, ownDecoder: false };
-  const o = JSON.parse(platformOrder(JSON.stringify(manifest), JSON.stringify([null, av1]), JSON.stringify([null, null]), undefined));
-  say(`platform order: entries=[wai.neural.int_synth, wai.video.av1] av1=[${info(a.decodingInfo)} webcodecs=${webcodecs.hardwareAcceleration}:${webcodecs.supported}] ranks=${JSON.stringify(o.ranks)} order=${JSON.stringify(o.order)} picked=${o.picked}`);
-  const budget = { class: "OnChipCounter", joules_micro: 41000, per: "frame", relative_ppm: 20000, window_us: 5000000, reference_sink: "reference sink: arm64 desktop" };
-  const ob = JSON.parse(platformOrder(JSON.stringify(manifest), JSON.stringify([null, av1]), JSON.stringify([budget, null]), undefined));
-  say(`platform order with a budget: ranks=${JSON.stringify(ob.ranks)} order=${JSON.stringify(ob.order)} picked=${ob.picked}`);
+/// browser-sink §4.7 over a report of a learned alternative on the page's wasm decoder and the
+/// AV1 floor object `first`, from the answers the platform gave for that object's own query.
+function choose(first) {
+  const { q, a } = first;
+  // The answer for the preference the page configures: prefer-hardware where accepted.
+  const supported = a.preferHardware || a.noPreference;
+  const d = a.decodingInfo;
+  const answer = JSON.parse(platformAnswer(supported, d ? d.smooth : undefined, d ? d.powerEfficient : undefined));
+  const report = (energy) => ({
+    browser_sink: 1, ua: { [q.codec]: answer }, host: {}, wasm: ["wai.video.int_hyper"], constraints: {}, energy,
+    objects: [
+      { name: "int_hyper", capability: "wai.video.int_hyper", codec: null, need: "none", params: {}, choice: "clip" },
+      { name: "av1", capability: "wai.video.av1", codec: q.codec, need: "none", params: {}, choice: "clip" },
+    ],
+  });
+  const line = (label, r) => {
+    const c = JSON.parse(platformChoose(JSON.stringify(r)));
+    const t = c.choices ? c.choices[0] : {};
+    say(`${label}: av1=[${q.codec} ${JSON.stringify(answer)}] order=${JSON.stringify(t.order)} ranks=${JSON.stringify(t.ranks)} chosen=${t.chosen}`);
+  };
+  line("platform choose", report({}));
+  // Synthetic: no measurement. It exists only to exercise the rule, and is marked so.
+  const figure = { joules_micro: 2460000, decodes: 120, window_us: 6000000, class: "OnChipCounter", relative_ppm: 40000, filtering: "Unknown", coverage: "Whole", fabrics: ["cpu", "gpu"], note: "synthetic: no measurement" };
+  line("platform choose with a synthetic figure", report({ "wai.video.int_hyper wasm": figure }));
 }
 
 window.platformDecode = { done: false, report: "" };
@@ -156,10 +163,9 @@ try {
   await init();
   say(`platform: userAgent=${navigator.userAgent}`);
   const paths = await (await fetch("objects.json")).json();
-  await av1Objects(paths);
-  const broadcast = await av1Broadcast();
+  const first = await av1Objects(paths);
   await hevcRoundTrip();
-  order(broadcast);
+  if (first) choose(first); else say("platform choose: no AV1 object to choose with");
 } catch (e) {
   say(`platform: page error: ${e && e.stack || e}`);
 }
diff --git a/wai/wai-web/demo/verify_platform_decode.mjs b/wai/wai-web/demo/verify_platform_decode.mjs
index 926e43580..463031de5 100644
--- a/wai/wai-web/demo/verify_platform_decode.mjs
+++ b/wai/wai-web/demo/verify_platform_decode.mjs
@@ -1,4 +1,5 @@
-// Platform decode capabilities in dispatch, in a browser (extensions/platform-decode.md).
+// Platform decode capabilities and browser-sink §4.7's choice, in a browser
+// (extensions/platform-decode.md, extensions/browser-sink.md).
 //
 // Build the page's bundle first, from wai/wai-web:
 //
@@ -17,8 +18,9 @@
 // on a page error, on an AV1 object that does not decode every temporal unit through
 // WebCodecs with the configuration the reference's query gives, on an HEVC stream the
 // platform's encoder wrote that does not decode back with the derived configuration, and
-// on an order that is not the one the answers give: AV1, which the platform can decode,
-// before the learned entry without a budget; the learned entry with a budget first.
+// on a choice that is not the one the ranks give: the learned alternative without a figure
+// last and AV1 chosen; with the synthetic figure, the learned alternative ranked classical
+// and the first in the order chosen.
 import http from "node:http";
 import fs from "node:fs";
 import path from "node:path";
@@ -105,10 +107,12 @@ try {
     const m = / decoded=(\d+)\/(\d+)/.exec(hevc);
     if (!m || m[1] !== m[2] || / error=/.test(hevc) || !/ no-preference=true /.test(hevc)) fail.push(`the derived HEVC configuration did not decode the stream back: ${hevc}`);
   }
-  const ord = lines.find((l) => l.startsWith("platform order: "));
-  if (!ord || !/ picked=1$/.test(ord)) fail.push(`the AV1 entry was not picked over the learned entry without a budget: ${ord}`);
-  const ob = lines.find((l) => l.startsWith("platform order with a budget:"));
-  if (!ob || !/ picked=0$/.test(ob)) fail.push(`the learned entry with a budget was not picked: ${ob}`);
+  const parse = (l) => { const m = / order=(\[.*?\]) ranks=(\[.*?\]) chosen=(\S+)$/.exec(l || ""); return m && { order: JSON.parse(m[1]), ranks: JSON.parse(m[2]), chosen: m[3] }; };
+  const plain = parse(lines.find((l) => l.startsWith("platform choose: ")));
+  if (!plain || plain.order[1] !== "int_hyper" || plain.ranks[1] !== "learned-without-budget" || plain.chosen !== "av1") fail.push(`without a figure the learned alternative was not last, or AV1 was not chosen: ${JSON.stringify(plain)}`);
+  const fig = parse(lines.find((l) => l.startsWith("platform choose with a synthetic figure:")));
+  const learnedAt = fig ? fig.order.indexOf("int_hyper") : -1;
+  if (!fig || learnedAt < 0 || fig.ranks[learnedAt] !== "classical" || fig.chosen !== fig.order[0]) fail.push(`with the synthetic figure the learned alternative was not ranked classical, or the first in the order was not chosen: ${JSON.stringify(fig)}`);
   for (const f of fail) console.log(`FAIL ${f}`);
   if (fail.length) process.exitCode = 1;
 } finally {
diff --git a/wai/wai-web/src/platform_decode.rs b/wai/wai-web/src/platform_decode.rs
index 9cd1f7dd6..a5c6b0c7c 100644
--- a/wai/wai-web/src/platform_decode.rs
+++ b/wai/wai-web/src/platform_decode.rs
@@ -1,13 +1,14 @@
-//! Platform decode capabilities in dispatch (`wai::platform_decode`,
-//! extensions/platform-decode.md), bound for JS in the separate `platform_decode` bundle.
+//! Platform decode capabilities (`wai::platform_decode`, extensions/platform-decode.md) and
+//! the choice among alternatives (`wai::browser_sink::choose_report`, browser-sink §4.7),
+//! bound for JS in the separate `platform_decode` bundle.
 //!
 //! [`platform_query`] gives the configuration a page asks the platform about for an entry
 //! (`decodingInfo()`'s and `isConfigSupported()`'s), read from the payload by the same Rust
-//! a native sink runs. [`platform_order`] takes the platform's answers and any energy
-//! budgets and returns the default order and the entry SPEC §7.1 picks. The page calls the
-//! platform itself; nothing here does, so the order is the reference's for those answers.
+//! a native sink runs. [`platform_answer`] enters the platform's answers in browser-sink's
+//! report shape. [`platform_choose`] takes a browser-sink capability report and returns its
+//! choice table: the order sits inside the routing and reads no figure's value. The page
+//! calls the platform itself; nothing here does.
 
-use wai::container::ManifestV2;
 use wai::platform_decode as pd;
 use wasm_bindgen::prelude::*;
 
@@ -28,29 +29,24 @@ pub fn platform_query(capability: &str, payload: &[u8], rate_num: Option, r
     Ok(pd::query_json(&q).to_string())
 }
 
-/// The default order over a `WAI2` manifest's entries (`manifest_json`), from the
-/// platform's answers and the energy budgets, each a JSON array aligned with the entries
-/// (`null` where none), as JSON (`wai::platform_decode::order_json`). `ceiling` is the
-/// deployer's ceiling on a budget's figure, in microjoules, if any.
-#[wasm_bindgen(js_name = platformOrder)]
-pub fn platform_order(manifest_json: &str, answers_json: &str, budgets_json: &str, ceiling: Option) -> Result {
-    let manifest: ManifestV2 = serde_json::from_str(manifest_json).map_err(js)?;
-    let arr = |text: &str, what: &str| -> Result, JsError> {
-        match serde_json::from_str::(text).map_err(js)? {
-            serde_json::Value::Array(a) => Ok(a),
-            _ => Err(JsError::new(&format!("{what}: not a JSON array"))),
-        }
-    };
-    let answers = arr(answers_json, "answers")?
-        .iter()
-        .map(|v| if v.is_null() { Ok(None) } else { pd::answers_from_json(v).map(Some) })
-        .collect::, String>>()
-        .map_err(js)?;
-    let budgets = arr(budgets_json, "budgets")?
-        .iter()
-        .map(|v| if v.is_null() { Ok(None) } else { pd::budget_from_json(v).map(Some) })
-        .collect::, String>>()
-        .map_err(js)?;
-    let rules = pd::Rules { budget_ceiling: ceiling.filter(|c| *c >= 0.0).map(|c| c as u64), ..pd::Rules::DEFAULT };
-    Ok(pd::order_json(&manifest, &answers, &budgets, &rules).to_string())
+/// browser-sink §3's answer for one codec string (platform-decode §3): `supported` from
+/// `isConfigSupported()`, and `smooth` and `power_efficient` from `decodingInfo()`, read only
+/// once `isConfigSupported()` said supported; `smooth` and `power_efficient` are `undefined`
+/// where `decodingInfo()` was not asked.
+#[wasm_bindgen(js_name = platformAnswer)]
+pub fn platform_answer(webcodecs_supported: bool, smooth: Option, power_efficient: Option) -> String {
+    let info = smooth.zip(power_efficient);
+    pd::report_answer(webcodecs_supported, info).to_string()
+}
+
+/// browser-sink §4.7's choice table over a capability report (`report_json`), as JSON:
+/// `{"outcome":"chosen","choices":[…]}` or `{"outcome":"refused","reason":…}`.
+#[wasm_bindgen(js_name = platformChoose)]
+pub fn platform_choose(report_json: &str) -> String {
+    use wai::browser_sink as bs;
+    let chosen = serde_json::from_str::(report_json).map_err(|_| bs::Reason::ReportMalformed).and_then(|r| bs::choose_report(&r));
+    match chosen {
+        Ok(c) => serde_json::json!({ "outcome": "chosen", "choices": c }).to_string(),
+        Err(r) => serde_json::json!({ "outcome": "refused", "reason": r.code() }).to_string(),
+    }
 }
-- 
2.54.0 (Apple Git-157)


From 1ca593124493417013870df6c5902bd8959df37f Mon Sep 17 00:00:00 2001
From: Transaction Science 
Date: Sat, 24 Oct 2026 20:57:21 -0400
Subject: [PATCH 47/50] wai: the energy order inside browser-sink's routing,
 gated on a sink-metered figure; no parallel budget
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

SPEC §4's energy order is an order over what a sink advertises, never a reason
to advertise: first (classical decode the platform answers supported, smooth
and power-efficient; in a page only for an object routed ua), smooth,
classical (any other classical decode, and a learned capability whose decode
the sink holds a qualifying measurement of), learned-without-budget. The
measurement is a sink-metered figure in browser-sink §6's shape; it qualifies
with OnChipCounter or CalibratedInstrument and coverage Whole, and its value is
never read, so a figure still changes no route (§6). A deployer may compare it
with a ceiling per decode as its own policy. The module-authorisation sentence
naming a second place advertising is decided is gone.

energy_order owns the ranks and browser-sink §6's measurement reader, which the
page's energy entry now shares. browser-sink §4.7 ranks alternatives inside the
routing, a WAI1's capability and fallback among them; the corpus adds a host-
routed decode the user agent called power-efficient, and learned alternatives
with counter, calibrated, partial and modelled figures, all marked synthetic
(39 of 39 mutations caught by browser_sink_verify.py). energy-measurement §2.10,
REGISTRY's energy budgets, the registry's energy_budget and BudgetRecord are
removed. http_verify.py and the container's tests follow; the C header is
regenerated.

Co-Authored-By: Claude Opus 5.5 
---
 wai/CHANGELOG.md                            | 100 ++-
 wai/REGISTRY.md                             |  17 -
 wai/SPEC.md                                 | 105 ++-
 wai/extensions/browser-sink.md              |  78 ++-
 wai/extensions/energy-measurement.md        |  38 +-
 wai/http-conformance/http_verify.py         |  20 +-
 wai/live-conformance/browser/vectors.json   | 734 ++++++++++++++++++++
 wai/live-conformance/browser_sink_verify.py |  13 +-
 wai/wai-rs/include/wai.h                    |   8 -
 wai/wai-rs/src/browser_sink.rs              | 103 +--
 wai/wai-rs/src/browser_sink/corpus.rs       |  63 ++
 wai/wai-rs/src/codecs/registry.rs           |  36 +-
 wai/wai-rs/src/container.rs                 |  99 +--
 wai/wai-rs/src/energy_order.rs              | 595 +++++++---------
 wai/wai-rs/src/lib.rs                       |  17 +-
 15 files changed, 1283 insertions(+), 743 deletions(-)

diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md
index 5e15c216c..db8802d53 100644
--- a/wai/CHANGELOG.md
+++ b/wai/CHANGELOG.md
@@ -9,40 +9,53 @@ wire format may change and such changes are recorded here.
 ### Energy honesty: the energy order of dispatch, a metered relay, `HwShunt` closed to new profiles, and what fewer bytes do not save
 
 - **The energy order** (SPEC §4, §7.1 step 2). A sink tries the capabilities an envelope
-  offers in the energy order unless its deployer configures another: the default order of
-  [platform-decode](extensions/platform-decode.md) §4, which SPEC now applies by default.
-  Its ranks are platform-decode §4.2's: `first` (classical decode the platform marks
-  supported, smooth and power-efficient, and a learned capability with a qualifying energy
-  budget), `smooth`, `classical` (every classical capability of a sink with no platform to
-  ask among them), and `learned-without-budget` last; the envelope's order within a rank;
-  and in a `WAI2` the entries never picked (companions, refinements) keep their places. So
-  a learned capability without a budget is never decoded above a classical fallback the
-  sink can decode. The order changes which capability decodes, never a reason; a sink that
-  takes the manifest's order instead says so where it reports a decode.
-- **platform-decode §4.3** follows §4.2 for a `WAI1`: the fallback is tried first whenever
-  it ranks above a learned capability without a budget, a smooth or a software classical
-  decode included, not only a power-efficient one; step 3 decodes if step 5 does not.
-  `advertise_for_envelope` and one vector follow, and a vector for a sink with no platform
-  is added.
-- **The energy budget record** (energy-measurement §2.10; REGISTRY, *Energy budgets*): an
-  `OnChipCounter` decode figure per frame, picture or second at a stated resolution, with
-  its evidence and filtering state, the reference sink and the SHA-256 of the record that
-  holds the measurement; platform-decode §5 reads its first six members. Refused:
-  `budget_legacy_class` (`HwShunt`), `budget_not_counter` (any other class),
-  `budget_class_invalid`, `budget_malformed`. A registration states one in the export's
-  `energy_budget`; no registration states one in this revision.
-- **Reference.** `wai-rs` `energy_order` (`DispatchPolicy`, `Budgets`, `BudgetRecord`),
-  ranking with `platform_decode::rank`; `Wai::dispatch_verified` and `WaiMulti::pick`
-  apply the energy order, `dispatch_with` and `pick_with` take another, and the HTTP
-  client's default order and the C ABI's `wai_envelope_select` follow it. The HTTP
-  corpus's O2 pin cases and the pin corpus's selection cases state the table's order they
-  run in; `select_O2_default` and `fetch_O2_default` are the default.
+  offers in the energy order unless its deployer configures another, an order over what it
+  advertises and never a reason to advertise: `first` for classical decode the platform
+  answers supported, smooth and power-efficient, `smooth`, `classical` (any other classical
+  decode, every classical capability of a sink with no platform to ask, and a learned
+  capability whose decode the sink holds a qualifying measurement of), and
+  `learned-without-budget` last; the envelope's order within a rank. A `WAI1`'s fallback is
+  tried first when it ranks before the capability, and the capability after it if it does
+  not decode, so the order never makes inert an envelope either could decode. In a `WAI2`
+  the entries never picked keep their places. So a learned capability without a
+  qualifying measurement is never decoded above a classical fallback the sink can decode.
+  A sink that takes the manifest's order says so where it reports a decode.
+- **The measurement a learned capability needs** is a sink-metered figure of its decode, in
+  browser-sink §6's energy entry: it qualifies with the class `OnChipCounter` or
+  `CalibratedInstrument` and the coverage `Whole`. The order reads only whether one is held,
+  never its value, so a figure still changes no route (browser-sink §6). A deployer may
+  compare it with a ceiling per decode as its own policy; the default does not.
 - **The browser sink** (browser-sink §4.7): objects that share a `choice` are alternatives
-  of one content, ranked by platform-decode §4.2 from the user agent's answer for each, and
-  the page decodes the first that routes (`no_alternative` where none does).
-  `browser_sink::choose_report`, the page's `chooseReport`, a `choices` section in
-  `live-conformance/browser/` with each alternative's rank, checked by `wai-rs`, by the
+  of one content (a `WAI2`'s entries, a `WAI1`'s capability and fallback, a track's
+  renditions), ordered inside the routing: an alternative routed `ua` ranks by the user
+  agent's answer, one routed `host` or `wasm` ranks `classical` whatever the user agent said
+  (AV1's user-agent tier is `none`, and a decode-equivalence need with no probe run routes
+  elsewhere), and one routed `none` comes last; the page decodes the first that routes
+  (`no_alternative` where none does). `browser_sink::choose_report`, the page's
+  `chooseReport`, and a `choices` section in `live-conformance/browser/` with each
+  alternative's rank and synthetic measurements marked as such, checked by `wai-rs`, by the
   page's wasm build in a browser and by `browser_sink_verify.py`.
+- **Platform decode capabilities** ([platform-decode](extensions/platform-decode.md)): the
+  query a page asks Media Capabilities and WebCodecs, read from the entry's payload (the AV1
+  ISOBMFF binding's codec string from the sequence header, the Annex E.3 string from an
+  HEVC SPS), never from what an encoder declared; and the answer entered in browser-sink's
+  report, `supported` from `isConfigSupported()` alone and `smooth` and `power_efficient`
+  from `decodingInfo()` once it said supported, so a Media Capabilities `supported: false`
+  overrides nothing. `powerEfficient` and `prefer-hardware` are hints: never an energy
+  figure, never evidence of hardware. The extension defines no order and no second meaning
+  of advertising: both are browser-sink's. `wai::platform_decode` (`query`,
+  `report_answer`), `platform-decode-conformance/queries.json` (two packaging-corpus floors
+  and an SPS the platform's encoder wrote with `prefer-hardware`), and `wai-web`'s
+  `platform_decode` bundle (`platformQuery`, `platformAnswer`, `platformChoose`), now built
+  in CI. In a browser on an arm64 desktop, every AV1 floor of the packaging corpus decoded
+  through WebCodecs with its payload's configuration, and an HEVC stream from the platform's
+  encoder decoded back with the codec string read from the stream.
+- **Reference.** `wai-rs` `energy_order` (`DispatchPolicy`, `PlatformAnswer`, `Rank`,
+  `read_measurement`, `qualifies`); `Wai::dispatch_verified` and `WaiMulti::pick` apply the
+  energy order, `dispatch_with` and `pick_with` take another, and the HTTP client's default
+  order and the C ABI's `wai_envelope_select` follow it. The HTTP corpus's O2 pin cases and
+  the pin corpus's selection cases state the table's order they run in; `select_O2_default`
+  and `fetch_O2_default` are the default.
 - **`HwShunt` is closed to new profiles** (energy-measurement §2.6, *New profiles*): a
   profile, record, claim, table or registration member defined after the hardware class was
   refined refuses `HwShunt` from every producer and reads it as no other class; the profiles
@@ -206,29 +219,6 @@ wire format may change and such changes are recorded here.
   every guarded case equal, every unguarded one too, and the capability corpora decoding
   with their graphs on the device to the CPU decode's bytes.
 
-### Dispatch: what a web platform says it decodes, before a learned reconstruction
-
-- **Platform decode capabilities in dispatch** ([platform-decode](extensions/platform-decode.md)).
-  A sink in a web platform queries Media Capabilities `decodingInfo()` and WebCodecs
-  `isConfigSupported()` with a configuration read from the entry's payload (for AV1, the
-  full codec string of the AV1 ISOBMFF binding from the sequence header; for HEVC, the
-  string of ISO/IEC 14496-15 Annex E.3 from the SPS), never from what an encoder declared.
-  `supported: false` makes the capability unsupported for that object; `smooth` and
-  `powerEfficient` only order the entries, and are never written as energy. The default
-  order, a deployer policy SPEC §7.1 allows, tries classical decode the platform marks
-  power-efficient, and learned decode that carries a qualifying energy budget (an
-  `OnChipCounter` figure measured on a reference sink, as energy-measurement defines
-  it), first; then smooth classical decode; then any other classical decode; then learned
-  decode without a budget. For a `WAI1` envelope, a learned capability without a budget is
-  not advertised when its fallback is a power-efficient classical decode (SPEC §4).
-- **Reference and vectors.** `wai::platform_decode`, with `platform-decode-conformance/`
-  (the order, the `WAI1` rule, and queries from packaging-corpus floors and an SPS a
-  hardware encoder wrote), and a `platform_decode` bundle of `wai-web` with a demonstration
-  page. In a browser on an arm64 desktop, every AV1 floor of the packaging corpus decoded
-  through WebCodecs with the derived configuration, and an HEVC stream from the platform's
-  own encoder, whose SPS states a level other than the one its declared codec string
-  repeats, decoded back with the codec string read from the stream.
-
 ### Packaging: each step on the fabric that does it with the least energy
 
 - **Steps and fabrics** ([packaging](extensions/packaging.md) §11.6). The computations of
diff --git a/wai/REGISTRY.md b/wai/REGISTRY.md
index 77374e6da..5cf04f36e 100644
--- a/wai/REGISTRY.md
+++ b/wai/REGISTRY.md
@@ -128,23 +128,6 @@ cannot be established. Every
 derivation operation carries the class `codecs::derivation::derivation_license`
 gives it; a record carries none.
 
-## Energy budgets
-
-A learned capability (platform-decode §4.1: a replicate class other than
-`standard-defined`, `standard-tolerance` and `standard-unclassified`) is
-dispatched after every classical capability an envelope offers that the sink can
-decode, unless it carries a qualifying energy budget (SPEC §4, *Energy order*).
-A registration states one by adding a row to `energy_order::REGISTERED` in
-`wai-rs`, which the export writes as the capability's `energy_budget`: the
-budget record of [energy-measurement](extensions/energy-measurement.md) §2.10,
-an `OnChipCounter` figure per frame, picture or second at a stated resolution,
-with its evidence, the reference sink it was measured on and the SHA-256 of the
-signed record that holds the measurement. The tests refuse a row whose record
-does not check (`BudgetRecord::check`). The member is absent for every
-capability that states none, which in this revision is every capability. A
-budget states what a measurement found on one sink; it is not a claim about any
-other sink.
-
 ## How to register a string
 
 1. Add the capability constant to `wai-rs/src/codecs/mod.rs` and, for a payload,
diff --git a/wai/SPEC.md b/wai/SPEC.md
index da47b3ffb..3e951c47e 100644
--- a/wai/SPEC.md
+++ b/wai/SPEC.md
@@ -485,55 +485,50 @@ that needs an alternative for sinks that hold another parameter set carries one
 pinned rendition per set in a `WAI2` envelope (§7.1).
 
 **Energy order.** Steps 3 and 5 are tried in the **energy order**, which a sink
-applies unless its deployer configures another: the default order of
-[platform-decode](extensions/platform-decode.md) §4, applied to `cap` and `fb`.
-Each capability ranks as platform-decode §4.2 has it, from what the sink's
-platform answers about the decode (§2, §3 there: Media Capabilities
-`decodingInfo()`, WebCodecs `isConfigSupported()`) and from the energy budgets
-of learned capabilities (§5 there):
+applies unless its deployer configures another. It is an order over what the sink
+advertises, and never a reason to advertise or not: what a sink advertises is
+decided as above (in a web page, by the object's route, below). Each capability
+ranks, lowest first:
 
-1. `first`: classical decode the platform marks supported, smooth and
-   power-efficient, which on the platforms that answer so is the hardware
-   decode path; and a learned capability with a qualifying energy budget;
-2. `smooth`: classical decode the platform marks supported and smooth, not
-   power-efficient;
+1. `first`: classical decode the sink's platform answers supported, smooth and
+   power-efficient (a page's Media Capabilities `decodingInfo()` once WebCodecs
+   `isConfigSupported()` has answered supported; a native platform's own
+   decoder query; [platform-decode](extensions/platform-decode.md) §2, §3). In a
+   page the answer counts only for an object routed to the user agent's decoder
+   (browser-sink §4.7). `powerEfficient` is the user agent's hint: it orders,
+   and is never an energy figure or evidence of hardware;
+2. `smooth`: classical decode the platform answers smooth, not power-efficient;
 3. `classical`: any other classical decode the sink can make, every classical
-   capability of a sink with no platform to ask among them;
-4. `learned-without-budget`: a learned capability (platform-decode §4.1: a
-   replicate class (§7) other than the three standard ones, or a string this
-   revision does not register) whose budget is absent or does not qualify.
+   capability of a sink with no platform to ask among them; and a learned
+   capability whose decode the sink holds a qualifying measurement of (below);
+4. `learned-without-budget`: a learned capability — one whose replicate class
+   (§7) is not one of the three standard classes, or a string this revision does
+   not register — with no such measurement.
 
 Where `fb` ranks before `cap`, the sink takes steps 4 and 5 before step 3, and
-step 3 only if step 5 does not decode; otherwise it takes them as listed
-(platform-decode §4.3). A capability the platform answers it cannot decode,
-where the sink holds no decoder of its own for it, is not advertised for the
-envelope (platform-decode §3). So a learned capability without a qualifying
-budget is never decoded above a classical fallback the sink can decode, and a
-decode the platform marks power-efficient comes before a software or a learned
-one without a budget. The order changes which capability decodes and nothing
-else: an inert envelope reports the reason kept at step 3, else the one kept at
-step 5, whichever was tried first. A sink whose deployer configures the
-manifest's order instead takes the steps as listed, and says so wherever it
-reports a decode (a capability report, a receipt's notes, its logs). The energy
-order reads no energy figure the envelope carries: a manifest states no energy,
+step 3 only if step 5 does not decode; otherwise it takes them as listed. So a
+learned capability without a qualifying measurement is never decoded above a
+classical fallback the sink can decode, and a decode the platform answers smooth
+or power-efficient comes before a software one. The order never makes inert an
+envelope either capability could decode, and it changes nothing else: an inert
+envelope reports the reason kept at step 3, else the one kept at step 5,
+whichever was tried first. A sink whose deployer configures the manifest's order
+instead takes the steps as listed, and says so wherever it reports a decode (a
+capability report, a receipt's notes, its logs). A manifest states no energy,
 and a figure in a receipt is the producer's (encode) energy, not the sink's
-decode. Nor is a platform's `powerEfficient` an energy figure: it orders, and
-is never written as one (platform-decode §3).
+decode, so the order reads neither.
 
-**Energy budget.** A learned capability carries an energy budget where its
-registration states one ([REGISTRY](REGISTRY.md), *Energy budgets*; the
-registry export's `energy_budget`), or where the sink holds one from a
-published decode table its deployer pins: the budget record of
-[energy-measurement](extensions/energy-measurement.md) §2.10, an `OnChipCounter`
-figure of the capability's decode per frame, picture or second, measured on a
-named reference sink, with its evidence and the digest of the record it is in.
-A record that breaks §2.10 is not held, and a deployer's table is held whole or
-not at all; one held qualifies as platform-decode §5 says. No registration
-states a budget in this revision, so a sink that applies the energy order takes
-a classical fallback it can decode before every learned capability. The
-reference dispatcher applies the order in `Wai::dispatch_verified` and
-`WaiMulti::pick`, takes another through `dispatch_with` and `pick_with`, ranks
-with `platform_decode::rank`, and holds budgets in `energy_order::Budgets`.
+**The measurement a learned capability needs** is a sink-metered figure of its
+decode on this sink, signed by the sink's meter with its class, its declared
+uncertainty, its coverage and the fabrics it covers, in the shape of
+[browser-sink](extensions/browser-sink.md) §6's energy entry. It qualifies when
+it reads under §6 there with the class `OnChipCounter` or `CalibratedInstrument`
+and the coverage `Whole`. The order reads only whether such a figure is held,
+never its value: a figure changes no route and steers no choice (browser-sink
+§6). A deployer MAY set a policy of its own that also compares the figure, per
+decode, with a ceiling; the default sets none. The reference dispatcher applies
+the order in `Wai::dispatch_verified` and `WaiMulti::pick`, takes another through
+`dispatch_with` and `pick_with`, and ranks with `energy_order::DispatchPolicy`.
 
 A capability is **dispatchable** unless this revision registers it as something
 a sink does not decode on its own: a candidate (§5, *Candidate capabilities*), a
@@ -590,10 +585,7 @@ listing names, or one held file); a file the decode needs outside them is
 the algorithm above runs unchanged, so a sink MUST NOT report a file inert because
 of module authorisation while a fallback it can decode without that module remains,
 and an encoder emitting a capability whose decode needs a module MUST declare such a
-fallback (§3). The order of steps 3 and 5 is per envelope in one other place,
-the energy order above (platform-decode §4.3), under which a sink tries the fallback
-first for an envelope whose learned capability has no qualifying energy budget and
-whose fallback ranks above it. A sink configured with no key log holds no module under §7.9, so it
+fallback (§3). A sink configured with no key log holds no module under §7.9, so it
 runs no module obtained apart from an envelope, and it does not run check 5. The
 reference dispatcher in `wai-rs` runs no module obtained apart from an envelope; it
 runs check 5 when the sink is configured with a key log (`key_log::SinkKeyLog`,
@@ -618,8 +610,10 @@ that object when the route is not `none`. It evaluates the capability's constrai
 measured figure per decode beside the user agent's own power-efficiency answer, which stays
 the user agent's, and binds every frame it decodes to the receipted object it came from
 (browser-sink §7). Where it holds several objects that are alternatives of one
-content, it decodes the one the energy order above puts first among those it can
-route (browser-sink §4.7). The algorithm above is unchanged.
+content (a `WAI2` envelope's entries, or a `WAI1` envelope's capability and
+fallback), it decodes the one the energy order above puts first among those it can
+route, the order sitting inside the routing and changing no route (browser-sink
+§4.7). The algorithm above is unchanged.
 
 ---
 
@@ -2708,14 +2702,11 @@ A v1.1-aware sink MUST:
    sink. An entry whose payload digest does not match, or whose pin is refused, is
    skipped as if the sink did not advertise its capability, and the sink keeps the
    reason. Without a deployer policy, the sink walks the entries in §4's energy
-   order, the default order of [platform-decode](extensions/platform-decode.md) §4:
-   the entries step 2 may pick, by platform-decode §4.2's ranks (what a web platform
-   says it decodes supported, smoothly and power-efficiently, and the energy budgets
-   of learned entries), table order within a rank, each taking one of those entries'
-   places in the table; an entry step 2 never picks (a companion, a refinement, a
-   capability that is not dispatchable) keeps its own place. A deployer policy MAY
-   reorder or restrict the entries the sink considers; it MUST NOT pick an entry
-   skipped for its digest or its pin.
+   order: the entries step 2 may pick, by §4's ranks, table order within a rank,
+   each taking one of those entries' places in the table; an entry step 2 never
+   picks (a companion, a refinement, a capability that is not dispatchable) keeps
+   its own place. A deployer policy MAY reorder or restrict the entries the sink
+   considers; it MUST NOT pick an entry skipped for its digest or its pin.
 3. Read the corresponding rendition's bytes from the payload block.
 4. Dispatch as in v1.0 §4, with the entry's `capability` and `prior` in place of
    `model_requirement.capability` and `conditioning.prior`, and no fallback. A
diff --git a/wai/extensions/browser-sink.md b/wai/extensions/browser-sink.md
index ebb1decc6..fb49c13c3 100644
--- a/wai/extensions/browser-sink.md
+++ b/wai/extensions/browser-sink.md
@@ -6,9 +6,9 @@
 > host's or WAI's own WebAssembly decoder (§4): the user agent is asked only about codec strings
 > the WebCodecs Codec Registry lists, and its decoder is preferred where it is exact for the
 > tier the object needs. Among objects that are alternatives of one content, the page decodes
-> the one SPEC §4's energy order puts first, by [platform-decode](platform-decode.md) §4.2's
-> ranks: a decode the user agent answers supported, smooth and power-efficient before a software
-> one, and a learned one without an energy budget last (§4.7). The page evaluates the constraint sets of
+> the one SPEC §4's energy order puts first, inside the routing: a decode routed to the user agent
+> that it answers supported, smooth and power-efficient before a software one, and a learned one
+> without a sink-metered figure of its decode last (§4.7). The page evaluates the constraint sets of
 > [capability-constraints](capability-constraints.md) itself (§5), and reports the joules a
 > decode was measured to cost beside the user agent's `powerEfficient` boolean, which stays the
 > user agent's word (§6). Every frame the page decodes carries a **content binding** (§7): the
@@ -63,8 +63,8 @@ Relationship to the core spec and the other extensions:
 - **[capability-constraints](capability-constraints.md).** §5 is its evaluation in a page, over
   the register of its §3.1.
 - **[energy-measurement](energy-measurement.md) §2.** The classes a figure carries (§6).
-- **[platform-decode](platform-decode.md) §3, §4.** How a `decodingInfo()` answer is read, and the
-  ranks §4.7 orders alternatives by.
+- **[platform-decode](platform-decode.md) §2, §3.** The query a page asks the platform, read
+  from the payload, and how the answers enter the report.
 - **[jwp-receipts](jwp-receipts.md) §2.1 and §3 step 3.** The content hash a binding names, and
   the link hash of the group receipt.
 - **[determinism-tiers](determinism-tiers.md).** The tier vocabulary a need and a binding use.
@@ -293,35 +293,40 @@ http-delivery §12.1's descriptor, `via` `"ua"` (with the codec strings asked an
 ### 4.7 Choosing among alternatives
 
 Objects of a report that carry the same `choice` are **alternatives**: renditions of one content
-of which the page decodes one, such as the entries of a `WAI2` envelope or the renditions of one
-track. For each `choice`, in order of its first appearance in `objects`, the page puts the
-alternatives in SPEC §4's energy order, [platform-decode](platform-decode.md) §4.2's ranks, read
-from the report:
+of which the page decodes one, such as the entries of a `WAI2` envelope, a `WAI1` envelope's
+capability and fallback, or the renditions of one track. For each `choice`, in order of its first
+appearance in `objects`, the page puts the alternatives in SPEC §4's energy order. The order sits
+inside the routing: each alternative's route is the one §4.3 gives it, and the order changes none.
 
-- an alternative routed `ua` ranks by the user agent's answer for its codec string, read as
-  platform-decode §3 reads a `decodingInfo()` answer: `first` when its capability is classical
-  and the answer's `supported`, `smooth` and `power_efficient` are all `true`; `smooth` when
-  `smooth` is `true` and `power_efficient` is not; `classical` otherwise;
-- an alternative routed `host` or `wasm` has no platform answer, and ranks `classical`;
-- whatever its route, an alternative whose capability is learned (platform-decode §4.1) ranks
-  `first` with a qualifying energy budget (platform-decode §5; the registry export's
-  `energy_budget`) and `learned-without-budget` with none;
-- an alternative routed `none` comes after every other, with no rank;
+- An alternative routed `ua` ranks by the user agent's answer for its codec string
+  ([platform-decode](platform-decode.md) §3): `first` when `supported`, `smooth` and
+  `power_efficient` are all `true`; `smooth` when `smooth` is `true` and `power_efficient` is
+  not; `classical` otherwise. A `false` or a `null` is not a `true`: no answer is not a
+  power-efficient one.
+- An alternative routed `host` or `wasm` ranks `classical`. The user agent's answers are about
+  its own decoder, which does not run this object, so they are not read for it, whatever they
+  say: AV1, whose user-agent tier is `none`, and a codec whose need is `decode-equivalence` while
+  no probe ran (§4.4) route elsewhere and rank on nothing the user agent said.
+- An alternative whose capability is learned (SPEC §4: its replicate class is not one of the
+  three standard classes, or the string is not registered) ranks `classical` when the report
+  holds a measurement under its route's key (§6, `" "`) that reads under §6
+  with the class `OnChipCounter` or `CalibratedInstrument` and the coverage `Whole`: a
+  sink-metered figure of its decode, with its class, uncertainty and scope. It ranks
+  `learned-without-budget` otherwise. The figure's value is not read.
+- An alternative routed `none` comes after every other, with no rank.
 
-in report order within each. A `power_efficient` or `smooth` of `false` or `null` is not a `true`
-one: no answer is not a power-efficient one. The **chosen** alternative is the first in that order
-whose route is not `none`, and where every route is `none` nothing is chosen (`no_alternative`). A
-page **MUST** decode the chosen alternative of a choice and no other, so a learned alternative
-without a budget is decoded only where no classical alternative can be routed. The order reads no
-energy figure (§6 keeps a figure from changing a route) and uses the user agent's `powerEfficient`
-as the user agent gave it, as an order and never as an energy figure (platform-decode §3).
+Report order within a rank. `powerEfficient` is the user agent's hint, used as the user agent
+gave it, as an order and never as an energy figure or as evidence of hardware. The **chosen**
+alternative is the first in that order whose route is not `none`, and where every route is `none`
+nothing is chosen (`no_alternative`). A page **MUST** decode the chosen alternative of a choice
+and no other, so a learned alternative without a qualifying measurement is decoded only where no
+classical alternative can be routed. For a `WAI1` envelope this is SPEC §4's order of steps 3 and
+5: the chosen alternative is tried first, and the other after it if the first does not decode.
 
 The **choice table** has one entry a choice: `choice`; `order`, the alternatives' names in that
 order, those routed `none` included; `ranks`, each one's rank in the same order, `null` for one
 routed `none`; `chosen`, a name or `null`; and `reason`, `null` or `no_alternative`. An object with
-no `choice` is in no entry, and a report whose objects carry none has an empty table. A page holds
-the budgets the registrations state; this revision registers none, so in a page every learned
-alternative comes after every classical one it can route.
+no `choice` is in no entry, and a report whose objects carry none has an empty table.
 
 ## 5. Constraint sets in the page
 
@@ -397,7 +402,8 @@ A figure that reads is reported with every member it was given and
 `per_decode_micro = ⌊joules_micro / decodes⌋`; `joules_micro` and `decodes` stay beside it, so the
 floor loses nothing. An object with no measurement is **unmetered**: `figure` and `reason` are
 both `null`, and a page presents it as unmetered, never as 0 J. In this revision a figure never
-changes a route; it is reported, not steered on. How a figure is measured, bracketed and
+changes a route, and none is steered on: §4.7 reads only whether a learned alternative's figure
+qualifies, never its value. How a figure is measured, bracketed and
 attributed is energy-measurement §3 and §4's, and a `Partial` coverage says the meter saw only
 the fabrics it names.
 
@@ -587,11 +593,15 @@ written by `wai_browser_sink_vectors gen`. It has:
   not run and taken by one whose probe matched, the host and wasm fallbacks, and a malformed
   report.
 - **Choices**: reports whose objects are alternatives, each with its routing table and the choice
-  table §4.7 gives it: `first`, `smooth` and `classical` before `learned-without-budget`, a
-  power-efficient answer that is not smooth below a smooth one, a learned alternative chosen where
-  no other routes, no answer read as not power-efficient, two choices beside an object in none, a
-  choice with nothing to choose (`no_alternative`), and an empty and a non-string `choice`, each
-  refused whole.
+  table §4.7 gives it: `first`, `smooth` and `classical` before `learned-without-budget`; a
+  power-efficient answer that is not smooth below a smooth one; a power-efficient answer for a
+  codec routed to a host decoder (its need above the user agent's tier) read for nothing; a
+  learned alternative with a qualifying measurement (`OnChipCounter`, `CalibratedInstrument`)
+  ranked `classical`, and with a `Partial` or a `ModelBased` one ranked last; a learned
+  alternative chosen where no other routes; no answer read as not power-efficient; two choices
+  beside an object in none; a choice with nothing to choose (`no_alternative`); and an empty and a
+  non-string `choice`, each refused whole. Every measurement in them is synthetic, marked
+  `"note": "synthetic: no measurement"`.
 - **Constraints**: constraint sets and declared parameters, with §5's outcome: satisfied by one
   set of several, by an empty set, by `enum`, `minimum` and `maximum`; unsatisfied by an
   undeclared parameter and by a value of the wrong type; each malformed form and an unregistered
diff --git a/wai/extensions/energy-measurement.md b/wai/extensions/energy-measurement.md
index 676ffd335..72a026740 100644
--- a/wai/extensions/energy-measurement.md
+++ b/wai/extensions/energy-measurement.md
@@ -551,7 +551,7 @@ The reference implementation checks a new profile's class with
 `energy_class::check_new_profile`, which refuses `HwShunt`
 (`AcquisitionError::LegacyInNewProfile`), a class beside a zero figure, a
 refined class without its evidence and a declaration below the resolution
-floor of §2.3. The energy budget record of §2.10 is the first profile it governs.
+floor of §2.3, for every profile defined since.
 
 A package counter read through RAPL or the platform's system management unit
 is an on-chip counter (§2.2): a figure read from one is `OnChipCounter`, with its
@@ -755,42 +755,6 @@ three-name level: `sandbox/README.md`, `proof/README.md`,
 same position in prose: vendor counters are real sensor readings, whose
 derivation and error bounds are undisclosed.
 
-### 2.10 Energy budgets
-
-An **energy budget** is a learned capability's decode energy, measured on a reference
-sink, stated so that a sink may dispatch the capability above a classical alternative
-(SPEC §4, *Energy order*; [platform-decode](platform-decode.md) §4.2, §5). It is a record
-of these members, in JSON, the first six the ones platform-decode §5 reads:
-
-| member | value |
-|---|---|
-| `class` | `OnChipCounter` |
-| `joules_micro` | the figure, in microjoules, for one unit of decode, above 0 |
-| `per` | the unit: `frame`, `picture` or `second` of output |
-| `relative_ppm`, `window_us` | the declared uncertainty of §2.3, each above 0, and `joules_micro × relative_ppm` at least 288 676 |
-| `filtering` | the counter's filtering state of §2.4: `On`, `Off` or `Unknown` |
-| `reference_sink` | text naming the reference sink, not only white space |
-| `resolution` | `[width, height]`, two positive integers, the decoded size the figure was measured at; `null` for content with none |
-| `record` | 64 lowercase hexadecimal digits: the SHA-256 of the signed record that holds the measurement, its report (§6) included, so that the figure can be found and checked |
-
-A budget is a profile defined after the hardware class was refined, so it refuses
-`HwShunt` (§2.6, *New profiles*). A reader refuses a record:
-
-| reason | when |
-|---|---|
-| `budget_legacy_class` | its `class` is `HwShunt` |
-| `budget_not_counter` | its `class` is another class (`CalibratedInstrument`, `ModelBased`, `Estimator`): platform-decode §5 reads an `OnChipCounter` figure, and a model or a constant is not a measurement of the decode |
-| `budget_class_invalid` | a zero figure, uncertainty or window, or a declaration below the resolution floor |
-| `budget_malformed` | a member missing, of another form, or one this table does not define |
-
-A registration states a budget in the registry export's `energy_budget`
-([REGISTRY](../REGISTRY.md), *Energy budgets*); a deployer may pin a published table of
-them, held whole or not at all. A budget states what one measurement found on one sink;
-platform-decode §5 decides whether it qualifies (a deployer may set a ceiling per unit).
-No registration states one in this revision. The reference reads and checks a record with
-`energy_order::BudgetRecord`, and gives platform-decode its members
-(`BudgetRecord::order_view`).
-
 ## 3. The reference protocol: bracketed marginal measurement
 
 On-die energy counters report the draw of a whole package or SoC, not of one
diff --git a/wai/http-conformance/http_verify.py b/wai/http-conformance/http_verify.py
index 131eb6a48..d8e48d293 100644
--- a/wai/http-conformance/http_verify.py
+++ b/wai/http-conformance/http_verify.py
@@ -332,27 +332,23 @@ def selectable(e):
     return e.get("role") not in ("companion", "refinement") and dispatchable(e["capability"])
 
 
-# SPEC §4, *Energy order* (platform-decode §4): a capability is learned unless its
-# registry class is one of the three standard classes (a string the registry does not hold
-# is learned too); a learned capability whose export entry carries no `energy_budget` ranks
-# `learned-without-budget`, after every classical one.
+# SPEC §4, *Energy order*: a capability is learned unless its registry class is one of the
+# three standard classes (a string the registry does not hold is learned too). The corpus
+# states no platform answer and no measurement, so a classical entry ranks `classical` and a
+# learned one `learned-without-budget`, after it.
 STANDARD = ("standard-defined", "standard-tolerance", "standard-unclassified")
 
 
 def energy_rank(cap):
-    """platform-decode §4.2's rank with no platform answer: 0 `first` (learned, with a
-    budget), 2 `classical`, 3 `learned-without-budget`."""
     c = REG.get(cap)
-    if c is not None and c["replicate"] in STANDARD:
-        return 2
-    return 0 if c is not None and c.get("energy_budget") is not None else 3
+    return 2 if c is not None and c["replicate"] in STANDARD else 3
 
 
 def energy_order(entries):
     """SPEC §7.1 step 2's default order: the selectable entries in SPEC §4's energy order
-    (platform-decode §4.2: with no platform answer every classical entry ranks `classical`,
-    a learned one with no energy budget after them, table order within each), each in one
-    of the selectable entries' places; every other entry in its own place."""
+    (with no platform answer and no measurement, every classical entry ranks `classical`
+    and a learned one after them, table order within each), each in one of the selectable
+    entries' places; every other entry in its own place."""
     slots = [i for i, e in enumerate(entries) if selectable(e)]
     ranked = sorted(slots, key=lambda i: (energy_rank(entries[i]["capability"]), i))
     out = list(range(len(entries)))
diff --git a/wai/live-conformance/browser/vectors.json b/wai/live-conformance/browser/vectors.json
index f91f49d2e..ed2167f7a 100644
--- a/wai/live-conformance/browser/vectors.json
+++ b/wai/live-conformance/browser/vectors.json
@@ -2119,6 +2119,740 @@
         }
       ]
     },
+    {
+      "name": "power_efficient_answer_for_a_host_routed_decode",
+      "about": "HEVC answered supported, smooth and power-efficient, but needing decode-equivalence with no probe run, so it routes to the host's decoder: it ranks classical on nothing the user agent said; AV1 answered smooth (smooth) goes first",
+      "report": {
+        "browser_sink": 1,
+        "ua": {
+          "av01.0.04M.08": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": false,
+            "probe": "not_run"
+          },
+          "vp09.00.10.08": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": false,
+            "probe": "not_run"
+          },
+          "avc1.64001f": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": null,
+            "probe": "not_run"
+          },
+          "hvc1.1.6.L93.B0": {
+            "supported": false,
+            "smooth": null,
+            "power_efficient": null,
+            "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": true,
+            "probe": "not_run"
+          }
+        },
+        "host": {
+          "wai.video.hevc": "decode-equivalence"
+        },
+        "wasm": [
+          "wai.video.int_motion",
+          "wai.video.int_hyper",
+          "wai.neural.int_hyper"
+        ],
+        "constraints": {},
+        "energy": {},
+        "objects": [
+          {
+            "name": "hevc",
+            "capability": "wai.video.hevc",
+            "codec": "hev1.1.6.L63.B0",
+            "need": "decode-equivalence",
+            "params": {
+              "wai:frame_width": 640,
+              "wai:frame_height": 360
+            },
+            "choice": "clip"
+          },
+          {
+            "name": "av1",
+            "capability": "wai.video.av1",
+            "codec": "av01.0.04M.08",
+            "need": "none",
+            "params": {
+              "wai:frame_width": 640,
+              "wai:frame_height": 360
+            },
+            "choice": "clip"
+          }
+        ]
+      },
+      "outcome": "chosen",
+      "reason": null,
+      "table": [
+        {
+          "name": "hevc",
+          "route": "host",
+          "reason": null,
+          "legs": {
+            "ua": "ua_unprobed",
+            "host": "taken",
+            "wasm": "not_reached"
+          },
+          "asked": true,
+          "tier": "decode-equivalence",
+          "energy": {
+            "power_efficient": null,
+            "figure": null,
+            "reason": null
+          }
+        },
+        {
+          "name": "av1",
+          "route": "ua",
+          "reason": null,
+          "legs": {
+            "ua": "taken",
+            "host": "not_reached",
+            "wasm": "not_reached"
+          },
+          "asked": true,
+          "tier": "none",
+          "energy": {
+            "power_efficient": false,
+            "figure": null,
+            "reason": null
+          }
+        }
+      ],
+      "choices": [
+        {
+          "choice": "clip",
+          "order": [
+            "av1",
+            "hevc"
+          ],
+          "ranks": [
+            "smooth",
+            "classical"
+          ],
+          "chosen": "av1",
+          "reason": null
+        }
+      ]
+    },
+    {
+      "name": "learned_with_a_counter_measurement",
+      "about": "the learned int_hyper with a sink-metered OnChipCounter figure of its whole decode (synthetic) ranks classical, with int_motion: the report's order decides, and the learned one is chosen; the figure's value is not read",
+      "report": {
+        "browser_sink": 1,
+        "ua": {
+          "av01.0.04M.08": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": true,
+            "probe": "not_run"
+          },
+          "vp09.00.10.08": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": false,
+            "probe": "not_run"
+          },
+          "avc1.64001f": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": null,
+            "probe": "not_run"
+          },
+          "hvc1.1.6.L93.B0": {
+            "supported": false,
+            "smooth": null,
+            "power_efficient": null,
+            "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
+          }
+        },
+        "host": {},
+        "wasm": [
+          "wai.video.int_motion",
+          "wai.video.int_hyper",
+          "wai.neural.int_hyper"
+        ],
+        "constraints": {},
+        "energy": {
+          "wai.video.int_hyper wasm": {
+            "joules_micro": 2460000,
+            "decodes": 120,
+            "window_us": 6000000,
+            "class": "OnChipCounter",
+            "relative_ppm": 40000,
+            "filtering": "Unknown",
+            "coverage": "Whole",
+            "fabrics": [
+              "cpu",
+              "gpu"
+            ],
+            "note": "synthetic: no measurement"
+          }
+        },
+        "objects": [
+          {
+            "name": "int_hyper",
+            "capability": "wai.video.int_hyper",
+            "codec": null,
+            "need": "none",
+            "params": {
+              "wai:frame_width": 640,
+              "wai:frame_height": 360
+            },
+            "choice": "clip"
+          },
+          {
+            "name": "int_motion",
+            "capability": "wai.video.int_motion",
+            "codec": null,
+            "need": "none",
+            "params": {
+              "wai:frame_width": 640,
+              "wai:frame_height": 360
+            },
+            "choice": "clip"
+          }
+        ]
+      },
+      "outcome": "chosen",
+      "reason": null,
+      "table": [
+        {
+          "name": "int_hyper",
+          "route": "wasm",
+          "reason": null,
+          "legs": {
+            "ua": "no_ua_mapping",
+            "host": "no_host",
+            "wasm": "taken"
+          },
+          "asked": false,
+          "tier": "decode-equivalence",
+          "energy": {
+            "power_efficient": null,
+            "figure": {
+              "joules_micro": 2460000,
+              "decodes": 120,
+              "window_us": 6000000,
+              "class": "OnChipCounter",
+              "relative_ppm": 40000,
+              "filtering": "Unknown",
+              "coverage": "Whole",
+              "fabrics": [
+                "cpu",
+                "gpu"
+              ],
+              "note": "synthetic: no measurement",
+              "per_decode_micro": 20500
+            },
+            "reason": null
+          }
+        },
+        {
+          "name": "int_motion",
+          "route": "wasm",
+          "reason": null,
+          "legs": {
+            "ua": "no_ua_mapping",
+            "host": "no_host",
+            "wasm": "taken"
+          },
+          "asked": false,
+          "tier": "decode-equivalence",
+          "energy": {
+            "power_efficient": null,
+            "figure": null,
+            "reason": null
+          }
+        }
+      ],
+      "choices": [
+        {
+          "choice": "clip",
+          "order": [
+            "int_hyper",
+            "int_motion"
+          ],
+          "ranks": [
+            "classical",
+            "classical"
+          ],
+          "chosen": "int_hyper",
+          "reason": null
+        }
+      ]
+    },
+    {
+      "name": "learned_with_a_calibrated_measurement",
+      "about": "the same with a CalibratedInstrument figure (synthetic): it qualifies too",
+      "report": {
+        "browser_sink": 1,
+        "ua": {
+          "av01.0.04M.08": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": true,
+            "probe": "not_run"
+          },
+          "vp09.00.10.08": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": false,
+            "probe": "not_run"
+          },
+          "avc1.64001f": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": null,
+            "probe": "not_run"
+          },
+          "hvc1.1.6.L93.B0": {
+            "supported": false,
+            "smooth": null,
+            "power_efficient": null,
+            "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
+          }
+        },
+        "host": {},
+        "wasm": [
+          "wai.video.int_motion",
+          "wai.video.int_hyper",
+          "wai.neural.int_hyper"
+        ],
+        "constraints": {},
+        "energy": {
+          "wai.video.int_hyper wasm": {
+            "joules_micro": 2460000,
+            "decodes": 120,
+            "window_us": 6000000,
+            "class": "CalibratedInstrument",
+            "relative_ppm": 40000,
+            "note": "synthetic: no measurement",
+            "coverage": "Whole",
+            "fabrics": [
+              "cpu",
+              "gpu"
+            ],
+            "calibration_ref": "synthetic: no certificate"
+          }
+        },
+        "objects": [
+          {
+            "name": "int_hyper",
+            "capability": "wai.video.int_hyper",
+            "codec": null,
+            "need": "none",
+            "params": {
+              "wai:frame_width": 640,
+              "wai:frame_height": 360
+            },
+            "choice": "clip"
+          },
+          {
+            "name": "int_motion",
+            "capability": "wai.video.int_motion",
+            "codec": null,
+            "need": "none",
+            "params": {
+              "wai:frame_width": 640,
+              "wai:frame_height": 360
+            },
+            "choice": "clip"
+          }
+        ]
+      },
+      "outcome": "chosen",
+      "reason": null,
+      "table": [
+        {
+          "name": "int_hyper",
+          "route": "wasm",
+          "reason": null,
+          "legs": {
+            "ua": "no_ua_mapping",
+            "host": "no_host",
+            "wasm": "taken"
+          },
+          "asked": false,
+          "tier": "decode-equivalence",
+          "energy": {
+            "power_efficient": null,
+            "figure": {
+              "joules_micro": 2460000,
+              "decodes": 120,
+              "window_us": 6000000,
+              "class": "CalibratedInstrument",
+              "relative_ppm": 40000,
+              "note": "synthetic: no measurement",
+              "coverage": "Whole",
+              "fabrics": [
+                "cpu",
+                "gpu"
+              ],
+              "calibration_ref": "synthetic: no certificate",
+              "per_decode_micro": 20500
+            },
+            "reason": null
+          }
+        },
+        {
+          "name": "int_motion",
+          "route": "wasm",
+          "reason": null,
+          "legs": {
+            "ua": "no_ua_mapping",
+            "host": "no_host",
+            "wasm": "taken"
+          },
+          "asked": false,
+          "tier": "decode-equivalence",
+          "energy": {
+            "power_efficient": null,
+            "figure": null,
+            "reason": null
+          }
+        }
+      ],
+      "choices": [
+        {
+          "choice": "clip",
+          "order": [
+            "int_hyper",
+            "int_motion"
+          ],
+          "ranks": [
+            "classical",
+            "classical"
+          ],
+          "chosen": "int_hyper",
+          "reason": null
+        }
+      ]
+    },
+    {
+      "name": "learned_with_a_partial_measurement",
+      "about": "a figure of part of the decode (coverage Partial, synthetic) does not qualify: the learned alternative ranks last",
+      "report": {
+        "browser_sink": 1,
+        "ua": {
+          "av01.0.04M.08": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": true,
+            "probe": "not_run"
+          },
+          "vp09.00.10.08": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": false,
+            "probe": "not_run"
+          },
+          "avc1.64001f": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": null,
+            "probe": "not_run"
+          },
+          "hvc1.1.6.L93.B0": {
+            "supported": false,
+            "smooth": null,
+            "power_efficient": null,
+            "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
+          }
+        },
+        "host": {},
+        "wasm": [
+          "wai.video.int_motion",
+          "wai.video.int_hyper",
+          "wai.neural.int_hyper"
+        ],
+        "constraints": {},
+        "energy": {
+          "wai.video.int_hyper wasm": {
+            "joules_micro": 2460000,
+            "decodes": 120,
+            "window_us": 6000000,
+            "class": "OnChipCounter",
+            "relative_ppm": 40000,
+            "filtering": "Unknown",
+            "coverage": "Partial",
+            "fabrics": [
+              "cpu",
+              "gpu"
+            ],
+            "note": "synthetic: no measurement"
+          }
+        },
+        "objects": [
+          {
+            "name": "int_hyper",
+            "capability": "wai.video.int_hyper",
+            "codec": null,
+            "need": "none",
+            "params": {
+              "wai:frame_width": 640,
+              "wai:frame_height": 360
+            },
+            "choice": "clip"
+          },
+          {
+            "name": "int_motion",
+            "capability": "wai.video.int_motion",
+            "codec": null,
+            "need": "none",
+            "params": {
+              "wai:frame_width": 640,
+              "wai:frame_height": 360
+            },
+            "choice": "clip"
+          }
+        ]
+      },
+      "outcome": "chosen",
+      "reason": null,
+      "table": [
+        {
+          "name": "int_hyper",
+          "route": "wasm",
+          "reason": null,
+          "legs": {
+            "ua": "no_ua_mapping",
+            "host": "no_host",
+            "wasm": "taken"
+          },
+          "asked": false,
+          "tier": "decode-equivalence",
+          "energy": {
+            "power_efficient": null,
+            "figure": {
+              "joules_micro": 2460000,
+              "decodes": 120,
+              "window_us": 6000000,
+              "class": "OnChipCounter",
+              "relative_ppm": 40000,
+              "filtering": "Unknown",
+              "coverage": "Partial",
+              "fabrics": [
+                "cpu",
+                "gpu"
+              ],
+              "note": "synthetic: no measurement",
+              "per_decode_micro": 20500
+            },
+            "reason": null
+          }
+        },
+        {
+          "name": "int_motion",
+          "route": "wasm",
+          "reason": null,
+          "legs": {
+            "ua": "no_ua_mapping",
+            "host": "no_host",
+            "wasm": "taken"
+          },
+          "asked": false,
+          "tier": "decode-equivalence",
+          "energy": {
+            "power_efficient": null,
+            "figure": null,
+            "reason": null
+          }
+        }
+      ],
+      "choices": [
+        {
+          "choice": "clip",
+          "order": [
+            "int_motion",
+            "int_hyper"
+          ],
+          "ranks": [
+            "classical",
+            "learned-without-budget"
+          ],
+          "chosen": "int_motion",
+          "reason": null
+        }
+      ]
+    },
+    {
+      "name": "learned_with_a_modelled_figure",
+      "about": "a ModelBased figure (synthetic) is not a measurement of the decode: the learned alternative ranks last",
+      "report": {
+        "browser_sink": 1,
+        "ua": {
+          "av01.0.04M.08": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": true,
+            "probe": "not_run"
+          },
+          "vp09.00.10.08": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": false,
+            "probe": "not_run"
+          },
+          "avc1.64001f": {
+            "supported": true,
+            "smooth": true,
+            "power_efficient": null,
+            "probe": "not_run"
+          },
+          "hvc1.1.6.L93.B0": {
+            "supported": false,
+            "smooth": null,
+            "power_efficient": null,
+            "probe": "not_run"
+          },
+          "hev1.1.6.L63.B0": {
+            "supported": true,
+            "smooth": false,
+            "power_efficient": true,
+            "probe": "not_run"
+          }
+        },
+        "host": {},
+        "wasm": [
+          "wai.video.int_motion",
+          "wai.video.int_hyper",
+          "wai.neural.int_hyper"
+        ],
+        "constraints": {},
+        "energy": {
+          "wai.video.int_hyper wasm": {
+            "joules_micro": 2460000,
+            "decodes": 120,
+            "window_us": 6000000,
+            "class": "ModelBased",
+            "fabrics": [
+              "cpu",
+              "gpu"
+            ],
+            "note": "synthetic: no measurement",
+            "coverage": "Whole"
+          }
+        },
+        "objects": [
+          {
+            "name": "int_hyper",
+            "capability": "wai.video.int_hyper",
+            "codec": null,
+            "need": "none",
+            "params": {
+              "wai:frame_width": 640,
+              "wai:frame_height": 360
+            },
+            "choice": "clip"
+          },
+          {
+            "name": "int_motion",
+            "capability": "wai.video.int_motion",
+            "codec": null,
+            "need": "none",
+            "params": {
+              "wai:frame_width": 640,
+              "wai:frame_height": 360
+            },
+            "choice": "clip"
+          }
+        ]
+      },
+      "outcome": "chosen",
+      "reason": null,
+      "table": [
+        {
+          "name": "int_hyper",
+          "route": "wasm",
+          "reason": null,
+          "legs": {
+            "ua": "no_ua_mapping",
+            "host": "no_host",
+            "wasm": "taken"
+          },
+          "asked": false,
+          "tier": "decode-equivalence",
+          "energy": {
+            "power_efficient": null,
+            "figure": {
+              "joules_micro": 2460000,
+              "decodes": 120,
+              "window_us": 6000000,
+              "class": "ModelBased",
+              "fabrics": [
+                "cpu",
+                "gpu"
+              ],
+              "note": "synthetic: no measurement",
+              "coverage": "Whole",
+              "per_decode_micro": 20500
+            },
+            "reason": null
+          }
+        },
+        {
+          "name": "int_motion",
+          "route": "wasm",
+          "reason": null,
+          "legs": {
+            "ua": "no_ua_mapping",
+            "host": "no_host",
+            "wasm": "taken"
+          },
+          "asked": false,
+          "tier": "decode-equivalence",
+          "energy": {
+            "power_efficient": null,
+            "figure": null,
+            "reason": null
+          }
+        }
+      ],
+      "choices": [
+        {
+          "choice": "clip",
+          "order": [
+            "int_motion",
+            "int_hyper"
+          ],
+          "ranks": [
+            "classical",
+            "learned-without-budget"
+          ],
+          "chosen": "int_motion",
+          "reason": null
+        }
+      ]
+    },
     {
       "name": "two_choices_and_one_alone",
       "about": "two contents, each with its alternatives, and an object that carries no choice: one table entry per choice, in order of first appearance, and the lone object in none",
diff --git a/wai/live-conformance/browser_sink_verify.py b/wai/live-conformance/browser_sink_verify.py
index d5cad4aad..5aa968bf6 100644
--- a/wai/live-conformance/browser_sink_verify.py
+++ b/wai/live-conformance/browser_sink_verify.py
@@ -395,7 +395,7 @@ def route_report(r):
 
 # ─────────────────────────────── §7 ───────────────────────────────
 
-# platform-decode §4.1: a learned capability is one whose registry class is not one of the
+# SPEC §4, *Energy order*: a learned capability is one whose registry class is not one of the
 # three standard classes, or a string this revision does not register.
 STANDARD = ("standard-defined", "standard-tolerance", "standard-unclassified")
 RANKS = ["first", "smooth", "classical", "learned-without-budget"]
@@ -428,8 +428,11 @@ def choose_report(r):
             return None
         cap = o["capability"]
         if learned(cap):
-            budget = (CAPS.get(cap) or {}).get("energy_budget")
-            return "first" if budget is not None and budget.get("class") == "OnChipCounter" else "learned-without-budget"
+            # A sink-metered figure of its decode under its route's key (§6) that reads, with a
+            # hardware class and coverage Whole; its value is not read.
+            m = r["energy"].get("%s %s" % (cap, e["route"]))
+            ok = m is not None and read_measurement(m)[1] is None and m.get("class") in ("OnChipCounter", "CalibratedInstrument") and m.get("coverage") == "Whole"
+            return "classical" if ok else "learned-without-budget"
         if e["route"] == "ua":
             a = r["ua"].get(o["codec"]) or {}
             if a.get("supported") is True and a.get("smooth") is True and a.get("power_efficient") is True:
@@ -732,7 +735,9 @@ def mutations(doc):
     out.append(("no answer read as power-efficient", m(lambda d: find(d, "choices", "power_efficient_not_stated")["report"]["ua"]["avc1.64001f"].update(power_efficient=True)), None))
     out.append(("an alternative routed none chosen", m(lambda d: find(d, "choices", "no_alternative")["choices"][0].update(chosen="hevc", reason=None)), None))
     out.append(("an empty choice read", m(lambda d: find(d, "choices", "empty_choice")["report"]["objects"][0].update(choice="clip")), None))
-    out.append(("a learned capability given a budget", m(lambda d: CAPS["wai.video.int_hyper"].__setitem__("energy_budget", {"class": "OnChipCounter"})), None))
+    out.append(("a partial figure read as qualifying", m(lambda d: find(d, "choices", "learned_with_a_partial_measurement")["report"]["energy"]["wai.video.int_hyper wasm"].update(coverage="Whole")), None))
+    out.append(("a modelled figure read as qualifying", m(lambda d: find(d, "choices", "learned_with_a_modelled_figure")["choices"][0].update(order=["int_hyper", "int_motion"], ranks=["classical", "classical"], chosen="int_hyper")), None))
+    out.append(("a host-routed decode ranked on the user agent's answer", m(lambda d: find(d, "choices", "power_efficient_answer_for_a_host_routed_decode")["choices"][0].update(order=["hevc", "av1"], ranks=["first", "smooth"], chosen="hevc")), None))
     out.append(("a power-efficient answer that is not smooth put first", m(lambda d: find(d, "choices", "smooth_before_power_efficient_but_not_smooth")["choices"][0].update(order=["hevc", "av1"], ranks=["first", "smooth"], chosen="hevc")), None))
     out.append(("a rank renamed", m(lambda d: find(d, "choices", "hardware_first")["choices"][0]["ranks"].__setitem__(1, "classical")), None))
     out.append(("a route of none ranked before a learned alternative", m(lambda d: find(d, "choices", "learned_when_nothing_else_routes")["choices"][0].update(order=["hevc", "int_hyper"], ranks=[None, "learned-without-budget"])), None))
diff --git a/wai/wai-rs/include/wai.h b/wai/wai-rs/include/wai.h
index 7ae4fc8e3..ebf2c9951 100644
--- a/wai/wai-rs/include/wai.h
+++ b/wai/wai-rs/include/wai.h
@@ -474,12 +474,6 @@
  */
 typedef struct Fx Fx;
 
-/**
- * The rules the order applies; [`Rules::DEFAULT`] is §4's. A test turns one off to show
- * the vectors catch it.
- */
-typedef struct Rules Rules;
-
 typedef struct wai_buffer_t {
   uint8_t *data;
   uintptr_t len;
@@ -537,8 +531,6 @@ typedef struct wai_decoded_t {
 
 
 
-
-
 #ifdef __cplusplus
 extern "C" {
 #endif // __cplusplus
diff --git a/wai/wai-rs/src/browser_sink.rs b/wai/wai-rs/src/browser_sink.rs
index e66e3343f..e138331ea 100644
--- a/wai/wai-rs/src/browser_sink.rs
+++ b/wai/wai-rs/src/browser_sink.rs
@@ -465,50 +465,16 @@ fn report_reads(r: &Value) -> bool {
 
 // ─────────────────────────────── §6: energy ───────────────────────────────
 
-const CLASSES: [&str; 4] = ["CalibratedInstrument", "OnChipCounter", "ModelBased", "Estimator"];
-
-fn positive_count(v: Option<&Value>) -> bool {
-    integer(v.unwrap_or(&Value::Null)).is_some_and(|i| i > 0)
-}
-
-/// §6: a measurement read, or the code that refuses it.
+/// §6: a measurement read, or the code that refuses it: `energy_order::read_measurement`,
+/// the one reader the order uses too.
 fn read_measurement(m: &Value) -> Result {
-    let o = m.as_object().ok_or(Reason::EnergyCountInvalid)?;
-    let class = o.get("class").and_then(Value::as_str).filter(|c| CLASSES.contains(c)).ok_or(Reason::EnergyClassInvalid)?;
-    if o.get("joules_micro").and_then(integer) == Some(0) {
-        return Err(Reason::UnmeteredAsZero);
-    }
-    if !["joules_micro", "decodes", "window_us"].iter().all(|k| positive_count(o.get(*k))) {
-        return Err(Reason::EnergyCountInvalid);
-    }
-    let hardware = matches!(class, "CalibratedInstrument" | "OnChipCounter");
-    if hardware && !positive_count(o.get("relative_ppm")) {
-        return Err(Reason::EnergyEvidenceMissing);
-    }
-    if class == "OnChipCounter" && !matches!(o.get("filtering").and_then(Value::as_str), Some("On" | "Off" | "Unknown")) {
-        return Err(Reason::EnergyEvidenceMissing);
-    }
-    if class == "CalibratedInstrument" && !o.get("calibration_ref").and_then(Value::as_str).is_some_and(|s| !s.is_empty()) {
-        return Err(Reason::EnergyEvidenceMissing);
-    }
-    if !matches!(o.get("coverage").and_then(Value::as_str), Some("Whole" | "Partial")) {
-        return Err(Reason::EnergyEvidenceMissing);
-    }
-    let fabrics_ok = o.get("fabrics").and_then(Value::as_array).is_some_and(|f| {
-        !f.is_empty() && f.iter().all(Value::is_string) && {
-            let mut s: Vec<&str> = f.iter().filter_map(Value::as_str).collect();
-            s.sort_unstable();
-            s.windows(2).all(|w| w[0] != w[1])
-        }
-    });
-    if !fabrics_ok {
-        return Err(Reason::EnergyEvidenceMissing);
-    }
-    let joules = integer(&o["joules_micro"]).unwrap_or(0);
-    let decodes = integer(&o["decodes"]).unwrap_or(1);
-    let mut out = o.clone();
-    out.insert("per_decode_micro".into(), json!(joules / decodes));
-    Ok(Value::Object(out))
+    use crate::energy_order::MeasurementRefusal as R;
+    crate::energy_order::read_measurement(m).map_err(|e| match e {
+        R::ClassInvalid => Reason::EnergyClassInvalid,
+        R::UnmeteredAsZero => Reason::UnmeteredAsZero,
+        R::CountInvalid => Reason::EnergyCountInvalid,
+        R::EvidenceMissing => Reason::EnergyEvidenceMissing,
+    })
 }
 
 fn energy_entry(report: &Map, capability: &str, codec: Option<&str>, route: &str) -> Value {
@@ -631,20 +597,21 @@ pub fn route_report(report: &Value) -> Result, Reason> {
 // ─────────────────────────────── §4.7: alternatives ───────────────────────────────
 
 /// §4.7: the choice table of a report: for each `choice`, in order of first appearance,
-/// its alternatives in SPEC §4's energy order (platform-decode §4.2's ranks), the rank of
-/// each, and the one the page decodes; or the report refused whole (`report_malformed`). A
-/// report whose objects carry no `choice` has an empty table.
+/// its alternatives in SPEC §4's energy order ([`crate::energy_order`]), the rank of each,
+/// and the one the page decodes; or the report refused whole (`report_malformed`). A report
+/// whose objects carry no `choice` has an empty table.
 ///
-/// An alternative routed `ua` ranks by the user agent's answer for its codec string, read
-/// as platform-decode §3 reads `decodingInfo()` (`supported`, `smooth`, `powerEfficient`;
-/// an answer of `null` is not a `true` one); one routed `host` or `wasm` has no platform
-/// answer and ranks `classical`, or `learned-without-budget` where its capability is learned
-/// with no energy budget ([`crate::energy_order`]); one routed `none` comes last, with no
-/// rank. Report order within a rank. The chosen alternative is the first in that order
-/// whose route is not `none`.
+/// The order sits inside the routing: it orders the alternatives by their routes, and
+/// changes none. An alternative routed `ua` ranks by the user agent's answer for its codec
+/// string (`supported`, `smooth`, `power_efficient`; a `null` is not a `true`); one routed
+/// `host` or `wasm` has no answer that is about the decoder that runs it, and ranks
+/// `classical`; a learned one ranks `classical` when the report holds a measurement of its
+/// decode under its route's key that qualifies (§6; `energy_order::qualifies`: a hardware
+/// class, coverage `Whole`, its value not read), and `learned-without-budget` otherwise;
+/// one routed `none` comes last, with no rank. Report order within a rank. The chosen
+/// alternative is the first in that order whose route is not `none`.
 pub fn choose_report(report: &Value) -> Result, Reason> {
-    use crate::energy_order::DispatchPolicy;
-    use crate::platform_decode::{Answers, DecodingInfo};
+    use crate::energy_order::{DispatchPolicy, PlatformAnswer, Rank};
     let table = route_report(report)?;
     let objects = report["objects"].as_array().expect("read");
     let mut groups: Vec<(String, Vec)> = Vec::new();
@@ -656,25 +623,31 @@ pub fn choose_report(report: &Value) -> Result, Reason> {
         }
     }
     // The rank of one alternative: `None` for a route of `none`.
-    let rank = |i: usize| -> Option {
-        let e = &table[i];
-        if e["route"] == "none" {
+    let rank = |i: usize| -> Option {
+        let route = table[i]["route"].as_str().unwrap_or("none");
+        if route == "none" {
             return None;
         }
         let capability = objects[i]["capability"].as_str().unwrap_or_default();
-        let answers = (e["route"] == "ua").then(|| {
+        let answer = (route == "ua").then(|| {
             let a = objects[i]["codec"].as_str().and_then(|c| report["ua"].get(c)).cloned().unwrap_or(Value::Null);
-            let yes = |k: &str| a.get(k) == Some(&Value::Bool(true));
-            Answers { decoding_info: Some(DecodingInfo { supported: yes("supported"), smooth: yes("smooth"), power_efficient: yes("power_efficient") }), ..Answers::default() }
+            PlatformAnswer { supported: a["supported"] == Value::Bool(true), smooth: a["smooth"].as_bool(), power_efficient: a["power_efficient"].as_bool() }
         });
-        let platform = move |_: &str| answers.clone();
-        DispatchPolicy::energy().with_platform(&platform).rank(capability).ok()
+        let measured = report["energy"].get(format!("{capability} {route}")).cloned();
+        let platform = move |_: &str| answer;
+        let figure = move |_: &str| measured.clone();
+        Some(DispatchPolicy::energy().with_platform(&platform).with_measured(&figure).rank(capability))
     };
     Ok(groups
         .into_iter()
         .map(|(choice, members)| {
-            let mut ordered: Vec<(u8, usize, Option)> =
-                members.iter().map(|&i| { let r = rank(i); (r.map_or(u8::MAX, |r| r as u8), i, r) }).collect();
+            let mut ordered: Vec<(u8, usize, Option)> = members
+                .iter()
+                .map(|&i| {
+                    let r = rank(i);
+                    (r.map_or(u8::MAX, |r| r as u8), i, r)
+                })
+                .collect();
             ordered.sort_by_key(|&(k, i, _)| (k, i));
             let chosen = ordered.iter().find(|(_, _, r)| r.is_some()).map(|&(_, i, _)| i);
             json!({
diff --git a/wai/wai-rs/src/browser_sink/corpus.rs b/wai/wai-rs/src/browser_sink/corpus.rs
index c24e71070..35474ae64 100644
--- a/wai/wai-rs/src/browser_sink/corpus.rs
+++ b/wai/wai-rs/src/browser_sink/corpus.rs
@@ -451,6 +451,25 @@ fn alt(name: &str, capability: &str, codec: Option<&str>, choice: &str) -> Value
     o
 }
 
+/// A sink-metered figure in §6's shape for a learned alternative's decode. Synthetic: no
+/// measurement; it exists only to exercise §4.7's rule, and says so.
+fn synthetic(class: &str, coverage: &str) -> Value {
+    let mut m = json!({
+        "joules_micro": 2_460_000, "decodes": 120, "window_us": 6_000_000, "class": class, "relative_ppm": 40_000,
+        "filtering": "Unknown", "coverage": coverage, "fabrics": ["cpu", "gpu"], "note": "synthetic: no measurement",
+    });
+    if class != "OnChipCounter" {
+        m.as_object_mut().expect("object").remove("filtering");
+    }
+    if class == "CalibratedInstrument" {
+        m["calibration_ref"] = json!("synthetic: no certificate");
+    }
+    if !matches!(class, "OnChipCounter" | "CalibratedInstrument") {
+        m.as_object_mut().expect("object").remove("relative_ppm");
+    }
+    m
+}
+
 fn choice_cases() -> Vec {
     let ua = json!({
         "av01.0.04M.08": answer(true, Some(true), Some(true), "not_run"),
@@ -461,6 +480,10 @@ fn choice_cases() -> Vec {
     });
     let wasm = json!(["wai.video.int_motion", "wai.video.int_hyper", "wai.neural.int_hyper"]);
     let rep = |objects: Vec| report(ua.clone(), json!({}), wasm.clone(), json!({}), json!({}), objects);
+    let measured = |class: &str, coverage: &str, objects: Vec| {
+        report(ua.clone(), json!({}), wasm.clone(), json!({}), json!({ "wai.video.int_hyper wasm": synthetic(class, coverage) }), objects)
+    };
+    let learned_first = || vec![alt("int_hyper", "wai.video.int_hyper", None, "clip"), alt("int_motion", "wai.video.int_motion", None, "clip")];
     vec![
         (
             "hardware_first",
@@ -512,6 +535,46 @@ fn choice_cases() -> Vec {
             },
             vec![("clip", vec!["av1", "hevc"], Some("av1"))],
         ),
+        (
+            "power_efficient_answer_for_a_host_routed_decode",
+            "HEVC answered supported, smooth and power-efficient, but needing decode-equivalence with no probe run, so it routes to the host's decoder: it ranks classical on nothing the user agent said; AV1 answered smooth (smooth) goes first",
+            {
+                let mut ua2 = ua.clone();
+                ua2["av01.0.04M.08"] = answer(true, Some(true), Some(false), "not_run");
+                ua2["hev1.1.6.L63.B0"] = answer(true, Some(true), Some(true), "not_run");
+                let mut hevc = alt("hevc", "wai.video.hevc", Some("hev1.1.6.L63.B0"), "clip");
+                hevc["need"] = json!("decode-equivalence");
+                report(ua2, json!({ "wai.video.hevc": "decode-equivalence" }), wasm.clone(), json!({}), json!({}), vec![
+                    hevc,
+                    alt("av1", "wai.video.av1", Some("av01.0.04M.08"), "clip"),
+                ])
+            },
+            vec![("clip", vec!["av1", "hevc"], Some("av1"))],
+        ),
+        (
+            "learned_with_a_counter_measurement",
+            "the learned int_hyper with a sink-metered OnChipCounter figure of its whole decode (synthetic) ranks classical, with int_motion: the report's order decides, and the learned one is chosen; the figure's value is not read",
+            measured("OnChipCounter", "Whole", learned_first()),
+            vec![("clip", vec!["int_hyper", "int_motion"], Some("int_hyper"))],
+        ),
+        (
+            "learned_with_a_calibrated_measurement",
+            "the same with a CalibratedInstrument figure (synthetic): it qualifies too",
+            measured("CalibratedInstrument", "Whole", learned_first()),
+            vec![("clip", vec!["int_hyper", "int_motion"], Some("int_hyper"))],
+        ),
+        (
+            "learned_with_a_partial_measurement",
+            "a figure of part of the decode (coverage Partial, synthetic) does not qualify: the learned alternative ranks last",
+            measured("OnChipCounter", "Partial", learned_first()),
+            vec![("clip", vec!["int_motion", "int_hyper"], Some("int_motion"))],
+        ),
+        (
+            "learned_with_a_modelled_figure",
+            "a ModelBased figure (synthetic) is not a measurement of the decode: the learned alternative ranks last",
+            measured("ModelBased", "Whole", learned_first()),
+            vec![("clip", vec!["int_motion", "int_hyper"], Some("int_motion"))],
+        ),
         (
             "two_choices_and_one_alone",
             "two contents, each with its alternatives, and an object that carries no choice: one table entry per choice, in order of first appearance, and the lone object in none",
diff --git a/wai/wai-rs/src/codecs/registry.rs b/wai/wai-rs/src/codecs/registry.rs
index 42f4b2cf2..9ed0a7939 100644
--- a/wai/wai-rs/src/codecs/registry.rs
+++ b/wai/wai-rs/src/codecs/registry.rs
@@ -1003,11 +1003,6 @@ pub fn capabilities_json() -> String {
             if let Some(o) = r.ops {
                 v["ops"] = ops_json(&o);
             }
-            // SPEC §4, *Energy budget*: written only for a registration that states one, so
-            // the export of a capability without one is unchanged.
-            if let Some(b) = crate::energy_order::registered(r.capability) {
-                v["energy_budget"] = b.to_json();
-            }
             v
         })
         .collect();
@@ -1072,34 +1067,6 @@ fn nullable_enum(labels: &[&str]) -> serde_json::Value {
 }
 
 /// The schema of a capability's `ops` member (`extensions/integer-operators.md` §11).
-/// The registry export's `energy_budget`: the budget record of energy-measurement §2.10
-/// (`energy_order::BudgetRecord::to_json`), whose first six members platform-decode §5
-/// reads.
-fn energy_budget_schema() -> serde_json::Value {
-    serde_json::json!({
-        "type": "object",
-        "description": "A learned capability's energy budget (energy-measurement §2.10): its decode figure measured on a reference sink under OnChipCounter, with its evidence, in a signed record named by its digest; platform-decode §5 reads class, joules_micro, per, relative_ppm, window_us and reference_sink. Absent for a capability whose registration states none; no registration states one in this revision.",
-        "additionalProperties": false,
-        "required": ["class", "joules_micro", "per", "relative_ppm", "window_us", "filtering", "reference_sink", "resolution", "record"],
-        "properties": {
-            "class": { "const": "OnChipCounter" },
-            "joules_micro": { "type": "integer", "minimum": 1 },
-            "per": { "enum": ["frame", "picture", "second"] },
-            "relative_ppm": { "type": "integer", "minimum": 1 },
-            "window_us": { "type": "integer", "minimum": 1 },
-            "filtering": { "enum": ["On", "Off", "Unknown"] },
-            "reference_sink": { "type": "string", "minLength": 1 },
-            "resolution": {
-                "oneOf": [
-                    { "type": "null" },
-                    { "type": "array", "minItems": 2, "maxItems": 2, "items": { "type": "integer", "minimum": 1 } }
-                ]
-            },
-            "record": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
-        }
-    })
-}
-
 fn ops_schema() -> serde_json::Value {
     serde_json::json!({
         "type": "object",
@@ -1195,8 +1162,7 @@ pub fn capabilities_schema() -> String {
                             "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
                             "description": "The date of the first commit of this repository that registers the string; the specification entered the repository on 2026-06-12."
                         },
-                        "ops": ops_schema(),
-                        "energy_budget": energy_budget_schema()
+                        "ops": ops_schema()
                     }
                 }
             },
diff --git a/wai/wai-rs/src/container.rs b/wai/wai-rs/src/container.rs
index 16f54d0b0..aecc266d9 100644
--- a/wai/wai-rs/src/container.rs
+++ b/wai/wai-rs/src/container.rs
@@ -1384,13 +1384,13 @@ impl Wai {
         self.dispatch_with(&DispatchPolicy::energy(), advertises, verify)
     }
 
-    /// [`Self::dispatch_verified`] in the order `policy` gives (SPEC §4, *Energy order*;
-    /// platform-decode §4.2's ranks): the fallback is tried first when it ranks before the
-    /// capability, and the capability first otherwise; a capability the platform answers
-    /// it cannot decode, with no decoder of the sink's own, is not advertised for the
-    /// envelope (platform-decode §3). The order changes which capability decodes and
-    /// nothing else: an inert envelope reports the reason kept for the capability, else
-    /// the one kept for the fallback, whichever was tried first.
+    /// [`Self::dispatch_verified`] in the order `policy` gives (SPEC §4, *Energy order*): the
+    /// fallback is tried first when it ranks before the capability, and the capability
+    /// first otherwise. The order changes which capability decodes and nothing else: what
+    /// the sink advertises is `advertises`'s alone, so the order never makes inert an
+    /// envelope either capability could decode, and an inert envelope reports the reason
+    /// kept for the capability, else the one kept for the fallback, whichever was tried
+    /// first.
     pub fn dispatch_with(
         &self,
         policy: &DispatchPolicy<'_>,
@@ -1411,17 +1411,13 @@ impl Wai {
         }
         // (is the capability, not the fallback; the string), in the order tried.
         let mut tries: Vec<(bool, &str)> = [Some((true, primary)), self.fallback().map(|f| (false, f))].into_iter().flatten().collect();
-        let ranks: Vec> = tries.iter().map(|(_, c)| policy.rank(c).ok()).collect();
-        if let [Some(cap), Some(fb)] = ranks[..]
-            && fb < cap
-        {
+        if tries.len() == 2 && policy.rank(tries[1].1) < policy.rank(tries[0].1) {
             tries.swap(0, 1);
         }
-        let refused: Vec<&str> = tries.iter().zip(&ranks).filter(|(_, r)| r.is_none()).map(|((_, c), _)| *c).collect();
         // The reason kept at step 3 (the capability), else at step 5 (the fallback).
         let mut kept: [Option; 2] = [None, None];
         for (is_primary, cap) in tries {
-            if !crate::codecs::is_dispatchable(cap) || !advertises(cap) || refused.contains(&cap) {
+            if !crate::codecs::is_dispatchable(cap) || !advertises(cap) {
                 continue;
             }
             match self.prior() {
@@ -3067,8 +3063,8 @@ impl WaiMulti {
         advertises: impl Fn(&str) -> bool,
         verify: impl FnMut(&str, &Prior) -> Result,
     ) -> Result, Vec<(usize, Skip)>> {
-        let (order, refused) = energy_walk(&self.manifest, policy);
-        self.pick_in(&order, |i, m| if advertises(&m.capability) && !refused.contains(&i) { Ok(()) } else { Err(Skip::NotEligible) }, verify)
+        let order = energy_order(&self.manifest, policy);
+        self.pick_in(&order, |_, m| if advertises(&m.capability) { Ok(()) } else { Err(Skip::NotEligible) }, verify)
     }
 
     /// [`Self::pick`] at a sink that advertises every capability — the first entry
@@ -3234,21 +3230,14 @@ impl WaiMulti {
 /// selectable is reordered the walk is table order. Under
 /// [`DispatchPolicy::manifest_order`] it is table order.
 pub fn energy_order(manifest: &ManifestV2, policy: &DispatchPolicy<'_>) -> Vec {
-    energy_walk(manifest, policy).0
-}
-
-/// [`energy_order`], and the entries in it the platform answered it cannot decode with no
-/// decoder of the sink's own (platform-decode §3), which come after every other selectable
-/// entry and are skipped as `missing_capability`.
-pub fn energy_walk(manifest: &ManifestV2, policy: &DispatchPolicy<'_>) -> (Vec, Vec) {
     let entries = &manifest.renditions;
     let slots: Vec = (0..entries.len()).filter(|&i| entries[i].is_selectable()).collect();
-    let (ranked, refused) = policy.order(slots.iter().map(|&i| entries[i].capability.as_str()));
+    let ranked = policy.order(slots.iter().map(|&i| entries[i].capability.as_str()));
     let mut out: Vec = (0..entries.len()).collect();
-    for (slot, r) in slots.iter().zip(ranked.iter().chain(refused.iter())) {
-        out[*slot] = slots[*r];
+    for (slot, r) in slots.iter().zip(ranked) {
+        out[*slot] = slots[r];
     }
-    (out, refused.iter().map(|&r| slots[r]).collect())
+    out
 }
 
 /// SPEC §7.1 selection over a `WAI2` manifest's entries alone, with no payload in
@@ -4066,18 +4055,15 @@ pub(crate) mod tests {
         assert_eq!(table.meta.capability, "wai.neural.encodec32");
     }
 
-    /// SPEC §4, *Energy order*, for a `WAI1`, by platform-decode §4.2's ranks: a learned
-    /// capability with no energy budget is tried after a classical fallback the sink can
-    /// decode; with a qualifying budget it ranks first and keeps its place, as it does under
-    /// the manifest's order; a classical fallback the platform marks supported, smooth and
-    /// power-efficient shares the first rank with it; a capability the platform refuses,
-    /// with no decoder of the sink's own, is not advertised; and the order changes no
+    /// SPEC §4, *Energy order*, for a `WAI1`: a learned capability with no measurement of
+    /// its decode is tried after a classical fallback; with a qualifying measurement it
+    /// ranks classical and keeps its place, as it does under the manifest's order; a
+    /// fallback the platform answers smooth or power-efficient comes first even then; the
+    /// order never makes inert an envelope one of the two could decode; and it changes no
     /// reason.
     #[test]
     fn wai1_dispatch_tries_a_classical_fallback_before_an_unbudgeted_learned_capability() {
-        use crate::energy_order::{BudgetRecord, BudgetUnit, Budgets};
-        use crate::energy_class::{CounterFiltering, EnergyProvenance, Uncertainty};
-        use crate::platform_decode::{Answers, DecodingInfo};
+        use crate::energy_order::PlatformAnswer;
         let env = |cap: &str, fb: Option<&str>| {
             let mut req = ModelRequirement::new(cap);
             req.fallback = fb.map(String::from);
@@ -4089,24 +4075,22 @@ pub(crate) mod tests {
         assert_eq!(dispatched(&w, all), Some(classical), "the classical fallback first by default");
         assert_eq!(dispatched(&w, |c| c == learned), Some(learned), "the learned capability still decodes where the fallback is not advertised");
         assert_eq!(w.dispatch_with(&DispatchPolicy::manifest_order(), all, no_parameter_sets()).unwrap().capability, learned);
-        let chip = EnergyProvenance::on_chip_counter(Uncertainty { relative_ppm: 25_000, window_us: 7_000_000 }, CounterFiltering::Unknown).unwrap();
-        let budget = |_: ()| BudgetRecord { joules_micro: 41_250, per: BudgetUnit::Frame, class: chip.clone(), resolution: Some((1920, 1080)), reference_sink: "a reference sink".into(), record: "ab".repeat(32) };
-        let held = Budgets::registry().with_table(&serde_json::json!({ learned: budget(()).to_json(), "wai.neural.int_synth": budget(()).to_json() })).unwrap();
-        assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_budgets(&held), all, no_parameter_sets()).unwrap().capability, learned, "a budget keeps the learned capability's place");
-        let pe = |c: &str| (c == classical).then_some(Answers { decoding_info: Some(DecodingInfo { supported: true, smooth: true, power_efficient: true }), ..Answers::default() });
-        assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_budgets(&held).with_platform(&pe), all, no_parameter_sets()).unwrap().capability, learned, "first rank both: the manifest's order");
-        assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_platform(&pe), all, no_parameter_sets()).unwrap().capability, classical, "the power-efficient decode first");
-        let no = |c: &str| (c == classical).then_some(Answers { decoding_info: Some(DecodingInfo { supported: false, smooth: false, power_efficient: false }), ..Answers::default() });
-        assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_platform(&no), all, no_parameter_sets()).unwrap().capability, learned, "a fallback the platform cannot decode is not advertised");
+        // A sink-metered figure in browser-sink §6's shape. Synthetic: no measurement; it
+        // exists only to exercise the rule.
+        let figure = serde_json::json!({ "joules_micro": 4_125_000, "decodes": 100, "window_us": 7_000_000, "class": "OnChipCounter", "relative_ppm": 25_000, "filtering": "Unknown", "coverage": "Whole", "fabrics": ["cpu", "gpu"], "note": "synthetic: no measurement" });
+        let held = |c: &str| matches!(c, "wai.video.int_hyper" | "wai.neural.int_synth").then(|| figure.clone());
+        assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_measured(&held), all, no_parameter_sets()).unwrap().capability, learned, "a qualifying measurement keeps the learned capability's place");
+        let smooth = |c: &str| (c == classical).then_some(PlatformAnswer { supported: true, smooth: Some(true), power_efficient: Some(false) });
+        assert_eq!(w.dispatch_with(&DispatchPolicy::energy().with_measured(&held).with_platform(&smooth), all, no_parameter_sets()).unwrap().capability, classical, "a smooth decode before a measured learned one");
         // Two classical capabilities, or a classical capability over a learned fallback,
-        // keep the manifest's order; so do two learned ones, and a string this revision
-        // does not register, which ranks as learned.
+        // keep the manifest's order; so do two learned ones; a string this revision does not
+        // register ranks as learned.
         assert_eq!(dispatched(&env("wai.image.jxl", Some("wai.image.png")), all), Some("wai.image.jxl"));
         assert_eq!(dispatched(&env(classical, Some(learned)), all), Some(classical));
         assert_eq!(dispatched(&env(learned, Some("wai.image.jpegai")), all), Some(learned), "two learned capabilities keep their order");
         assert_eq!(dispatched(&env("wai.future.codec", Some("wai.image.png")), all), Some("wai.image.png"), "an unregistered capability ranks as learned");
         // The reason an inert envelope reports is still step 3's before step 5's, whichever
-        // was tried first: a fallback with a budget is tried before a capability without.
+        // was tried first: a measured fallback is tried before an unmeasured capability.
         let pin = Prior::new("m", MODEL_SHA, "int");
         let mut c = Conditioning::new("int");
         c.prior = Some(pin);
@@ -4115,9 +4099,9 @@ pub(crate) mod tests {
         let pinned = Wai::new(Manifest::new("image", "replicate", req, c), vec![]);
         let mut seen = Vec::new();
         let e = pinned
-            .dispatch_with(&DispatchPolicy::energy().with_budgets(&held), all, |cap, _| { seen.push(cap.to_string()); Err::<(), _>(PinRefusal::NotHeld { capability: cap.into() }) })
+            .dispatch_with(&DispatchPolicy::energy().with_measured(&held), all, |cap, _| { seen.push(cap.to_string()); Err::<(), _>(PinRefusal::NotHeld { capability: cap.into() }) })
             .unwrap_err();
-        assert_eq!(seen, ["wai.neural.int_synth", "wai.neural.int_mlicpp"], "the budgeted fallback tried first");
+        assert_eq!(seen, ["wai.neural.int_synth", "wai.neural.int_mlicpp"], "the measured fallback tried first");
         assert_eq!(e, Inert::PinRefused { capability: "wai.neural.int_mlicpp".into(), refusal: PinRefusal::NotHeld { capability: "wai.neural.int_mlicpp".into() } });
     }
 
@@ -4146,18 +4130,11 @@ pub(crate) mod tests {
         assert_eq!(energy_order(&alone.manifest, &DispatchPolicy::energy()), vec![0, 1], "nothing selectable to reorder: table order");
         assert_eq!(m.pick(|_| true, accept).unwrap().meta.capability, "wai.image.jxl");
         assert_eq!(m.pick(|c| c.starts_with("wai.neural") || c == "wai.image.jpegai", accept).unwrap().meta.capability, "wai.neural.elic");
-        use crate::platform_decode::{Answers, DecodingInfo};
-        let ans = |c: &str| match c {
-            "wai.image.png" => Some(Answers { decoding_info: Some(DecodingInfo { supported: true, smooth: true, power_efficient: true }), ..Answers::default() }),
-            "wai.image.jxl" => Some(Answers { decoding_info: Some(DecodingInfo { supported: false, smooth: false, power_efficient: false }), ..Answers::default() }),
-            _ => None,
-        };
+        use crate::energy_order::PlatformAnswer;
+        let ans = |c: &str| (c == "wai.image.png").then_some(PlatformAnswer { supported: true, smooth: Some(true), power_efficient: Some(true) });
         let p = m.pick_with(&DispatchPolicy::energy().with_platform(&ans), |_| true, accept).unwrap();
-        assert_eq!(p.meta.capability, "wai.image.png", "the power-efficient decode first");
-        // The entry the platform cannot decode is walked after the learned ones and skipped.
-        assert_eq!(energy_walk(&m.manifest, &DispatchPolicy::energy().with_platform(&ans)), (vec![3, 0, 2, 1], vec![1]));
-        let e = m.pick_with(&DispatchPolicy::energy().with_platform(&ans), |c| c == "wai.image.jxl", accept).unwrap_err();
-        assert_eq!(e.iter().find(|(i, _)| *i == 1).map(|(_, k)| k.code()), Some("missing_capability"));
+        assert_eq!(p.meta.capability, "wai.image.png", "the decode the platform answers supported, smooth and power-efficient first");
+        assert_eq!(energy_order(&m.manifest, &DispatchPolicy::energy().with_platform(&ans)), vec![3, 1, 0, 2]);
     }
 
     /// SPEC §5, *Candidate capabilities*: a candidate is never dispatched, picked
@@ -4218,7 +4195,7 @@ pub(crate) mod tests {
         assert_eq!(v1("wai.pc.gpcc", None).check_candidates(), Ok(()));
         // A string this revision does not register is the sink's to advertise
         // (SPEC §4, §8): taken when advertised, the fallback otherwise. It ranks as learned
-        // (platform-decode §4.1), so by default a classical fallback the sink advertises
+        // (SPEC §4, *Energy order*), so by default a classical fallback the sink advertises
         // is tried first, and under the manifest's order the string itself.
         assert_eq!(dispatched(&v1("wai.image.nope", Some("wai.image.png")), all), Some("wai.image.png"));
         assert_eq!(v1("wai.image.nope", Some("wai.image.png")).dispatch_with(&DispatchPolicy::manifest_order(), all, no_parameter_sets()).unwrap().capability, "wai.image.nope");
diff --git a/wai/wai-rs/src/energy_order.rs b/wai/wai-rs/src/energy_order.rs
index b46a0947c..cbe59db35 100644
--- a/wai/wai-rs/src/energy_order.rs
+++ b/wai/wai-rs/src/energy_order.rs
@@ -1,272 +1,176 @@
-//! The energy order of dispatch (SPEC §4, *Energy order*; §7.1 step 2): the order a sink
-//! tries the capabilities an envelope offers in when its deployer configures none. It is
-//! [`crate::platform_decode`]'s default order (`extensions/platform-decode.md` §4), applied
-//! by the reference dispatcher by default rather than only on request:
+//! The energy order of dispatch (SPEC §4, *Energy order*; §7.1 step 2; browser-sink §4.7):
+//! the order a sink tries the capabilities an envelope offers in when its deployer configures
+//! none. It is a default order over what the sink can already decode, and never a route: what
+//! the sink advertises (SPEC §4; in a page, the object's route, browser-sink §4.3) is decided
+//! before it, and nothing here changes it.
 //!
-//! - platform-decode §4.2's ranks, from what the sink's platform answers about a decode
-//!   (Media Capabilities, WebCodecs; [`crate::platform_decode::Answers`]) and from the
-//!   energy budgets of learned entries: `first` (classical decode the platform marks
-//!   supported, smooth and power-efficient, and learned decode with a qualifying budget),
-//!   `smooth`, `classical` (any other classical decode the sink can make, a sink with no
-//!   platform to ask included), and `learned-without-budget` last;
-//! - the envelope's order within a rank.
+//! The ranks, lowest first, in the terms platform-decode's review settled on:
 //!
-//! So a learned capability with no qualifying budget is never tried above a classical
-//! fallback the sink can decode, and a decode the platform answers power-efficient comes
-//! before a software or a learned one. The order changes which capability decodes, never a
-//! verdict or a refusal.
+//! - [`Rank::First`]: classical decode the platform answers supported, smooth and
+//!   power-efficient. In a page this is read only for an object routed `ua`, the user
+//!   agent's decoder: an object the page decodes another way is not ranked on the user
+//!   agent's answer about a decoder that will not run it. `powerEfficient` is the user
+//!   agent's hint, its meaning left to the user agent; it orders, and is never an energy
+//!   figure or evidence of hardware.
+//! - [`Rank::Smooth`]: classical decode the platform answers smooth, not power-efficient.
+//! - [`Rank::Classical`]: any other decode the sink can make: classical decode with no
+//!   platform answer, and a learned capability whose decode this sink has measured
+//!   ([`qualifies`]).
+//! - [`Rank::LearnedWithoutBudget`]: a learned capability ([`is_learned`]) with no such
+//!   measurement.
 //!
-//! What this module adds to platform-decode is where the order is applied
-//! ([`DispatchPolicy`], taken by `Wai::dispatch_with` and `WaiMulti::pick_with`, and the
-//! default of `Wai::dispatch_verified` and `WaiMulti::pick`), and the energy budget as
-//! `extensions/energy-measurement.md` §2.10 defines it ([`BudgetRecord`]): the record a
-//! registration states (REGISTRY.md, the registry export's `energy_budget`) or a deployer
-//! pins in a table ([`Budgets::with_table`]), checked whole, of which platform-decode §5
-//! reads its members (`class`, `joules_micro`, `per`, `relative_ppm`, `window_us`,
-//! `reference_sink`). No registration states one in this revision.
+//! Within a rank, the envelope's order. So a learned capability is never decoded above a
+//! classical alternative the sink can decode unless the sink holds a measurement of its
+//! decode, and then not above a decode the platform answers smooth or power-efficient.
+//!
+//! The measurement a learned capability needs is the sink-metered figure browser-sink §6
+//! carries in its energy entry: a figure with its class, its declared uncertainty, its
+//! coverage and the fabrics it covers. It qualifies when it reads under §6 with the class
+//! `OnChipCounter` or `CalibratedInstrument` and the coverage `Whole`. The order reads only
+//! whether such a figure is held, never its value: a figure is reported, not steered on
+//! (browser-sink §6). A deployer that wants to compare values sets its own policy
+//! ([`DispatchPolicy::with_ceiling`], per decode, which this default never applies).
 //!
 //! Pure std plus `serde_json`, compiled unconditionally, so the browser sink's wasm build
 //! applies the same order.
 
-use std::collections::BTreeMap;
+use serde_json::{json, Map, Value};
 
-use serde_json::{json, Value};
+use crate::codecs::{self, ReplicateClass};
 
-use crate::container::Skip;
-use crate::energy_class::{self, AcquisitionError, CounterFiltering, EnergyProvenance, Uncertainty};
-use crate::platform_decode::{self as pd, Answers, Rank, Rules};
+/// Whether a capability is decoded by a learned reconstruction: its registry class is not
+/// one of the three standard classes (SPEC §7). A capability this revision does not register
+/// counts as learned: nothing says it is classical.
+pub fn is_learned(capability: &str) -> bool {
+    !matches!(
+        codecs::capability_replicate_class(capability),
+        Some(ReplicateClass::StandardDefined | ReplicateClass::StandardTolerance | ReplicateClass::StandardUnclassified)
+    )
+}
 
-pub use crate::platform_decode::is_learned;
+/// A capability's rank in the energy order, lowest tried first.
+#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
+pub enum Rank {
+    First = 0,
+    Smooth = 1,
+    Classical = 2,
+    LearnedWithoutBudget = 3,
+}
 
-/// What a budget's figure is per (platform-decode §5's units).
+impl Rank {
+    pub const fn as_str(self) -> &'static str {
+        match self {
+            Rank::First => "first",
+            Rank::Smooth => "smooth",
+            Rank::Classical => "classical",
+            Rank::LearnedWithoutBudget => "learned-without-budget",
+        }
+    }
+}
+
+/// The platform's answer about one decode, in browser-sink §3's shape: `supported` from the
+/// decoder's own configuration check (WebCodecs `isConfigSupported()`, a native platform's
+/// hardware-decode query), and `smooth` and `power_efficient` from Media Capabilities, asked
+/// only once `supported` is true (http-delivery §12.2), or `None` where nothing was asked.
 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
-pub enum BudgetUnit {
-    Frame,
-    Picture,
-    ContentSecond,
+pub struct PlatformAnswer {
+    pub supported: bool,
+    pub smooth: Option,
+    pub power_efficient: Option,
 }
 
-impl BudgetUnit {
-    pub const fn token(self) -> &'static str {
+impl PlatformAnswer {
+    /// The rank this answer gives a classical decode: `first` only for `supported`, `smooth`
+    /// and `power_efficient` all `true`, `smooth` for `smooth` alone, `classical` otherwise. A
+    /// `null` is not a `true`.
+    pub fn rank(&self) -> Rank {
+        match (self.supported, self.smooth, self.power_efficient) {
+            (true, Some(true), Some(true)) => Rank::First,
+            (true, Some(true), _) => Rank::Smooth,
+            _ => Rank::Classical,
+        }
+    }
+}
+
+/// Why a measurement does not read under browser-sink §6, by that section's reason code.
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+pub enum MeasurementRefusal {
+    ClassInvalid,
+    UnmeteredAsZero,
+    CountInvalid,
+    EvidenceMissing,
+}
+
+impl MeasurementRefusal {
+    pub const fn code(self) -> &'static str {
         match self {
-            BudgetUnit::Frame => "frame",
-            BudgetUnit::Picture => "picture",
-            BudgetUnit::ContentSecond => "second",
-        }
-    }
-
-    fn read(s: &str) -> Option {
-        [BudgetUnit::Frame, BudgetUnit::Picture, BudgetUnit::ContentSecond].into_iter().find(|u| u.token() == s)
-    }
-}
-
-/// An energy budget as energy-measurement §2.10 defines it: a learned capability's decode
-/// figure, `OnChipCounter` with its evidence, measured on a named reference sink, in a
-/// record named by its digest.
-#[derive(Clone, Debug, PartialEq, Eq)]
-pub struct BudgetRecord {
-    /// The figure, in microjoules per [`Self::per`].
-    pub joules_micro: u64,
-    pub per: BudgetUnit,
-    /// `OnChipCounter`, with its declared uncertainty and filtering state.
-    pub class: EnergyProvenance,
-    /// The decoded resolution the figure was measured at, width × height; `None` for
-    /// content without one (audio).
-    pub resolution: Option<(u32, u32)>,
-    /// The reference sink the figure was measured on.
-    pub reference_sink: String,
-    /// SHA-256, 64 lowercase hexadecimal digits, of the signed record the figure is in.
-    pub record: String,
-}
-
-/// Why a budget record does not read or does not check (energy-measurement §2.10).
-#[derive(Clone, Debug, PartialEq, Eq)]
-pub enum BudgetError {
-    /// A member missing or of the wrong form; the member named.
-    Malformed(&'static str),
-    /// The class is not `OnChipCounter` (platform-decode §5): a model, a constant or a
-    /// calibrated instrument's figure is not the budget this revision reads.
-    NotCounter,
-    /// The class or the figure breaks energy-measurement §2.6 (*New profiles*), §2.3 or
-    /// §2's coupling: `HwShunt` (`LegacyInNewProfile`), a class beside zero, a refined class
-    /// without its evidence, or a declaration below the resolution floor.
-    Class(AcquisitionError),
-}
-
-impl BudgetError {
-    /// energy-measurement §2.10's reason for this refusal.
-    pub fn code(&self) -> &'static str {
-        match self {
-            BudgetError::Malformed(_) => "budget_malformed",
-            BudgetError::NotCounter => "budget_not_counter",
-            BudgetError::Class(AcquisitionError::LegacyInNewProfile) => "budget_legacy_class",
-            BudgetError::Class(_) => "budget_class_invalid",
+            MeasurementRefusal::ClassInvalid => "energy_class_invalid",
+            MeasurementRefusal::UnmeteredAsZero => "unmetered_as_zero",
+            MeasurementRefusal::CountInvalid => "energy_count_invalid",
+            MeasurementRefusal::EvidenceMissing => "energy_evidence_missing",
         }
     }
 }
 
-impl std::fmt::Display for BudgetError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            BudgetError::Malformed(m) => write!(f, "budget_malformed: {m}"),
-            BudgetError::NotCounter => f.write_str("budget_not_counter: a budget is an OnChipCounter figure"),
-            BudgetError::Class(e) => write!(f, "{}: {e}", self.code()),
-        }
-    }
+const CLASSES: [&str; 4] = ["CalibratedInstrument", "OnChipCounter", "ModelBased", "Estimator"];
+const MAX_SAFE: i64 = (1 << 53) - 1;
+
+fn integer(v: &Value) -> Option {
+    let i = v.as_number()?.as_i64()?;
+    (-MAX_SAFE..=MAX_SAFE).contains(&i).then_some(i)
 }
 
-impl std::error::Error for BudgetError {}
-
-fn is_hex64(s: &str) -> bool {
-    s.len() == 64 && s.bytes().all(|b| b.is_ascii_digit() || (b'a'..=b'f').contains(&b))
+fn positive_count(v: Option<&Value>) -> bool {
+    integer(v.unwrap_or(&Value::Null)).is_some_and(|i| i > 0)
 }
 
-/// The record's members, energy-measurement §2.10's table: platform-decode §5's six and
-/// three more.
-const MEMBERS: [&str; 9] = ["class", "joules_micro", "per", "relative_ppm", "window_us", "filtering", "reference_sink", "resolution", "record"];
-
-impl BudgetRecord {
-    /// energy-measurement §2.10: `HwShunt` refused as in every new profile, then the class
-    /// `OnChipCounter` with its evidence beside a figure that meets the resolution floor
-    /// ([`energy_class::check_new_profile`]); the reference sink named; the record a SHA-256
-    /// digest; a resolution two positive integers.
-    pub fn check(&self) -> Result<(), BudgetError> {
-        if self.class.is_legacy() {
-            return Err(BudgetError::Class(AcquisitionError::LegacyInNewProfile));
-        }
-        if !matches!(self.class, EnergyProvenance::OnChipCounter { .. }) {
-            return Err(BudgetError::NotCounter);
-        }
-        energy_class::check_new_profile(self.joules_micro, &self.class).map_err(BudgetError::Class)?;
-        if self.reference_sink.trim().is_empty() {
-            return Err(BudgetError::Malformed("reference_sink"));
-        }
-        if !is_hex64(&self.record) {
-            return Err(BudgetError::Malformed("record"));
-        }
-        if matches!(self.resolution, Some((0, _)) | Some((_, 0))) {
-            return Err(BudgetError::Malformed("resolution"));
-        }
-        Ok(())
+/// browser-sink §6: a measurement read, with its `per_decode_micro`, or the reason it is
+/// refused. One reader for the page's energy entry and for the order.
+pub fn read_measurement(m: &Value) -> Result {
+    let o = m.as_object().ok_or(MeasurementRefusal::CountInvalid)?;
+    let class = o.get("class").and_then(Value::as_str).filter(|c| CLASSES.contains(c)).ok_or(MeasurementRefusal::ClassInvalid)?;
+    if o.get("joules_micro").and_then(integer) == Some(0) {
+        return Err(MeasurementRefusal::UnmeteredAsZero);
     }
-
-    /// The record's JSON form (energy-measurement §2.10).
-    pub fn to_json(&self) -> Value {
-        let (ppm, window, filtering) = match &self.class {
-            EnergyProvenance::OnChipCounter { uncertainty, filtering } => (uncertainty.relative_ppm, uncertainty.window_us, filtering.label()),
-            _ => (0, 0, "Unknown"),
-        };
-        json!({
-            "class": self.class.label(),
-            "joules_micro": self.joules_micro,
-            "per": self.per.token(),
-            "relative_ppm": ppm,
-            "window_us": window,
-            "filtering": filtering,
-            "reference_sink": self.reference_sink,
-            "resolution": self.resolution.map(|(w, h)| json!([w, h])).unwrap_or(Value::Null),
-            "record": self.record,
-        })
+    if !["joules_micro", "decodes", "window_us"].iter().all(|k| positive_count(o.get(*k))) {
+        return Err(MeasurementRefusal::CountInvalid);
     }
-
-    /// Read a record from [`Self::to_json`]'s form and [`Self::check`] it. A member the form
-    /// does not define is refused: a budget states a measurement, and a member nobody
-    /// reads could change what it states.
-    pub fn from_json(v: &Value) -> Result {
-        let o = v.as_object().ok_or(BudgetError::Malformed("not an object"))?;
-        if o.keys().any(|k| !MEMBERS.contains(&k.as_str())) {
-            return Err(BudgetError::Malformed("a member this form does not define"));
-        }
-        let text = |k: &'static str| o.get(k).and_then(Value::as_str).ok_or(BudgetError::Malformed(k));
-        let int = |k: &'static str| o.get(k).and_then(Value::as_u64).ok_or(BudgetError::Malformed(k));
-        let label = text("class")?;
-        if label == "HwShunt" {
-            return Err(BudgetError::Class(AcquisitionError::LegacyInNewProfile));
-        }
-        if label != "OnChipCounter" {
-            return Err(if EnergyProvenance::from_label(label).is_ok() || label == "CalibratedInstrument" { BudgetError::NotCounter } else { BudgetError::Malformed("class") });
-        }
-        let ppm = u32::try_from(int("relative_ppm")?).map_err(|_| BudgetError::Malformed("relative_ppm"))?;
-        let uncertainty = Uncertainty::new(ppm, int("window_us")?).map_err(BudgetError::Class)?;
-        let filtering = CounterFiltering::from_label(text("filtering")?).ok_or(BudgetError::Malformed("filtering"))?;
-        let class = EnergyProvenance::on_chip_counter(uncertainty, filtering).map_err(BudgetError::Class)?;
-        let per = BudgetUnit::read(text("per")?).ok_or(BudgetError::Malformed("per"))?;
-        let resolution = match o.get("resolution") {
-            Some(Value::Null) => None,
-            Some(Value::Array(a)) if a.len() == 2 => {
-                let dim = |x: &Value| x.as_u64().and_then(|n| u32::try_from(n).ok());
-                match (dim(&a[0]), dim(&a[1])) {
-                    (Some(w), Some(h)) => Some((w, h)),
-                    _ => return Err(BudgetError::Malformed("resolution")),
-                }
-            }
-            _ => return Err(BudgetError::Malformed("resolution")),
-        };
-        let b = BudgetRecord {
-            joules_micro: int("joules_micro")?,
-            per,
-            class,
-            resolution,
-            reference_sink: text("reference_sink")?.to_string(),
-            record: text("record")?.to_string(),
-        };
-        b.check()?;
-        Ok(b)
+    let hardware = matches!(class, "CalibratedInstrument" | "OnChipCounter");
+    if hardware && !positive_count(o.get("relative_ppm")) {
+        return Err(MeasurementRefusal::EvidenceMissing);
     }
-
-    /// What platform-decode §5 reads of the record.
-    pub fn order_view(&self) -> pd::EnergyBudget {
-        let (ppm, window) = self.class.uncertainty().map_or((0, 0), |u| (u64::from(u.relative_ppm), u.window_us));
-        pd::EnergyBudget {
-            class: self.class.label().to_string(),
-            joules_micro: self.joules_micro,
-            per: self.per.token().to_string(),
-            relative_ppm: ppm,
-            window_us: window,
-            reference_sink: self.reference_sink.clone(),
-        }
+    if class == "OnChipCounter" && !matches!(o.get("filtering").and_then(Value::as_str), Some("On" | "Off" | "Unknown")) {
+        return Err(MeasurementRefusal::EvidenceMissing);
     }
+    if class == "CalibratedInstrument" && !o.get("calibration_ref").and_then(Value::as_str).is_some_and(|s| !s.is_empty()) {
+        return Err(MeasurementRefusal::EvidenceMissing);
+    }
+    if !matches!(o.get("coverage").and_then(Value::as_str), Some("Whole" | "Partial")) {
+        return Err(MeasurementRefusal::EvidenceMissing);
+    }
+    let fabrics_ok = o.get("fabrics").and_then(Value::as_array).is_some_and(|f| {
+        !f.is_empty() && f.iter().all(Value::is_string) && {
+            let mut s: Vec<&str> = f.iter().filter_map(Value::as_str).collect();
+            s.sort_unstable();
+            s.windows(2).all(|w| w[0] != w[1])
+        }
+    });
+    if !fabrics_ok {
+        return Err(MeasurementRefusal::EvidenceMissing);
+    }
+    let joules = integer(&o["joules_micro"]).unwrap_or(0);
+    let decodes = integer(&o["decodes"]).unwrap_or(1);
+    let mut out: Map = o.clone();
+    out.insert("per_decode_micro".into(), json!(joules / decodes));
+    Ok(Value::Object(out))
 }
 
-/// The budgets registrations state, by capability (REGISTRY.md, *Energy budgets*): none in
-/// this revision. A row is added with the registration that states it, and the registry
-/// export writes it as the capability's `energy_budget`.
-pub const REGISTERED: &[(&str, fn() -> BudgetRecord)] = &[];
-
-/// The budget a capability's registration states, if any.
-pub fn registered(capability: &str) -> Option {
-    REGISTERED.iter().find(|(c, _)| *c == capability).map(|(_, b)| b())
-}
-
-/// The budgets a sink holds: the registrations' ([`Budgets::registry`]), and any a deployer
-/// adds from a published table it pins ([`Budgets::with_table`]).
-#[derive(Clone, Debug, Default, PartialEq, Eq)]
-pub struct Budgets {
-    table: BTreeMap,
-}
-
-impl Budgets {
-    /// The budgets the registrations state.
-    pub fn registry() -> Budgets {
-        Budgets { table: REGISTERED.iter().map(|(c, b)| (c.to_string(), b())).collect() }
-    }
-
-    /// Add a deployer's table, `{"": , …}`. Every record must read and
-    /// check, or the whole table is refused with the first capability that does not: a
-    /// sink does not hold half a table it pinned.
-    pub fn with_table(mut self, table: &Value) -> Result {
-        let t = table.as_object().ok_or_else(|| (String::new(), BudgetError::Malformed("not an object")))?;
-        for (cap, v) in t {
-            let b = BudgetRecord::from_json(v).map_err(|e| (cap.clone(), e))?;
-            self.table.insert(cap.clone(), b);
-        }
-        Ok(self)
-    }
-
-    /// The budget held for `capability`.
-    pub fn get(&self, capability: &str) -> Option<&BudgetRecord> {
-        self.table.get(capability)
-    }
+/// Whether a measurement lets a learned capability rank with classical decode: it reads
+/// under browser-sink §6, its class is `OnChipCounter` or `CalibratedInstrument`, and its
+/// coverage is `Whole` (a figure that saw only some of the fabrics the decode ran on is not a
+/// measurement of the decode). Its value is not read.
+pub fn qualifies(m: &Value) -> bool {
+    read_measurement(m).is_ok_and(|r| matches!(r["class"].as_str(), Some("OnChipCounter" | "CalibratedInstrument")) && r["coverage"] == "Whole")
 }
 
 /// Whether a sink applies the energy order or the envelope's own.
@@ -279,17 +183,24 @@ pub enum OrderKind {
     Manifest,
 }
 
+/// The platform's answer about a capability's decode, where the sink asks one.
+pub type PlatformAnswers<'a> = &'a dyn Fn(&str) -> Option;
+
+/// The sink-metered measurement a sink holds of a capability's decode, in browser-sink §6's
+/// shape.
+pub type Measurements<'a> = &'a dyn Fn(&str) -> Option;
+
 /// The order a sink tries an envelope's capabilities in.
 pub struct DispatchPolicy<'a> {
     pub kind: OrderKind,
-    /// The platform's answers for a capability, where the sink can ask
-    /// (platform-decode §2, §3); `None` for a sink with no platform to ask.
-    pub platform: Option<&'a dyn Fn(&str) -> Option>,
-    /// The budgets the sink holds; `None` is the registrations' alone.
-    pub budgets: Option<&'a Budgets>,
-    /// platform-decode's rules: [`Rules::DEFAULT`], with the deployer's ceiling where it
-    /// sets one.
-    pub rules: Rules,
+    /// The platform's answer about a capability's decode, where the sink asks one; `None`
+    /// where it asks nothing, or decodes the capability with a decoder of its own.
+    pub platform: Option>,
+    /// The sink-metered measurement it holds of a capability's decode on this sink.
+    pub measured: Option>,
+    /// A deployer's ceiling on a learned capability's measured figure, in microjoules per
+    /// decode: a policy of its own, never the default.
+    pub ceiling_per_decode_micro: Option,
 }
 
 impl Default for DispatchPolicy<'_> {
@@ -299,151 +210,135 @@ impl Default for DispatchPolicy<'_> {
 }
 
 impl<'a> DispatchPolicy<'a> {
-    /// SPEC §4's default: the energy order, with the registrations' budgets and no
-    /// platform answer.
+    /// SPEC §4's default: the energy order, with no platform answer and no measurement.
     pub fn energy() -> DispatchPolicy<'a> {
-        DispatchPolicy { kind: OrderKind::Energy, platform: None, budgets: None, rules: Rules::DEFAULT }
+        DispatchPolicy { kind: OrderKind::Energy, platform: None, measured: None, ceiling_per_decode_micro: None }
     }
 
     /// The envelope's own order, as a deployer may configure.
     pub fn manifest_order() -> DispatchPolicy<'a> {
-        DispatchPolicy { kind: OrderKind::Manifest, platform: None, budgets: None, rules: Rules::DEFAULT }
+        DispatchPolicy { kind: OrderKind::Manifest, ..DispatchPolicy::energy() }
     }
 
     /// The energy order with the platform's answers.
-    pub fn with_platform(mut self, platform: &'a dyn Fn(&str) -> Option) -> Self {
+    pub fn with_platform(mut self, platform: PlatformAnswers<'a>) -> Self {
         self.platform = Some(platform);
         self
     }
 
-    /// The energy order with the budgets a sink holds.
-    pub fn with_budgets(mut self, budgets: &'a Budgets) -> Self {
-        self.budgets = Some(budgets);
+    /// The energy order with the measurements the sink holds.
+    pub fn with_measured(mut self, measured: Measurements<'a>) -> Self {
+        self.measured = Some(measured);
         self
     }
 
-    /// The budget this policy holds for `capability`, as platform-decode §5 reads it.
-    pub fn budget(&self, capability: &str) -> Option {
-        match self.budgets {
-            Some(b) => b.get(capability).map(BudgetRecord::order_view),
-            None => registered(capability).map(|b| b.order_view()),
-        }
+    /// A deployer's policy: a learned capability whose measured figure is above
+    /// `per_decode_micro` microjoules a decode ranks as unmeasured. Both are per decode, so
+    /// the comparison is unit for unit.
+    pub fn with_ceiling(mut self, per_decode_micro: u64) -> Self {
+        self.ceiling_per_decode_micro = Some(per_decode_micro);
+        self
     }
 
-    /// `capability`'s rank (platform-decode §4.2), or `Err` where the platform answered
-    /// that it cannot decode it and the sink holds no decoder of its own (§3). Under the
-    /// envelope's order every capability ranks alike.
-    pub fn rank(&self, capability: &str) -> Result {
+    /// `capability`'s rank. Under the envelope's order every capability ranks alike.
+    pub fn rank(&self, capability: &str) -> Rank {
         if self.kind == OrderKind::Manifest {
-            return Ok(Rank::Classical);
+            return Rank::Classical;
         }
-        let answers = self.platform.and_then(|p| p(capability));
-        let budget = self.budget(capability);
-        pd::rank(&pd::Entry { capability, answers: answers.as_ref(), budget: budget.as_ref() }, &self.rules)
+        if is_learned(capability) {
+            let measured = self.measured.and_then(|f| f(capability)).filter(qualifies).is_some_and(|m| {
+                let per = read_measurement(&m).ok().and_then(|r| r["per_decode_micro"].as_u64());
+                self.ceiling_per_decode_micro.is_none_or(|c| per.is_some_and(|p| p <= c))
+            });
+            return if measured { Rank::Classical } else { Rank::LearnedWithoutBudget };
+        }
+        self.platform.and_then(|p| p(capability)).map_or(Rank::Classical, |a| a.rank())
     }
 
-    /// The positions of `capabilities` in the order this policy tries them, by rank and
-    /// the envelope's order within a rank; then those the platform cannot decode, in the
-    /// envelope's order, which a sink skips (`missing_capability`).
-    pub fn order<'c>(&self, capabilities: impl IntoIterator) -> (Vec, Vec) {
-        let mut ranked: Vec<(Rank, usize)> = Vec::new();
-        let mut refused = Vec::new();
-        for (i, c) in capabilities.into_iter().enumerate() {
-            match self.rank(c) {
-                Ok(r) => ranked.push((r, i)),
-                Err(_) => refused.push(i),
-            }
-        }
+    /// The positions of `capabilities` in the order this policy tries them: by rank, the
+    /// envelope's order within a rank.
+    pub fn order<'c>(&self, capabilities: impl IntoIterator) -> Vec {
+        let mut ranked: Vec<(Rank, usize)> = capabilities.into_iter().enumerate().map(|(i, c)| (self.rank(c), i)).collect();
         ranked.sort();
-        (ranked.into_iter().map(|(_, i)| i).collect(), refused)
+        ranked.into_iter().map(|(_, i)| i).collect()
     }
 }
 
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::platform_decode::DecodingInfo;
 
-    fn record() -> BudgetRecord {
-        BudgetRecord {
-            joules_micro: 41_250,
-            per: BudgetUnit::Frame,
-            class: EnergyProvenance::on_chip_counter(Uncertainty { relative_ppm: 25_000, window_us: 7_000_000 }, CounterFiltering::Unknown).unwrap(),
-            resolution: Some((1920, 1080)),
-            reference_sink: "a reference sink".into(),
-            record: "ab".repeat(32),
+    /// A sink-metered figure in browser-sink §6's shape. Synthetic: no measurement; it
+    /// exists only to exercise the rule.
+    fn figure(class: &str, coverage: &str) -> Value {
+        let mut m = json!({
+            "joules_micro": 4_125_000, "decodes": 100, "window_us": 7_000_000, "class": class,
+            "relative_ppm": 25_000, "filtering": "Unknown", "coverage": coverage, "fabrics": ["cpu", "gpu"],
+            "note": "synthetic: no measurement",
+        });
+        if class == "CalibratedInstrument" {
+            m.as_object_mut().unwrap().remove("filtering");
+            m["calibration_ref"] = json!("synthetic: no certificate");
         }
+        m
     }
 
-    /// Every registered budget checks and names a learned capability (REGISTRY.md, *Energy
-    /// budgets*); none is registered in this revision.
     #[test]
-    fn every_registered_budget_checks() {
-        for (cap, b) in REGISTERED {
-            assert!(is_learned(cap), "{cap}: a budget names a learned capability");
-            assert_eq!(b().check(), Ok(()), "{cap}");
+    fn learned_is_every_class_but_the_standard_ones() {
+        for c in ["wai.neural.int_hyper", "wai.video.int_hyper", "wai.image.jpegai", "wai.neural.bmshj2018", "wai.semantic.clip", "wai.generate.spectral", "wai.unregistered.string"] {
+            assert!(is_learned(c), "{c}");
+        }
+        for c in ["wai.video.av1", "wai.image.png", "wai.video.int_motion", "wai.video.hevc"] {
+            assert!(!is_learned(c), "{c}");
         }
-        assert!(REGISTERED.is_empty(), "no registration states a budget in this revision");
-        assert_eq!(registered("wai.neural.int_hyper"), None);
     }
 
-    /// platform-decode §4.2 applied by default: a learned capability with no budget after
-    /// the classical one; with a qualifying budget it ranks first with power-efficient
-    /// classical decode; a smooth, power-efficient platform answer first; the envelope's
+    /// Only a hardware-class figure of the whole decode qualifies, and its value is not read.
+    #[test]
+    fn a_measurement_qualifies_by_its_class_and_coverage_not_its_value() {
+        assert!(qualifies(&figure("OnChipCounter", "Whole")));
+        assert!(qualifies(&figure("CalibratedInstrument", "Whole")));
+        assert!(!qualifies(&figure("OnChipCounter", "Partial")), "a figure of part of the decode");
+        for class in ["ModelBased", "Estimator", "HwShunt"] {
+            assert!(!qualifies(&figure(class, "Whole")), "{class}");
+        }
+        let mut no_filtering = figure("OnChipCounter", "Whole");
+        no_filtering.as_object_mut().unwrap().remove("filtering");
+        assert!(!qualifies(&no_filtering));
+        let mut zero = figure("OnChipCounter", "Whole");
+        zero["joules_micro"] = json!(0);
+        assert_eq!(read_measurement(&zero).unwrap_err(), MeasurementRefusal::UnmeteredAsZero);
+        let mut huge = figure("OnChipCounter", "Whole");
+        huge["joules_micro"] = json!(9_000_000_000_000_i64);
+        assert!(qualifies(&huge), "the value does not decide");
+    }
+
+    /// The default order: a learned capability with no measurement after a classical one; with
+    /// one it ranks classical; the platform's answers rank classical decode; the envelope's
     /// order within a rank; and a manifest order that keeps it whole.
     #[test]
     fn the_energy_order() {
         let (neural, av1, png, hevc) = ("wai.neural.int_hyper", "wai.video.av1", "wai.image.png", "wai.video.hevc");
         let e = DispatchPolicy::energy();
-        assert_eq!(e.order([neural, av1]), (vec![1, 0], vec![]));
-        assert_eq!(e.order([av1, neural]), (vec![0, 1], vec![]));
-        assert_eq!(e.order([neural, "wai.image.jpegai", av1, png]).0, vec![2, 3, 0, 1], "two learned, kept in their order, after both classical");
-        assert_eq!(DispatchPolicy::manifest_order().order([neural, av1]).0, vec![0, 1]);
-        let held = Budgets::registry().with_table(&json!({ neural: record().to_json() })).unwrap();
-        assert_eq!(DispatchPolicy::energy().with_budgets(&held).order([av1, neural]).0, vec![1, 0], "a qualifying budget ranks first, above software classical decode");
+        assert_eq!(e.order([neural, av1]), vec![1, 0]);
+        assert_eq!(e.order([av1, neural]), vec![0, 1]);
+        assert_eq!(e.order([neural, "wai.image.jpegai", av1, png]), vec![2, 3, 0, 1], "two learned, kept in their order, after both classical");
+        assert_eq!(DispatchPolicy::manifest_order().order([neural, av1]), vec![0, 1]);
+        let held = |c: &str| (c == neural).then(|| figure("OnChipCounter", "Whole"));
+        assert_eq!(DispatchPolicy::energy().with_measured(&held).order([neural, av1]), vec![0, 1], "measured: classical, the envelope's order");
+        let partial = |c: &str| (c == neural).then(|| figure("OnChipCounter", "Partial"));
+        assert_eq!(DispatchPolicy::energy().with_measured(&partial).order([neural, av1]), vec![1, 0]);
+        assert_eq!(DispatchPolicy::energy().with_measured(&held).with_ceiling(1_000).order([neural, av1]), vec![1, 0], "a deployer's ceiling below the figure");
+        assert_eq!(DispatchPolicy::energy().with_measured(&held).with_ceiling(41_250).order([neural, av1]), vec![0, 1], "at the ceiling, per decode");
         let answers = |c: &str| match c {
-            "wai.video.av1" => Some(Answers { decoding_info: Some(DecodingInfo { supported: true, smooth: true, power_efficient: true }), ..Answers::default() }),
-            "wai.video.hevc" => Some(Answers { decoding_info: Some(DecodingInfo { supported: true, smooth: true, power_efficient: false }), ..Answers::default() }),
-            "wai.video.vvc" => Some(Answers { decoding_info: Some(DecodingInfo { supported: false, smooth: false, power_efficient: false }), ..Answers::default() }),
+            "wai.video.av1" => Some(PlatformAnswer { supported: true, smooth: Some(true), power_efficient: Some(true) }),
+            "wai.video.hevc" => Some(PlatformAnswer { supported: true, smooth: Some(true), power_efficient: None }),
+            "wai.image.png" => Some(PlatformAnswer { supported: true, smooth: Some(false), power_efficient: Some(true) }),
             _ => None,
         };
-        let p = DispatchPolicy::energy().with_platform(&answers);
-        assert_eq!(p.order([neural, hevc, png, av1]), (vec![3, 1, 2, 0], vec![]), "first, smooth, classical, learned last");
-        assert_eq!(p.order([neural, "wai.video.vvc"]), (vec![0], vec![1]), "a decode the platform refuses, with no decoder of its own, is skipped");
-        let both = DispatchPolicy::energy().with_platform(&answers).with_budgets(&held);
-        assert_eq!(both.order([neural, av1]).0, vec![0, 1], "a qualifying budget and a power-efficient decode share the first rank: the envelope's order");
-    }
-
-    #[test]
-    fn a_budget_record_reads_back_and_refuses_what_does_not_back_it() {
-        let b = record();
-        assert_eq!(BudgetRecord::from_json(&b.to_json()), Ok(b.clone()));
-        // platform-decode reads the same JSON, and the budget qualifies there.
-        let view = pd::budget_from_json(&b.to_json()).unwrap();
-        assert_eq!(view, b.order_view());
-        assert_eq!(view.qualifies(None), Ok(()));
-        let with = |f: &dyn Fn(&mut serde_json::Map)| {
-            let mut v = b.to_json();
-            f(v.as_object_mut().unwrap());
-            BudgetRecord::from_json(&v).map_err(|e| e.code())
-        };
-        assert_eq!(with(&|o| { o.insert("class".into(), json!("HwShunt")); }), Err("budget_legacy_class"));
-        for class in ["ModelBased", "Estimator", "CalibratedInstrument"] {
-            assert_eq!(with(&|o| { o.insert("class".into(), json!(class)); }), Err("budget_not_counter"), "{class}");
-        }
-        assert_eq!(with(&|o| { o.insert("joules_micro".into(), json!(0)); }), Err("budget_class_invalid"));
-        assert_eq!(with(&|o| { o.insert("joules_micro".into(), json!(11)); }), Err("budget_class_invalid"), "below the resolution floor");
-        assert_eq!(with(&|o| { o.insert("relative_ppm".into(), json!(0)); }), Err("budget_class_invalid"));
-        assert_eq!(with(&|o| { o.insert("record".into(), json!("AB".repeat(32))); }), Err("budget_malformed"));
-        assert_eq!(with(&|o| { o.insert("reference_sink".into(), json!(" ")); }), Err("budget_malformed"));
-        assert_eq!(with(&|o| { o.insert("per".into(), json!("decode")); }), Err("budget_malformed"));
-        assert_eq!(with(&|o| { o.insert("filtering".into(), json!("Maybe")); }), Err("budget_malformed"));
-        assert_eq!(with(&|o| { o.insert("resolution".into(), json!([0, 1080])); }), Err("budget_malformed"));
-        assert_eq!(with(&|o| { o.insert("note".into(), json!("x")); }), Err("budget_malformed"));
-        // A table is held whole or not at all.
-        let mut bad = b.to_json();
-        bad["class"] = json!("Estimator");
-        let t = json!({ "wai.neural.int_hyper": b.to_json(), "wai.neural.elic": bad });
-        assert_eq!(Budgets::registry().with_table(&t).map(|_| ()).map_err(|(c, e)| (c, e.code())), Err(("wai.neural.elic".into(), "budget_not_counter")));
+        let p = DispatchPolicy::energy().with_platform(&answers).with_measured(&held);
+        assert_eq!(p.order([neural, png, hevc, av1]), vec![3, 2, 0, 1], "first, smooth, then classical (the measured learned one, then the power-efficient but not smooth one), in the envelope's order");
+        assert_eq!(p.rank(png), Rank::Classical, "power-efficient but not smooth drops frames");
+        assert_eq!(PlatformAnswer { supported: false, smooth: Some(true), power_efficient: Some(true) }.rank(), Rank::Classical, "an answer that is not supported puts nothing first");
     }
 }
diff --git a/wai/wai-rs/src/lib.rs b/wai/wai-rs/src/lib.rs
index ee585e055..25d988edd 100644
--- a/wai/wai-rs/src/lib.rs
+++ b/wai/wai-rs/src/lib.rs
@@ -22,9 +22,9 @@
 
 pub mod codecs;
 pub mod container;
-// Platform decode capabilities in dispatch (extensions/platform-decode.md): the query a
-// sink makes of Media Capabilities and WebCodecs for an entry, and the default order those
-// answers and energy budgets give SPEC §4 and §7.1 selection. Pure logic, no dependency.
+// Platform decode capabilities (extensions/platform-decode.md): the query a sink makes of
+// Media Capabilities and WebCodecs for an entry, read from its payload, and the answer in
+// browser-sink's report. Pure logic, no dependency.
 pub mod platform_decode;
 // Deduplication totals (extensions/staged-measurement.md §9): objects, distinct
 // contents, referenced and stored bytes, recomputed from the objects. Pure integer,
@@ -303,11 +303,12 @@ pub mod reconstruction_binding;
 // dependencies, so it is compiled unconditionally.
 pub mod energy_class;
 
-// The energy order of dispatch (SPEC §4, §7.1): a decode the platform answers
-// power-efficient first, a learned capability with no energy budget after every other,
-// the envelope's order otherwise; and the energy budget a registration or a deployer's
-// pinned table states. Pure std and serde_json, compiled unconditionally, so the browser
-// sink's wasm build applies the same order.
+// The energy order of dispatch (SPEC §4, §7.1, browser-sink §4.7): a default order over
+// what a sink can decode, never a route: classical decode the platform answers supported,
+// smooth and power-efficient first, a learned capability with no sink-metered figure of its
+// decode last, the envelope's order within a rank; and browser-sink §6's measurement reader.
+// Pure std and serde_json, compiled unconditionally, so the browser sink's wasm build
+// applies the same order.
 pub mod energy_order;
 
 // The integers a measurement report carries for a figure obtained under the
-- 
2.54.0 (Apple Git-157)


From 507f4cd9e18ca533828ff9c6db0f1bbd611d021d Mon Sep 17 00:00:00 2001
From: Transaction Science 
Date: Sat, 24 Oct 2026 21:17:28 -0400
Subject: [PATCH 48/50] =?UTF-8?q?wai:=20the=20reference=20meters=20seal=20?=
 =?UTF-8?q?what=20their=20reader=20is=20=E2=80=94=20ModelBased=20from=20a?=
 =?UTF-8?q?=20reported=20power,=20never=20OnChipCounter?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The meters sampled the processor power a non-privileged reader reports and
sealed it OnChipCounter, but they never read the channel it comes from: on
macOS 27 the processor channels of IOReport's Energy Model group read zero for
an unprivileged reader, and the reader takes its power from another report it
selects. The liveness rule (energy-measurement §3.1) passed on the reported
samples, which move, while no counter was ever put to it.

energy_burst::PowerSource says what a reader's samples are. A Counter's
differences can seal OnChipCounter under §3.1, §4 and §2.3; a Reported power
is refused as OnChipCounter whatever its brackets show (Bracket::on_chip_figure,
on_chip_refusal) and seals ModelBased under the same bracket rules
(Bracket::figure). wai_meter, wai_video_meter, wai_world_meter,
wai_quantum_meter, wai_prov and wai_stage_measure --energy macmon now seal
ModelBased, naming the reader as the method; rapl: stays a counter.

energy-measurement §3.1 (the test is run on the counter), §2.9 and §7 say so,
and the extensions that described the meters' figures as on-chip readings are
corrected. No committed record changes class: the provenance vector's figures
are unlabelled and keep their bytes.

Also: the relay's powercap tests module after its impl, and platform-decode's
test helper uses is_multiple_of.

Co-Authored-By: Claude Opus 5.5 
---
 .../crates/joule-moq-relay/src/energy.rs      |  48 ++--
 wai/CHANGELOG.md                              |  11 +
 wai/extensions/energy-measurement.md          |  40 ++-
 wai/extensions/interactive-worlds.md          |  19 +-
 wai/extensions/provenance.md                  |  14 +-
 wai/extensions/quantum-sim.md                 |  24 +-
 wai/extensions/ternary-tt.md                  |   5 +-
 wai/wai-rs/src/bin/wai_meter.rs               |  50 ++--
 wai/wai-rs/src/bin/wai_prov.rs                |  21 +-
 wai/wai-rs/src/bin/wai_quantum_meter.rs       |  56 ++--
 wai/wai-rs/src/bin/wai_stage_measure.rs       |  20 +-
 wai/wai-rs/src/bin/wai_video_meter.rs         |  56 ++--
 wai/wai-rs/src/bin/wai_world_meter.rs         |  50 ++--
 wai/wai-rs/src/energy_burst.rs                | 242 +++++++++++++++---
 wai/wai-rs/src/energy_class.rs                |  21 +-
 wai/wai-rs/src/platform_decode/tests.rs       |   2 +-
 wai/wai-rs/src/stage_measure/session.rs       |   1 +
 wai/wai-rs/src/ternary_receipt.rs             |   7 +-
 .../reach/test/vectors/provenance/README.md   |  10 +-
 19 files changed, 473 insertions(+), 224 deletions(-)

diff --git a/joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs b/joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs
index 871afefa6..5b71c4046 100644
--- a/joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs
+++ b/joule-code/joule-code-rs/crates/joule-moq-relay/src/energy.rs
@@ -455,6 +455,30 @@ mod powercap {
         }
     }
 
+    impl Counter for PackageCounter {
+        fn scope(&self) -> Scope {
+            Scope::Package
+        }
+
+        fn read(&mut self) -> Option {
+            let mut add = 0u64;
+            let mut now = Vec::with_capacity(self.zones.len());
+            for (p, range, last) in &self.zones {
+                let v = read_u64(p)?;
+                if v > *range {
+                    return None;
+                }
+                add += if v >= *last { v - last } else { range - last + v };
+                now.push(v);
+            }
+            for (z, v) in self.zones.iter_mut().zip(now) {
+                z.2 = v;
+            }
+            self.total_uj += add;
+            Some(Reading { nj: self.total_uj.saturating_mul(1000), cpu_ns: None, running: 1 })
+        }
+    }
+
     #[cfg(test)]
     mod tests {
         use super::*;
@@ -495,30 +519,6 @@ mod powercap {
             let _ = std::fs::remove_dir_all(&root);
         }
     }
-
-    impl Counter for PackageCounter {
-        fn scope(&self) -> Scope {
-            Scope::Package
-        }
-
-        fn read(&mut self) -> Option {
-            let mut add = 0u64;
-            let mut now = Vec::with_capacity(self.zones.len());
-            for (p, range, last) in &self.zones {
-                let v = read_u64(p)?;
-                if v > *range {
-                    return None;
-                }
-                add += if v >= *last { v - last } else { range - last + v };
-                now.push(v);
-            }
-            for (z, v) in self.zones.iter_mut().zip(now) {
-                z.2 = v;
-            }
-            self.total_uj += add;
-            Some(Reading { nj: self.total_uj.saturating_mul(1000), cpu_ns: None, running: 1 })
-        }
-    }
 }
 
 #[cfg(test)]
diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md
index db8802d53..c66844433 100644
--- a/wai/CHANGELOG.md
+++ b/wai/CHANGELOG.md
@@ -82,6 +82,17 @@ wire format may change and such changes are recorded here.
     CLI prints the unmetered marker as unmetered, not `0 uJ`; the metering tools head their
     bracket as a bracket and print the unmetered marker on stdout when they seal it; a
     provenance total names the class it reads at.
+  - The reference meters (`wai_meter`, `wai_video_meter`, `wai_world_meter`,
+    `wai_quantum_meter`, `wai_prov`, and `wai_stage_measure --energy macmon`) sealed
+    `OnChipCounter` from the processor power a non-privileged reader reports, a channel
+    they never read. On macOS 27 the processor channels of IOReport's `Energy Model` group
+    stop updating for such a reader, and the reader takes its power from another report it
+    selects. The meters now seal `ModelBased`, naming the reader in the measurement report
+    as the method. `energy_burst::PowerSource` says what a reader's samples are, and
+    `Bracket::on_chip_figure` refuses `OnChipCounter` from a reported power whatever its
+    brackets show (energy-measurement §3.1, §2.9). A RAPL reader's bracket, the counter's
+    own differences, still seals `OnChipCounter`. No committed record changes class: the
+    provenance vector's two figures are unlabelled and keep their bytes.
 - **What fewer bytes do not save.** Steering by joules per delivered byte (energy-steering
   §5.5), the attribution of a hop's joules to grants by bytes (live-metering §4.6,
   live-rooms' `joules_ceiling`) and an HTTP client's joule budget (http-delivery
diff --git a/wai/extensions/energy-measurement.md b/wai/extensions/energy-measurement.md
index 72a026740..4b9a2d28d 100644
--- a/wai/extensions/energy-measurement.md
+++ b/wai/extensions/energy-measurement.md
@@ -724,8 +724,8 @@ What the reference implementation seals in these families:
 
 ### 2.9 IOReport, and where this departs from other documents
 
-IOReport — the SoC energy interface the reference meters read through a
-non-privileged reader — is classed `OnChipCounter`. Its readings are the
+A channel of IOReport, the SoC energy interface, is classed `OnChipCounter`
+when the producer reads it itself and shows it live (§3.1). Its readings are the
 measured silicon's own report of its energy, and this extension classes a
 figure by that provenance. The interface's channels sit in a group named
 "Energy Model", and it is a private interface whose derivation is not publicly
@@ -734,6 +734,15 @@ documented. That makes the counter's systematic error unstated, which an
 figure a model this implementation computed (`ModelBased`) or a constant
 (`Estimator`).
 
+The reference meters do not read such a channel. On their macOS hosts the
+group's processor channels stop updating for an unprivileged reader, and the
+processor power they sample is one a non-privileged reader reports from a
+report it selects itself. That is a reported power (§3.1): the meters seal it
+`ModelBased`, with the reader named in the measurement report, and never
+`OnChipCounter`. The group's `GPU Energy` channel does advance for an
+unprivileged reader; a profile that reads it itself can seal `OnChipCounter`
+from it under §3.1.
+
 Other documents in this repository class IOReport differently. This extension
 does not change them; where a figure passes between the two, the weaker class
 applies (§2):
@@ -834,6 +843,23 @@ never of a live rail: its samples advanced once at most. Its standard deviation
 is zero, and under a hardware class a reader refuses a bracket whose `sd_uw` is
 0 whatever liveness facts it carries.
 
+**The test is run on the counter.** The rule above shows a counter live only
+when the samples it is run on are the counter's: the producer reads the counter
+itself and each sample is the counter's own advance over its interval. A power
+that another program reports, computed from a channel the producer does not
+read, gives no such evidence. Its samples can move while every channel it could
+have come from is frozen, so a bracket over them that passes this rule shows the
+report moving, not a counter live. A figure from a reported power **MUST NOT**
+be sealed `OnChipCounter` or `CalibratedInstrument`, whatever its brackets show;
+it is `ModelBased` at best, and its measurement report names the reader and
+what its samples are as the method (§8; the report's `power_reader`). On the reference
+macOS hosts (macOS 27, arm64) the processor channels of IOReport's
+`Energy Model` group read zero at every interval for an unprivileged reader, and
+the non-privileged reader the reference meters sample reports a processor power
+that keeps moving, taken from another report it identifies itself (both
+measured on two such hosts on 2026-10-24). Those meters therefore seal
+`ModelBased` (§2.9).
+
 ## 4. Attribution quality (REQUIRED)
 
 The marginal method is only meaningful when the burst lifts power **clearly
@@ -1125,10 +1151,12 @@ acquisition class   : HwShunt
 ```
 
 The run above predates the refinement of §2.2–§2.6, and its receipt says
-`HwShunt`. The reference meter now emits `OnChipCounter` for the same interface,
-with filtering state `Unknown` (a non-privileged IOReport reader has no
-documented way to read a filtering state, if the interface has one) and the
-§2.3 uncertainty: the statistics of both brackets combined with the
+`HwShunt`. The reference meter now emits `ModelBased` for the same reader: its
+samples are a processor power the reader reports, not a counter the meter reads,
+and on the reference hosts the counters that power could have come from do not
+advance for an unprivileged reader (§3.1). A meter that reads a counter itself
+and shows it live emits `OnChipCounter`, with its filtering state and the §2.3
+uncertainty: the statistics of both brackets combined with the
 completion-count term and the `0.5/√3` µJ that rounding the figure to whole
 microjoules adds. It also opens its window from rest and divides by
 `C + N/2`; the run above opened on freshly started workers and divided by `C`,
diff --git a/wai/extensions/interactive-worlds.md b/wai/extensions/interactive-worlds.md
index b0f6de019..ed5e64320 100644
--- a/wai/extensions/interactive-worlds.md
+++ b/wai/extensions/interactive-worlds.md
@@ -501,13 +501,12 @@ as `SessionReceipt::parent_receipt_hash` + `receipt_hash()` +
   the signed payload and reproducible on any sink, because it is a
   function of the world and its ops alone.
 - `joules_micro` — a **carried, measured** figure, never derived inside
-  the receipt. Native sinks supply real energy via the sink-metering
-  path, which needs **no elevated privileges**: on arm64 macOS the SoC
-  energy counters are readable through IOReport (the source `macmon` /
-  `asitop` use — no sudo), on x86 via RAPL, and per-process retired
-  cycles/instructions via `proc_pid_rusage` everywhere. The reference
+  the receipt. Native sinks supply energy via the sink-metering path,
+  which needs **no elevated privileges**: on arm64 macOS a processor
+  power a non-privileged reader reports, and the kernel's per-process
+  energy (`proc_pid_rusage`); on x86 RAPL. The reference
   `wai_world_meter` brackets a replay burst against an idle baseline and
-  reports the marginal measured CPU energy. A browser, lacking those
+  reports the marginal CPU energy of the reported power. A browser, lacking those
   counters, supplies a wall-clock estimate against a **declared** power
   coefficient and labels it an estimate; an unmetered sink signs the
   unmetered marker `0`, which a reader presents as unmetered and never as a
@@ -517,9 +516,11 @@ as `SessionReceipt::parent_receipt_hash` + `receipt_hash()` +
   it as an optional signed label
   ([energy-measurement](energy-measurement.md) §2.8): absent, the receipt
   keeps its legacy bytes and the figure is unlabelled; `wai_world_meter`
-  labels what it measures `OnChipCounter`, with its declared uncertainty;
-  by §2's definitions, a browser's wall-clock figure against a declared
-  coefficient is `ModelBased`.
+  labels its figure `ModelBased`, because its samples are a power another
+  program reports, not a counter it reads and shows live
+  ([energy-measurement](energy-measurement.md) §3.1); by §2's definitions,
+  a browser's wall-clock figure against a declared coefficient is
+  `ModelBased` too.
 
 ---
 
diff --git a/wai/extensions/provenance.md b/wai/extensions/provenance.md
index 7970fa48b..a6deb0449 100644
--- a/wai/extensions/provenance.md
+++ b/wai/extensions/provenance.md
@@ -72,8 +72,9 @@ There is no tolerance parameter: the content hash matches or it does not.
 ## 5. Energy is measured, never invented
 
 `joules_micro` per step is **carried** from a meter, exactly as the other
-receipts carry it: `wai_prov` measures the real CPU energy of each encode
-(IOReport via macmon, no sudo) and signs the figure. An unmetered step
+receipts carry it: `wai_prov` brackets the CPU energy of each encode against
+an idle baseline, from the processor power a non-privileged reader reports (no
+sudo), and signs the figure. An unmetered step
 carries the unmetered marker `0`, which a reader presents as unmetered and never
 totals as zero joules. The receipt never derives energy it did not measure.
 
@@ -81,10 +82,11 @@ Each step's figure carries its acquisition class as an optional label
 ([energy-measurement](energy-measurement.md) §2.8), because the steps of one
 lineage can be metered by different parties in different ways. A labelled step
 binds its class into its leaf hash; a step with no label keeps its legacy leaf
-and its figure is unlabelled. `wai_prov` labels each encode it measures
-`OnChipCounter`, with its declared uncertainty, and records an encode whose
-measurement fails the §4 ratio or the power reader's liveness (§3.1) as
-unmetered, and writes a measurement report for each step it measured
+and its figure is unlabelled. `wai_prov` labels each encode it brackets
+`ModelBased`, because its samples are a power another program reports, not a
+counter it reads and shows live ([energy-measurement](energy-measurement.md)
+§3.1), and records an encode whose bracket fails the §4 ratio or the reported
+power's liveness (§3.1) as unmetered, and writes a measurement report for each step it measured
 (energy-measurement §6). With `--carry` it measures nothing: it carries each
 figure, and its label, from an earlier receipt for the same lineage, which must
 verify and whose steps must have the same operations, hashes and work, and writes
diff --git a/wai/extensions/quantum-sim.md b/wai/extensions/quantum-sim.md
index a0b3b251f..09cff73f2 100644
--- a/wai/extensions/quantum-sim.md
+++ b/wai/extensions/quantum-sim.md
@@ -558,26 +558,28 @@ reconstruction and decides nothing.
 
 `to_json()` / `from_json()` give the portable, sorted-key JSON an out-of-band
 verifier reads. `wai_quantum_meter  [receipt.json]` fills the
-energy honestly: on a host that exposes its SoC's power interface to
-unprivileged readers it samples CPU power through the open-source `macmon`
-reader (no elevated privileges), brackets a reconstruction burst against an idle baseline, and writes the
-**measured** marginal microjoules — never a fabricated number; where no meter is
-present, or the reader's rail is not live in both brackets
-([energy-measurement](energy-measurement.md) §3.1), or the §4 ratio or the §2.3
-uncertainty cannot support a figure, it emits an UNMETERED receipt, whose `joules_micro` carries the
+energy honestly: it samples the CPU power the open-source `macmon` reader
+reports (no elevated privileges), brackets a reconstruction burst against an idle
+baseline, and writes the marginal microjoules — never a fabricated number; where
+no reader is present, or the reported power does not move in both brackets
+([energy-measurement](energy-measurement.md) §3.1), or the §4 ratio cannot
+support a figure, it emits an UNMETERED receipt, whose `joules_micro` carries the
 unmetered marker `0` ([energy-measurement](energy-measurement.md) §2), never a
 figure of zero joules, with the exact work intact; a reader presents it as
 unmetered, and `POST /verify` renders it as `"joules_micro": null`. Beside a
-measured figure the meter writes a measurement report (energy-measurement §6). A measured figure is sealed with its acquisition class as a
+figure the meter writes a measurement report (energy-measurement §6). A figure is sealed with its acquisition class as a
 `quantum_energy::Labelled` receipt ([energy-measurement](energy-measurement.md)
-§2.8): `OnChipCounter` with its declared uncertainty, inside the signature,
+§2.8): `ModelBased`, inside the signature, because the samples are a power the
+reader reports from a channel it selects, not a counter the meter reads and shows
+live ([energy-measurement](energy-measurement.md) §3.1). It is
 verified with `Labelled::verify` / `Labelled::verify_reconstruction`. The
 `wai-quantum verify` CLI and the HTTP handler's `POST /verify` accept a receipt
 in either form (`quantum_energy::MaybeLabelled`) and restate its class. A receipt
 sealed without a label keeps its legacy bytes and its figure is unlabelled. The
 meter decodes the circuit from its container, so the receipt binds the capability
-the file names. A representative run on the reference QFT-5 vector: **≈43 µJ
-measured per reconstruction, `work_amp_updates = 672`** (21 ops × 2⁵), sealed and
+the file names. A representative run on the reference QFT-5 vector, at a revision
+that labelled the same reported power `OnChipCounter`: **≈43 µJ per
+reconstruction, `work_amp_updates = 672`** (21 ops × 2⁵), sealed and
 self-verified.
 
 Because a quantum computation carries no speedup here, this is exactly the value
diff --git a/wai/extensions/ternary-tt.md b/wai/extensions/ternary-tt.md
index bc82af3e7..b5860e475 100644
--- a/wai/extensions/ternary-tt.md
+++ b/wai/extensions/ternary-tt.md
@@ -124,8 +124,9 @@ requires); `verify_reconstruction`
 recovers the stack from the `WQTT` payload and confirms hash, shape, work, and
 reconstruction independently. Chains via `parent_receipt_hash`. The JWP Merkle +
 Ed25519 are reused verbatim — the same shape as `QuantumReceipt`
-([quantum-sim](quantum-sim.md)) and the world/provenance receipts. Measured
-energy comes from the same IOReport path as `wai_quantum_meter`; never fabricated.
+([quantum-sim](quantum-sim.md)) and the world/provenance receipts. Its energy
+comes from the same bracket as `wai_quantum_meter`'s, `ModelBased` over a
+reported power ([energy-measurement](energy-measurement.md) §3.1); never fabricated.
 The figure's acquisition class rides beside it as an optional signed label
 ([energy-measurement](energy-measurement.md) §2.8): absent, the receipt keeps
 its legacy bytes and the figure is unlabelled; present, it is inside the
diff --git a/wai/wai-rs/src/bin/wai_meter.rs b/wai/wai-rs/src/bin/wai_meter.rs
index f5c2f8b8d..d319f0bb8 100644
--- a/wai/wai-rs/src/bin/wai_meter.rs
+++ b/wai/wai-rs/src/bin/wai_meter.rs
@@ -1,10 +1,13 @@
 //! `wai_meter` — the native sink-metering path for the non-world cargo
-//! classes (haptics, 4D splats, scores, linear film). Measures the **real
-//! CPU energy** a sink spends reconstructing a signal / clip / mixdown /
-//! frame sequence, with no elevated privileges (IOReport via `macmon`, the
-//! same source `asitop` uses), brackets a tight reconstruct burst against an
-//! idle baseline, and emits a signed receipt carrying that **measured**
-//! energy — a portable receipt with real joules, end to end.
+//! classes (haptics, 4D splats, scores, linear film). Brackets the CPU energy
+//! a sink spends reconstructing a signal / clip / mixdown / frame sequence,
+//! with no elevated privileges (the processor power the reader `macmon`
+//! reports), against an idle baseline, and emits a signed receipt carrying
+//! that figure and its class. The power is one the reader reports from a
+//! channel it selects, not a counter this meter reads (on macOS 27 the
+//! processor channels of IOReport's `Energy Model` group stop updating for an
+//! unprivileged reader), so the figure is `ModelBased`, never `OnChipCounter`
+//! (energy-measurement §3.1; `wai::energy_burst::PowerSource`).
 //!
 //!   wai_meter 
 //!             [receipt_out.json [report_out.json]] [--no-report] [--previous-report ]
@@ -13,14 +16,13 @@
 //! `wai_world_meter`. A linear film embeds a sealed world but reconstructs a
 //! *frame sequence* (sample the world at each frame tick + the camera pose),
 //! so it is metered here with the other reconstruct classes.
-//! It is a measurement with stated bounds (SoC-wide power → the marginal
+//! It is a bracket with stated bounds (SoC-wide power → the marginal
 //! delta over an idle machine ÷ the reconstructions the window paid for; see
 //! `wai::energy_burst`); it never fabricates a number — run it on a quiet box
 //! for a clean one. A usable figure is sealed with its acquisition class,
-//! `OnChipCounter` with a declared uncertainty (IOReport is the SoC's own
-//! counter); without `macmon`, or when the reader's rail was not live (§3.1),
-//! or the §4 ratio or the §2.3 uncertainty cannot support a figure, the receipt
-//! is sealed UNMETERED: `joules_micro` carries the unmetered marker `0`, with no
+//! `ModelBased`; without `macmon`, or when the reported power did not move
+//! (§3.1), or the §4 ratio cannot support a figure, the receipt is sealed
+//! UNMETERED: `joules_micro` carries the unmetered marker `0`, with no
 //! class, never a figure of zero joules.
 //!
 //! Beside a measured figure it writes a measurement report (energy-measurement
@@ -73,7 +75,7 @@ fn main() {
                 None => r,
             };
             assert!(r.verify(), "emitted receipt must verify");
-            out.emit(&r, &r.to_json(), r.energy_provenance.is_some(), work, values, &signer);
+            out.emit(&r, &r.to_json(), r.energy_provenance.as_ref(), work, values, &signer);
         }
     } else if path.ends_with(".w4ds") {
         let clip = Splat4dClipData::from_bytes(&bytes).expect("parse w4ds");
@@ -91,7 +93,7 @@ fn main() {
                 None => r,
             };
             assert!(r.verify(), "emitted receipt must verify");
-            out.emit(&r, &r.to_json(), r.energy_provenance.is_some(), work, values, &signer);
+            out.emit(&r, &r.to_json(), r.energy_provenance.as_ref(), work, values, &signer);
         }
     } else if path.ends_with(".wscr") {
         let score = Score::from_bytes(&bytes).expect("parse wscr");
@@ -107,7 +109,7 @@ fn main() {
                 None => r,
             };
             assert!(r.verify(), "emitted receipt must verify");
-            out.emit(&r, &r.to_json(), r.energy_provenance.is_some(), work, values, &signer);
+            out.emit(&r, &r.to_json(), r.energy_provenance.as_ref(), work, values, &signer);
         }
     } else if path.ends_with(".wflm") {
         let film = Film::from_bytes(&bytes).expect("parse wflm");
@@ -123,7 +125,7 @@ fn main() {
                 None => r,
             };
             assert!(r.verify(), "emitted receipt must verify");
-            out.emit(&r, &r.to_json(), r.energy_provenance.is_some(), work, values, &signer);
+            out.emit(&r, &r.to_json(), r.energy_provenance.as_ref(), work, values, &signer);
         }
     } else if path.ends_with(".wrel") {
         let reel = Reel::from_bytes(&bytes).expect("parse wrel");
@@ -139,7 +141,7 @@ fn main() {
                 None => r,
             };
             assert!(r.verify(), "emitted receipt must verify");
-            out.emit(&r, &r.to_json(), r.energy_provenance.is_some(), work, values, &signer);
+            out.emit(&r, &r.to_json(), r.energy_provenance.as_ref(), work, values, &signer);
         }
     } else {
         eprintln!("unrecognized file (want .whap, .w4ds, .wscr, .wflm, or .wrel); world classes → wai_world_meter");
@@ -149,7 +151,8 @@ fn main() {
 
 /// Run the §3 protocol on `item` (`energy_burst`), print the report §6
 /// requires, and return what the receipt seals: `(joules_micro, Some(class))`
-/// for a usable on-chip figure, `(0, None)` — the unmetered marker — otherwise;
+/// for a usable figure (`ModelBased`: the samples are a reported power),
+/// `(0, None)` — the unmetered marker — otherwise;
 /// and the bracket's values for the measurement report.
 fn meter(verb: &str, item: &T, work: u64, unit: &str, one: W) -> (u64, Option, Option)
 where
@@ -159,20 +162,21 @@ where
     let Some(b) = measure_with_macmon(verb, item, one) else {
         eprintln!(
             "macmon unavailable or too few samples; sealing UNMETERED (joules_micro carries the unmetered marker 0). \
-             Install `brew install macmon` (the non-sudo IOReport reader) for a measured figure."
+             Install `brew install macmon` (a non-sudo power reader) for a ModelBased figure."
         );
         return (0, None, None);
     };
     let values = b.values();
-    println!("== wai_meter — CPU energy bracket (IOReport via macmon, no sudo): a measurement only if the gate below seals it ==");
+    println!("== wai_meter — CPU energy bracket (the power macmon reports, no sudo): a figure only if the gate below seals it ==");
     print!("{}", b.report(verb));
     if let Some(per) = b.per_unit_uj() {
         println!("→ per {verb}   : {per:.2} µJ   (work {work} {unit})");
     }
     b.warn_if_unpublishable();
-    match b.on_chip_figure(CounterFiltering::Unknown) {
+    // A reported power seals `ModelBased`, never `OnChipCounter` (§3.1).
+    match b.figure(CounterFiltering::Unknown) {
         Some((uj, class)) => {
-            println!("joules_micro (receipt, MEASURED): {uj}");
+            println!("joules_micro (receipt, {}): {uj}", class.label());
             (uj, Some(class), values)
         }
         None => {
@@ -195,11 +199,11 @@ struct Out<'a> {
 
 impl Out<'_> {
     /// Write the receipt when a path was given, and its report by default.
-    fn emit(&self, r: &R, json: &str, measured: bool, work: u64, values: Option, signer: &SigningKey) {
+    fn emit(&self, r: &R, json: &str, class: Option<&EnergyProvenance>, work: u64, values: Option, signer: &SigningKey) {
         let receipt_out = self.args.positional.get(2).map(String::as_str);
         if let Some(out) = receipt_out {
             std::fs::write(out, json).expect("write receipt");
-            let tag = if measured { "MEASURED, OnChipCounter" } else { "UNMETERED" };
+            let tag = class.map_or("UNMETERED", |c| c.label());
             println!("receipt           : {out}  (verified, joules_micro {tag}, work {work})");
         }
         meter_report::write(
diff --git a/wai/wai-rs/src/bin/wai_prov.rs b/wai/wai-rs/src/bin/wai_prov.rs
index 45948b619..543a07e77 100644
--- a/wai/wai-rs/src/bin/wai_prov.rs
+++ b/wai/wai-rs/src/bin/wai_prov.rs
@@ -2,11 +2,13 @@
 //! receipt (lever 4). Produces a real opaque asset (a genuine JPEG, which
 //! WAI does NOT reconstruct — it carries it) wrapped in a WAI envelope,
 //! and a signed, energy-accounted lineage: origin → PNG master → published
-//! JPEG, with the **real measured CPU energy** of each encode (IOReport
-//! via macmon, no sudo), each figure labelled `OnChipCounter` with its
-//! declared uncertainty. An encode whose measurement the reader's liveness
-//! (§3.1), the §4 ratio or the §2.3 uncertainty cannot support is recorded
-//! unmetered: the step's `joules_micro` carries the unmetered marker `0`, with
+//! JPEG, with the bracketed CPU energy of each encode (the processor power
+//! the non-privileged reader `macmon` reports, no sudo), each figure labelled
+//! `ModelBased`: the power is one the reader reports from a channel it
+//! selects, not a counter this tool reads, so it is never `OnChipCounter`
+//! (energy-measurement §3.1; `wai::energy_burst::PowerSource`). An encode whose
+//! bracket the reported power's liveness (§3.1) or the §4 ratio cannot support
+//! is recorded unmetered: the step's `joules_micro` carries the unmetered marker `0`, with
 //! no label, never a figure of zero joules.
 //!
 //!   wai_prov  [--no-report] [--previous-report ] [--carry ]
@@ -228,8 +230,8 @@ fn synth_rgb() -> Vec {
     out
 }
 
-/// One encode's figure and class, measured by the §3 protocol
-/// (`energy_burst`): `Some((joules_micro, OnChipCounter))` for a usable
+/// One encode's figure and class, bracketed by the §3 protocol
+/// (`energy_burst`): `Some((joules_micro, ModelBased))` for a usable
 /// figure, `None` — the unmetered marker — otherwise; and the bracket's values
 /// for the step's measurement report.
 fn measure(label: &str, rgb: &[u8], op: F) -> (Option<(u64, EnergyProvenance)>, Option)
@@ -237,12 +239,13 @@ where
     F: Fn(&Vec) + Send + Sync + 'static,
 {
     let Some(b) = measure_with_macmon(label, &rgb.to_vec(), op) else {
-        eprintln!("macmon unavailable; recording {label} UNMETERED. Install `brew install macmon` (non-sudo IOReport reader).");
+        eprintln!("macmon unavailable; recording {label} UNMETERED. Install `brew install macmon` (a non-sudo power reader).");
         return (None, None);
     };
     eprint!("{}", b.report(label));
     b.warn_if_unpublishable();
-    let m = b.on_chip_figure(CounterFiltering::Unknown);
+    // A reported power seals `ModelBased`, never `OnChipCounter` (§3.1).
+    let m = b.figure(CounterFiltering::Unknown);
     if m.is_none() {
         eprintln!(
             "  {label}: no usable figure ({:.1}x noise: {}); recorded UNMETERED.",
diff --git a/wai/wai-rs/src/bin/wai_quantum_meter.rs b/wai/wai-rs/src/bin/wai_quantum_meter.rs
index 782663c81..2afce6dd2 100644
--- a/wai/wai-rs/src/bin/wai_quantum_meter.rs
+++ b/wai/wai-rs/src/bin/wai_quantum_meter.rs
@@ -4,33 +4,35 @@
 //! `WQC1` container and keeps that container's gateset, so the receipt's
 //! circuit hash binds the capability the file was written under.
 //!
-//! Measures the **real CPU energy** a classical sink spends reconstructing a WQC
-//! circuit's statevector, with no elevated privileges. On arm64 macOS the SoC
-//! energy counters are readable through IOReport — the same source `macmon`/
-//! `asitop` use — so this meter samples power via `macmon` (the installed,
-//! audited IOReport reader), brackets a tight reconstruction burst against an
-//! idle baseline, and reports the **marginal** CPU energy attributable to the
-//! simulation.
+//! Brackets the CPU energy a classical sink spends reconstructing a WQC
+//! circuit's statevector, with no elevated privileges: it samples the processor
+//! power the non-privileged reader `macmon` reports, brackets a tight
+//! reconstruction burst against an idle baseline, and reports the **marginal**
+//! CPU energy attributable to the simulation. That power is one the reader
+//! reports from a channel it selects, not a counter this meter reads (on macOS
+//! 27 the processor channels of IOReport's `Energy Model` group stop updating
+//! for an unprivileged reader), so the figure is `ModelBased`, never
+//! `OnChipCounter` (energy-measurement §3.1; `wai::energy_burst::PowerSource`).
 //!
 //!   wai_quantum_meter  [receipt_out.json [report_out.json]]
 //!                     [--no-report] [--previous-report ]
 //!
-//! Output: measured microjoules per reconstruction — the honest figure that
-//! fills a receipt's `joules_micro`. With a second argument the meter emits a
-//! signed [`QuantumReceipt`](wai::quantum_receipt::QuantumReceipt) carrying that
-//! **measured** energy, self-verified — a portable receipt whose *result* and
+//! Output: bracketed microjoules per reconstruction, the figure that fills a
+//! receipt's `joules_micro` with its class. With a second argument the meter
+//! emits a signed [`QuantumReceipt`](wai::quantum_receipt::QuantumReceipt)
+//! carrying that figure, self-verified — a portable receipt whose *result* and
 //! *work* anyone can re-check by re-simulation, and whose *energy* the signer
 //! attests.
 //!
-//! This is a *measurement* with stated bounds, exactly as `wai_world_meter`:
-//! IOReport CPU power is SoC-wide, so the meter reports the DELTA over an
+//! This is a bracket with stated bounds, exactly as `wai_world_meter`: the
+//! reported CPU power is SoC-wide, so the meter reports the DELTA over an
 //! otherwise-idle machine (busy − idle mean power × window ÷ the
 //! reconstructions the window paid for; see `wai::energy_burst`). Run it on a
 //! quiet box for a clean number; it never fabricates one. A usable figure is
-//! sealed with its acquisition class — `OnChipCounter` with a declared
-//! uncertainty, as a `quantum_energy::Labelled` receipt; without `macmon`, or
-//! when the reader's rail was not live (§3.1), or the §4 ratio or the §2.3
-//! uncertainty cannot support a figure, the receipt is sealed UNMETERED:
+//! sealed with its acquisition class — `ModelBased`, as a
+//! `quantum_energy::Labelled` receipt; without `macmon`, or when the reported
+//! power did not move (§3.1), or the §4 ratio cannot support a figure, the
+//! receipt is sealed UNMETERED:
 //! `joules_micro` carries the unmetered marker `0`, unlabelled, never a figure
 //! of zero joules. Beside a measured figure it writes a measurement report
 //! (energy-measurement §6), a `measurement` claim signed with the receipt's key —
@@ -66,7 +68,7 @@ fn main() {
 
     eprintln!(
         "metering {path} ({}, {n} qubits, {n_ops} ops, work {work} amp-updates), \
-         no sudo — IOReport via macmon",
+         no sudo — the processor power macmon reports (ModelBased)",
         circuit.gateset.capability()
     );
 
@@ -80,22 +82,23 @@ fn main() {
         None => {
             eprintln!(
                 "macmon unavailable or too few samples; emitting an UNMETERED receipt \
-                 (joules_micro carries the unmetered marker 0). Install `brew install macmon` (the non-sudo \
-                 IOReport reader) for a measured figure."
+                 (joules_micro carries the unmetered marker 0). Install `brew install macmon` (a non-sudo \
+                 power reader) for a ModelBased figure."
             );
             None
         }
         Some(b) => {
             values = b.values();
-            println!("== wai_quantum_meter — CPU energy bracket (IOReport via macmon, no sudo): a measurement only if the gate below seals it ==");
+            println!("== wai_quantum_meter — CPU energy bracket (the power macmon reports, no sudo): a figure only if the gate below seals it ==");
             print!("{}", b.report("reconstruction"));
             if let Some(per) = b.per_unit_uj() {
                 println!("→ per reconstruction: {per:.3} µJ   ({n} qubits, work {work})");
             }
             b.warn_if_unpublishable();
-            let m = b.on_chip_figure(CounterFiltering::Unknown);
+            // A reported power seals `ModelBased`, never `OnChipCounter` (§3.1).
+            let m = b.figure(CounterFiltering::Unknown);
             match &m {
-                Some((uj, _)) => println!("joules_micro (receipt, MEASURED): {uj}"),
+                Some((uj, class)) => println!("joules_micro (receipt, {}): {uj}", class.label()),
                 None => {
                     eprintln!(
                         "no usable figure obtained ({:.1}x noise: {}); emitting an \
@@ -112,7 +115,7 @@ fn main() {
     };
     let joules_micro = measured.as_ref().map_or(0, |(uj, _)| *uj);
 
-    // The receipt carrying the measured (or unmetered) energy, written when a
+    // The receipt carrying the bracketed (or unmetered) energy, written when a
     // path is given; its report is written whether or not it is.
     {
         // A native sink signs with its own identity key; this metering tool
@@ -131,11 +134,12 @@ fn main() {
         .expect("seal receipt");
         let (sealed, tag) = match &measured {
             Some((_, class)) => {
-                let class = to_quantum_class(class).expect("an on-chip class has a quantum counterpart");
+                let label = class.label();
+                let class = to_quantum_class(class).expect("a class the meter seals has a quantum counterpart");
                 let l = Labelled::seal(receipt, class, &signer).expect("a usable figure is a valid label");
                 assert!(l.verify(), "emitted receipt must verify");
                 assert!(l.verify_reconstruction(&circuit), "emitted receipt must re-simulate to the same statevector");
-                (MaybeLabelled::Labelled(l), "MEASURED, OnChipCounter")
+                (MaybeLabelled::Labelled(l), label)
             }
             None => {
                 assert!(receipt.verify(), "emitted receipt must verify");
diff --git a/wai/wai-rs/src/bin/wai_stage_measure.rs b/wai/wai-rs/src/bin/wai_stage_measure.rs
index f34a4a87a..74e4d95a3 100644
--- a/wai/wai-rs/src/bin/wai_stage_measure.rs
+++ b/wai/wai-rs/src/bin/wai_stage_measure.rs
@@ -1190,7 +1190,8 @@ struct Metered {
     power_reader: Option,
     liveness: Option,
     bracket: Option,
-    /// The figure and its class, where the bracket seals one under a hardware class.
+    /// The figure and its class, where the bracket seals one: `OnChipCounter` from a
+    /// counter read here, `ModelBased` from a reported power (`energy_burst::PowerSource`).
     figure: Option<(u64, wai::energy_class::EnergyProvenance)>,
     verdict: Option,
     unmetered: Option,
@@ -1243,15 +1244,20 @@ impl Metered {
 /// Probe the meter's rail at rest, then bracket completions of `t` from rest
 /// (energy-measurement §3), or say why the decode is unmetered.
 fn meter(spec: &str, t: &Title) -> Metered {
-    use wai::energy_burst::{macmon_cpu_power, measure_on, power_of_two_workers, power_reader, rapl_power_reader};
+    use wai::energy_burst::{
+        macmon_cpu_power, measure_on, power_of_two_workers, power_reader, rapl_power_reader, PowerSource, MACMON_SOURCE,
+    };
     use wai::energy_report::{rail_liveness, RailLiveness};
-    let (mut reader, name): (Box Vec>, String) = match spec {
+    // What each reader's samples are decides the class a bracket over them can seal:
+    // a counter read here seals OnChipCounter, a reported power ModelBased at best.
+    type Reader = Box Vec>;
+    let (mut reader, name, source): (Reader, String, PowerSource) = match spec {
         "none" => return Metered::unmetered(spec, "no meter was asked for"),
-        "macmon" => (Box::new(macmon_cpu_power), power_reader().to_owned()),
+        "macmon" => (Box::new(macmon_cpu_power), power_reader().to_owned(), MACMON_SOURCE),
         s if s.starts_with("rapl:") => {
             let domain = &s["rapl:".len()..];
             match rapl_power_reader(domain) {
-                Some(r) => (Box::new(r), format!("powercap {domain} energy_uj")),
+                Some(r) => (Box::new(r), format!("powercap {domain} energy_uj"), PowerSource::Counter),
                 None => return Metered::unmetered(spec, format!("the powercap counter of {domain} cannot be read")),
             }
         }
@@ -1269,10 +1275,10 @@ fn meter(spec: &str, t: &Title) -> Metered {
     };
     // A power of two of workers: the bracket a session's report publishes states its
     // workers as the session does (jwp-receipts §2.4.12, §6.7).
-    let Some(b) = measure_on("completion", &item, work, &mut reader, power_of_two_workers()) else {
+    let Some(b) = measure_on("completion", &item, work, &mut reader, source, power_of_two_workers()) else {
         return Metered { liveness: Some(liveness), power_reader: Some(name), ..Metered::unmetered(spec, "too few samples for a bracket") };
     };
-    let figure = b.on_chip_figure(wai::energy_class::CounterFiltering::Unknown);
+    let figure = b.figure(wai::energy_class::CounterFiltering::Unknown);
     let verdict = b.values().and_then(|v| v.attribution());
     let unmetered = figure.is_none().then(|| b.unsealed_reason().unwrap_or("no figure").to_owned());
     Metered { meter: spec.into(), power_reader: Some(name), liveness: Some(liveness), bracket: Some(b), figure, verdict, unmetered }
diff --git a/wai/wai-rs/src/bin/wai_video_meter.rs b/wai/wai-rs/src/bin/wai_video_meter.rs
index 9b72260b7..814158016 100644
--- a/wai/wai-rs/src/bin/wai_video_meter.rs
+++ b/wai/wai-rs/src/bin/wai_video_meter.rs
@@ -1,12 +1,15 @@
 //! `wai_video_meter` — the native sink-metering path for `wai.video.int_motion`,
 //! the integer inter-frame video codec.
 //!
-//! Measures the **real CPU energy** a sink spends decoding an integer video
-//! codestream to frames, with no elevated privileges. On arm64 macOS the SoC
-//! energy counters are readable through IOReport — the same source `macmon`/
-//! `asitop` use — so this meter samples power via `macmon`, brackets a tight
-//! decode burst against an idle baseline, and reports the **marginal** CPU
-//! energy attributable to the decode.
+//! Brackets the CPU energy a sink spends decoding an integer video codestream
+//! to frames, with no elevated privileges: it samples the processor power the
+//! non-privileged reader `macmon` reports, brackets a tight decode burst against
+//! an idle baseline, and reports the **marginal** CPU energy attributable to the
+//! decode. That power is one the reader reports from a channel it selects, not
+//! a counter this meter reads: on macOS 27 the processor channels of IOReport's
+//! `Energy Model` group stop updating for an unprivileged reader. So its figure
+//! is sealed `ModelBased`, never `OnChipCounter` (energy-measurement §3.1;
+//! `wai::energy_burst::PowerSource`).
 //!
 //!   wai_video_meter  [receipt_out.json [report_out.json]]
 //!                   [--no-report] [--previous-report ]
@@ -32,13 +35,13 @@
 //! the receipt (`.report.json`), to the path given, or to standard output
 //! when no receipt path is given; `--no-report` turns it off, and says so.
 //!
-//! This is a *measurement* with stated bounds, exactly as the sibling meters:
-//! IOReport CPU power is SoC-wide, so the meter reports the DELTA over an
+//! This is a bracket with stated bounds, exactly as the sibling meters: the
+//! reported CPU power is SoC-wide, so the meter reports the DELTA over an
 //! otherwise-idle machine (busy − idle mean power × window ÷ the decodes the
 //! window paid for; see `wai::energy_burst`). Run it on a quiet box for a clean
-//! number; it never fabricates one. Without `macmon`, or when the reader's rail
-//! was not live (§3.1), or the §4 ratio or the §2.3 uncertainty cannot support a
-//! figure, it emits an UNMETERED receipt — `joules_micro` carries the unmetered
+//! number; it never fabricates one. Without `macmon`, or when the reported power
+//! did not move (§3.1), or the §4 ratio cannot support a figure, it emits an
+//! UNMETERED receipt — `joules_micro` carries the unmetered
 //! marker `0`, never a figure of zero joules — and that receipt reports no rate
 //! at all: an absent measurement must never be readable as "this decode was
 //! free".
@@ -74,7 +77,7 @@ fn main() {
 
     eprintln!(
         "metering {path} ({n} frames {h}x{w} RGB, work {work} subpixel-ops), \
-         no sudo — IOReport via macmon"
+         no sudo — the processor power macmon reports (ModelBased)"
     );
 
     // The §3 protocol (energy_burst): an idle bracket, then a decode burst on
@@ -85,9 +88,8 @@ fn main() {
     // the close (C + N/2), since the window opened from rest.
     //
     // `Some((uj, class))` only when a figure was genuinely obtained. A
-    // measurement that rounds to zero, or that the §4 ratio or the §2.3
-    // uncertainty cannot support, is a failure to measure, and it is reported
-    // as one.
+    // bracket that rounds to zero, or that §3.1 or the §4 ratio cannot support,
+    // is a failure to measure, and it is reported as one.
     let mut values = None;
     let measured: Option<(u64, Provenance)> =
         match measure_with_macmon("decode", &payload, |p| {
@@ -96,14 +98,14 @@ fn main() {
             None => {
                 eprintln!(
                     "macmon unavailable or too few samples; emitting an UNMETERED receipt \
-                     (joules_micro carries the unmetered marker 0). Install `brew install macmon` (the non-sudo \
-                     IOReport reader) for a measured figure."
+                     (joules_micro carries the unmetered marker 0). Install `brew install macmon` (a non-sudo \
+                     power reader) for a ModelBased figure."
                 );
                 None
             }
             Some(b) => {
                 values = b.values();
-                println!("== wai_video_meter — CPU energy bracket (IOReport via macmon, no sudo): a measurement only if the gate below seals it ==");
+                println!("== wai_video_meter — CPU energy bracket (the power macmon reports, no sudo): a figure only if the gate below seals it ==");
                 print!("{}", b.report("decode"));
                 match b.per_unit_uj() {
                     Some(per) => {
@@ -115,16 +117,14 @@ fn main() {
                     None => println!("→ per decode        : no completion in the window"),
                 }
                 b.warn_if_unpublishable();
-                // IOReport is the SoC's own counter, so a reading from it is
-                // `OnChipCounter` — a sensor value, not an estimate, whose
-                // declared uncertainty is this tool's own evaluation and does
-                // not cover IOReport's systematic error, which is not
-                // published. A non-privileged reader has no documented way to
-                // learn whether the interface filters its output, so the state
-                // is reported as Unknown, never Off.
-                match b.on_chip_figure(CounterFiltering::Unknown) {
+                // The samples are a power the reader reports, not a counter
+                // read here, so the bracket seals `ModelBased` — never
+                // `OnChipCounter`, whose liveness test (§3.1) was never run on
+                // the counter behind the report. The filtering state applies
+                // only to a counter's figure.
+                match b.figure(CounterFiltering::Unknown) {
                     Some((uj, class)) => {
-                        println!("joules_micro (receipt, MEASURED): {uj}");
+                        println!("joules_micro (receipt, {}): {uj}", class.label());
                         Some((uj, class))
                     }
                     None => {
@@ -164,7 +164,7 @@ fn main() {
             receipt.verify_reconstruction_wiv1(&payload),
             "emitted receipt must re-decode to the same frames"
         );
-        let tag = if measured.is_some() { "MEASURED" } else { "UNMETERED" };
+        let tag = measured.as_ref().map_or("UNMETERED", |(_, class)| class.label());
         if let Some(out) = args.get(2) {
             std::fs::write(out, receipt.to_json()).expect("write receipt");
             println!("receipt           : {out}  (verified, joules_micro {tag}, work {work})");
diff --git a/wai/wai-rs/src/bin/wai_world_meter.rs b/wai/wai-rs/src/bin/wai_world_meter.rs
index a51f4f28d..dfd8d83c2 100644
--- a/wai/wai-rs/src/bin/wai_world_meter.rs
+++ b/wai/wai-rs/src/bin/wai_world_meter.rs
@@ -1,31 +1,32 @@
 //! `wai_world_meter` — the native sink-metering path for §8 joules.
 //!
-//! Measures the **real CPU energy** a sink spends replaying a sealed
-//! `wai.world.replay`, with no elevated privileges. On arm64 macOS
-//! the SoC energy counters are readable through IOReport — the same
-//! source `macmon`/`asitop` use — so this meter samples power via
-//! `macmon` (the installed, audited IOReport reader), brackets a
-//! tight replay burst against an idle baseline, and reports the
-//! **marginal** CPU energy attributable to the replay.
+//! Brackets the CPU energy a sink spends replaying a sealed
+//! `wai.world.replay`, with no elevated privileges: it samples the
+//! processor power the non-privileged reader `macmon` reports, brackets
+//! a tight replay burst against an idle baseline, and reports the
+//! **marginal** CPU energy attributable to the replay. That power is one
+//! the reader reports from a channel it selects, not a counter this meter
+//! reads (on macOS 27 the processor channels of IOReport's `Energy Model`
+//! group stop updating for an unprivileged reader), so the figure is
+//! `ModelBased`, never `OnChipCounter` (energy-measurement §3.1;
+//! `wai::energy_burst::PowerSource`).
 //!
 //!   wai_world_meter  [receipt_out.json [report_out.json]]
 //!                   [--no-report] [--previous-report ]
 //!
-//! Output: measured microjoules per replay (and per tick) — the honest
-//! figure that fills a receipt's `joules_micro`, replacing a browser's
-//! declared-coefficient estimate where a native sink runs. With a
-//! second argument the meter also emits a full §8 `SessionReceipt`
-//! carrying that **measured** energy, signed and self-verified — a
-//! portable receipt with real joules, end to end.
+//! Output: bracketed microjoules per replay (and per tick), the figure
+//! that fills a receipt's `joules_micro` with its class. With a second
+//! argument the meter also emits a full §8 `SessionReceipt` carrying
+//! that figure and its class, signed and self-verified.
 //!
-//! This is a *measurement* with stated bounds: IOReport CPU power is
+//! This is a bracket with stated bounds: the reported CPU power is
 //! SoC-wide, so the meter reports the DELTA over an otherwise-idle
 //! machine (busy − idle mean power × window ÷ the replays the window paid
 //! for; see `wai::energy_burst`). Run it on a quiet box for a clean number;
 //! it never fabricates one. A usable figure is sealed with its acquisition
-//! class, `OnChipCounter` with a declared uncertainty; without `macmon`, or
-//! when the reader's rail was not live (§3.1), or the §4 ratio or the §2.3
-//! uncertainty cannot support a figure, the receipt is sealed UNMETERED:
+//! class, `ModelBased`; without `macmon`, or when the reported power did not
+//! move (§3.1), or the §4 ratio cannot support a figure, the receipt is sealed
+//! UNMETERED:
 //! `joules_micro` carries the unmetered marker `0`, with no class, never a
 //! figure of zero joules.
 //!
@@ -65,7 +66,7 @@ fn main() {
     run_sealed_dispatch(&container).expect("replay verifies");
     let final_tick = container.seal.as_ref().unwrap().final_tick;
 
-    eprintln!("metering {path} ({final_tick} ticks/replay), no sudo — IOReport via macmon");
+    eprintln!("metering {path} ({final_tick} ticks/replay), no sudo — the processor power macmon reports (ModelBased)");
 
     // The §3 protocol (energy_burst): an idle bracket, then replays on several
     // threads released together from a start barrier, counted per replay —
@@ -78,22 +79,23 @@ fn main() {
         None => {
             eprintln!(
                 "macmon unavailable or too few samples; sealing UNMETERED (joules_micro carries the unmetered marker 0). \
-                 Install `brew install macmon` (the non-sudo IOReport reader this meter samples)."
+                 Install `brew install macmon` (the non-sudo power reader this meter samples)."
             );
             (0, None)
         }
         Some(b) => {
             values = b.values();
-            println!("== wai_world_meter — CPU energy bracket (IOReport via macmon, no sudo): a measurement only if the gate below seals it ==");
+            println!("== wai_world_meter — CPU energy bracket (the power macmon reports, no sudo): a figure only if the gate below seals it ==");
             print!("{}", b.report("replay"));
             if let Some(per_replay_uj) = b.per_unit_uj() {
                 println!("→ per replay        : {per_replay_uj:.1} µJ   ({final_tick} ticks)");
                 println!("→ per tick          : {:.3} µJ", per_replay_uj / final_tick as f64);
             }
             b.warn_if_unpublishable();
-            match b.on_chip_figure(CounterFiltering::Unknown) {
+            // A reported power seals `ModelBased`, never `OnChipCounter` (§3.1).
+            match b.figure(CounterFiltering::Unknown) {
                 Some((uj, class)) => {
-                    println!("joules_micro (receipt, MEASURED): {uj}");
+                    println!("joules_micro (receipt, {}): {uj}", class.label());
                     (uj, Some(class))
                 }
                 None => {
@@ -110,7 +112,7 @@ fn main() {
         }
     };
 
-    // The §8 receipt carrying the measured energy, written when a path is
+    // The §8 receipt carrying the bracketed energy, written when a path is
     // given; its report is written whether or not it is.
     {
         let (checkpoints, work_steps) = checkpoints_and_work(&container, final_tick);
@@ -132,7 +134,7 @@ fn main() {
         assert!(receipt.verify(), "emitted receipt must verify");
         if let Some(out) = args.get(2) {
             std::fs::write(out, receipt.to_json()).expect("write receipt");
-            let tag = if receipt.energy_provenance.is_some() { "MEASURED, OnChipCounter" } else { "UNMETERED" };
+            let tag = receipt.energy_provenance.as_ref().map_or("UNMETERED", |c| c.label());
             println!("receipt           : {out}  (verified, joules_micro {tag}, work_steps {work_steps})");
         }
         meter_report::write(
diff --git a/wai/wai-rs/src/energy_burst.rs b/wai/wai-rs/src/energy_burst.rs
index 9204a527e..99ef0442a 100644
--- a/wai/wai-rs/src/energy_burst.rs
+++ b/wai/wai-rs/src/energy_burst.rs
@@ -62,15 +62,35 @@
 //! differs from the one before it — in two consecutive samples, in at least
 //! five, in at least four of every five, over at least 300 ms.
 //!
+//! # What the samples are: a counter read here, or a power reported
+//!
+//! §3.1's test shows a counter live only when it is run on the counter. A
+//! reader of a counter ([`counter_power_samples`], [`rapl_power_reader`]) gives
+//! the counter's own successive differences, so a sample advances only when the
+//! counter does ([`PowerSource::Counter`]). A reader that reports a power it
+//! computes from a channel this module does not read gives no such evidence
+//! ([`PowerSource::Reported`]): its samples can keep moving while the channel
+//! behind them is frozen. That is the reference meters' reader on macOS
+//! (`macmon`'s `cpu_power`): on the build host and on the dev machine every
+//! processor channel of IOReport's `Energy Model` group reads zero for an
+//! unprivileged reader, and the reader takes its processor power from another
+//! report, one it identifies itself. Its samples pass the liveness test; the
+//! counter they come from was never put to it. So a reported power never seals
+//! `OnChipCounter`. Its bracket seals `ModelBased` — a power reported on the
+//! host it describes, times the window, over the work — with the reader named
+//! in the measurement report as the method ([`power_reader`]).
+//!
 //! # What this module refuses to produce
 //!
 //! A figure is sealed under a hardware class only when §3.1, §4 and §2.3
-//! allow it: the reader's rail was live in both brackets, the
-//! marginal-to-idle-noise ratio is at least 1, the per-unit figure does not
-//! round to zero, and a declared uncertainty can be evaluated. Anything else is
-//! a failure to measure, and the caller seals the receipt unmetered
-//! ([`Bracket::on_chip_figure`] returns `None`; [`Bracket::unsealed_reason`]
-//! says why).
+//! allow it: the samples are the counter's own, the reader's rail was live in
+//! both brackets, the marginal-to-idle-noise ratio is at least 1, the per-unit
+//! figure does not round to zero, and a declared uncertainty can be evaluated
+//! ([`Bracket::on_chip_figure`]). A reported power's bracket seals `ModelBased`
+//! under the same bracket rules, without the uncertainty, which that class does
+//! not carry ([`Bracket::figure`]). Anything else is a failure to measure, and
+//! the caller seals the receipt unmetered ([`Bracket::figure`] returns `None`;
+//! [`Bracket::unsealed_reason`] says why).
 
 use std::process::Command;
 use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
@@ -90,6 +110,32 @@ const BUSY_SAMPLES: u32 = 14;
 /// Sampling interval of the power reader, in milliseconds.
 const SAMPLE_INTERVAL_MS: u32 = 200;
 
+/// What a power reader's samples are, which decides what §3.1's liveness test
+/// over them shows and so the class a bracket over them can seal.
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+pub enum PowerSource {
+    /// The successive differences of an energy counter this implementation reads
+    /// itself ([`counter_power_samples`]). A sample advances only when the counter
+    /// does, so a bracket that passes §3.1 shows the counter live, and the figure
+    /// is the counter's reading: `OnChipCounter`.
+    Counter,
+    /// A power another program reports, computed from a channel this
+    /// implementation does not read. Its samples can move while the channel behind
+    /// them is frozen, so §3.1 over them shows the report moving, not a counter
+    /// live: the figure is `ModelBased` at best (energy-measurement §3.1), never
+    /// `OnChipCounter`.
+    Reported,
+}
+
+impl PowerSource {
+    pub fn label(self) -> &'static str {
+        match self {
+            PowerSource::Counter => "a counter read here (its differences are the samples)",
+            PowerSource::Reported => "a power another program reports, from a channel not read here",
+        }
+    }
+}
+
 /// One complete bracketed measurement — everything §3 and §6 require a
 /// published figure to be reported with.
 #[derive(Clone, Debug, PartialEq)]
@@ -105,6 +151,9 @@ pub struct Bracket {
     pub idle_span_s: f64,
     /// Completions, workers, and how the window opened.
     pub count: CompletionCount,
+    /// What the samples are: a counter read here, or a power another program
+    /// reports. Only the first seals `OnChipCounter` ([`Bracket::on_chip_figure`]).
+    pub source: PowerSource,
 }
 
 fn mean(v: &[f64]) -> f64 {
@@ -281,9 +330,11 @@ impl Bracket {
         self.sealed_declaration().map(|(_, u)| u)
     }
 
-    /// Why [`Bracket::on_chip_figure`] refuses this bracket, or `None` when it
-    /// seals a figure.
+    /// Why [`Bracket::figure`] refuses this bracket, or `None` when it seals a
+    /// figure. The uncertainty is asked for only of a counter's bracket: a
+    /// reported power's figure is `ModelBased`, which declares none.
     pub fn unsealed_reason(&self) -> Option<&'static str> {
+        let counter = self.source == PowerSource::Counter;
         if self.count.work().is_none() {
             Some("no completion inside the window")
         } else if !self.rail_live() {
@@ -292,23 +343,39 @@ impl Bracket {
             Some("the marginal draw did not rise above the idle noise (ratio below 1)")
         } else if self.sealed_uj().is_none() {
             Some("the per-unit figure rounds to zero microjoules")
-        } else if self.u_measurement().is_none() {
+        } else if counter && self.u_measurement().is_none() {
             Some("no evaluable uncertainty (too few samples in a bracket)")
-        } else if self.sealed_declaration().is_none() {
+        } else if counter && self.sealed_declaration().is_none() {
             Some("no declarable uncertainty over this window")
         } else {
             None
         }
     }
 
-    /// What a receipt seals from this bracket when the power reader is the
-    /// measured SoC's own counter: `(joules_micro, OnChipCounter)`, or `None`
-    /// when §3.1, §4 or §2.3 forbid sealing a hardware class — a rail that was
-    /// not live, a ratio below 1, a per-unit figure that rounds to zero, or no
-    /// evaluable uncertainty ([`Bracket::unsealed_reason`]). The caller then
-    /// seals the receipt unmetered. The figure and declaration are the ones
-    /// the report's integers give ([`Bracket::values`]).
+    /// Why this bracket cannot seal `OnChipCounter`, or `None` when it does.
+    /// A reported power is refused first, whatever its samples show: their
+    /// liveness is the report's, and the counter behind it was not tested.
+    pub fn on_chip_refusal(&self) -> Option<&'static str> {
+        match self.source {
+            PowerSource::Reported => Some(
+                "the samples are a power another program reports, from a channel not read here: \
+                 §3.1 was not run on a counter, so the figure is not an on-chip counter's reading",
+            ),
+            PowerSource::Counter => self.unsealed_reason(),
+        }
+    }
+
+    /// What a receipt seals from this bracket when the samples are the
+    /// measured SoC's own counter, read here: `(joules_micro, OnChipCounter)`,
+    /// or `None` when the samples are a reported power ([`PowerSource::Reported`])
+    /// or when §3.1, §4 or §2.3 forbid sealing a hardware class — a rail that
+    /// was not live, a ratio below 1, a per-unit figure that rounds to zero, or
+    /// no evaluable uncertainty ([`Bracket::on_chip_refusal`]). The figure and
+    /// declaration are the ones the report's integers give ([`Bracket::values`]).
     pub fn on_chip_figure(&self, filtering: CounterFiltering) -> Option<(u64, EnergyProvenance)> {
+        if self.source != PowerSource::Counter {
+            return None;
+        }
         if !self.rail_live() || !self.values()?.meets_attribution_floor() {
             return None;
         }
@@ -318,6 +385,24 @@ impl Bracket {
         Some((uj, class))
     }
 
+    /// What a receipt seals from this bracket: the counter's figure
+    /// ([`Bracket::on_chip_figure`]) when the samples are a counter read here;
+    /// `(joules_micro, ModelBased)` when they are a reported power whose bracket
+    /// meets the same §3.1 and §4 rules and whose per-unit figure does not round
+    /// to zero; `None` otherwise ([`Bracket::unsealed_reason`]), and the caller
+    /// seals the receipt unmetered.
+    pub fn figure(&self, filtering: CounterFiltering) -> Option<(u64, EnergyProvenance)> {
+        match self.source {
+            PowerSource::Counter => self.on_chip_figure(filtering),
+            PowerSource::Reported => {
+                if !self.rail_live() || !self.values()?.meets_attribution_floor() {
+                    return None;
+                }
+                Some((self.sealed_uj()?, EnergyProvenance::ModelBased))
+            }
+        }
+    }
+
     /// The report §3 and §6 require beside any published figure, one field
     /// per line. `unit` names one reconstruction (e.g. `"decode"`).
     pub fn report(&self, unit: &str) -> String {
@@ -342,6 +427,7 @@ impl Bracket {
         let mut line = |label: String, value: String| o += &format!("{label:<20}: {value}\n");
         line(format!("{unit}s completed"), format!("{c} over {:.2}s on {n} threads ({opening})", self.window_s));
         line("work paid for".into(), work);
+        line("power source".into(), self.source.label().into());
         line(
             "cpu power  idle".into(),
             format!("{:.2} W  (sample sd {}, {} samples)", self.idle_mean(), sd(self.idle_sd()), self.idle_w.len()),
@@ -400,6 +486,14 @@ impl Bracket {
             "derived verdict (§4)".into(),
             self.values().and_then(|v| v.attribution()).map_or("none".into(), |a| a.label().to_string()),
         );
+        line(
+            "acquisition class".into(),
+            match (self.figure(CounterFiltering::Unknown), self.on_chip_refusal()) {
+                (Some((_, c)), None) => c.label().into(),
+                (Some((_, c)), Some(why)) => format!("{} — not OnChipCounter: {why}", c.label()),
+                (None, _) => format!("none, unmetered — {}", self.unsealed_reason().unwrap_or("refused")),
+            },
+        );
         let b = BuildRecord::of_this_build();
         line(
             "build".into(),
@@ -490,9 +584,15 @@ where
     (busy, window_s, CompletionCount { in_flight: workers as u64, completions, opening: WindowOpening::FromRest })
 }
 
-/// The whole §3 protocol against the non-privileged IOReport reader
-/// (`macmon`): an idle bracket, then a from-rest burst of `work` on
-/// [`default_workers`] threads with a busy bracket over it.
+/// What `macmon`'s `cpu_power` is: a power the reader reports, from a channel
+/// this module does not read ([`PowerSource::Reported`]).
+pub const MACMON_SOURCE: PowerSource = PowerSource::Reported;
+
+/// The whole §3 protocol against the non-privileged reader `macmon`: an idle
+/// bracket, then a from-rest burst of `work` on [`default_workers`] threads with
+/// a busy bracket over it. Its samples are a reported power
+/// ([`MACMON_SOURCE`]), so the bracket seals `ModelBased` at best
+/// ([`Bracket::figure`]).
 ///
 /// `None` when the reader is absent or returns too few samples to form an
 /// idle bracket — no measurement at all, never an estimate.
@@ -501,7 +601,7 @@ where
     T: Clone + Send + 'static,
     W: Fn(&T) + Send + Sync + 'static,
 {
-    measure_with(label, item, work, macmon_cpu_power)
+    measure_with(label, item, work, macmon_cpu_power, MACMON_SOURCE)
 }
 
 /// The whole §3 protocol against any power reader: `reader(n)` returns `n`
@@ -511,18 +611,26 @@ where
 ///
 /// The reader is a parameter so a reader that misbehaves — a frozen rail, a
 /// rail refreshed in batches — can be put in front of the protocol and shown
-/// to be refused.
-pub fn measure_with(label: &str, item: &T, work: W, reader: R) -> Option
+/// to be refused. `source` says what its samples are, and so what class the
+/// bracket can seal ([`PowerSource`]).
+pub fn measure_with(label: &str, item: &T, work: W, reader: R, source: PowerSource) -> Option
 where
     T: Clone + Send + 'static,
     W: Fn(&T) + Send + Sync + 'static,
     R: FnMut(u32) -> Vec,
 {
-    measure_on(label, item, work, reader, default_workers())
+    measure_on(label, item, work, reader, source, default_workers())
 }
 
 /// [`measure_with`], the burst on `workers` threads.
-pub fn measure_on(label: &str, item: &T, work: W, mut reader: R, workers: usize) -> Option
+pub fn measure_on(
+    label: &str,
+    item: &T,
+    work: W,
+    mut reader: R,
+    source: PowerSource,
+    workers: usize,
+) -> Option
 where
     T: Clone + Send + 'static,
     W: Fn(&T) + Send + Sync + 'static,
@@ -537,7 +645,7 @@ where
     }
     eprintln!("  {label}: burst on {workers} threads, released together …");
     let (busy_w, window_s, count) = burst_from_rest(workers, item, work, || reader(BUSY_SAMPLES));
-    Some(Bracket { idle_w, busy_w, window_s, idle_span_s, count })
+    Some(Bracket { idle_w, busy_w, window_s, idle_span_s, count, source })
 }
 
 /// The most power, in watts, an interval of a counter read as power may imply: above the
@@ -599,7 +707,7 @@ pub fn counter_power_samples(
 /// A power reader over the Linux powercap (RAPL) counter of `domain`
 /// (`/sys/class/powercap//energy_uj`, the file [`crate::energy_meter::CounterMeter::rapl`]
 /// reads), for [`measure_with`]: `reader(n)` gives `n` samples, one per sampling interval,
-/// by [`counter_power_samples`]. `None` where the counter or its range cannot be read —
+/// by [`counter_power_samples`] — the counter's own differences ([`PowerSource::Counter`]). `None` where the counter or its range cannot be read —
 /// every non-Linux target, a Linux without powercap, or one that does not let this
 /// process read it.
 pub fn rapl_power_reader(domain: &str) -> Option Vec + use<>> {
@@ -622,13 +730,18 @@ pub fn rapl_power_reader(domain: &str) -> Option Vec + u
 }
 
 /// The power reader the reference meters name in a measurement report: the
-/// open-source reader and the reading it takes.
+/// open-source reader, the reading it takes, and what that reading is — the
+/// method a `ModelBased` figure from it states (energy-measurement §3.1).
 pub fn power_reader() -> &'static str {
-    "macmon cpu_power"
+    "macmon cpu_power: a processor power the reader reports from a channel it selects; not read here, so ModelBased"
 }
 
-/// One sample burst from `macmon pipe` (the non-privileged IOReport reader),
-/// returning its CPU-power readings in watts. Empty when `macmon` is absent.
+/// One sample burst from `macmon pipe` (a non-privileged reader), returning its
+/// CPU-power readings in watts. Empty when `macmon` is absent. The readings are
+/// a power the reader reports ([`MACMON_SOURCE`]): on macOS 27 the processor
+/// channels of IOReport's `Energy Model` group stop updating for an
+/// unprivileged reader, and the reader takes its processor power from another
+/// report it identifies itself, which this module cannot put to §3.1.
 pub fn macmon_cpu_power(n: u32) -> Vec {
     let out = Command::new("macmon")
         .args(["pipe", "-s", &n.to_string(), "-i", &SAMPLE_INTERVAL_MS.to_string()])
@@ -659,6 +772,7 @@ mod tests {
             window_s,
             idle_span_s: 2.0,
             count: CompletionCount { in_flight: n, completions: c, opening: WindowOpening::FromRest },
+            source: PowerSource::Counter,
         }
     }
 
@@ -961,7 +1075,12 @@ mod tests {
     /// The burst these tests run: nothing, as fast as it goes. What is under
     /// test is the reader in front of the protocol.
     fn measure(reader: impl FnMut(u32) -> Vec) -> Bracket {
-        measure_with("fault", &(), |_| std::thread::sleep(std::time::Duration::from_millis(1)), reader)
+        measure_from(reader, PowerSource::Counter)
+    }
+
+    /// [`measure`], the samples being what `source` says.
+    fn measure_from(reader: impl FnMut(u32) -> Vec, source: PowerSource) -> Bracket {
+        measure_with("fault", &(), |_| std::thread::sleep(std::time::Duration::from_millis(1)), reader, source)
             .expect("the reader returns samples")
     }
 
@@ -1105,6 +1224,65 @@ mod tests {
         assert!(!short.rail_live() && short.on_chip_figure(CounterFiltering::Unknown).is_none());
     }
 
+    /// The build host's case. Every processor channel of the counter group reads
+    /// the same value at every read, and a reader reports a processor power that
+    /// keeps moving anyway, taken from somewhere this module does not read. Read
+    /// here, the channel is frozen and seals nothing. Reported, the power passes
+    /// §3.1, which before this rule sealed `OnChipCounter`; it is refused as an
+    /// on-chip counter's reading and sealed `ModelBased`.
+    #[test]
+    fn a_frozen_channel_is_refused_as_on_chip_counter() {
+        // The channel, read as a counter: its differences are zero.
+        let frozen = |n: u32| {
+            std::thread::sleep(std::time::Duration::from_millis(320));
+            let mut t = 0u64;
+            counter_power_samples(|| Some(7_000_000), || { t += 200_000; t }, || {}, n, 200_000, 1 << 32)
+        };
+        let read_here = measure_from(frozen, PowerSource::Counter);
+        assert!(read_here.idle_w.iter().chain(&read_here.busy_w).all(|w| *w == 0.0), "a frozen channel's differences");
+        assert!(!read_here.rail_live());
+        assert!(read_here.figure(CounterFiltering::Unknown).is_none(), "a frozen channel read here seals nothing");
+        assert_eq!(
+            read_here.on_chip_refusal(),
+            Some("the power reader's rail did not advance in enough intervals (§3.1): not a live reading")
+        );
+        // The same channel behind a reader that reports a moving power.
+        let reported = || {
+            let mut calls = 0;
+            move |n: u32| {
+                calls += 1;
+                std::thread::sleep(std::time::Duration::from_millis(320));
+                let level = if calls == 1 { 20.0 } else { 30.0 };
+                (0..n).map(|i| level + if i % 2 == 0 { 0.1 } else { -0.1 }).collect::>()
+            }
+        };
+        for b in [measure_from(reported(), PowerSource::Reported), measure_from(reported(), MACMON_SOURCE)] {
+            assert!(b.rail_live(), "the report moves");
+            assert!(b.on_chip_figure(CounterFiltering::Unknown).is_none(), "a reported power is no counter reading");
+            assert!(b.on_chip_refusal().is_some_and(|why| why.contains("not read here")));
+            assert_eq!(b.unsealed_reason(), None);
+            let (uj, class) = b.figure(CounterFiltering::Unknown).expect("a ModelBased figure");
+            assert_eq!((uj, class), (b.sealed_uj().unwrap(), EnergyProvenance::ModelBased));
+            assert!(b.report("op").contains("ModelBased — not OnChipCounter"), "{}", b.report("op"));
+            // The same samples, had they been a counter's differences, seal a counter figure.
+            let as_counter = Bracket { source: PowerSource::Counter, ..b.clone() };
+            assert!(matches!(as_counter.figure(CounterFiltering::Unknown), Some((_, EnergyProvenance::OnChipCounter { .. }))));
+        }
+        // A reported power held at one value, stepping once in the busy bracket, has a
+        // positive marginal and a clean ratio; it did not move, and seals nothing.
+        let mut calls = 0;
+        let held = measure_from(
+            move |n| {
+                calls += 1;
+                std::thread::sleep(std::time::Duration::from_millis(320));
+                (0..n).map(|i| if calls == 2 && i >= 3 { 12.0 } else { 5.0 }).collect()
+            },
+            PowerSource::Reported,
+        );
+        assert!(held.marginal_w() > 0.0 && !held.rail_live());
+        assert!(held.figure(CounterFiltering::Unknown).is_none(), "a held report is no figure");
+    }
+
     #[test]
     fn a_from_rest_burst_counts_only_work_begun_inside_the_window() {
         // Each unit of work records that it started; the sampler records the
diff --git a/wai/wai-rs/src/energy_class.rs b/wai/wai-rs/src/energy_class.rs
index 76274c507..912bcc7bf 100644
--- a/wai/wai-rs/src/energy_class.rs
+++ b/wai/wai-rs/src/energy_class.rs
@@ -62,15 +62,18 @@
 //!   a calibration certificate's uncertainty (`extensions/energy-measurement.md`
 //!   §2.2).
 //!
-//! IOReport, the SoC energy interface the reference meters read, is an on-chip
-//! counter in this sense and is classed [`EnergyProvenance::OnChipCounter`].
-//! Its channels sit in a group named "Energy Model", and it is a private
-//! interface whose derivation is not publicly documented. That is a statement
-//! about the counter's undisclosed systematic error, which an `OnChipCounter`
-//! declaration already leaves out (§2.3). It does not make the reading a model
-//! this implementation computed, which is what
-//! [`EnergyProvenance::ModelBased`] means. Documents
-//! elsewhere in the monorepo class IOReport as `ModelBased` or `Estimator`;
+//! A channel of IOReport, the SoC's energy interface, is an on-chip counter in
+//! this sense: read by the implementation itself and shown live (§3.1), its
+//! reading is classed [`EnergyProvenance::OnChipCounter`]. Its channels sit in a
+//! group named "Energy Model", and it is a private interface whose derivation is
+//! not publicly documented. That is a statement about the counter's undisclosed
+//! systematic error, which an `OnChipCounter` declaration already leaves out
+//! (§2.3). A power another program reports is not such a reading: on macOS 27
+//! the group's processor channels stop updating for an unprivileged reader, and
+//! the reader the reference meters sample takes its processor power from a
+//! report it selects itself, which no test here was run on. Those meters seal
+//! `ModelBased` ([`crate::energy_burst::PowerSource`]). Documents elsewhere in
+//! the monorepo class IOReport as `ModelBased` or `Estimator`;
 //! `extensions/energy-measurement.md` §2.9 lists them.
 //!
 //! The gap between the two is **provenance and uncertainty**, not accuracy: a
diff --git a/wai/wai-rs/src/platform_decode/tests.rs b/wai/wai-rs/src/platform_decode/tests.rs
index 3a489a4e9..792dbb009 100644
--- a/wai/wai-rs/src/platform_decode/tests.rs
+++ b/wai/wai-rs/src/platform_decode/tests.rs
@@ -32,7 +32,7 @@ impl W {
     fn bytes(&self) -> Vec {
         let mut b = self.bits.clone();
         b.push(true);
-        while b.len() % 8 != 0 {
+        while !b.len().is_multiple_of(8) {
             b.push(false);
         }
         b.chunks(8).map(|c| c.iter().fold(0u8, |a, &x| (a << 1) | u8::from(x))).collect()
diff --git a/wai/wai-rs/src/stage_measure/session.rs b/wai/wai-rs/src/stage_measure/session.rs
index 174ccb3f3..e56a4aeed 100644
--- a/wai/wai-rs/src/stage_measure/session.rs
+++ b/wai/wai-rs/src/stage_measure/session.rs
@@ -273,6 +273,7 @@ mod tests {
                 window_s: 3.0,
                 idle_span_s: 2.0,
                 count: CompletionCount { in_flight: n, completions: 60, opening: WindowOpening::FromRest },
+                source: crate::energy_burst::PowerSource::Counter,
             };
             let (uj, class) = b.on_chip_figure(CounterFiltering::Unknown).expect("a figure");
             MeasuredFigure { joules_micro: uj, class, bracket: b.values(), power_reader: "a counter reader".into() }
diff --git a/wai/wai-rs/src/ternary_receipt.rs b/wai/wai-rs/src/ternary_receipt.rs
index 816401b75..f8e7aa106 100644
--- a/wai/wai-rs/src/ternary_receipt.rs
+++ b/wai/wai-rs/src/ternary_receipt.rs
@@ -9,9 +9,10 @@
 //!
 //! - **work** (`trit_macs = Σ trit-tensor sizes`) — portable-exact, recomputable
 //!   by anyone from the container, a sink cannot inflate it. **Verified.**
-//! - **joules_micro** — measured marginal energy the sink spent reconstructing.
-//!   **Attested** by signature (the `wai_quantum_meter` IOReport pattern applies
-//!   unchanged), with its acquisition class as an optional label
+//! - **joules_micro** — the marginal energy the sink spent reconstructing.
+//!   **Attested** by signature (the `wai_quantum_meter` bracket applies
+//!   unchanged, `ModelBased` over a reported power), with its acquisition class
+//!   as an optional label
 //!   (`extensions/energy-measurement.md` §2.8).
 //!
 //! Both bind to two hashes: `payload_hash` (BLAKE3 of the canonical `WQTT`
diff --git a/wai/wai-web/reach/test/vectors/provenance/README.md b/wai/wai-web/reach/test/vectors/provenance/README.md
index 4ed7eb9d6..0426e4a7a 100644
--- a/wai/wai-web/reach/test/vectors/provenance/README.md
+++ b/wai/wai-web/reach/test/vectors/provenance/README.md
@@ -13,8 +13,10 @@ lineage. The key is the tool's published test seed, the byte `0x70` repeated 32
 `did:example:wai-prov`: a key whose seed is published attests nothing, so its id names no
 origin (jwp-receipts §7.1, §7.8). The figures, 426844 µJ for `encode.png` and 140425 µJ
 for `encode.jpeg` (unlabelled; `origin.synthesize` is unmetered), are the ones `wai_prov`
-measured on the host's on-chip energy counters when it first wrote this asset, at an earlier
-revision that signed under an origin-bound id. `--carry` carries them onto the same bytes
+bracketed when it first wrote this asset, at an earlier revision that signed under an
+origin-bound id. Its samples were the processor power a non-privileged reader reports, not
+a counter it read and showed live, so the figures are `ModelBased` at best
+(energy-measurement §3.1); being unlabelled, the receipt states no class. `--carry` carries them onto the same bytes
 and signs them again under the label; nothing is measured again. `wai_prov` carries a
 figure only from a receipt that verifies and whose steps have this run's operations, input
 and output hashes and work.
@@ -29,8 +31,8 @@ cargo run --release --no-default-features --features provenance,codecs,receipt_c
 
 The receipt is carried onto itself, so the command writes both files again byte for byte;
 on a host whose synthesis or encoders give other bytes, the lineage differs and the
-command refuses. Without `--carry`, `wai_prov` measures each encode afresh (a usable
-figure is labelled `OnChipCounter`), and the receipt and its hash below change.
+command refuses. Without `--carry`, `wai_prov` brackets each encode afresh (a usable
+figure is labelled `ModelBased`), and the receipt and its hash below change.
 
 The receipt profile of the reach builds exists to check receipts like this one, so the
 conformance runs (`../../conformance.js`) verify it on every rung: the content hash and
-- 
2.54.0 (Apple Git-157)


From c953377397142d7991065160eb949443a7106f3c Mon Sep 17 00:00:00 2001
From: Transaction Science 
Date: Sat, 24 Oct 2026 21:29:40 -0400
Subject: [PATCH 49/50] wai: WaiMulti::pick walks the energy order through
 pick_where, as the neural path does

pick reached the energy order through pick_with, which left pick_where used
only under the neural feature and dead in every other build.

Co-Authored-By: Claude Opus 5.5 
---
 wai/wai-rs/src/container.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/wai/wai-rs/src/container.rs b/wai/wai-rs/src/container.rs
index aecc266d9..dd1ef9378 100644
--- a/wai/wai-rs/src/container.rs
+++ b/wai/wai-rs/src/container.rs
@@ -3053,7 +3053,7 @@ impl WaiMulti {
         advertises: impl Fn(&str) -> bool,
         verify: impl FnMut(&str, &Prior) -> Result,
     ) -> Result, Vec<(usize, Skip)>> {
-        self.pick_with(&DispatchPolicy::energy(), advertises, verify)
+        self.pick_where(|_, m| if advertises(&m.capability) { Ok(()) } else { Err(Skip::NotEligible) }, verify)
     }
 
     /// [`Self::pick`], walking the entries in the order `policy` gives.
-- 
2.54.0 (Apple Git-157)


From 13964c9448e01c61a49fe66583b1626eee235eed Mon Sep 17 00:00:00 2001
From: Transaction Science 
Date: Sun, 25 Oct 2026 04:27:28 -0400
Subject: [PATCH 50/50] wai: include/wai.h as build.rs regenerates it
 (energy_burst's MACMON_SOURCE)

cbindgen sees the public constant and writes PowerSource as an opaque type.

Co-Authored-By: Claude Opus 5.5 
---
 wai/wai-rs/include/wai.h | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/wai/wai-rs/include/wai.h b/wai/wai-rs/include/wai.h
index ebf2c9951..ab14ece73 100644
--- a/wai/wai-rs/include/wai.h
+++ b/wai/wai-rs/include/wai.h
@@ -474,6 +474,12 @@
  */
 typedef struct Fx Fx;
 
+/**
+ * What a power reader's samples are, which decides what §3.1's liveness test
+ * over them shows and so the class a bracket over them can seal.
+ */
+typedef struct PowerSource PowerSource;
+
 typedef struct wai_buffer_t {
   uint8_t *data;
   uintptr_t len;
@@ -531,6 +537,8 @@ typedef struct wai_decoded_t {
 
 
 
+
+
 #ifdef __cplusplus
 extern "C" {
 #endif // __cplusplus
-- 
2.54.0 (Apple Git-157)