Each replay takes the attack's integers from the chain and runs the decisive calls again on several rulers: the deployed arithmetic, a fix in the same format, FP127, FP19 and exact rationals. It also says when a better ruler would not have helped. Balancer V1 is a rounding-direction case, not a precision one.
Resupply, 26 June 2025
Same integers, same formula (ResupplyPairCore.sol:573 then :282), different arithmetic. rate is collateral wei per 1e18 reUSD wei; LTV is in units of 1e-5 (maxLTV 95,000); max borrow is the reUSD the 1-wei position may owe at maxLTV, rounded down (the protocol's favour); digits is −log10 of the relative error against the exact value.
| method | rate | rate digits | LTV (1e-5) | verdict | max borrow on 1 wei (reUSD) | note |
|---|---|---|---|---|---|---|
WAD as deployed: 1e36 / price (floor) | 0 | 0 | 0 | solvent: borrow passes | unbounded (rate 0) | matches chain: UpdateExchangeRate(0), borrow succeeded |
| divUp on the rate (ceil) | 1 | 0 | 1,000,000,000,000 | insolvent: reverts | 0.95 | |
| divide by the price at the end (LTV ceil) | — | — | 500,000,000,000 | insolvent: reverts | 1.9 | floor would give 499,999,999,999, same verdict |
| FP127 (inline lib), same formula | 0.4999999999999999999995004995 | 38.58 | 499999999999.9999999995004995 | insolvent: reverts | 1.9 | LTV ceil to the 1e5 grid: 500,000,000,000 |
| FP19, same formula | 0.4999999999999999999995004995 | 71.90 | 499999999999.9999999995004995 | insolvent: reverts | 1.9 | LTV ceil to the 1e5 grid: 500,000,000,000 |
| exact (rational) | 0.4999999999999999999995004995 | exact | 499999999999.9999999995004995 | insolvent: reverts | 1.9 |
Reading the table: the deployed rate has 0 correct digits (it is 0 where the truth is one half). divUp blocks the attack but is a one-mark ruler too: it reads one half as 1, doubling the LTV and halving what an honest borrower could take (0.95 reUSD instead of 1.9). Dividing by the price at the end needs no new library and gets the verdict and the LTV right to the integer. FP127 and FP19 carry the half and give the exact verdict and the exact cap.
Range: FP127 holds integers below 2^127 ≈ 1.7e38, so its port of this line takes the price as an exact integer only while totalAssets stays under 170311.325 crvUSD with one share outstanding (85 times the attack's); above that the port reverts (_q in the test) rather than floors. FP19 has no such wall.
The cliff before the cliff (derived, not on chain)
The same vault with one share wei outstanding and other totalAssets. The floored rate is an integer, so the debt the check sees is understated by up to half long before it reaches zero:
| totalAssets (crvUSD) | price | exact rate | floored rate | debt understated by |
|---|---|---|---|---|
| 400 | 399,600,399,600,399,600,400,599,400,599,400,599 | 2.5025 | 2 | 20.08% |
| 500 | 499,500,499,500,499,500,500,499,500,499,500,499 | 2.002 | 2 | 0.0999% |
| 600 | 599,400,599,400,599,400,600,399,600,399,600,399 | 1.66833333333 | 1 | 40.06% |
| 667 | 666,333,666,333,666,333,667,332,667,332,667,332 | 1.50074962519 | 1 | 33.37% |
| 999 | 998,001,998,001,998,001,999,000,999,000,999,000 | 1.002002002 | 1 | 0.1998% |
| 1,000 | 999,000,999,000,999,001,000,000,000,000,000,000 | 1.001 | 1 | 0.0999% |
| 1,001 | 1,000,000,000,000,000,000,000,999,000,999,000,999 | 1.0 | 0 | 100% |
| 1,500 | 1,498,501,498,501,498,501,499,500,499,500,499,500 | 0.667333333333 | 0 | 100% |
| 2002.000000000000000001 | 2,000,000,000,000,000,000,001,998,001,998,001,998 | 0.5 | 0 | 100% |
The whole replay, with its provenance and what its test asserts: docs/benchmarks/replay-resupply.md.
Bunni v2, 2 Sep 2025 (Ethereum)
- Idle-adjusted USDC balance (balance0 − idle, what
queryLDFprices with): 28 → 4 wei over 44 withdrawals (-85.7%). - Shares burned: 14363547901296 of 1596285787955479539002 (0.000000900%); pro rata the balance should have moved by 0.000000251947 wei.
- Total liquidity: 58303205157163981 → 9114083388149667 (-84.37%). At 28 wei the pool was bound by the USDT estimate; the USDC estimate takes over below 25.59 wei and falls in proportion to the balance from there.
- The chain shows the end of it directly: the first swap after the withdrawals passed
totalLiquidity = 9114083388149667and active balances (3, 455681386673) intoBunniSwapMath.computeSwap(trace0.6.3.2.0.2.0.0.5); the replay reproduces all three. (queryLDF's active balance is min(balance, liquidity × density), which floors 4 to 3.)
Same 44 withdrawals, idle balance held differently
Token transfers out are unchanged in every row (raw and vault withdrawals floor in the pool's favour, the vault burns shares rounded up); only the stored idle balance and its update differ.
| idle balance | active USDC after 44 (wei) | error vs exact (wei) | total liquidity after | change |
|---|---|---|---|---|
deployed (mulDiv, floor on the subtrahend) | 4 | -31.63 | 9114083388149667 | -84.3677833% |
the fix (mulDivUp) | 48 | +12.37 | 58303204633997825 | -0.0000009% |
| FP127 idle balance | 35.6278053051404733807526976078415462767862 | -9.72e-38 | 58303204633997825 | -0.0000009% |
| FP19 idle balance | 35.6278053051404733807526976078415462768833 | +1.17e-59 | 58303204633997825 | -0.0000009% |
| exact rational | 35.627805305140… (= 28436079632320287342378/798142893977739769501) | 0 | 58303204633997825 | -0.0000009% |
Start: active 28 wei, liquidity 58303205157163981. Liquidity takes integer balances, so for FP127, FP19 and exact the active balance is floored before queryLDF (the idle balance rounded up: the same direction as the deployed code, applied once instead of 44 times).
Per step (active USDC, wei; deployed / mulDivUp / exact):
step 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
dep 28 29 28 27 27 26 26 25 25 24 23 23 22 22 21 20 20 19 19 18 18 17 16 16 15 15 14 14 13 12 12 11 11 10 10 9 8 8 7 7 6 6 5 4 4
up 28 30 30 30 31 31 32 32 33 33 33 34 34 35 35 35 36 36 37 37 38 38 38 39 39 40 40 41 41 41 42 42 43 43 44 44 44 45 45 46 46 47 47 47 48
exact 28 30 29 29 30 30 30 30 31 30 30 31 31 31 31 31 31 31 32 32 32 32 32 33 32 33 33 33 33 33 34 33 34 34 34 34 34 35 34 35 35 35 35 35 36 (rounded to the nearest wei)
What happened
- Flash loan of 3,000,000.000000 USDT from the Uniswap v3 WETH/USDT pool
0x4e68ccd3e89f51c3074ca5072bbac773960dfa36. - Three swaps on the Bunni USDC/USDT pool (Uniswap v4, hook
0x000052423c1db6b7ff8641b85a7eefc7b2791888): 17.088106 USDT in; 1,835,309.634512 USDC out (exact output); 1.000000 USDT in for 472 wei USDC, leaving balance0 − idle at 28 wei (raw 63338394819 + vault 253353581163 − idle 316691975954). - 44 withdrawals from
BunniHub(1 × 119254548996 shares, 43 × 331262636100). Each removes ⌊idle·s/T⌋ from the idle balance (BunniHubLogic.sol:478) — the floor sits on the subtrahend, so the stored idle balance rounds up — while the pool's USDC leaves as ⌊raw·s/T⌋ plus the vault's ⌊reserve·s/T⌋ shares redeemed at the vault's rate (BunniHubLogic.sol:466, BunniHubLogic.sol:463). Active USDC fell 28 → 4. - A swap pair against the now mispriced pool (traces
0.6.3.2.0.2,0.6.3.2.0.4), repay the loan, and supply 1,041,353.990710 USDT, 1,332,132.228158 USDC to Aave v3. Bunni's post-mortem puts the loss across Ethereum and Unichain at about $8.4M; this replay covers the rounding, not the sandwich.
The whole replay, with its provenance and what its test asserts: docs/benchmarks/replay-bunni.md.
The Balancer V2 Composable Stable Pool exploit, five rulers
- FP127 and FP19 charge exactly the exact-rational amount on all 90 + 75 calls. That is asserted call by call in the test, and no call lowers D*. Inside the format the upscaled 17 osETH-wei stays 17.988250947729518883 to within 2^-128. The only rounding to the wei grid is the final ceil, which favours the pool.
- mulUp alone defeats the attack as executed: every micro call now over-charges, and the per-call ratio is 8.154 (osETH) and 5.227 (wstETH) instead of 0.01774 and 0.003688. It does not make every call safe. All 30 + 25 restore calls still lower D*, by exactly the deployed amount (-8609.12 and -5.6335e+10 wei-eq). Their given-out token is WETH, whose scaling factor is exactly 1, so mulUp changes nothing there. Their loss comes from the token-in balance: 1 wei of the rate token upscales by mulDown to 1, against a true 1.058 or 1.218. mulUp also over-charges a trader heavily at these balances: 1,041,412 against the exact 957,169 on swap 23.
- Round-to-nearest at the boundary instead of ceil, with exact maths inside: 14 + 5 calls lower D* by under half a wei of the token in each. The 0.01% fee keeps the phase net positive, with ratios 1.0035 and 1.0025. FP127's claim therefore depends on keeping the boundary's direction.
- The attacker's plan itself cannot be executed under the alternatives. Replayed adaptively (drain to 18, take 17, restore with the recorded WETH amount) on each model's own balances, it reaches swap 25 under mulUp and swap 25 under exact pricing with less of the rate token left than it means to leave behind (13 wei against 18). In the wstETH pool it fails at swaps 28 and 31. Under deployed pricing it reproduces the on-chain sequence exactly.
The same calls on five rulers
Each model prices every call of the phase on that call's own on-chain balances and amount. Below exact counts the calls charged less than the exact charge. ΔD is the change in the true invariant D* if that call had been charged this model's amount. Ratio is the product of the per-call ratios Dafter / Dbefore, which for the deployed row is the on-chain ratio. Projected is (1 − ratio) × the pool's value at block − 1, the first-order take of the exit / deflate / re-enter plan; a negative value means the pool gains.
osETH/WETH (90 calls, swaps 22–111; pool value 12172.24 ETH)
| model | charged in (WETH-wei / rate-token-wei) | calls below exact | calls that lower D* | ΣΔD* (wei-eq) | ratio | projected take (ETH) |
|---|---|---|---|---|---|---|
deployed (V2, _upscale = mulDown) | 3,529,606 / 199,735 | 60 | 60 | -135448.5 | 0.01773877 | 11956.3 |
| mulUp on the given-out amount (V3's direction) | 5,150,267 / 199,735 | 30 | 30 | 40559.19 | 8.153544 | -87074.6 |
| FP127 inside, ceil to wei once | 4,793,847 / 207,634 | 0 | 0 | 131.117 | 1.010489 | -127.677 |
| FP19 inside, ceil to wei once | 4,793,847 / 207,634 | 0 | 0 | 131.117 | 1.010489 | -127.677 |
| exact rationals, ceil to wei once | 4,793,847 / 207,634 | 0 | 0 | 131.117 | 1.010489 | -127.677 |
| exact, but round-to-nearest at the wei boundary (sensitivity) | 4,793,810 / 207,618 | 53 | 14 | 97.06195 | 1.003503 | -42.6405 |
ΣΔD* by kind of call:
| model | drain | micro | restore |
|---|---|---|---|
| deployed | 5640.19 | -132480.0 | -8609.12 |
| mulUp | 16764.5 | 32403.8 | -8609.12 |
| fp127 | 51.6613 | 41.1886 | 38.2671 |
| fp19 | 51.6613 | 41.1886 | 38.2671 |
| exact | 51.6613 | 41.1886 | 38.2671 |
| nearest | 38.8083 | 36.8999 | 21.3538 |
wstETH/WETH (75 calls, swaps 22–96; pool value 7179.439 ETH)
| model | charged in (WETH-wei / rate-token-wei) | calls below exact | calls that lower D* | ΣΔD* (wei-eq) | ratio | projected take (ETH) |
|---|---|---|---|---|---|---|
deployed (V2, _upscale = mulDown) | 1,312,086,551,708,809 / 624,203,250 | 51 | 51 | -2.209935e+11 | 0.0036877 | 7152.96 |
| mulUp on the given-out amount (V3's direction) | 1,929,334,036,622,810 / 624,203,250 | 25 | 25 | 9.135633e+10 | 5.227482 | -30350.9 |
| FP127 inside, ceil to wei once | 1,685,616,985,666,464 / 734,455,370 | 0 | 0 | 2.512774e+8 | 1.008329 | -59.7954 |
| FP19 inside, ceil to wei once | 1,685,616,985,666,464 / 734,455,370 | 0 | 0 | 2.512774e+8 | 1.008329 | -59.7954 |
| exact rationals, ceil to wei once | 1,685,616,985,666,464 / 734,455,370 | 0 | 0 | 2.512774e+8 | 1.008329 | -59.7954 |
| exact, but round-to-nearest at the wei boundary (sensitivity) | 1,685,616,985,666,441 / 734,455,356 | 37 | 5 | 1.643468e+8 | 1.002502 | -17.9639 |
ΣΔD* by kind of call:
| model | drain | micro | restore |
|---|---|---|---|
| deployed | 1.20743e+10 | -1.76733e+11 | -5.6335e+10 |
| mulUp | 7.6825e+10 | 7.08664e+10 | -5.6335e+10 |
| fp127 | 7.17865e+7 | 4.16169e+7 | 1.37874e+8 |
| fp19 | 7.17865e+7 | 4.16169e+7 | 1.37874e+8 |
| exact | 7.17865e+7 | 4.16169e+7 | 1.37874e+8 |
| nearest | 7.17865e+7 | 4.16169e+7 | 5.09433e+7 |
First cycle, per call (osETH/WETH): amount charged and ΔD* (wei-eq).
| swap | kind | out | deployed | mulUp | fp127 | fp19 | exact | nearest |
|---|---|---|---|---|---|---|---|---|
| osETH 22 | drain: WETH in, osETH out | 66,982 | 307,353 (1156.0) | 315,795 (3410.0) | 303,078 (8.408) | 303,078 (8.408) | 303,078 (8.408) | 303,077 (8.139) |
| osETH 23 | micro: WETH in, osETH out | 17 | 625,492 (-24600.0) | 1,041,412 (5921.0) | 957,169 (6.841) | 957,169 (6.841) | 957,169 (6.841) | 957,168 (6.77) |
| osETH 24 | restore: osETH in, WETH out | 891,000 | 5,182 (-1355.0) | 5,182 (-1355.0) | 6,257 (0.8747) | 6,257 (0.8747) | 6,257 (0.8747) | 6,257 (0.8747) |
| wstETH 22 | drain: WETH in, wstETH out | 99,999,999,995 | 221,844,531,789,055 (7.057e+9) | 233,844,076,669,826 (1.524e+10) | 211,681,214,249,624 (1.478e+7) | 211,681,214,249,624 (1.478e+7) | 211,681,214,249,624 (1.478e+7) | 211,681,214,249,624 (1.478e+7) |
| wstETH 23 | micro: WETH in, wstETH out | 4 | 162,427,217,924,000 (-3.582e+10) | 321,601,227,686,763 (1.436e+10) | 274,224,463,642,335 (8.434e+6) | 274,224,463,642,335 (8.434e+6) | 274,224,463,642,335 (8.434e+6) | 274,224,463,642,335 (8.434e+6) |
| wstETH 24 | restore: wstETH in, WETH out | 380,000,000,000,000 | 6,669 (-1.181e+10) | 6,669 (-1.181e+10) | 8,084 (1.362e+7) | 8,084 (1.362e+7) | 8,084 (1.362e+7) | 8,083 (5.784e+6) |
Which alternative alone suffices
- FP127 and FP19 charge exactly the exact-rational amount on all 90 + 75 calls. That is asserted call by call in the test, and no call lowers D*. Inside the format the upscaled 17 osETH-wei stays 17.988250947729518883 to within 2^-128. The only rounding to the wei grid is the final ceil, which favours the pool.
- mulUp alone defeats the attack as executed: every micro call now over-charges, and the per-call ratio is 8.154 (osETH) and 5.227 (wstETH) instead of 0.01774 and 0.003688. It does not make every call safe. All 30 + 25 restore calls still lower D*, by exactly the deployed amount (-8609.12 and -5.6335e+10 wei-eq). Their given-out token is WETH, whose scaling factor is exactly 1, so mulUp changes nothing there. Their loss comes from the token-in balance: 1 wei of the rate token upscales by mulDown to 1, against a true 1.058 or 1.218. mulUp also over-charges a trader heavily at these balances: 1,041,412 against the exact 957,169 on swap 23.
- Round-to-nearest at the boundary instead of ceil, with exact maths inside: 14 + 5 calls lower D* by under half a wei of the token in each. The 0.01% fee keeps the phase net positive, with ratios 1.0035 and 1.0025. FP127's claim therefore depends on keeping the boundary's direction.
- The attacker's plan itself cannot be executed under the alternatives. Replayed adaptively (drain to 18, take 17, restore with the recorded WETH amount) on each model's own balances, it reaches swap 25 under mulUp and swap 25 under exact pricing with less of the rate token left than it means to leave behind (13 wei against 18). In the wstETH pool it fails at swaps 28 and 31. Under deployed pricing it reproduces the on-chain sequence exactly.
Where the deployed undercharge comes from
The difference deployed − exact, summed by kind of call and split by where the rounding happens, is in units of the token in. amountOut: only the given-out amount upscaled by mulDown. balances: only the balances upscaled by mulDown. upscales: both together. solver: what remains, which is StableMath's integer Newton (P_D floored, c rounded up, stop at ≤ 1, +1), _downscaleUp and the fee's divUp.
| pool | kind | amountOut | balances | upscales | solver | total |
|---|---|---|---|---|---|---|
| osETH | drain | -12041.7 | 13870.0 | 1156.35 | 11642.7 | 12799.0 |
| osETH | micro | -1.36865e+6 | 105706.0 | -1.3319e+6 | 54893.8 | -1.27701e+6 |
| osETH | restore | 0 | -10320.4 | -10320.4 | 2436.64 | -7883.77 |
| wstETH | drain | -3.98097e+13 | 5.48999e+13 | 5.53885e+12 | 9.17902e+12 | 1.47179e+13 |
| wstETH | micro | -4.07712e+14 | 5.44993e+13 | -3.88296e+14 | 4.76545e+10 | -3.88248e+14 |
| wstETH | restore | 0 | -1.10933e+8 | -1.10933e+8 | 680858.0 | -1.10252e+8 |
The micro calls' undercharge is the given-out amount's truncation. The balance truncation partly offsets it there and is the whole loss on the restore calls. The integer solvers err on the pool's side in every kind of call.
The whole replay, with its provenance and what its test asserts: docs/benchmarks/replay-balancer.md.
The Balancer V1 drain of 31 August 2026
- Five pools, not one. SlowMist's five transactions hit five different Balancer V1 BPools, all deployed by Balancer's own BFactory
0x9424B1412450D0f8Fc2255FAf6046b98213B76Bd, between 02:28 and 03:36 UTC. SlowMist named only the first pool as the vulnerable contract. - Every attack join paid one token unit for about one and a half. Across the 438 joins (
joinswapPoolAmountOut,maxAmountIn = 1), the exact price was 1.5007879 to 1.5274949 units. The deployed maths charged 1 every time. In the opposite direction, each of the 489 dust exits (exitswapPoolAmountIn,minAmountOut = 1) was worth 0.491 to 0.499738 units, and the pool paid 1. - The loss is one rounding step.
bmul(tokenInRatio, tokenBalanceIn)(BMath.sol:156-182, line 174) multiplies an 18-decimal ratio by a balance held in raw token units: satoshi for WBTC and renBTC, 10^-6 for USDC.bmulrounds half up (BNum.sol:63-73). At a balance of 3 units, 3 × 1.499999999999999997 = 4.499999999999999991 rounds to 4 rather than 5, so the attacker pays 1. On an exit, 3.4999… rounds down, so the pool pays out 1. - The binomial series is not involved. In every attacked pool the attacked token's normalized weight is 1/4, 1/8 or 1/10. So
boo = 1/wis a whole number, andbpowreturns frombpowi(BNum.sol:108-126).bpowApproxis never called in any join or exit. Where it did run (in 109 swap calculations), it stopped at a term below 1e-10, and its residual against the exact power was at most 4.2e-11 relative. - Direction closes the loop; precision does not. FP127, FP19 and 200-digit mpmath, each rounded toward the pool (ceil in, floor out), give 2 for every join and 0 for every dust exit, so every one of them reverts on the attacker's own limits. BNum's own 18-decimal ratio, kept on a 10^-18 grid and rounded up once at the end, gives the same answers. But the same exact formula rounded once to nearest only blocks these calls because the attacker tuned them to the deployed rounding. Re-tuned to nearest-once from the same state, one join/exit cycle in pool 1 still nets 6.987% of the BPT supply (deployed: 7.035%). Toward the pool it nets -0.0548%, a loss. The deployed ratio had 18 correct digits. What it lacked was a rounding direction at the token grid.
Precision or direction?
The last column of the table above also blocks these calls: 1.5056 rounds to 2, and 0.498 rounds to 0. That is only because the attacker tuned each call to the deployed arithmetic. The question for a pool is what an attacker can get once it tunes to the pool's rule. Each row below starts from the state of each pool's first join at a balance of 3 units. It solves, at 200 digits, for the most BPT one unit buys on the join and the least BPT one unit costs on the exit that follows (at a balance of 4, from the supply after the join). Then it reports what one join/exit cycle nets the attacker. The balance is back at 3 after each cycle, so the cycle repeats.
| # | rule | BPT for 1 unit in (% of supply) | BPT for 1 unit out (% of supply) | net per cycle (% of supply) |
|---|---|---|---|---|
| 1 | deployed (the attacker's own amounts) | 0.689647 (10.67%) | 0.234884 (3.283%) | 7.035% |
| 1 | exact formula, nearest once (FP127 / FP19 / mpmath) | 0.687410 (10.63%) | 0.235741 (3.296%) | 6.987% |
| 1 | exact formula, toward the pool (ceil in, floor out) | 0.480430 (7.432%) | 0.483974 (6.969%) | -0.05482% |
| 2 | deployed (the attacker's own amounts) | 3447.439201 (5.199%) | 1154.692308 (1.655%) | 3.458% |
| 2 | exact formula, nearest once (FP127 / FP19 / mpmath) | 3421.974184 (5.161%) | 1165.086654 (1.671%) | 3.404% |
| 2 | exact formula, toward the pool (ceil in, floor out) | 2409.114426 (3.633%) | 2451.677323 (3.568%) | -0.06419% |
| 3 | deployed (the attacker's own amounts) | 0.827210 (10.67%) | 0.281736 (3.283%) | 7.035% |
| 3 | exact formula, nearest once (FP127 / FP19 / mpmath) | 0.826834 (10.66%) | 0.281879 (3.285%) | 7.028% |
| 3 | exact formula, toward the pool (ceil in, floor out) | 0.577940 (7.453%) | 0.578534 (6.944%) | -0.007659% |
| 4 | deployed (the attacker's own amounts) | 270.261461 (4.138%) | 90.217846 (1.326%) | 2.757% |
| 4 | exact formula, nearest once (FP127 / FP19 / mpmath) | 266.169494 (4.075%) | 91.921979 (1.352%) | 2.668% |
| 4 | exact formula, toward the pool (ceil in, floor out) | 187.590142 (2.872%) | 194.534964 (2.895%) | -0.1063% |
| 5 | deployed (the attacker's own amounts) | 18.503229 (4.138%) | 6.176691 (1.326%) | 2.757% |
| 5 | exact formula, nearest once (FP127 / FP19 / mpmath) | 18.363342 (4.107%) | 6.234465 (1.339%) | 2.712% |
| 5 | exact formula, toward the pool (ceil in, floor out) | 12.947067 (2.895%) | 13.183299 (2.865%) | -0.05283% |
With full precision and round-to-nearest, the loop is almost exactly as profitable as it was on chain. 38 or 71 digits do not help when the last step can round half a unit in the caller's favour. Rounded toward the pool, the loop runs backwards: each cycle leaves the swap fee in the pool. test_precision_without_direction_still_pays and test_direction_closes_the_loop assert pool 1's row in FP127 and FP19 (score checks the test's literals against these solutions).
The whole replay, with its provenance and what its test asserts: docs/benchmarks/replay-balancer-v1.md.