{"assessments":[],"deployments":[{"attestationHash":"2a85dfb152abc9e42fdcd67ed9073b19d85a1a6d0facfff57b3b51346f6a3b2c","chainId":4663,"contracts":[{"address":"0x5cb0686a4475d1f8a6c6e5240579080a4a05b609","blockNumber":87773270,"name":"SwarmDesk","role":"other","txHash":"0x0f2fbbe998a802fa2f0edf041b220be86a8fa70830e0cea1a1937a3421b248f4"},{"address":"0x11947494c0ba91508eb7409648193818c36521fb","blockNumber":87773270,"name":"EndowmentEscrow","role":"other","txHash":"0x0f2fbbe998a802fa2f0edf041b220be86a8fa70830e0cea1a1937a3421b248f4"}],"id":"7ccf4aae-4316-43e3-ac69-570c655c7029","manifestHash":"475870213866d0cccc840f3732ab661de43c4930ecbc7e7e608877ba72127165","status":"live"}],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"9cab6f32-565f-47eb-b993-0e654bac2a6c","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"4c57df66e4c0979ac2246130fb564f0b60d5c4f77be20416cb1873a74ff1c78f","dependsOn":["audit_imported_code"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","tools":[]},"key":"adapt_contract_project","kind":"code","role":"implement","skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","state":"accepted"},{"acceptedSubmissionHash":"8d76692e98a7939685bd4727642d2aa7719fd6c518002fb611231306df4b8288","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"6274dd3321780730652ddf4a82239814a1e7b10db0695d7b4cabe4b225b5ed3e","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"59d8870e6692005cddff05ffd3611e426a5fdad9e7aabaafab7ae617ba21ce15","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","tools":[]},"key":"audit_imported_code","kind":"code","role":"review","skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","state":"accepted"},{"acceptedSubmissionHash":"a7b8ecef40b3c9701a53b0a91d7788f9b3e9178081f0cb5609eea938cae228e2","dependsOn":["adapt_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"cae0ece3a31bd1add4c8f3fe2ffe88c75b42675821a20ea107815bcf7cf9226a","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"bdc54efb630370cd1d6622e51e0d9759795aeba9da3784ee02a4793901a5d315","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"c9478702f33ae912c6577aa36c1d75125684dc668c5a4c139302233ff76cdfe4","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"92b7efeaacf6bebc3b76bac3e4faf3a7f767596870bcb913e489878daeab5270","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","state":"accepted"}],"objective":"BLACKOUT v3.17 L1 on Robinhood Chain (4663). NO SOURCE CHANGES.\nSource: commit e17f0ef7bd7d188949eb4dc91e3eb0540c94cbf3 of identity-md-launches/launch-1544-blackout-swarmdesk-bootstrap-robinhood. Build with the unchanged repo foundry.toml: solc 0.8.26, optimizer 200, cancun, viaIR false, bytecode_hash none.\nDeploy SwarmDesk at index 0 then EndowmentEscrow at index 1 in ONE evm_contracts launch. Resolve the escrow Desk argument as $contract:SwarmDesk from this same launch. Return both addresses, their indices and this single launch number.\nThe Desk takes eight static words. The eighth is the binder 0x6d51cBE774aeAe4dd40bCA2560E9bc2695A0d007: the project wallet (not an IMD protocol address) and the only account that may call bind; any other caller gets Unauthorized. The Desk is bound after L3 with bind(REGISTRY, registryCreationCode, paramsCreationCode, N_A, 1, N_A, 0, N_TOKEN), signed by that wallet: the last word is the recorded L2 launch number, and bind reads LaunchFactory.positionOf(N_TOKEN) (compiled-in 0xa25b…4645) and refuses any registry whose market is not the hook that record names for the registry's token. A market that only echoes desk(), token() and gameConfigHash() cannot bind. Keep the L2 launch number with the L1/L3 outputs for the keeper (wiring.tokenLaunch).\nGAME_CONFIG_HASH: 0x11ed7438974e96ecc962201e9c46422c7bf239d725876863fa25a56c734b20d3.\nExact ordered constructor words and expected creation hashes:\n[0] SwarmDesk [\"0x6f7261636c652e72657175657374406f7261636c652d31000000000000000000\",\"5391989333430298100116863486635657822062725418115979424500284366258177\",\"0x2fc5a57f2c5f7bc083ea8ac5016234f1a0b1c68a514e5d921956cc57948534ef\",\"0xc13efed8438aab53ea052a4507def2dc4ce9856765520dfa28c66daa59cfc11d\",\"0x00e69e4445c7ca7256338293f9f9cea439fd2beb1959d1d43ebec7b14493e2f6\",\"0xc0ae7511b06744cf7ccadc6b60ff9ff96cb7234cf32988850df33324861cc8df\",\"0x11ed7438974e96ecc962201e9c46422c7bf239d725876863fa25a56c734b20d3\",\"0x6d51cBE774aeAe4dd40bCA2560E9bc2695A0d007\"]\nCreation hash: 0x1d8e1afa90ba7a4c436fa2406f52743c97f7e6d9add372516144cadcb0795879\n[1] EndowmentEscrow [\"$contract:SwarmDesk\"]\nCreation hash: 0xe7a48446223ad53d50a9a9372c5552b70fb94e4f03c0f9f45298f7e5d2036368\nNo literal IMD protocol addresses may appear as constructor words. Protocol endpoints are compiled in; allowed platform placeholders and named contract references stay as shown.\nAccepted findings (low/info only, full text in docs/accepted-v317.md; do not change source for them):\n- RewardPool shortfall: repair with a plain token transfer; donate is not the repair path.\n- Exact-input swaps only: V4Market rejects exact-output swaps.\n- spot() bounds: zero, underflowed or above-1e40 prices revert.\n- Fixed oracle signer/endpoints: compiled in, no owner rotation.\n- Answers between job A and job B: stored after L3, executable only once all L4 modules are registered; stream-0 answers before role 1 likewise.\n- Future-block randomness: native L2 block entropy with capture/re-arm rules, not VRF; enhancement attempts lapse to their worst outcome instead of re-arming; grid events re-arm instead of using a precomputable seed.\n- Reserved Params keys: no gameplay effect; proposals may still consume cooldown.\n- M-2 matching twin: only the pinned binder can bind; the binder key could still choose a proven twin.\n- Binder liveness: one-time bind by 0x6d51…d007; a lost key leaves the Desk unbound and the endowment in escrow; the binder cannot bypass any proof.\n- GameRegistry.register prefill by a byte-identical copy: same pinned code and registry; the keeper registers every role immediately and verifies module(role).\n- Season.rollover before finalize: the keeper finalizes, then rolls over weekly; a rollover only moves the pot to later players.\n- FeeRouter.executeSells sweep rollback: repeats on the next success, no value lost.\n- FarmRewards same-epoch vintage back-dating: at most about 54 bps in the player's favour, self-triggered.\n- Deploy-gate tool takes only the JSON plan.\n- Civic.claimWar rounding dust stays in the game.\n- No max-cost bound on openPack/buyTokenPack: bounded by approval or ETH minimum output.\n- Unused minter/caller permissions: every allowed caller is a pinned module of this registry.\n- Dead fields: written, never read.\n- PackSale.buyPacksFor gifting: value only flows in.\n- One-shot escrow: forward runs once to the proven RewardPool, after the whole remainder has landed.\n- Economy._insert 33-tie lock griefing: reverts atomically, no funds at risk.\n- Festival severity band always +15%: no value moves.\nProject: https://playblackout.xyz","parentJobId":null,"planHash":"571ff1976de2b8154acc0dffb1dbebe70620957517db3e6e8f6b570398d60bcc","previousHash":"10ecc9eaa966018d315dcaf8d6e126230d3c9e2875bc027b5147988eeed3a851","projectId":"9cab6f32-565f-47eb-b993-0e654bac2a6c","publication":{"commit":"4667ac59ead67dfd99f96b33b760d8b3835b0349","deliveredAt":"2026-10-13T19:46:51.076Z","repoUrl":"https://github.com/identity-md-launches/launch-1628-blackout-v3-17-l1-robinhood"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"20a45e80e6582155238ad244d1257b618075e05f97fb90e579971da7d3cdf55c","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"4601e6aa9584fbd261293a08c2baea8c3adeb471d9b0c809f6e89ac42f8e3ff9","device":"0630d73f571c3dd5","findings":[],"hash":"4c57df66e4c0979ac2246130fb564f0b60d5c4f77be20416cb1873a74ff1c78f","nodeId":"8b02e9bd-bcdc-43c3-aa82-586f29d4be2e","outcome":"completed","summary":"Completed with production source and build configuration unchanged.\n\n- Reproduced both audit findings and corrected documentation.\n- Added five regression tests; both creation hashes match.\n- `forge build` passes; `forge test`: **320 passed, 0 failed, 6 skipped**.\n- Recorded changes and launch handoff in [ADAPTATION.md](/home/ubuntu/.identitymd/work/9cab6f32-565f-47eb-b993-0e654bac2a6c/8b02e9bd-bcdc-43c3-aa82-586f29d4be2e/ADAPTATION.md).\n\nSwarmDesk remains index **0**, escrow index **1**. Their addresses and shared launch number come from IMD’s subsequent deployment step; no transaction was broadcast.","treeHash":"97c05d0a20a134b065531298359c79d3ed5f19d0","usage":{"cachedInputTokens":2924928,"inputTokens":136972,"model":"gpt-6-astra","outputTokens":18831,"runtime":"codex","turns":8,"wallClockMs":636278}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"56b13350bba65fd7","findings":[{"citation":"resolved","description":"docs/accepted-v317.md (lines 'Answers between job A and job B' and 'Stream-0 answers before role 1') states that event-stream answers authenticated after bind but before role 1 is registered 'stay stored' and only wait for execution. The code does not do that: `_accept` calls `registry.module(1)` unconditionally for stream 0, and `GameRegistry.module` (src/GameRegistry.sol:63) reverts `NotConfigured` for an unregistered role. So the whole `_accept` reverts: nothing is consumed, nothing stored. For a relayed `submit` this is harmless (anyone can re-present the same attestation once role 1 exists, as long as the slot and the 6-hour issuedAt window still hold). For a paid backup it is not: the intake's direct callback (200k stipend) reverts, the `pending[id]` entry stays until `clearExpired`, and `askedSlotPlusOne[stream]` was already set in `askBackup`, so no second backup can be bought for that slot and the IMD paid for the request is spent for nothing. No funds beyond the oracle fee are at risk and the window only exists if `bind` is called before role 1 is registered, so this is informational; the fix is either to make the docs say 'reverts, re-present later' or to defer the epoch comparison to `execute` (where `_event` already tolerates `current` vs `base`).","line":402,"path":"src/SwarmDesk.sol","reproduction":"State: Desk bound to a registry whose role 1 is not yet registered (GameRegistry.module(1) reverts NotConfigured). Input: a validly attester-signed stream-0 attestation for the current slot (values[0] = slot(0), 7 words, chainId/fromBlock/toBlock matching config). Call `desk.submit(a, sig)` -> expected per docs: AnswerStored; actual: revert NotConfigured. Call the intake/delivery callback `onOracleResult(id, a, sig)` with 200k gas -> actual: the callback fails, `consumed[a.requestId]` stays false, `lastAnswer[0].pending` stays false; if `id` came from `askBackup`, `pending[id]` remains and `askedSlotPlusOne[0] == slot+1` blocks a second backup in that slot. Reproduced in test/scratch/StreamZeroBeforeRoleOne.t.sol (BaseTest graph, `vm.mockCallRevert` on `module(1)`; passes, i.e. shows the revert): `forge test --match-path test/scratch/StreamZeroBeforeRoleOne.t.sol`.","severity":"info","snippet":"        if (stream == 0 && uint256(values[1]) != IRewards(registry.module(1)).epoch()) {","title":"Stream-0 answers presented before FarmRewards (role 1) is registered revert instead of being stored, contrary to the accepted-finding text"},{"citation":"resolved","description":"README 'Local checks' says the default checks need no network or environment variables and lists `forge build` followed by `python3 tools/pin_module_code.py --check` and `python3 tools/pin_swarm_code.py --check`. Both tools read artifacts from `out-launch/`, which `forge build` with the unchanged foundry.toml never writes (out = \"out\"). On this checkout both commands abort with FileNotFoundError before comparing any pin, so an adapter following the README as written gets a crash, not a pin verdict. Once `forge build --out out-launch` is run first, both checks pass and all 14 module pins plus the two Desk pins match the current build (verified here). Operational only; no contract behaviour is affected.","line":44,"path":"tools/pin_module_code.py","reproduction":"Fresh clone of commit e17f0ef7bd7d188949eb4dc91e3eb0540c94cbf3; run `forge build` then `python3 tools/pin_module_code.py --check`. Expected (README): 'All fourteen module creation-code pins match both toolchains'. Actual: `FileNotFoundError: [Errno 2] No such file or directory: 'out-launch/RewardPool.sol/RewardPool.json'` (pin_swarm_code.py fails the same way on GameRegistry). After `forge build --out out-launch`, both checks print PASS and SwarmDesk/EndowmentEscrow creation hashes equal the task's 0x1d8e1afa… and 0xe7a48446… .","severity":"info","snippet":"    return {'launch': [creation_hash('out-launch', n) for n in NAMES], 'repo': [creation_hash('out', n) for n in NAMES]}","title":"README default pin checks crash on a fresh checkout because tools expect a second build directory out-launch/"}],"hash":"59d8870e6692005cddff05ffd3611e426a5fdad9e7aabaafab7ae617ba21ce15","nodeId":"d677bfc2-d31d-4ae9-a369-fd21af87e871","outcome":"completed","summary":"Review complete. The findings file is written at the repository root with two informational findings; no defect of low severity or above reproduced in the two contracts this launch deploys.\n\n**Verification against the task statement (all matched)**\n\n- Build with the unchanged foundry.toml succeeds. SwarmDesk creation hash is `0x1d8e1afa…5879`, EndowmentEscrow is `0xe7a48446…6368`, runtime 22226 and 5008 bytes, no DELEGATECALL, CALLCODE or SELFDESTRUCT in either runtime.\n- The policy word decodes to question chain 1, context blocks 26122900 to 26122901, max price 0.5 IMD, heartbeat 200 bps, top bits zero, matching docs/oracle-v37/oracle-config.json. The action word is the string \"oracle.request@oracle-1\".\n- Neither constructor reads external code, so both deploy on an empty chain. Neither contract has an owner, setter, upgrade path, payable constructor or protocol address among its words. The binder word is the project wallet, which FeeRouter also pins as the team address.\n- All fourteen module pins and the two Desk pins match the current build once `out-launch/` exists. The full suite passes: 315 tests, 0 failures, 6 fork tests skipped for lack of an RPC.\n\n**Findings** (both informational, in `.imd-findings.json`)\n\n- **Stream-0 answers before role 1 revert, not store.** The accepted-finding text says such answers \"stay stored\"; in fact `_accept` reverts through `GameRegistry.module(1)`. A relayed answer can be re-presented later, but a paid backup's callback is lost and the slot's single backup is consumed. Confirmed by a scratch test under test/scratch/.\n- **README pin checks crash on a clean clone.** Both pin tools read `out-launch/`, which the default build never writes. Running `forge build --out out-launch` first makes them pass.\n\n**Checked and found sound in the L1 contracts:** the bind proofs (factory, config hash, Params and registry CREATE2 predictions, hook echo plus LaunchFactory record), attestation replay keys, slot and issuedAt freshness, exact answer length checks, the regulator clamps against Params.set's own step and bound rules, every Desk-driven module call that is not wrapped in try/catch (announce, announceCap, unpause, submitPlan all have matching pre-checks), escrow forward proofs and its interplay with RewardPool.fundEndowment.\n\n**Coverage.** Read in full: SwarmDesk, EndowmentEscrow, OracleAttestation, SignatureCheckerCompat, GameRegistry, Params, RewardPool, FeeRouter, Billboards, V4Market, the lib and interface files. Read partially via entry-point inventories: Civic, Season, PackSale, StarterClaim, Enhancement, GridOperator. Not reached within budget: FarmCore, FarmEngine, FarmItems, FarmRewards, Economy, MarketFactory, StandardMarket, StandardAdapter. Not verifiable offline: the live ABI of ProjectFactory.predictContract, ProjectRegistry.isRecorded and LaunchFactory.positionOf on chain 4663, the oracle attester key type, and the IMD floor's OwnerChecks harness, which is not in the tree. The token launch's remainder must equal at least the 200,000,000-token endowment or the reward pool stays unfunded until a plain transfer tops it up, which is an already accepted item.","treeHash":null,"usage":{"cachedInputTokens":1565367,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":30332,"runtime":"claude","turns":33,"wallClockMs":1033488}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ee2cc12e7dfe571a","findings":[{"citation":"resolved","description":"docs/design.md line 39 states \"Paid-account/mythic eligibility is fixed at commitment\", and the Commit struct carries a `mythic` field for that purpose. `resolve` ignores the committed value and overwrites `c.mythic` with the player's level at the moment of each resolve call. The seed is fixed once by the first `captureEntropy`/`resolve` and is public (`commits(id).seed`), and a receipt never expires (`expired` is dead, accepted info 8). A player below level 10 can therefore read every draw of the receipt off-chain: `ItemMath.draw` maps a rarity roll r >= 9970 to Mythic only when `mythic` is true and to Common otherwise. The player resolves the packs whose rolls are ordinary immediately and leaves any pack holding an r >= 9970 roll unresolved until the farm reaches level 10 (five days of age and 2800 XP, reachable by activity alone), then resolves it for a guaranteed Mythic (base hash 800000 vs 10000 for the Common it would otherwise be). This is a free option that only patient or scripted players exercise; it does not move funds but breaks the documented commitment rule and the fairness of the rarity table for everyone who resolves promptly. Minimal fix: set `c.mythic` in `_commit` (or in `_capture` when the seed is fixed) and never reassign it in `resolve`.","line":281,"path":"src/PackSale.sol","reproduction":"State: fixture from test/Base.t.sol (fresh farm for alice, level 1). 1) alice calls PackSale.openPack(1) -> receipt id, commits(id).target = T. 2) Choose/observe the block hash h of block T such that seed = keccak256(abi.encode(h, address(packs), id)) gives r = (uint256(keccak256(abi.encode(seed, 0))) >> 64) % 10000 >= 9970 (0.3% of receipts naturally; the test searches h with vm.setBlockhash). 3) Anyone calls captureEntropy(id): the seed is now fixed. 4a) Resolving now: resolve(id,1) mints item with rarity 0 (Common). 4b) Instead, wait until farm.level(alice) == 10 (test/Base.t.sol `veteran` helper backdates born by 5 days and sets 2800 XP), then resolve(id,1) with the same seed: the minted item has rarity 4 (Mythic). Expected per design: the outcome of a committed pack does not depend on when it is resolved. Actual: identical seed, different rarity. Verified with test/scratch/MythicDefer.t.sol (passes: Common on immediate resolve, Mythic after level 10 on the same receipt).","severity":"low","snippet":"        c.mythic = farm().level(c.player) >= 10;","title":"PackSale.resolve decides Mythic eligibility at resolve time from an already-fixed public seed, not at commitment"}],"hash":"6274dd3321780730652ddf4a82239814a1e7b10db0695d7b4cabe4b225b5ed3e","nodeId":"c80edb74-b46d-40ba-bba2-d25048f2b357","outcome":"completed","summary":"Review complete. The findings file is in place and only the review output and a scratch test were written.\n\n**Outcome**\n\nThe L1 launch pair (SwarmDesk and EndowmentEscrow) holds under the Execution Trace, Periphery and First Principles checks. I found one low-severity defect elsewhere in the game, in pack resolution.\n\n**What I verified for the L1 launch**\n\n- The eight SwarmDesk constructor words decode as intended: question chain 1, context blocks 26122900 to 26122901, max price 0.5 IMD, heartbeat 200 bps, zero top bits, action word `oracle.request@oracle-1`, nonzero binder. No literal IMD protocol address appears.\n- Building with the unchanged foundry.toml reproduces both expected creation hashes exactly.\n- `bind` is binder-only, one-shot, and writes state only after every proof, including the LaunchFactory `positionOf` record check that an echoing market cannot pass.\n- `execute` cannot be bricked by a reverting module. Every call outside a try/catch (Params.set, Civic.announce, Enhancement.announceCap, PackSale.unpause, GridOperator.submitPlan) is pre-guarded by the Desk's clamps and checks, so a stored answer is always executable or cleanly ignored.\n- `askBackup`, `submit`, both oracle callbacks and `clearExpired` match the accepted-findings text. Slot, UUID and delivery-key replay guards all consume before storing.\n- `EndowmentEscrow.forward` proves the bound registry and pinned RewardPool before the single transfer, with the flag set first.\n- ChainClock's 256-block window matches ArbSys's `arbBlockHash` validity range, so every lapse handler is reached only when the hash is truly gone.\n\n**Finding (low)**\n\n`PackSale.resolve` sets the Mythic flag from the player's level at resolve time, although the design states eligibility is fixed at commitment. The seed is fixed and public after the first capture, and receipts never expire. A player below level 10 can inspect the draws, resolve the ordinary packs now, and hold any pack whose roll lands in the Mythic band until level 10, turning a Common into a Mythic. I reproduced this in a scratch test: the same receipt and seed mints rarity 0 when resolved immediately and rarity 4 after the farm is backdated to level 10. Fix is to freeze the flag in `_commit` or at seed capture.\n\n**Coverage**\n\nAll 160 listed entry points have a row. 159 hold, one carries the finding, none unreached. The deepest traces were the Desk, the escrow, the registry and Params periphery, FeeRouter and V4Market value paths, and the FarmCore/FarmRewards settlement ordering. The bucket arithmetic inside FarmRewards commitments was traced for control flow only. It belongs to the invariant pass, and I noted that in its rows.","treeHash":null,"usage":{"cachedInputTokens":1908046,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":49562,"runtime":"claude","turns":41,"wallClockMs":704909}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3bed38612db34f32","findings":[],"hash":"8d76692e98a7939685bd4727642d2aa7719fd6c518002fb611231306df4b8288","nodeId":"8c9b48c5-e3e4-4649-b924-db8b56607dc4","outcome":"completed","summary":"The review is complete. The findings file is written and valid, no source file was touched, and no scratch tests were left behind.\n\n**Result: no reproducible defect found in the economics.** The file `.imd-findings.json` holds an empty findings list and a coverage record answering 163 of the 164 listed entry points plus seven invariant rows.\n\n**What I traced in depth (Economic Security, Invariant, Flow Gap guides):**\n\n- **RewardPool**: balance never drops below reserved plus the locked drip. Reserve is bounded by available, pay decrements reserved before transferring, and the endowment gate only opens once the forwarded principal exceeds ordinary inflows.\n- **FarmRewards**: the per-epoch budget is at most 2.4% of available, so the reserve call cannot fail. The sum of per-farm allocations stays under budget plus redistributed tax, so the dust subtraction cannot underflow. Reserved always equals outstanding pending plus undistributed tax plus unsettled allocations across claim, spend, spendTo, scrap, award and recycle. The committed weight sum equals the epoch's raw hash, so the dust path is reachable.\n- **Settlement envelope**: productive hash is capped by the set-bonus ceiling, and Festival plus district boost reaches at most 1.15 × 1.25, so spent never exceeds allocation and a farm's cursor cannot lock. Lock boost at commit time matches the boost the engine applies.\n- **FeeRouter**: ETH conservation holds across every deposit, route, sell, buy, bounty and withdraw path. The receive hook ignores market ETH during a sell so sale proceeds are not counted twice. Heartbeat cap is pinned at 1 ether by Params bounds, so the cap subtraction cannot underflow.\n- **Season**: pot liability moves with every deposit, payment and rollover. Best, district and lottery shares sum to exactly 100% of a week's pot, and eligibility is frozen at completion.\n- **Civic, Billboards, Economy**: escrow counters match pulled balances on every path, refunds are pull-only, and war payouts never exceed the chests.\n- **V4Market and EndowmentEscrow**: fees are taken from the pool manager with exact delta checks, system buys and sells are bounded by TWAP slippage and batch caps, and the escrow's single exit is gated by the Desk binding and CREATE2 proofs.\n\n**Not reached:** the Desk's bind proof chain itself, which is outside the assigned area. It is marked unreached in the coverage record.\n\n**One lead, not reported as a finding:** the average daily yield that prices packs, lots, wars and billboards is mining divided by active farm count, so many one-item farms dilute it toward the 3000-token floor. The cost of each extra farm is a pack priced off the same average, so I could not show a profitable input within budget. Baseline economic test suites pass with 32 tests.","treeHash":null,"usage":{"cachedInputTokens":1959105,"inputTokens":450,"model":"claude-fable-5-1","outputTokens":45911,"runtime":"claude","turns":33,"wallClockMs":700837}},{"artifacts":[],"attempt":1,"bundleHash":"6fc3c63c550261cac20539d1cad595367ce20094aaba8f38c5ac8e4ad33ac1e5","device":"4dd9389cdce7acfe","findings":[],"hash":"92b7efeaacf6bebc3b76bac3e4faf3a7f767596870bcb913e489878daeab5270","nodeId":"d810469b-1774-457f-9b04-742720d105cf","outcome":"completed","summary":"Added binding failure tests and randomized custody invariants for SwarmDesk and EndowmentEscrow, including transfer failures, reentrancy, expiry, and retries.\n\n`forge build` and tests with the required seed pass. Six opt-in fork tests skipped. All changes are under `test/`; source and configuration remain unchanged.","treeHash":"2fe865c63ed419577ffedf14da9d0d9a8eb3b2e0","usage":{"cachedInputTokens":2330112,"inputTokens":95755,"model":"gpt-6.1-sol","outputTokens":17282,"runtime":"codex","turns":7,"wallClockMs":649292}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"a406deaac63a93b0","findings":[{"citation":"resolved","description":"docs/design.md line 39 states 'Paid-account/mythic eligibility is fixed at commitment' and the Commit struct carries a `mythic` field for that purpose, but `_commit` (line 233) always stores `false` and `resolve` overwrites `c.mythic` with the player's level on every call. The seed is fixed once by the first `_capture` and is public through `commits(id).seed`, and a receipt never expires (`expired` is dead, accepted info 8). ItemMath.draw (src/lib/ItemMath.sol line 29) maps a rarity roll r >= 9970 to Mythic only when `mythic` is true and to Common otherwise. A player below level 10 can therefore read every draw of a receipt off-chain, resolve the packs whose rolls are ordinary at once, and leave any pack holding an r >= 9970 roll unresolved until the farm reaches level 10 (five days of age and 2800 XP, reachable by activity alone), then resolve it for a guaranteed Mythic (base hash 800000 versus 10000 for the Common it would otherwise mint). No funds move and the option only pays on the 0.3% of rolls that are Mythic-eligible, so the impact is a broken documented commitment rule and an unfair rarity table for players who resolve promptly: low. Reproduced by reading `_commit`, `_capture`, `resolve` and `ItemMath.draw`; this is the audit_flow finding, kept at its severity. Minimal fix: set `c.mythic` in `_commit` (or in `_capture` when the seed is fixed) and never reassign it in `resolve`.","line":281,"path":"src/PackSale.sol","reproduction":"State: fixture from test/Base.t.sol, fresh farm for alice (level 1). 1) alice calls PackSale.openPack(1) -> receipt id, commits(id).target = T. 2) Choose the block hash h of block T (vm.setBlockhash in a test) so that seed = keccak256(abi.encode(h, address(packs), id)) gives r = (uint256(keccak256(abi.encode(seed, 0))) >> 64) % 10000 >= 9970. 3) Anyone calls packs.captureEntropy(id): commits(id).seed is now fixed and public. 4a) resolve(id,1) now: the first minted item has rarity 0 (Common) because farm.level(alice) < 10. 4b) Instead warp 5 days and give alice 2800 XP (test/Base.t.sol `veteran` helper), then resolve(id,1) with the same seed: the first minted item has rarity 4 (Mythic). Expected per docs/design.md line 39: the same committed receipt and seed yield the same rarity whenever it is resolved. Actual: identical seed, Common if resolved early, Mythic if deferred.","severity":"low","snippet":"        c.mythic = farm().level(c.player) >= 10;","title":"PackSale.resolve decides Mythic eligibility at resolve time from a fixed public seed instead of at commitment"},{"citation":"resolved","description":"`execute(1, answer)` may be called by anyone and sets `r.pending = false` (line 443) before `_regulate` runs. Inside `_regulate` a key whose one-day `Params.lastChanged` cooldown has not elapsed is skipped with `continue` instead of being deferred, and because the stored answer is one-shot (`pending` is cleared and a second `execute` reverts `InvalidProof` at line 442) the skipped step can never be applied from that answer. The stale-answer paths at lines 444-447 protect the answer by returning before any effect, but the cooldown path does not. A keeper would normally wait until the cooldown passes (the answer stays valid until min(issuedAt + 1 day, expiresAt, slot end), lines 410-413) and then execute; any bystander who calls `execute` first, while the cooldown is still running, removes that choice. Impact is bounded to one regulated step (at most 10% of a bounded Params key) per week per key, hence low. Reproduced by reading `execute` and `_regulate`; this is the audit_permissions low, kept at its severity. Fix preserving the design: in `_regulate`, if any proposed key is inside its cooldown and the answer is still valid, revert (or leave `r.pending` true) so the answer can be re-executed once the cooldown has elapsed, or evaluate the per-key cooldown gate in `execute` before clearing `pending`.","line":489,"path":"src/SwarmDesk.sol","reproduction":"Setup as in test/SwarmDeskV37.t.sol (`testNoopRegulatorAcceptedAndParamsCooldownPreserved` already shows the silent skip): Params was deployed, so `lastChanged(EmissionBps) = T0`. A stream-1 attestation with `v[1] = (1 << 248) | 385` (raise EmissionBps 350 -> 385) is stored via `submit` at T0 + 2 hours with issuedAt = T0 + 2h and expiresAt >= T0 + 1 day + 2h, so `lastAnswer[1].validUntil = T0 + 1 day + 2h` (capped by the slot end). An unrelated EOA immediately calls `desk.execute(1, a.answer)`. Actual: `block.timestamp < lastChanged + 1 days` -> `continue`; `Params.get(EmissionBps)` stays 350, `lastAnswer[1].pending` is false, and a second `execute(1, a.answer)` at T0 + 1 day + 1h reverts `InvalidProof`. Expected: the step is applied at any time in [T0 + 1 day, validUntil), which a keeper calling at T0 + 1 day + 1h would have achieved had nobody executed early.","severity":"low","snippet":"            if (target == old || block.timestamp < params.lastChanged(k) + 1 days) continue;","title":"SwarmDesk.execute is permissionless and consumes a regulator answer before the Params cooldown check, so an early third-party call silently drops the week's parameter step"},{"citation":"resolved","description":"Documented design ('Anyone can donate IMD. No withdrawal exists. One paid backup per stream/slot, after one hour.'), recorded as a trust assumption. `askBackup` has no caller restriction: after one hour into a slot in which no answer has been accepted, any account can make the Desk approve and pay `price` IMD (up to `maxPrice` = 0.5 IMD from the policy word) to the compiled-in intake. The body bytes are public calldata after the keeper's first call. A bystander can therefore buy the backup in every slot in which the heartbeat relay has not landed by minute 60 (four stream-0 slots per day plus one stream-1 slot per week) even when the heartbeat answer would have arrived shortly after; the later heartbeat is then ignored through `acceptedSlotPlusOne` and the backup fee is spent for nothing. There is no withdrawal, so the only loss is the donated IMD oracle budget, bounded by maxPrice per slot. No change is required if the requester accepts this; otherwise restrict `askBackup` to an allow-list or require the caller to pay the fee. Reproduced by reading; this is the audit_permissions info, kept.","line":309,"path":"src/SwarmDesk.sol","reproduction":"After bind, with 10 IMD transferred to the Desk and an intake whose priceOf returns 0.5 IMD (test/SwarmDeskV37.t.sol setUp): warp to `slot(0) * 6 hours + 1 hour`; from an unrelated EOA call `desk.askBackup(0, body)` where `keccak256(body) == oracleConfig().bodies[0]`. Actual: the Desk's IMD balance falls by 0.5 IMD and `askedSlotPlusOne(0) == slot + 1`; repeating in each slot spends 2 IMD per day. Expected under a keeper-only model: `Unauthorized`.","severity":"info","snippet":"    function askBackup(uint8 stream, bytes calldata body) external nonReentrant returns (bytes32 id) {","title":"SwarmDesk.askBackup lets any caller spend the Desk's IMD on the paid backup once per stream and slot (bounded griefing of the donated oracle budget)"},{"citation":"resolved","description":"Access-control inventory note, same class as accepted info 7 for FarmItems. `Season.recordSpend` accepts calls from `registry.module(7)` (GridOperator), but GridOperator never calls `recordSpend`; lobby spend is recorded by FarmCore.lobby (src/FarmCore.sol line 502) before `grid().tokenLobby`. The extra allowed caller is a pinned module of the same registry, so no outside authority exists; it only widens the surface a future GridOperator pin would inherit. No change needed for this launch. Reproduced by grep and reading; this is the audit_permissions info, kept.","line":153,"path":"src/Season.sol","reproduction":"`grep -n recordSpend src/GridOperator.sol` returns nothing. In the test/Base.t.sol fixture, `vm.prank(address(grid)); season.recordSpend(alice, 1 ether, true)` succeeds and increments `spend[w][alice]` by 1 ether although no GridOperator code path performs that call. Expected for a minimal permission set: only FarmCore is an allowed caller.","severity":"info","snippet":"        if (msg.sender != address(core()) && msg.sender != grid()) revert Unauthorized();","title":"Season.recordSpend grants GridOperator a write permission that no GridOperator code path uses"},{"citation":"resolved","description":"The reservation at line 188 (`old.budget = old.mining * 159 / 100`) and the per-farm allocation at line 432 (`maxGross` at MAX_OUTPUT_BPS = 15000, plus 5% referral, plus the farm's share of `e.redis`) are consistent with each other: the sum of allocations over all farms is at most 1.575 * mining + redis, and budget + redis = 1.59 * mining + redis covers it, with the surplus returned by `_recycle` as dust once `settledHash == raw`. The comment still describes an older 110%/116.5% envelope (Green 10% only), which no longer matches MAX_OUTPUT_BPS (150%), the Festival 15% event bonus or the Civic outputBonus of up to 25% (grantDistrictBoost 1500 + war 1000). Nothing is mispriced; the comment is the only inconsistency. I also traced the envelope: productive <= allocationHash (hi params) * 1.15 * 1.25 = 1.4375 * weight < 1.5 * weight, so the `spent > o.allocation` revert at line 446 is unreachable; `activeBoost` is frozen by `_roll` before a lock exists and cannot exceed the boost the weight was committed with. Reproduced by reading; this is the audit_math info, kept.","line":187,"path":"src/FarmRewards.sol","reproduction":"State: an epoch closes with raw = 1e24 and mining = 1e21. `advanceEpoch()` reserves budget = 1e21 * 159 / 100 = 1.59e21. With one farm holding all weight at maximum boosts (Festival event, civic 2500 bps): gross <= mulDiv(rewardPerHash, 1.4375e24, 1e27) = 1.4375e21, allocation = 1.5e21 + 0.075e21 = 1.575e21 <= 1.59e21. Expected per the comment: 1.165e21 reserved; actual: 1.59e21 reserved and up to 1.575e21 allocated, dust = budget + redis - allocated recycled. Fix: update the comment to '150% max output + 5% referral = 157.5%, reserved at 159%'.","severity":"info","snippet":"                // 110% Green gross + 5% referral + 1% season = 116.5% maximum, before tariff.","title":"FarmRewards budget comment describes a 116.5% envelope while the code reserves 159% of mining against a 157.5% (plus redistribution) allocation"}],"hash":"a7b8ecef40b3c9701a53b0a91d7788f9b3e9178081f0cb5609eea938cae228e2","nodeId":"b3d11032-ed43-4592-951e-ae15ab9f7ff0","outcome":"completed","summary":"The findings file is valid, all five snippets match the tree line for line, and the coverage record answers all 157 listed entry points plus two invariant rows.\n\n**Outcome:** the review of BLACKOUT v3.17 L1 is written to `.imd-findings.json`. It keeps five findings, none above low, and nothing blocks the launch.\n\n**What I verified for the L1 pair itself**\n\n- The compiled creation hashes for SwarmDesk and EndowmentEscrow equal the two the task expects, and both runtimes are under the EIP-170 limit.\n- The pinned GameRegistry, Params and RewardPool creation-code hashes inside SwarmCode and ModuleCode equal the current build, so bind and forward can succeed against this tree.\n- Neither constructor calls another contract, so the empty-chain rehearsal passes. The L1 launch, binding-failure, custody, escrow and desk test suites all pass.\n- The policy word decodes to Ethereum as the question chain with a context window at blocks 26122900 to 26122901, which exist on chain 1, a 0.5 IMD backup price cap and a 200 bps heartbeat.\n- launch.json has only the three schema keys, two unique contracts, the eight static Desk words in order, the backward escrow reference, and no IMD protocol address literal.\n\n**Specialist findings, all reproduced by tracing the code and kept at their severity**\n\n1. Low. PackSale.resolve sets Mythic eligibility from the player's level at resolve time instead of at commitment, so a sub-level-10 player can read the fixed public seed and defer a Mythic-eligible roll until level 10.\n2. Low. SwarmDesk.execute is permissionless and clears the stored answer before the Params cooldown check, so an early third-party call silently drops that week's parameter step.\n3. Info. askBackup lets anyone spend the Desk's donated IMD once per slot. Documented design, recorded as a trust assumption.\n4. Info. Season.recordSpend allows GridOperator as a caller that never calls it.\n5. Info. The FarmRewards budget comment describes a stale 116.5% envelope. The code's 159% reservation covers the actual 157.5% plus redistribution allocation, which I traced end to end.\n\nNo duplicates existed across specialists, and my own pass over every module found nothing further. The verdict rows for the four entry points the specialists could not verify, SwarmDesk.bind, GameRegistry.register, MarketFactory.deploy and the StandardMarket and StandardAdapter paths, are answered as holds with the checks I traced. No files other than the findings file were changed.","treeHash":null,"usage":{"cachedInputTokens":1477447,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":37450,"runtime":"claude","turns":37,"wallClockMs":608465}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"f768e94767a9dde3","findings":[{"citation":"resolved","description":"Asymmetry / access x timing. `execute(1, answer)` may be called by anyone (by design) and sets `r.pending = false` (src/SwarmDesk.sol:443) before `_regulate` runs. Inside `_regulate` a key whose 1-day `Params.lastChanged` cooldown has not elapsed is skipped with `continue` (line 489) instead of being deferred, and because the answer is one-shot the skipped step can never be applied from that answer. The stored answer stays valid until `min(issuedAt + 1 day, slot end)` (lines 410-413), so a keeper would normally wait until the cooldown passes and then execute; a bystander who calls `execute` first, while the cooldown is still running, removes that choice. The early-return paths for stale answers (lines 444-447) protect the answer; the cooldown path does not. Impact is bounded to one regulated step (at most 10% of a bounded Params key) per week per key, so low. Fix that preserves the design: in `_regulate`, if any proposed key is inside its cooldown and the answer is still valid, revert (or leave `r.pending` true) instead of `continue`, so the answer can be re-executed once the cooldown has elapsed; or compute the per-key cooldown gate in `execute` before clearing `pending`.","line":489,"path":"src/SwarmDesk.sol","reproduction":"Setup as in test/SwarmDeskV37.t.sol (`testNoopRegulatorAcceptedAndParamsCooldownPreserved` already shows the silent skip): Params was deployed (or `set` last ran for EmissionBps) at time T0. Stream-1 answer `v[1] = (1 << 248) | 385` (raise EmissionBps 350 -> 385) is stored via `submit`/`onOracleResult` at T0 + 2 hours with `issuedAt = T0 + 2h`, `expiresAt = T0 + 8h` (validUntil = T0 + 8h). Attacker (any EOA) immediately calls `desk.execute(1, a.answer)`. Actual: `block.timestamp < lastChanged + 1 days` -> `continue`; `Params.get(EmissionBps)` stays 350, `lastAnswer[1].pending` is false, and a second `execute` reverts `InvalidProof`. Expected (keeper behaviour): wait to T0 + 1 day (< validUntil when the answer was issued late in the previous cooldown window, e.g. previous week's answer executed at its slot end and this week's issued at slot start) and apply 385. Concrete week-to-week instance: week N answer executed at slot end E (lastChanged = E - 1 minute); week N+1 answer issued at E + 1h, validUntil = E + 25h; attacker executes at E + 1h -> step dropped; keeper could have applied it anywhere in [E + 24h - 1min, E + 25h).","severity":"low","snippet":"            if (target == old || block.timestamp < params.lastChanged(k) + 1 days) continue;","title":"SwarmDesk.execute is permissionless and consumes the regulator answer before the Params cooldown check, so a third party can drop a week's parameter step by executing early"},{"citation":"resolved","description":"Trust gap (access x economics), documented design, reported for the record. `askBackup` has no caller restriction: after one hour into a slot in which no answer has been accepted, any account can make the Desk approve and pay `price` IMD (up to `maxPrice` = 0.5 IMD per the launch policy word) to the compiled-in intake. The body bytes become public calldata after the keeper's first call. A bystander can therefore buy the backup in every slot in which the heartbeat relay has not yet landed by minute 60 (4 stream-0 slots per day plus 1 stream-1 slot per week), even when the heartbeat answer would have arrived shortly after; the later heartbeat is then ignored (`acceptedSlotPlusOne`) and the backup fee is spent for nothing. There is no withdrawal, so the only loss is the donated IMD oracle budget, bounded by maxPrice per slot. No fix is required if the requester accepts this; otherwise restrict `askBackup` to a keeper allow-list or require the caller to pay the fee.","line":309,"path":"src/SwarmDesk.sol","reproduction":"After bind, with `token.transfer(desk, 10 ether)` of IMD and intake price 0.5 IMD (test/SwarmDeskV37.t.sol setUp): warp to `slot(0) * 6 hours + 1 hour`; from an unrelated EOA call `desk.askBackup(0, body)` where `keccak256(body) == oracleConfig().bodies[0]`. Actual: the Desk's IMD balance falls by 0.5 IMD and `askedSlotPlusOne[0] == slot+1`; repeating each slot drains 2 IMD per day. Expected under a keeper-only model: `Unauthorized`.","severity":"info","snippet":"    function askBackup(uint8 stream, bytes calldata body) external nonReentrant returns (bytes32 id) {","title":"SwarmDesk.askBackup lets any caller spend the Desk's IMD on a paid backup once per stream/slot (bounded griefing of the oracle budget)"},{"citation":"resolved","description":"Access-control inventory note (same class as accepted info 7 for FarmItems). `Season.recordSpend` accepts calls from `registry.module(7)` (GridOperator), but GridOperator never calls `recordSpend`; lobby spend is recorded by FarmCore.lobby (src/FarmCore.sol:502) before `grid().tokenLobby`. The extra allowed caller is a pinned module of the same registry, so no outside authority exists; it only widens the surface that a future GridOperator pin would inherit. No change needed for this launch.","line":153,"path":"src/Season.sol","reproduction":"grep -n 'recordSpend' src/GridOperator.sol returns nothing; `vm.prank(address(grid)); season.recordSpend(p, 1 ether, true)` succeeds and increments `spend[w][p]` although no GridOperator code path performs that call.","severity":"info","snippet":"        if (msg.sender != address(core()) && msg.sender != grid()) revert Unauthorized();","title":"Season.recordSpend grants GridOperator a write permission that no GridOperator path uses"}],"hash":"bdc54efb630370cd1d6622e51e0d9759795aeba9da3784ee02a4793901a5d315","nodeId":"cf2318f6-7ecb-4a13-b5e0-1af2a7f423a7","outcome":"completed","summary":"The review is complete and `.imd-findings.json` is written at the repository root. No tracked file was changed.\n\n**Outcome:** the L1 pair's permission model holds. SwarmDesk.bind is restricted to the pinned binder and every CREATE2, commitment, Params-back-pointer and LaunchFactory record proof applies to the binder too. EndowmentEscrow.forward can only pay the pinned RewardPool of the registry the Desk bound, and it cannot run before the L2 remainder has landed, because binding requires L3. The constructor words decode consistently with the brief, and the existing L1, Desk, escrow and hook-binding suites pass.\n\n**Findings written (3, none above low):**\n\n- **Low, SwarmDesk.execute at line 489.** Anyone may execute a stored regulator answer, and the one-shot `pending` flag is cleared before the Params cooldown check. A key still inside its 1-day cooldown is skipped with `continue`, so a bystander who executes early drops that week's parameter step, which the keeper could have applied later inside the answer's validity window. Bounded to one 10% step per key per week. The existing cooldown test shows the silent skip.\n- **Info, SwarmDesk.askBackup at line 309.** Permissionless paid backup lets any caller spend up to the 0.5 IMD max price per stream/slot from the Desk's donated balance. Documented design, bounded, recorded as a trust-gap note.\n- **Info, Season.recordSpend at line 153.** GridOperator is an allowed caller but never calls it. Same class as the accepted unused-permission item.\n\n**Coverage:** all 157 listed entry points have a row, plus three invariant rows. Each is `holds` except the three marked `finding`. No row is `unreached`.\n\n**Not done:** no scratch proof test was written, since no finding reached high severity and proofs are only required there.","treeHash":null,"usage":{"cachedInputTokens":2979762,"inputTokens":546,"model":"claude-fable-5-1","outputTokens":55055,"runtime":"claude","turns":60,"wallClockMs":773011}},{"artifacts":[],"attempt":1,"bundleHash":"23718dee0ff20f24a5c29a010e44e474f685f2089463cbb9871b5132d3a55316","device":"dedd4428da8fa41e","findings":[],"hash":"c9478702f33ae912c6577aa36c1d75125684dc668c5a4c139302233ff76cdfe4","nodeId":"7cf81021-ada3-4d82-b352-d264c0d75953","outcome":"completed","summary":"I wrote `launch.json`, and it's the only file changed. It is one `evm_contracts` launch on Robinhood Chain (4663) with two contracts:\n\n- **Index 0: `SwarmDesk`**, with the eight constructor words exactly as the brief lists them. The last one is the binder wallet `0x6d51cBE774aeAe4dd40bCA2560E9bc2695A0d007`.\n- **Index 1: `EndowmentEscrow`**, with its one argument set to `$contract:SwarmDesk`, so it points at the Desk deployed in this same launch.\n\nNo IMD protocol address is used as a constructor word.\n\n**Checks:**\n- `forge build` succeeded with the repo's unchanged `foundry.toml`.\n- The compiled creation bytecode hashes match the brief: `0x1d8e1afa…5879` for SwarmDesk and `0xe7a48446…6368` for EndowmentEscrow. These are hashes of the creation code without constructor arguments, which is how the brief's values line up.\n- `forge test`: 320 passed, 0 failed, 6 skipped.\n\n**For the keeper:** the notes field records the L1 deployment, the later `bind` call by the binder wallet with `N_TOKEN` as its last argument, and the reminder to keep the L2 launch number alongside the L1/L3 outputs as `wiring.tokenLaunch`. The two addresses and this launch number don't exist until the launch is deployed, so they aren't in the file.","treeHash":"c912a76610fde8b9509d898a019f4c7a195305dd","usage":{"cachedInputTokens":153134,"inputTokens":10,"model":"claude-opus-5-5","outputTokens":2688,"runtime":"claude","turns":5,"wallClockMs":489126}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"45aa937328087de3","findings":[{"citation":"resolved","description":"The reservation at line 188 and the per-farm allocation at line 432 (maxGross at MAX_OUTPUT_BPS = 15000, plus 5% referral, plus the farm's share of e.redis) are consistent with each other: the sum of allocations over all farms is at most 1.575 * mining + redis, and budget + redis = 1.59 * mining + redis covers it, with the ~1.5% surplus returned as dust by _recycle once settledHash == raw. The comment above the reservation still describes an older 110%/116.5% envelope (Green 10% only), which no longer matches MAX_OUTPUT_BPS (150%), the Festival 15% event bonus, or the Civic outputBonus of up to 25% (grantDistrictBoost 1500 + war 1000). Nothing is mispriced; the comment is the only inconsistency. I traced the envelope end to end: productive <= allocationHash(hi params) * 1.15 * 1.25 = 1.4375 * weight < 1.5 * weight, so the spent > allocation revert at line 446 is unreachable, including with lock boosts (activeBoost is frozen by _roll inside the first syncFor before the lock exists, so it can never exceed the boost the weight was committed with).","line":187,"path":"src/FarmRewards.sol","reproduction":"State: epoch closes with raw = 1e24, mining = 1e21 (available 1e24 * emission 350 * 21600 / (40000*21600) ... any value). Call FarmRewards.advanceEpoch(): budget reserved = 1e21*159/100 = 1.59e21. With one farm holding all weight at the maximum boosts (Festival event, civic 2500 bps): gross <= mulDiv(rph, 1.4375e24, 1e27) ~= 1.4375e21, allocation = 1.5e21 + 0.075e21 = 1.575e21 <= 1.59e21. Expected per comment: 1.165e21 reserved; actual: 1.59e21 reserved and up to 1.575e21 allocated. No value is lost: dust = budget + redis - allocated is recycled. Fix: update the comment to '150% max output + 5% referral = 157.5%, reserved at 159%'.","severity":"info","snippet":"                // 110% Green gross + 5% referral + 1% season = 116.5% maximum, before tariff.\n                old.budget = old.mining * 159 / 100;","title":"FarmRewards budget comment states a 116.5% envelope while the code reserves 159% of mining against a 157.5% (plus redistribution) allocation"}],"hash":"cae0ece3a31bd1add4c8f3fe2ffe88c75b42675821a20ea107815bcf7cf9226a","nodeId":"a1199183-d7ad-44e8-8fe4-9354a3a6ff56","outcome":"completed","summary":"The review is complete and the findings file is written. No source files were changed.\n\n**Outcome.** The math in the assigned area holds. I found no reproducible precision, boundary or numerical-gap defect that moves value or bricks state. The file `.imd-findings.json` holds one info-level finding and a coverage row for all 157 listed entry points.\n\n**What I traced and confirmed (Math Precision, Boundary, Numerical Gap guides):**\n- **Reward envelope.** The per-epoch reservation of 159% of mining covers the summed allocations of 157.5% plus redistribution. Gross, referral and redistribution are each monotone in a productive hash that cannot exceed 1.4375 times committed weight (Festival 15% times Civic 25%), so the `spent > allocation` revert in `FarmRewards._reward` is unreachable. Lock boosts cancel because the active loadout is rolled inside the first `syncFor` before the lock exists.\n- **Vintage ring.** The 32-slot ring spans at least 8 days while tax matures at 7, so a young vintage can never be evicted to matured early, including out-of-order referral credits.\n- **Pool accounting.** Reserved always equals credited pending plus prizes plus scrap allowance. Dust is recycled only when every farm has settled.\n- **AMM math.** The spot price cap of 1e40 keeps the inverse accumulator at or above 1e20, so the TWAP division cannot hit zero. The 32-minute observation ring covers the 30-minute lookback. Sell fee is capped at 1500 bps. Router splits cannot underflow.\n- **Season, Civic, Grid, PackSale.** Pot shares sum to 100% with floor rounding. District claims always have at least one eligible payer. War cap subtraction is bounded. Grid stability guards both divisors. The pack price curve clamps the exponent before `wadExp`.\n- **Repair pricing.** The formula matches the tests, which define RepairHours as 6 hours of item yield per 10% restored.\n\n**Reported finding.** One info item: the comment above the budget reservation in FarmRewards still describes an older 116.5% envelope. The code and the allocation are consistent with each other; only the comment is stale.\n\n**Not reached.** Fourteen entry points outside the math area are marked unreached: the CREATE2 proof paths in `GameRegistry.register`, `MarketFactory.deploy` and `SwarmDesk.bind`, and the reference StandardMarket and StandardAdapter variants.","treeHash":null,"usage":{"cachedInputTokens":2518935,"inputTokens":610,"model":"claude-fable-5-1","outputTokens":56129,"runtime":"claude","turns":30,"wallClockMs":830433}}],"verification":[{"checks":[{"durationMs":31092,"exitCode":0,"name":"build","output":"Compiling 198 files with Solc 0.8.26\nSolc 0.8.26 finished in 30.92s\nCompiler run successful with warnings:\nWarning (2519): This declaration shadows an existing declaration.\n  --> src/lib/EconomyMath.sol:17:48:\n   |\n17 |         returns (uint256 chance, uint256 burn, uint256 bonus, uint256 daysWad)\n   |                                                ^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n  --> src/lib/EconomyMath.sol:44:5:\n   |\n44 |     function bonus(uint256 level) internal pure returns (uint256 b) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (8760): This declaration has the same name as another declaration.\n   --> src/V4Market.sol:291:22:\n    |\n291 |     function _record(bool sell, uint256 amount) private {\n    |                      ^^^^^^^^^\nNote: The other declaration is here:\n   --> src/V4Market.sol:482:5:\n    |\n482 |     function sell(uint256 amount, uint256 minOut, address recipient) external nonReentrant returns (uint256 received) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (8760): This declaration has the same name as another declaration.\n  --> test/mocks/MockSwarmIntake.sol:26:9:\n   |\n26 |         bytes4 failure,\n   |         ^^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> test/mocks/MockSwarmIntake.sol:44:5:\n   |\n44 |     function failure(bytes32 id, uint8 status, bytes32 reason) external returns (bool) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2072): Unused local variable.\n  --> test/EndowmentEscrowV38.t.sol:28:9:\n   |\n28 |         LocalApplicationFactory f = LocalApplicationFactory(address(d.registry.factory()));\n   |         ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> test/EndowmentEscrowV38.t.sol:121:82:\n    |\n121 |     function _registryArgs(address gameToken, address params, uint256 endowment, address factory)\n    |                                                                                  ^^^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/Events.t.sol:213:9:\n    |\n213 |         uint256 price = d.packs.quote(112);\n    |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n --> test/Gas.t.sol:9:9:\n  |\n9 |         uint256 price = d.packs.price();\n  |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Gas.t.sol:75:9:\n   |\n75 |         uint256 q = d.packs.quote(112);\n   |         ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Invariants.t.sol:56:9:\n   |\n56 |         uint256 price = d.packs.price();\n   |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Items.t.sol:76:9:\n   |\n76 |         uint256 cost = d.packs.quote(112);\n   |         ^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/Items.t.sol:106:9:\n    |\n106 |         uint256 q = d.packs.quote(16);\n    |         ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/LazyAccounting.t.sol:186:13:\n    |\n186 |             uint256 quote = d.packs.quote(112);\n    |             ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/LazyAccounting.t.sol:421:9:\n    |\n421 |         uint256 quote = d.packs.quote(112);\n    |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Packs.t.sol:37:9:\n   |\n37 |         uint256 quote = d.packs.quote(200);\n   |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Packs.t.sol:64:9:\n   |\n64 |         uint256 q = d.packs.quote(6);\n   |         ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Pause.t.sol:35:9:\n   |\n35 |         uint256 q = d.packs.quote(1);\n   |         ^^^^^^^^^\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n  --> test/Registry.t.sol:49:21:\n   |\n49 |     function _fresh(LocalApplicationFactory f) private returns (GameRegistry) {\n   |                     ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Regression.t.sol:73:9:\n   |\n73 |         uint256 previous = d.items.data(id).durability;\n   |         ^^^^^^^^^^^^^^^^\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> test/SwarmDeskV37.t.sol:485:65:\n    |\n485 |     function _registryArgs(address params, bytes32 starterRoot, address factory) private view returns (bytes memory) {\n    |                                                                 ^^^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/V33.t.sol:254:13:\n    |\n254 |             uint256 q = d.packs.quote(16);\n    |             ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/V33.t.sol:431:9:\n    |\n431 |         uint256 price = d.packs.price();\n    |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/V34.t.sol:78:9:\n   |\n78 |         uint256 q = d.packs.price();\n   |         ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/V39.t.sol:184:9:\n    |\n184 |         LocalApplicationFactory f = LocalApplicationFactory(address(d.registry.factory()));\n    |         ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> src/FarmRewards.sol:149:5:\n    |\n149 |     function ready() public view returns (bool) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to view\n   --> test/Base.t.sol:106:5:\n    |\n106 |     function oracleFixture() internal returns (SwarmDesk.OracleConfig memory o) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to view\n   --> test/AuditV315.t.sol:187:5:\n    |\n187 |     function testFixtureDeskBoundAgainstItsTokenLaunchRecord() public {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/fork/RehearsalV311.t.sol:224:5:\n    |\n224 |     function _oracle() internal view returns (SwarmDesk.OracleConfig memory o) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/fork/RehearsalV311.t.sol:283:5:\n    |\n283 |     function _mineHookSalt(bytes memory initCode) internal view returns (bytes32 salt, address hook) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":42591,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/RobinhoodFork.t.sol:RobinhoodForkTest\n[SKIP] testForkArbSysAndHistoricalHash() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 183.90µs (68.45µs CPU time)\n\nRan 5 tests for test/fork/RehearsalV311.t.sol:RehearsalV311Test\n[SKIP] testRehearsalAttestedAnswerChangesPlanWithinBand() (gas: 0)\n[SKIP] testRehearsalGasPerLaunchUnderPlatformCeiling() (gas: 0)\n[SKIP] testRehearsalKeeperPassAdvancesEpochsRevealsEntropyAndClaimFeesPaysTeam() (gas: 0)\n[SKIP] testRehearsalLaunchTaxThenOnePercentAndSurcharge() (gas: 0)\n[SKIP] testRehearsalPacksOpenOneHourAfterLaunch() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 652.35µs (242.45µs CPU time)\n\nRan 1 test for test/WarReviewV35.t.sol:IndependentWarReview\n[PASS] testWarWinnerCannotChangeAfterDeadline() (gas: 5734360)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.35ms (1.17ms CPU time)\n\nRan 1 test for test/YieldFloorReviewV35.t.sol:IndependentYieldFloorReview\n[PASS] testFirstEpochItemQuotesKeepNonzeroFloorAtCorrectScale() (gas: 673277)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 765.56µs (694.71µs CPU time)\n\nRan 1 test for test/DeployGateV314.t.sol:DeployGateV314Test\n[PASS] testAllLaunchConstructorsWorkWithNoProtocolCode() (gas: 47862067)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 15.34ms (15.24ms CPU time)\n\nRan 3 tests for test/StandardAdapter.t.sol:StandardAdapterTest\n[PASS] testExistingHookKeyPreservedAndNoExtraFee() (gas: 330662)\n[PASS] testRequiresThirtyMinutesFreshOracleAndAuthorizedCallback() (gas: 198351)\n[PASS] testSettlementSlippageFailurePreservesCredits() (gas: 240594)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 14.34ms (1.57ms CPU time)\n\nRan 5 tests for test/Registry.t.sol:RegistryTest\n[PASS] testAllModulePinsMatchExactPinnedCompilerArtifacts() (gas: 1068880)\n[PASS] testAuthenticatedEnrollmentRejectsUncreatedWrongCodeAndWrongRegistry() (gas: 2930598)\n[PASS] testConstructorAcceptsEmptyGraphWithoutExternalCalls() (gas: 13657)\n[PASS] testCounterfeitRuntimeAtAnotherFactoryCannotEnroll() (gas: 1542191)\n[PASS] testCounterfeitRuntimeWithPoisonedCreditCannotEnroll() (gas: 5876476)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 24.35ms (6.55ms CPU time)\n\nRan 1 test for test/PredictionV34.t.sol:PredictionV34Test\n[PASS] testFullGraphPredictsPoolBeforeRegistryDeployment() (gas: 4162727)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 26.58ms (2.93ms CPU time)\n\nRan 6 tests for test/CivicV35.t.sol:CivicV35Test\n[PASS] testBillboardsBidRefundTextRulesAndPoolOnly() (gas: 945608)\n[PASS] testBlackMarketDescendingLimitedAndPause() (gas: 3828638)\n[PASS] testCollapseSuccessAndSingleOutageFailure() (gas: 810762)\n[PASS] testDormantDisabledAndNoticeOnce() (gas: 303076)\n[PASS] testOnceSeasonBoostBoundsAndSnapshot() (gas: 1722528)\n[PASS] testWarFreezeScoresConservationAndPayoutOnlyOnce() (gas: 1365382)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 24.69ms (14.57ms CPU time)\n\nRan 5 tests for test/AuditV315.t.sol:AuditV315Test\n[PASS] testAttackerLaunchRecordNamesAnotherTokenAndIsRefused() (gas: 10743754)\n[PASS] testFakeMarketEchoingDeskTokenAndHashCannotBind() (gas: 6952035)\n[PASS] testFixtureDeskBoundAgainstItsTokenLaunchRecord() (gas: 58275)\n[PASS] testRealHookRecordedByTheLaunchFactoryBinds() (gas: 12051879)\n[PASS] testRecordWithOtherHookOrOtherPairCurrencyIsRefused() (gas: 6245556)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 25.92ms (13.27ms CPU time)\n\nRan 2 tests for test/V310.t.sol:ToolchainPinsV310Test\n[PASS] testEveryModuleOfThisBuildMatchesOneToolchainPin() (gas: 168471)\n[PASS] testPinsAreOneToolchainAndRejectUnknownCode() (gas: 164239)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.71ms (1.40ms CPU time)\n\nRan 3 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] testConstructorRejectsMissingInputsAndDoesNotCallExternalContracts() (gas: 3994)\n[PASS] testForeignCallerDoesNotGetAnyAuthority() (gas: 43053059)\n[PASS] testImmutableGraphAndEip170Sizes() (gas: 187323)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 27.20ms (9.14ms CPU time)\n\nRan 5 tests for test/ReviewV34.t.sol:ReviewV34Test\n[PASS] testCanonicalCompetingRegistryCannotTakeOverBinding() (gas: 9443175)\n[PASS] testDustBuyCannotConsumeGlobalBuyInterval() (gas: 336156)\n[PASS] testLateGreenEntrySettlesWithinReservedEnvelope() (gas: 4441470)\n[PASS] testMeaningfulSmallBuyCanUseLessThanMaximumBatch() (gas: 263646)\n[PASS] testSameConfigurationAtUncommittedCoordinatesCannotBind() (gas: 9529723)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 32.85ms (19.96ms CPU time)\n\nRan 7 tests for test/V33.t.sol:LaunchProtectionTest\n[PASS] testBuyTaxHasImmutableSteps() (gas: 97524)\n[PASS] testLaunchTaxChargedAndRoutedEntirelyToPool() (gas: 227992)\n[PASS] testNoBuySizeLimitAtAnyLaunchStep() (gas: 1690997)\n[PASS] testNormalBuyAfterDecayHasNoLaunchTax() (gas: 1479403)\n[PASS] testSellsPayNormalFeeDuringLaunch() (gas: 339655)\n[PASS] testSnipersSplittingBuysStillPayTheCurve() (gas: 655730)\n[PASS] testViewsBeforeInitialization() (gas: 4727264)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 29.36ms (5.84ms CPU time)\n\nRan 8 tests for test/TwinCaptureV312.t.sol:TwinCaptureV312Test\n[PASS] testBinderChoosingTwinOrphansHonestGame() (gas: 12068523)\n[PASS] testBinderChosenTwinCannotPayAttacker() (gas: 12034732)\n[PASS] testEOAMarketCannotBind() (gas: 5759282)\n[PASS] testHonestBindThenForwardReachesHonestPool() (gas: 6532903)\n[PASS] testHookWithForeignConfigurationCannotBind() (gas: 5801492)\n[PASS] testTwinCannotWinTheBindRace() (gas: 13565631)\n[PASS] testTwinWithForeignMarketCannotBind() (gas: 12270581)\n[PASS] testTwinWithForeignTokenCannotBind() (gas: 12441654)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 38.14ms (23.60ms CPU time)\n\nRan 6 tests for test/EndowmentEscrowV38.t.sol:EndowmentEscrowV38Test\n[PASS] testConstructorRejectsMissingInputs() (gas: 3911)\n[PASS] testForwardRejectsBadProofs() (gas: 2647974)\n[PASS] testForwardRequiresBalance() (gas: 748474)\n[PASS] testForwardSendsWholeBalanceOnceToAuthenticatedPoolAndFundsEndowment() (gas: 1702540)\n[PASS] testForwardWithRealEndowmentActivatesDrip() (gas: 12904786)\n[PASS] testTwinWithForeignTokenCannotDrainEscrow() (gas: 12918283)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 48.42ms (17.32ms CPU time)\n\nRan 8 tests for test/PhasedReleaseV36.t.sol:PhasedReleaseV36Test\n[PASS] testBillboardsDisabledThenEnabled() (gas: 414524)\n[PASS] testEnableIsNoticedOnceNeverOffAndSwarmOnly() (gas: 355991)\n[PASS] testEnhancementDisabledThenEnabledOnce() (gas: 1098908)\n[PASS] testEverythingDeploysDisabledAndCoreStillWorks() (gas: 8179262)\n[PASS] testFuzzUnannouncedFeatureCannotBeEnabled(uint256) (runs: 256, μ: 30159, ~: 30004)\n[PASS] testLocksStakeAndLobbyDisabledThenEnabled() (gas: 2861203)\n[PASS] testPotDisabledFollowsV34RoutingThenEnabled() (gas: 455827)\n[PASS] testReservedEventsDisabledThenEnabled() (gas: 557745)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 49.43ms (39.88ms CPU time)\n\nRan 8 tests for test/V39.t.sol:V39Test\n[PASS] testBaseDepositsAreEntirelyRewardEth() (gas: 190166)\n[PASS] testGridAcceptsSeverityFromThreeThousandAndRejectsBelow() (gas: 2948508)\n[PASS] testHookAddsExactlyOnePercentOnBuysAndSellsAfterLaunchWindow() (gas: 2180219)\n[PASS] testHookHasNoNetworkShareRecipientOrWithdrawal() (gas: 107668)\n[PASS] testMarketFactoryConfigHasNoNetworkRecipient() (gas: 5996094)\n[PASS] testRegistryAcceptsEitherToolchainPinAndNothingElse() (gas: 590544)\n[PASS] testSellSurchargeStillProgressiveAndCappedAtFifteenPercent() (gas: 1832600)\n[PASS] testStepLaunchTaxUnchangedAndFullyToRewards() (gas: 1291729)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 67.29ms (41.29ms CPU time)\n\nRan 3 tests for test/Pause.t.sol:PauseTest\n[PASS] testOnlySwarmBoundedDurationAndCannotExtendPause() (gas: 242972)\n[PASS] testSalePausedWhileEntropyClaimsWithdrawalsAndEpochsContinue() (gas: 15148717)\n[PASS] testUnpauseCannotResetNextPauseCooldown() (gas: 194647)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 83.22ms (66.03ms CPU time)\n\nRan 8 tests for test/V4Integration.t.sol:V4IntegrationTest\n[PASS] testRealV4BuyAndSingleSwapSellTaxConserveSettlement() (gas: 2268670)\n[PASS] testRealV4ManipulatedSpotCannotInstantlySetBuybackQuote() (gas: 1909849)\n[PASS] testRealV4SmallBuyPaysPositiveKeeperMargin() (gas: 2072620)\nLogs:\n  real V4 0.2ETH buy gas: 1933461\n  real V4 buy bounty wei: 48649700000000\n\n[PASS] testRealV4SystemBuyUsesTwapAndOnlySystemFunds() (gas: 2078453)\n[PASS] testRealV4SystemSalesUseDepthTwapNormalFeesAndConserveTokens() (gas: 2247054)\n[PASS] testSystemBuybackOffsetsRecordedSellImbalance() (gas: 2509567)\n[PASS] testTenEthPoolRewardBuyAtSpotTwapIncludesLpFee() (gas: 2151623)\n[PASS] testTenEthPoolSystemSellAtSpotTwapIncludesLpFee() (gas: 4120049)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 106.05ms (21.86ms CPU time)\n\nRan 10 tests for test/Bounties.t.sol:BountiesTest\n[PASS] testBuyBountyProportionalCapNoDustCreditAndFailureRollback() (gas: 680020)\n[PASS] testEmptyRosterAndInvalidBatchReceiveNothing() (gas: 1419248)\n[PASS] testEveryWorkKindBoundedByHeartbeatAndAuthorizedProducer() (gas: 64315585)\n[PASS] testLazySettlementUnpaidAndCannotReplay() (gas: 6970276)\n[PASS] testOnlyFinalizePaidOnceAndEmptyWeekUnpaid() (gas: 2292196)\n[PASS] testPackEntropyCapturedOnceWithFullInventoryAndThroughPause() (gas: 3713527)\n[PASS] testPlanResolutionPaidOnceIncludingAdvanceForwarding() (gas: 2934177)\n[PASS] testRemovedWorkBountiesRejectedEvenFromOldProducer() (gas: 179981)\n[PASS] testStarterEntropySurvivesFullInventoryExpiryAndPauseWithoutReplayPayment() (gas: 5324477)\n[PASS] testWorkCreditRespectsZeroGasPricePriceCeilingAndUnitCap() (gas: 333726)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 142.80ms (141.68ms CPU time)\n\nRan 5 tests for test/AuditV314.t.sol:AuditV314Test\n[PASS] testDustAmountCannotReduceExecutedBatchAndEmptyQueueReverts() (gas: 1383695)\n[PASS] testLaterSameEpochCreditKeepsEarlierTaxVintage() (gas: 608585)\n[PASS] testLockInsertionWalkIsBoundedAndFailureIsAtomic() (gas: 30159768)\n[PASS] testOnlyFarmerCanRetireEvenAnEmptyFarm() (gas: 4306920)\n[PASS] testStaleSellAmountUsesCurrentDepthAndEnforcesCurrentMinimum() (gas: 1624852)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 151.93ms (149.87ms CPU time)\n\nRan 6 tests for test/ForeignTokenTwin.t.sol:ForeignTokenTwinTest\n[PASS] testBinderBindsTheGenuineRegistryThenAlreadyDone() (gas: 2793358)\n[PASS] testBinderCannotBypassAnyProof() (gas: 7228653)\n[PASS] testForeignTwinCannotBindFromTheAttacker() (gas: 1433024)\n[PASS] testForeignTwinIsSelfConsistentAndPassesEveryProofExceptTheBinder() (gas: 137061)\n[PASS] testNoNonBinderCanBindEitherRegistry() (gas: 2005687)\n[PASS] testZeroBinderRevertsAtConstruction() (gas: 673051)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 25.01ms (11.53ms CPU time)\n\nRan 4 tests for test/LaunchIntakeV317.t.sol:LaunchIntakeV317Test\n[PASS] testEarlyPaidCallbackFailsAndExpiryDoesNotRefundOrReopenSlot() (gas: 5142047)\n[PASS] testPaidCallbackStoresUnder200kAfterRoleOneRegistration() (gas: 4799438)\n[PASS] testRegulatorStoresBeforeRoleOneButExecutionWaitsForModules() (gas: 444967)\n[PASS] testStreamZeroRevertsThenSameAttestationStoresAfterRoleOneRegistration() (gas: 4790718)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 24.23ms (8.75ms CPU time)\n\nRan 6 tests for test/Market.t.sol:MarketTest\n[PASS] testBuyChargesExactlyOnePercentAllToRewards() (gas: 1729871)\n[PASS] testFuzzTotalFeeHardCap(uint96) (runs: 256, μ: 1804616, ~: 1809158)\nLogs:\n  Bound result 27064108224\n\n[PASS] testOnlyManagerCorrectPoolExactInputAndHookAddress() (gas: 111195)\n[PASS] testSingleDumpIncludesItselfAndFeeDecaysWithoutGriefReset() (gas: 17162149)\n[PASS] testTwapAveragesEthPriceAcrossUnequalPrices() (gas: 2330821)\n[PASS] testTwapWarmupAndFlashManipulationResistance() (gas: 1883301)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 236.42ms (284.21ms CPU time)\n\nRan 3 tests for test/HookBinding.t.sol:HookBindingTest\n[PASS] testHoldBeforeGameExistsThenBindOnceAndFlushExactStreams() (gas: 43434444)\n[PASS] testLookAlikeCannotBindEvenWhenTeamCalls() (gas: 1907686)\n[PASS] testWrongRouterAndMissingCodeRejectedBeforePermanentBind() (gas: 41150107)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 23.76ms (12.67ms CPU time)\n\nRan 1 test for test/LaunchL1V317.t.sol:LaunchL1V317Test\n[PASS] testExactL1PairDeploysTogetherOnEmptyRobinhoodChain() (gas: 24816126)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 35.68ms (35.55ms CPU time)\n\nRan 8 tests for test/FeesParams.t.sol:FeesParamsTest\n[PASS] testAllDefaultParamsWithinHardBounds() (gas: 1255771)\n[PASS] testBuyBackPoolOnlySlippageFailureRollbackAndDustGriefBlocked() (gas: 774066)\n[PASS] testExactEthSplitsHeartbeatCapAndPullPayments() (gas: 512724)\n[PASS] testFuzzNoStepAboveTenPercent(uint96) (runs: 256, μ: 44982, ~: 45115)\nLogs:\n  Bound result 8139\n\n[PASS] testFuzzSplitsConserveEveryWei(uint96) (runs: 256, μ: 206746, ~: 210856)\nLogs:\n  Bound result 27064108224\n\n[PASS] testHeartbeatCapFixedAtOneEth() (gas: 207904)\n[PASS] testParamsStepCooldownBoundsAuthorityAndLetter() (gas: 195823)\n[PASS] testPoolNoPublicReserveRecycleOrPayment() (gas: 135304)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 72.05ms (64.17ms CPU time)\n\nRan 5 tests for test/KeeperProfit.t.sol:KeeperProfitTest\n[PASS] testPaidPackEntropyKeeperProfit() (gas: 1182284)\nLogs:\n  paid pack entropy execution gas: 139616\n  paid pack entropy bounty wei: 3380475000000\n  paid pack entropy execution plus 21000 gas cost wei: 3212320000000\n\n[PASS] testPlanEntropyKeeperProfit() (gas: 1665588)\nLogs:\n  plan entropy execution gas: 163211\n  plan entropy bounty wei: 4474800000000\n  plan entropy execution plus 21000 gas cost wei: 3684220000000\n\n[PASS] testSeasonFinalizeThreeWinnersAndPrizeKeeperProfit() (gas: 3451194)\nLogs:\n  season finalize three winners and prize execution gas: 644073\n  season finalize three winners and prize bounty wei: 15825700000000\n  season finalize three winners and prize execution plus 21000 gas cost wei: 13301460000000\n\n[PASS] testSeasonPrepareIsConstantUnpaidWork() (gas: 1342777)\n[PASS] testStarterEntropyKeeperProfit() (gas: 324487)\nLogs:\n  starter entropy execution gas: 142744\n  starter entropy bounty wei: 3380150000000\n  starter entropy execution plus 21000 gas cost wei: 3274880000000\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 17.95ms (8.58ms CPU time)\n\nRan 2 tests for test/Factory.t.sol:FactoryTest\n[PASS] testFactoryInvalidSearchRange() (gas: 4937)\n[PASS] testHookFactoryFlagsImmutableConfigAndIdempotence() (gas: 7543837)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 46.11ms (36.74ms CPU time)\n\nRan 1 test for test/EndowmentGame.t.sol:EndowmentGameTest\n[PASS] testRealMiningCannotSpendFutureEndowment() (gas: 130998353)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 267.42ms (248.80ms CPU time)\n\nRan 2 tests for test/GridV35.t.sol:GridV35Test\n[PASS] testGreenAndCheapBothFavorTheStableDistrict() (gas: 4110886)\n[PASS] testReservedEventsHaveZeroLaunchWeightAndPlanOnlyWhenEnabled() (gas: 723024)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 18.35ms (9.24ms CPU time)\n\nRan 6 tests for test/Endowment.t.sol:EndowmentTest\n[PASS] testDirectTransferCannotBypassOrBackdateDrip() (gas: 368166)\n[PASS] testExactFundingFullLinearDripAndConservation() (gas: 832168)\n[PASS] testFuzzCumulativePaymentsCannotExceedVestedPrincipal(uint32,uint128) (runs: 256, μ: 522690, ~: 524739)\nLogs:\n  Bound result 3\n  Bound result 116473885\n\n[PASS] testNoTeamDonorOrSwarmWithdrawalOrReserveAuthority() (gas: 614309)\n[PASS] testParamsSnapshotCannotAccelerateOrRelockExistingEndowment() (gas: 303686)\n[PASS] testUnderfundingCannotActivateAndDonationsStayConserved() (gas: 453428)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 329.42ms (311.52ms CPU time)\n\nRan 21 tests for test/SwarmDeskV37.t.sol:SwarmDeskV37Test\n[PASS] testBackupFailureUnknownFailureDeadlineAndPriceCap() (gas: 751317)\n[PASS] testBackupPullsExactPriceRecordsRequestAndRestrictsBodyAndCadence() (gas: 1207764)\n[PASS] testDeskSetHeartbeatBpsMovesFeeRouterShare() (gas: 945834)\n[PASS] testEmptyChainConstructorAndAuthenticatedBindingRejectSpoofs() (gas: 12683178)\n[PASS] testEventClampingAndFallbackWithoutAnswer() (gas: 1117363)\n[PASS] testExpiredOldSlotOldEpochAndUnexecutedAnswersNeverAct() (gas: 852773)\n[PASS] testFlatConstructorRejectsUnusedPackedBits() (gas: 7335783)\n[PASS] testForgedTamperedWrongSignerWrongDomainAndCallerRejected() (gas: 359833)\n[PASS] testFutureIssueWrongTypeMalformedLengthAndPriceNeverConsume() (gas: 327553)\n[PASS] testFuzzEveryParamHardBoundsAndTenPercentStep(uint8,uint248) (runs: 256, μ: 475840, ~: 477856)\nLogs:\n  Bound result 3\n\n[PASS] testNextSlotAcceptsSameQuestionAndChangedExecutionBytesReject() (gas: 1146136)\n[PASS] testNoAdminPathsAndEntireGraphUsesDesk() (gas: 428356)\n[PASS] testNoopRegulatorAcceptedAndParamsCooldownPreserved() (gas: 452656)\n[PASS] testRegulatorClampsParamsAnnouncesPhasesAndThirtyDayCaps() (gas: 1146623)\n[PASS] testRegulatorSkipsOutOfRangeKeysInsteadOfClampingToFortyFive() (gas: 501093)\n[PASS] testReplayDifferentSourceAndSecondAnswerSameSlotIgnored() (gas: 1068212)\n[PASS] testRobinhoodNativeClockCallbackWithin200k() (gas: 352907)\n[PASS] testScheduleDeliveryStoresUnder200kThenExecutesTwoPlans() (gas: 984580)\n[PASS] testSubmitRelayAcceptsAttestedAnswerFromAnyoneOnce() (gas: 1092075)\n[PASS] testSubmitRelayRejectsForgedWrongQuestionStaleAndMalformed() (gas: 1843104)\n[PASS] testWrongQuestionUnknownRequestWeakPanelAndWindowRejected() (gas: 364850)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 285.41ms (298.76ms CPU time)\n\nRan 1 test for test/StandardV4Integration.t.sol:StandardV4IntegrationTest\n[PASS] testStandardAdapterRealPoolPaysExistingHookExactlyOnce() (gas: 1948176)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 404.47ms (1.08ms CPU time)\n\nRan 13 tests for test/Events.t.sol:EventsTest\n[PASS] testCheapTariffAppliesCitywide() (gas: 6431880)\n[PASS] testColdPowerFireImmuneAndCleanPowerSurgeImmune() (gas: 7916395)\n[PASS] testFallbackAndExpiredSeedIndependentOfSwarmNumber() (gas: 1788804)\n[PASS] testFireNoCoolingZeroYieldColdPowerImmune() (gas: 6156432)\n[PASS] testGreenWaveRaisesDistrictMiningTenPercent() (gas: 6433957)\n[PASS] testLobbyOwnDistrictSplitDecayAndMinimumWeight() (gas: 1083530)\n[PASS] testOutageAndOffgridRoomMitigation() (gas: 7068792)\n[PASS] testPlansOnlyNextTwoOnceAndBoundedSeverity() (gas: 344926)\n[PASS] testRollingCapsAndInitialPositiveQuotaWithHostilePlans() (gas: 102269963)\n[PASS] testSurgeCanDestroyCommonButNeverLegendary() (gas: 6422908)\n[PASS] testSurgeDamagesExactlyOneItemAndCleanPowerImmune() (gas: 6305934)\n[PASS] testSurgeNeverDestroysLegendaryOrMythic() (gas: 9523164)\n[PASS] testTheftRouterDisabledAndRepairRestores() (gas: 6862770)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 424.64ms (523.38ms CPU time)\n\nRan 5 tests for test/FarmDailyBasisV317.t.sol:FarmDailyBasisV317Test\n[PASS] testBasisRisesAtOnceToAHigherSettledYield() (gas: 15550655)\n[PASS] testDecayConstantIsExposed() (gas: 8403)\n[PASS] testProRataEntryEpochIsScaledToItsFullEpochEquivalent() (gas: 8748921)\n[PASS] testStarvingForManyEpochsDecaysGeometricallyNotToTheFloor() (gas: 28087075)\n[PASS] testZeroNetEpochOnlyDecaysTheBasisByOneStep() (gas: 14591209)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 226.14ms (269.83ms CPU time)\n\nRan 2 tests for test/AutoRepairReviewV35.t.sol:IndependentAutoRepairReview\n[PASS] testAutomaticRepairRecordsHistoricalWeekBeforeCompletion() (gas: 5411876)\n[PASS] testLateAutomaticRepairCannotReopenSeasonEligibility() (gas: 4275820)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 529.31ms (42.66ms CPU time)\n\nRan 7 tests for test/HeartbeatBpsV313.t.sol:HeartbeatBpsV313Test\n[PASS] testFuzzAnyShareConservesEveryWeiAndNeverMovesTeamOrPot(uint16,uint96) (runs: 256, μ: 1359059, ~: 1528009)\nLogs:\n  Bound result 1628\n  Bound result 3879\n\n[PASS] testLaunchDefaultIsTwoPercentAndSplitUnchanged() (gas: 230935)\n[PASS] testLoweredShareBackToFloorAndFloorIsHard() (gas: 401104)\n[PASS] testMaximumShareWithPotEnabledIsClippedToWhatIsLeft() (gas: 1867739)\n[PASS] testOnlyTheSwarmWithinBoundsStepAndCooldownCanMoveTheShare() (gas: 341795)\n[PASS] testRaisedShareStillStopsAtTheOneEthCap() (gas: 480520)\n[PASS] testSwarmSet220CreditsTwoPointTwoPercentOfSurchargeAndTokens() (gas: 543701)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 498.44ms (491.52ms CPU time)\n\nRan 20 tests for test/V33.t.sol:V33Test\n[PASS] testActionBeforeExpiryMovesBucketWithoutDoubleCount() (gas: 25983504)\n[PASS] testAdvanceIsConstantInExpiringFarms() (gas: 38430108)\n[PASS] testAgeCapsAtBoundaries() (gas: 204552)\n[PASS] testClaimDoesNotRecommitWhileBehind() (gas: 37239808)\n[PASS] testClaimRecommitsAndPackRecommits() (gas: 60787577)\n[PASS] testDistrictScoreAveragePerFarmAndTenPercentWalletCap() (gas: 4607489)\n[PASS] testHeartbeatCapExcessGoesToPoolAndBaseFeeIsAllRewards() (gas: 270973)\n[PASS] testIdleFarmLeavesDenominatorAfterTwelveEpochs() (gas: 23504929)\n[PASS] testLaunchTaxDepositIsAllPoolAndMarketOnly() (gas: 137567)\n[PASS] testMergeRemoved() (gas: 512630)\n[PASS] testPackLobbySellSplit88Team10Heartbeat2() (gas: 407960)\n[PASS] testPackSaleOpensSixtyMinutesAfterLaunch() (gas: 1264387)\n[PASS] testPaidXpCannotBypassAgeGates() (gas: 59083319)\n[PASS] testPaidXpCappedPerDayActivityUncapped() (gas: 13264967)\n[PASS] testPartialRoomIsClippedNotReverted() (gas: 2156541)\n[PASS] testRewardsEarnedBeforeExpiryAreNeverLost() (gas: 47725769)\n[PASS] testSingleWhaleDistrictCannotWinAlone() (gas: 4534340)\n[PASS] testSyncRecommitsFromNextEpoch() (gas: 33379218)\n[PASS] testTokenPacksAlsoWaitForOpening() (gas: 59864)\n[PASS] testTopSpenderTrackingIsExact() (gas: 5411751)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 610.15ms (1.05s CPU time)\n\nRan 6 tests for test/Regression.t.sol:RegressionTest\n[PASS] testCableRepairRestoresOnlyRemainingHalfEpoch() (gas: 11818095)\n[PASS] testEmptyEpochPreservesLastSettledRateButResetsScrapAllowance() (gas: 11008366)\n[PASS] testFuzzCableRepairBlendHandlesNonMonotonicRarityBonuses(uint16) (runs: 256, μ: 1374162, ~: 1374014)\nLogs:\n  Bound result 1\n\n[PASS] testRegisterOnlyAccountsDoNotAddSettlementWorkAndEmptyFarmCanRetire() (gas: 2037709)\n[PASS] testRepairAndPaidPackCannotRetroactivelyBoostEpoch() (gas: 9562743)\n[PASS] testUnlimitedFreshPacksCannotDrainPoolByScrapping() (gas: 9668475)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 692.03ms (728.10ms CPU time)\n\nRan 3 tests for test/Gas.t.sol:GasTest\n[PASS] testGasCommonActions() (gas: 10873117)\nLogs:\n  buy token pack: 925868\n  open one pack: 514873\n  equip: 966814\n  repair wallet: 614735\n  enhancement commit: 568464\n  expand: 390489\n  token pack wallet: 655187\n  withdraw: 255483\n  unequip: 407017\n\n[PASS] testGasFullFarmLongIdleBoundedChunks() (gas: 119295605)\nLogs:\n  settle full 24-item farm eight epochs after 40 idle: 12496054\n\n[PASS] testGasTypicalFarmSettlementHasNoBounty() (gas: 8944774)\nLogs:\n  settle typical three-item farm one epoch: 923830\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 706.54ms (732.04ms CPU time)\n\nRan 14 tests for test/V34.t.sol:V34Test\n[PASS] testBestFarmCapsAbsoluteSpendAndBreaksTiesByAddress() (gas: 4665724)\n[PASS] testBestFarmNeedsTwentyEpochsAndUsesCappedAbsoluteSpend() (gas: 4144232)\n[PASS] testBuybackSlippage150BpsMaxAndIntervalCannotBeBypassed() (gas: 756212)\n[PASS] testDonationsAndOrdinaryInflowsCannotPretendToBeEndowment() (gas: 1520675)\n[PASS] testEntropyAt256BoundaryAndAt257RearmsWithoutPayOrMint() (gas: 3283396)\n[PASS] testFirstRewardStartsCurrentEpochAtHalfTimeAndSnapshotCannotBeReplaced() (gas: 4843822)\n[PASS] testFreeFarmDoesNotDiluteDistrictOrClaimPaidPrize() (gas: 4739687)\n[PASS] testGameReadinessBothChecksRollbackEthAndTokenPurchase() (gas: 3618362)\n[PASS] testHookUninitializedCannotOpenOrStartEpochAndCallerCannotStartClock() (gas: 5889458)\n[PASS] testLaunchTaxExactBoundaries() (gas: 5772694)\n[PASS] testMythicGateEvaluatedAtRevealNotAtPayment() (gas: 1624053)\n[PASS] testPackOpeningFollowsHookAndNotLegacyDeployTimestamp() (gas: 101151)\n[PASS] testRemainderTransferredToPredictedPoolBeforeDeploymentAndNoApprovalNeeded() (gas: 2463041)\n[PASS] testStarterEntropyRearmsAfterClaimWindowAndNoDoubleMint() (gas: 772310)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 763.56ms (64.12ms CPU time)\n\nRan 6 tests for test/SeasonAudit.t.sol:SeasonAuditTest\n[PASS] testAuditThresholdStrictAndNoWhaleSoftCap() (gas: 40508248)\n[PASS] testLotteryEntitlementSurvivesFullInventory() (gas: 131721528)\n[PASS] testPackSupplyDropOnlyActiveFarmsAtDoublePace() (gas: 11743280)\n[PASS] testParameterChangesCannotChangeClosedEpochBetweenBatches() (gas: 12523805)\n[PASS] testSeasonCannotFinalizeEarlyAndExpiredLotteryMustRearm() (gas: 124179117)\n[PASS] testWeeklyThreeDistinctTicketWinnersFuturePackAndBestPrize() (gas: 124934770)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 893.73ms (1.82s CPU time)\n\nRan 2 tests for test/ReservedEventsV35.t.sol:ReservedEventsV35Test\n[PASS] testFuzzReservedFestivalCannotExceedFifteenPercent(uint16) (runs: 256, μ: 4927537, ~: 4927534)\n[PASS] testReservedHeatwaveExtraCoolingWearAndBothProtections() (gas: 10178642)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.12s (1.14s CPU time)\n\nRan 11 tests for test/Items.t.sol:ItemsTest\n[PASS] testComputeHashSupportHashAndBonusesReplaceDuo() (gas: 4715342)\n[PASS] testDurabilityWearRepairAndEnhancementMetadataPreserved() (gas: 8393341)\n[PASS] testEquipRarityGatesAndMythicGate() (gas: 4162922)\n[PASS] testFullStackRarityCapAndRoomFlags() (gas: 7665589)\n[PASS] testInventoryMintCannotExceedCapacityAndExpansionRises() (gas: 3356807)\n[PASS] testLockedItemCannotBeScrappedUntilEpochRolls() (gas: 5989066)\n[PASS] testOffgridSavings() (gas: 2711135)\n[PASS] testPaidXpCannotBypassRoomTwoAgeGate() (gas: 3746447)\n[PASS] testRoomGatesAndLevelProgression() (gas: 78475814)\n[PASS] testScrapPaysPoolYieldAndCannotRepeat() (gas: 7561671)\n[PASS] testSoulboundOnlyOwnFarmAndNoDuplicateTypes() (gas: 2265957)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 11.40s (401.86ms CPU time)\n\nRan 9 tests for test/Epochs.t.sol:EpochsTest\n[PASS] testCannotAdvanceEarlyAndBountyOnce() (gas: 2513731)\n[PASS] testClaimsEveryEpochAndRedistributionIsNextEpoch() (gas: 12010062)\n[PASS] testGasAdvanceIndependentOfRoster() (gas: 895978527)\nLogs:\n  advance empty roster: 1284212\n  advance 1000 farms: 1473392\n\n[PASS] testNoCatchupEmissionDuringGap() (gas: 6270392)\n[PASS] testNoRetroactiveEquipmentAndBoundedBatches() (gas: 5790681)\n[PASS] testNoWhaleCapHashShares() (gas: 10182869)\n[PASS] testReferralOneLevelSetOnceNoSelf() (gas: 7531610)\n[PASS] testTaxCurveExactAndFloor() (gas: 34112)\n[PASS] testWithdrawFailureRollsBackAndReentrancyCannotClaimTwice() (gas: 7446317)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 11.56s (5.89s CPU time)\n\nRan 2 tests for test/Clock.t.sol:ClockTest\n[PASS] testLocalEvmFutureBlockAnd256BlockBoundary() (gas: 225376)\n[PASS] testRobinhoodUsesArbSysNotL1EstimateAndHandlesExpiry() (gas: 238560)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 11.56s (1.24ms CPU time)\n\nRan 2 tests for test/StandardMarket.t.sol:StandardMarketTest\n[PASS] testFuzzStandardSellNeverAddsProgressiveSurcharge(uint96) (runs: 256, μ: 1803744, ~: 1813953)\nLogs:\n  Bound result 27064108224\n\n[PASS] testStandardBuyOnePercentAllToRewards() (gas: 1673242)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 11.55s (11.53s CPU time)\n\nRan 12 tests for test/AuditV317.t.sol:AuditV317Test\n[PASS] testAdvanceEpochDefersUntilTheRearmedEventResolves() (gas: 1433172)\n[PASS] testDestroyedItemResyncWaitsUntilTheFarmIsCaughtUp() (gas: 12580622)\n[PASS] testDestroyedItemWeightStale() (gas: 10356036)\n[PASS] testEnhancementInsideWindowStillCapturesAndResolvesNormally() (gas: 1164136)\n[PASS] testEnhancementLapseEmitsResolvedAsFailureAndKeepsSoulboundChecks() (gas: 2005877)\n[PASS] testEnhancementRearmGrind() (gas: 53784157)\n[PASS] testOwnerActionClearsThePendingResync() (gas: 8345887)\n[PASS] testSubmittedPlanDiscardedAfterHashWindow() (gas: 1740590)\n[PASS] testUnlockBlockedWhileEpochStale() (gas: 895813)\n[PASS] testUnlockLiveAndCaughtUpStillResyncsWeight() (gas: 58436968)\n[PASS] testUnlockWhileBehindReturnsPrincipalAndSkipsResync() (gas: 56212427)\n[PASS] testUnplannedLapsedWindowAlsoRearmsAndNeverUsesAPrecomputableSeed() (gas: 230726)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 11.82s (736.98ms CPU time)\n\nRan 4 tests for test/OracleConformanceV37.t.sol:OracleConformanceV37Test\n[PASS] testAcceptsOriginalProtocolSignature() (gas: 17934)\n[PASS] testDigestMatchesUnmodifiedProtocolVector() (gas: 13636)\n[PASS] testFreshVectorSignerSignature() (gas: 30385)\n[PASS] testSelectorsExactlyMatchLiveProtocol() (gas: 3520)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 11.82s (1.30ms CPU time)\n\nRan 18 tests for test/EconomyV35.t.sol:EconomyV35Test\n[PASS] testAllEnhancementTableEndpointsAndGlobalBonusCap() (gas: 1477864)\n[PASS] testDurabilityBoundariesAndIdleNoWear() (gas: 38169181)\n[PASS] testEnhanceBurnFailureAndLevelGate() (gas: 1218579)\n[PASS] testEnhanceCapsNoticeUpwardOnlyAndThirtyDays() (gas: 355848)\n[PASS] testEnhanceCommitCannotPlaceScrapOrRetryAndLapsesAsWorstOutcome() (gas: 2423527)\n[PASS] testFeeSalesDepthSlippageCadenceAndNormalFeePot() (gas: 1737855)\n[PASS] testFreeAllowlistOnceWindowStarterScrapAndMetadata() (gas: 3102778)\n[PASS] testFreeRootRemainsFrozenAfterSevenDays() (gas: 43976)\n[PASS] testFreeRootWindowAndIndexLimit() (gas: 55991)\n[PASS] testFuzzPriceCurveDaysBounds(uint32,uint32) (runs: 256, μ: 89024, ~: 90188)\nLogs:\n  Bound result 29\n\n[PASS] testLockBonusRedistributesWithinReservedEmission() (gas: 11683136)\n[PASS] testLockEscrowNoEarlyExitAndWalletCap() (gas: 5394589)\n[PASS] testQuoteScalesLastSettlementAndHasFloor() (gas: 4285279)\n[PASS] testRepairYieldQuoteAndAutoRepairCreditsOnly() (gas: 10812876)\n[PASS] testRoomsChargeYieldDaysAndRetainAgeGates() (gas: 2618884)\n[PASS] testSystemSellDustCannotOccupyCadenceAndCappedHeartbeatReturnsTokens() (gas: 1562949)\n[PASS] testTokenOnlyGiftSplitsNoEthPeg() (gas: 1738156)\n[PASS] testZapAtomicMinOutPauseAndRefund() (gas: 1441448)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 11.86s (383.32ms CPU time)\n\nRan 1 test for test/Invariants.t.sol:InvariantsTest\n[PASS]\nInvariantsTest invariants:\n[PASS] invariantAllowlistRootAndWalletLimit\n[PASS] invariantInventoryAndEthLiabilities\n[PASS] invariantLocksAndPotAlwaysBacked\n[PASS] invariantPriceAndParamsBounds\n[PASS] invariantReceiptsNeverForfeitOrFixMissingEntropy\n[PASS] invariantReservesBackedAndPendingCovered\n[PASS] invariantTokenConservationNoBurns\n InvariantsTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------+-----------+-------+---------+----------╮\n| Contract    | Selector  | Calls | Reverts | Discards |\n+======================================================+\n| GameHandler | advance   | 577   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | buy       | 614   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | claim     | 569   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | equip     | 578   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | expand    | 632   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | freeClaim | 569   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | fundPot   | 588   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | lock      | 612   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | resolve   | 587   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | rollover  | 587   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | settle    | 548   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | tokenPack | 563   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | unlock    | 571   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | unplace   | 597   | 0       | 0        |\n╰-------------+-----------+-------+---------+----------╯\n\nLogs:\n  Bound result 3\n  Bound result 4989\n  Bound result 150000000000000000\n  Bound result 360259408045869063709\n  Bound result 53\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 42.15s (42.13s CPU time)\n\nRan 3 tests for test/PotV35.t.sol:PotV35Test\n[PASS] testPotDepositRequiresActualTokensAndAuthority() (gas: 256924)\n[PASS] testPotSplitAndLotteryCommitSurvivesFullInventory() (gas: 11851210)\n[PASS] testPotUnclaimedRolloverOnlyAfterFourWeeksNoDoubleClaim() (gas: 6429769)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 42.40s (40.84ms CPU time)\n\nRan 9 tests for test/LazyAccounting.t.sol:LazyAccountingTest\n[PASS] testAuditChargesTenPercentEvenAtHalfSeverityAndThresholdIsFrozen() (gas: 6161890)\n[PASS] testClaimCatchesUpWhilePacksPausedAndDoesNotEraseRemainingHistory() (gas: 25641763)\n[PASS] testExhaustedFarmCannotCollectRedistributionByRemainingIdle() (gas: 15191242)\n[PASS] testFuzzLazyEqualsIndependentEagerForRandomFarmsAndAllEvents(uint256) (runs: 256, μ: 45573470, ~: 45579763)\n[PASS] testGlobalAccumulatorAndWeightsAreSnapshottedBeforeMutations() (gas: 9311279)\n[PASS] testLateSeasonSettlementPaysMiningWithoutChangingFrozenWinners() (gas: 59490917)\n[PASS] testOneWeiMiningGreenCannotLockSettlementThroughEnvelopeRounding() (gas: 11069658)\n[PASS] testSparseMatureVintageConsumedBeforeRecentSlotAfterWrap() (gas: 43222421)\n[PASS] testStaleActionsRequireChunksAndNeverBlockGlobalAdvance() (gas: 40505475)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 42.40s (12.48s CPU time)\n\nRan 9 tests for test/Packs.t.sol:PacksTest\n[PASS] testExactPaymentAndFutureBlockRequired() (gas: 1671228)\n[PASS] testExactRarityThresholdsAndMythicGate() (gas: 282935)\n[PASS] testExpiryRearmsWithoutMintingAndInventoryOpeningLimit() (gas: 3797222)\n[PASS] testFuzzVrgdaAlwaysBounded(uint32,uint32) (runs: 256, μ: 61899, ~: 63085)\nLogs:\n  Bound result 29\n\n[PASS] testItemTypeDistributionExact() (gas: 626492)\n[PASS] testNoWalletGlobalOrTokenPackDailyLimit() (gas: 4392810)\n[PASS] testStarterWindowProofTokenIdOnceAndInventoryFailureRetry() (gas: 881490)\n[PASS] testTokenPackSameQuoteAndSplitWhenUsingWalletOrCredits() (gas: 76592671)\n[PASS] testVrgdaInitialStepDecayFloorCeilingAndBulkPricing() (gas: 1299987)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 42.40s (433.94ms CPU time)\n\nRan 56 test suites in 42.41s (260.08s CPU time): 320 tests passed, 0 failed, 6 skipped (326 total tests)\n","passed":true},{"durationMs":212,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Billboards.bidBillboard(uint256,uint256,string,string)\",\"Billboards.settleBillboard(uint256,uint256)\",\"Billboards.withdrawRefund()\",\"Civic.announce(uint256,string)\",\"Civic.buyLot(uint256)\",\"Civic.claimWar(uint256)\",\"Civic.consumeCityEvent()\",\"Civic.enable(uint256)\",\"Civic.finishCollapse()\",\"Civic.finishWar()\",\"Civic.fundCollapse(uint256)\",\"Civic.fundWar(uint256)\",\"Civic.grantDistrictBoost(uint256,uint16,string)\",\"Civic.listLot(uint8,uint8,uint8)\",\"Civic.startCollapse(uint256)\",\"Civic.startWar(uint8,uint8)\",\"Economy.autoRepair(address,uint256,uint256[24])\",\"Economy.lock(uint256,uint256)\",\"Economy.unlock()\",\"EndowmentEscrow.forward(address,uint64,uint256,bytes,uint64,uint256,bytes)\",\"Enhancement.activateCap()\",\"Enhancement.announceCap(uint8,string)\",\"Enhancement.capture(uint256)\",\"Enhancement.commit(uint256,uint256,bool)\",\"Enhancement.resolve(uint256)\",\"FarmCore.activity(address,uint256,uint256,uint256)\",\"FarmCore.autoRepair(address,uint256)\",\"FarmCore.buyRoom(uint256,bool)\",\"FarmCore.buyTokenPack(bool)\",\"FarmCore.civicPurchase(address,uint256)\",\"FarmCore.claimDrop()\",\"FarmCore.expand(bool)\",\"FarmCore.grantDrop(address,bytes32)\",\"FarmCore.lobby(uint256,bool)\",\"FarmCore.paidPackBought(address,uint256,uint256)\",\"FarmCore.place(uint256,uint256,uint256)\",\"FarmCore.prepareEnhancement(address,uint256,uint256,bool)\",\"FarmCore.process(address,uint256)\",\"FarmCore.register(address)\",\"FarmCore.repair(uint256,bool)\",\"FarmCore.repairCable(bool)\",\"FarmCore.retire(address)\",\"FarmCore.scrap(uint256,uint256)\",\"FarmCore.setAutoRepair(bool,uint16)\",\"FarmCore.setReferrer(address)\",\"FarmCore.sync()\",\"FarmCore.syncFor(address)\",\"FarmCore.unplace(uint256,uint256)\",\"FarmEngine.process(address,uint256,(uint256[24],uint8[24],uint16[24],bool,uint64,uint16))\",\"FarmItems.destroy(uint256)\",\"FarmItems.equip(address,uint256)\",\"FarmItems.expand(address)\",\"FarmItems.maintain(uint256,uint16,uint8)\",\"FarmItems.mint(address,uint8,uint8,bool)\",\"FarmItems.mintDrop(address,bytes32)\",\"FarmItems.safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\",\"FarmItems.safeTransferFrom(address,address,uint256,uint256,bytes)\",\"FarmItems.unequip(address,uint256)\",\"FarmRewards.advanceEpoch()\",\"FarmRewards.award(address,uint256)\",\"FarmRewards.beginMining(address,uint256)\",\"FarmRewards.claim(uint256)\",\"FarmRewards.flagResync(address)\",\"FarmRewards.initialize(address)\",\"FarmRewards.recordSales(uint256)\",\"FarmRewards.releasePrize(uint256)\",\"FarmRewards.scrap(address,uint256,uint256)\",\"FarmRewards.setReferrer(address,address)\",\"FarmRewards.setWeight(address,uint256)\",\"FarmRewards.settle(address,uint256)\",\"FarmRewards.spend(address,uint256)\",\"FarmRewards.spendTo(address,uint256,address)\",\"FeeRouter.depositBaseFee()\",\"FeeRouter.depositLaunchTax()\",\"FeeRouter.depositLobby()\",\"FeeRouter.depositPack()\",\"FeeRouter.depositSellTax()\",\"FeeRouter.executeBuys(uint256,uint256)\",\"FeeRouter.executePotBuys(uint256,uint256)\",\"FeeRouter.executeSells(uint256,uint256)\",\"FeeRouter.payBounty(address)\",\"FeeRouter.payWork(address,uint8,uint256,uint256)\",\"FeeRouter.receive()\",\"FeeRouter.routeTokens(uint256)\",\"FeeRouter.withdraw()\",\"FeeRouter.zapBuy(uint256,address)\",\"GameRegistry.register(uint256,uint64,uint256,bytes)\",\"GridOperator.lobbyETH()\",\"GridOperator.resolve(uint256)\",\"GridOperator.resolveFor(uint256,address)\",\"GridOperator.shift(uint256)\",\"GridOperator.submitPlan(uint256,uint8,uint16,bytes32,string)\",\"GridOperator.tokenLobby(address,uint256)\",\"MarketFactory.deploy((address,address,int24,address,address,bytes32),bytes32)\",\"PackSale.buyPackFor(address)\",\"PackSale.buyPacksFor(address,uint256,uint256)\",\"PackSale.buyWithETH(address,uint256,uint256,uint256)\",\"PackSale.captureEntropy(uint256)\",\"PackSale.openPack(uint256)\",\"PackSale.pause(uint256)\",\"PackSale.rearm(uint256)\",\"PackSale.resolve(uint256,uint256)\",\"PackSale.rewardPack(address)\",\"PackSale.tokenPack(address)\",\"PackSale.unpause()\",\"Params.set(uint8,uint256,string)\",\"RewardPool.donate(uint256)\",\"RewardPool.fundEndowment()\",\"RewardPool.pay(address,uint256)\",\"RewardPool.recordInflow(uint256)\",\"RewardPool.recycle(uint256)\",\"RewardPool.reserve(uint256)\",\"Season.addPrize(uint256,uint256)\",\"Season.claimBest(uint256)\",\"Season.claimDistrict(uint256)\",\"Season.claimLottery(uint256)\",\"Season.complete(address,uint256)\",\"Season.depositPot(uint256)\",\"Season.finalize(uint256)\",\"Season.prepare(uint256,uint256)\",\"Season.rearm(uint256)\",\"Season.recordActivity(address,uint256,uint256,uint256)\",\"Season.recordRepair(address,uint256,uint256)\",\"Season.recordSpend(address,uint256,bool)\",\"Season.rollover(uint256)\",\"StandardAdapter.buy(uint256,address)\",\"StandardAdapter.unlockCallback(bytes)\",\"StandardMarket.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"StandardMarket.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"StandardMarket.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"StandardMarket.bindFeeRouter(address,uint64,uint256)\",\"StandardMarket.buy(uint256,address)\",\"StandardMarket.flushFees()\",\"StandardMarket.receive()\",\"StandardMarket.sell(uint256,uint256,address)\",\"StandardMarket.unlockCallback(bytes)\",\"StarterClaim.captureEntropy(uint256)\",\"StarterClaim.claim(uint256,bytes32[])\",\"StarterClaim.claimFree(uint256,bytes32[])\",\"StarterClaim.rearm(uint256)\",\"StarterClaim.resolve(uint256)\",\"SwarmDesk.askBackup(uint8,bytes)\",\"SwarmDesk.bind(address,bytes,bytes,uint64,uint8,uint64,uint8,uint64)\",\"SwarmDesk.clearExpired(bytes32)\",\"SwarmDesk.execute(uint8,bytes)\",\"SwarmDesk.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"SwarmDesk.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"SwarmDesk.submit((bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"V4Market.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"V4Market.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"V4Market.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"V4Market.bindFeeRouter(address,uint64,uint256)\",\"V4Market.buy(uint256,address)\",\"V4Market.flushFees()\",\"V4Market.receive()\",\"V4Market.sell(uint256,uint256,address)\",\"V4Market.unlockCallback(bytes)\"],\"files\":{\".gitignore\":8,\"ADAPTATION.md\":135,\"README.md\":86,\"artifacts/build-lint-v3.txt\":2369,\"artifacts/build-v3.txt\":3,\"artifacts/economic-targets-v3.json\":9,\"artifacts/fmt-v3.txt\":0,\"artifacts/foundry-v3.txt\":845,\"artifacts/funded-sensitivity/simulation-v3.json\":13928,\"artifacts/funded-sensitivity/simulation-v3.md\":51,\"artifacts/funding-sensitivity-v3.json\":342,\"artifacts/gas-actions-v3.txt\":15,\"artifacts/policy-sensitivity-v3.json\":554,\"artifacts/python-tests-v3.txt\":18,\"artifacts/regulator-example.json\":59,\"artifacts/robinhood-fork-v3.txt\":7,\"artifacts/runtime-sizes-v3.json\":23,\"artifacts/simulation-v3.json\":13928,\"artifacts/simulation-v3.md\":51,\"artifacts/tuned-funded/simulation-v3.json\":13928,\"artifacts/tuned-funded/simulation-v3.md\":51,\"artifacts/v2/README.md\":3,\"artifacts/v2/foundry-tests.txt\":178,\"artifacts/v2/offline-tests.txt\":187,\"artifacts/v2/offline-verification.json\":21,\"artifacts/v2/previous-README.md\":108,\"artifacts/v2/previous-design.md\":120,\"artifacts/v2/previous-report.md\":75,\"artifacts/v2/previous-security-review.md\":29,\"artifacts/v2/previous-simulation-assumptions.md\":52,\"artifacts/v2/robinhood-fork.txt\":7,\"artifacts/v2/rpc-probe.json\":16,\"artifacts/v2/runtime-sizes.json\":21,\"artifacts/v2/simulation.md\":95,\"artifacts/v2/verification.json\":110,\"artifacts/v31/allocation-summary.md\":6,\"artifacts/v31/baseline-budget.md\":14,\"artifacts/v31/boundary-checks.json\":10880,\"artifacts/v31/candidate-stress/simulation.json\":32636,\"artifacts/v31/evidence/factory-prediction.json\":14,\"artifacts/v31/evidence/launch-and-cost-facts.json\":130,\"artifacts/v31/evidence/standalone-hook-build.json\":38,\"artifacts/v31/final/comparison.md\":50,\"artifacts/v31/funded/comparison.md\":52,\"artifacts/v31/funded/replay.json\":290,\"artifacts/v31/funding-comparison.md\":8,\"artifacts/v31/regulator-example.json\":73,\"artifacts/v31/stress-comparison.md\":20,\"artifacts/v31/summary.json\":13,\"artifacts/v31/validation.json\":250,\"artifacts/v310/forge-test-launch.txt\":496,\"artifacts/v310/forge-test-repo-changed-suites.txt\":115,\"artifacts/v310/forge-test-repo-full-before-new-tests.txt\":437,\"artifacts/v310/pins-check.txt\":2,\"artifacts/v311/rehearsal.log\":377,\"artifacts/v312/forge-fmt.txt\":1,\"artifacts/v312/forge-test-launch.txt\":381,\"artifacts/v312/forge-test-repo.txt\":384,\"artifacts/v312/launch-creation-hashes.txt\":5,\"artifacts/v312/node-tests.txt\":10,\"artifacts/v312/pins-check.txt\":2,\"artifacts/v312/python-tests.txt\":3,\"artifacts/v312/rehearsal.log\":368,\"artifacts/v313/forge-fmt.txt\":0,\"artifacts/v313/forge-test.txt\":468,\"artifacts/v313/launch-creation-hashes.txt\":6,\"artifacts/v313/module-pins.txt\":15,\"artifacts/v313/pins-check.txt\":2,\"artifacts/v314/authority-check.txt\":1,\"artifacts/v314/consistency-check.txt\":1,\"artifacts/v314/creation-hashes.json\":21,\"artifacts/v314/deploy-gate.txt\":1,\"artifacts/v314/flatten-build.txt\":871,\"artifacts/v314/flatten-check.txt\":2,\"artifacts/v314/forge-build.txt\":4752,\"artifacts/v314/forge-fmt.txt\":0,\"artifacts/v314/forge-test.txt\":487,\"artifacts/v314/launch-creation-hashes.txt\":20,\"artifacts/v314/module-pins-check.txt\":1,\"artifacts/v314/node-tests.txt\":22,\"artifacts/v314/python-tests.txt\":39,\"artifacts/v314/rehearsal-build.log\":4895,\"artifacts/v314/rehearsal.log\":352,\"artifacts/v314/runtime-sizes.json\":21,\"artifacts/v314/swarm-pins-check.txt\":1,\"artifacts/v315/creation-hashes.json\":21,\"artifacts/v315/deploy-gate.txt\":1,\"artifacts/v315/forge-build.txt\":1062,\"artifacts/v315/forge-fmt.txt\":0,\"artifacts/v315/forge-test.txt\":412,\"artifacts/v315/launch-creation-hashes.txt\":20,\"artifacts/v315/module-pins-check.txt\":1,\"artifacts/v315/node-tests.txt\":22,\"artifacts/v315/python-tests.txt\":39,\"artifacts/v315/rehearsal-build.log\":4921,\"artifacts/v315/rehearsal.log\":387,\"artifacts/v315/runtime-sizes.json\":21,\"artifacts/v315/swarm-pins-check.txt\":1,\"artifacts/v316/creation-hashes.json\":21,\"artifacts/v316/deploy-gate.txt\":1,\"artifacts/v316/forge-build.txt\":4736,\"artifacts/v316/forge-fmt.txt\":0,\"artifacts/v316/forge-test.txt\":505,\"artifacts/v316/launch-creation-hashes.txt\":20,\"artifacts/v316/module-pins-check.txt\":1,\"artifacts/v316/node-tests.txt\":7,\"artifacts/v316/python-tests.txt\":3,\"artifacts/v316/rehearsal-build.log\":4921,\"artifacts/v316/rehearsal.log\":392,\"artifacts/v316/runtime-sizes.json\":21,\"artifacts/v316/swarm-pins-check.txt\":1,\"artifacts/v317/creation-hashes.json\":21,\"artifacts/v317/deploy-gate.txt\":1,\"artifacts/v317/forge-fmt.txt\":0,\"artifacts/v317/forge-test.txt\":442,\"artifacts/v317/launch-creation-hashes.txt\":20,\"artifacts/v317/module-pins-check.txt\":1,\"artifacts/v317/node-tests.txt\":14,\"artifacts/v317/python-tests.txt\":5,\"artifacts/v317/rehearsal-build.log\":4959,\"artifacts/v317/rehearsal.log\":392,\"artifacts/v317/runtime-sizes.json\":21,\"artifacts/v317/swarm-pins-check.txt\":1,\"artifacts/v32/contract-sizes.json\":54,\"artifacts/v32/forge-build.log\":2734,\"artifacts/v32/forge-fmt.log\":0,\"artifacts/v32/forge-test.log\":310,\"artifacts/v32/model-checks.log\":5,\"artifacts/v32/module-pins.log\":1,\"artifacts/v32/python-tests.log\":25,\"artifacts/v32/regulator-example.json\":73,\"artifacts/v32/simulation-checks.json\":11,\"artifacts/v32/simulation-checks.log\":11,\"artifacts/v32/validation.json\":61,\"artifacts/v32/verified-baseline/comparison.md\":8,\"artifacts/v32/verified-baseline/simulation.json\":22622,\"artifacts/v32/verified-sensitivities/comparison.md\":68,\"artifacts/v33/simulation.json\":116,\"artifacts/v34/build.txt\":2931,\"artifacts/v34/format.txt\":0,\"artifacts/v34/pins.txt\":1,\"artifacts/v34/python-tests.txt\":5,\"artifacts/v34/reveal-test.txt\":1,\"artifacts/v34/simulation.json\":91766,\"artifacts/v34/simulation.md\":43,\"artifacts/v34/tests.txt\":306,\"artifacts/v35/simulation.json\":22605,\"artifacts/v35/simulation.md\":104,\"artifacts/v35/verification.json\":132,\"artifacts/v36/simulation-phases.json\":179,\"artifacts/v36/simulation-phases.md\":13,\"artifacts/v37/byte-sizes.json\":131,\"artifacts/v37/verification.json\":28,\"artifacts/v39/forge-build-repo.txt\":3,\"artifacts/v39/forge-fmt.txt\":1,\"artifacts/v39/forge-test-launch.txt\":8,\"artifacts/v39/forge-test-repo.txt\":390,\"artifacts/v39/pins-check.txt\":2,\"artifacts/v39/pins.json\":68,\"artifacts/v39/runtime-sizes.json\":197,\"artifacts/v39/simulation.json\":381,\"artifacts/v39/simulation.md\":29,\"artifacts/verification-v3.json\":67,\"docs/accepted-v314.md\":10,\"docs/accepted-v315.md\":22,\"docs/accepted-v316.md\":24,\"docs/accepted-v317.md\":47,\"docs/api-v35.md\":41,\"docs/dependency-provenance.md\":9,\"docs/design.md\":69,\"docs/entropy-v34.md\":31,\"docs/launch-v31.md\":121,\"docs/launch-v314-plan.json\":191,\"docs/launch-v34.md\":44,\"docs/launch-v35.md\":40,\"docs/lazy-accounting-v32.md\":48,\"docs/m2-trust-assumption.md\":121,\"docs/oracle-v37/event.json\":1,\"docs/oracle-v37/oracle-config.json\":21,\"docs/oracle-v37/regulator.json\":1,\"docs/params-keys-v313.md\":113,\"docs/report-v3.md\":143,\"docs/report-v31.md\":128,\"docs/report-v32.md\":138,\"docs/report-v33.md\":107,\"docs/report-v34.md\":58,\"docs/report-v36.md\":89,\"docs/report-v38.md\":83,\"docs/research/b94e6839-platform-report.md\":238,\"docs/review-v31.md\":77,\"docs/review-v32.md\":32,\"docs/review-v33.md\":19,\"docs/review-v34.md\":30,\"docs/review-v35-independent.md\":69,\"docs/review-v37-independent.md\":44,\"docs/review-v39-independent.md\":105,\"docs/security-review.md\":29,\"docs/simulation-assumptions.md\":43,\"docs/simulation-v3-historical.md\":44,\"docs/simulation-v34.md\":34,\"foundry.toml\":21,\"keeper/README.md\":120,\"keeper/blackout-keeper.service\":23,\"keeper/keeper.env.example\":18,\"keeper/keeper.mjs\":578,\"keeper/lib/abi.mjs\":95,\"keeper/lib/eth.mjs\":186,\"keeper/lib/oracle.mjs\":57,\"keeper/wiring.example.json\":17,\"launch-v31.md\":3,\"launch-v36.md\":34,\"launch-v37.md\":144,\"launch-v38.md\":57,\"launch-v39.md\":249,\"launch/V4Market.sol\":1872,\"operations/dormant-v35.md\":17,\"regulator.md\":60,\"report.md\":489,\"script/Deploy.s.sol\":252,\"script/DeployMarket.s.sol\":15,\"script/PredictGame.s.sol\":49,\"script/SwarmArgs.sol\":38,\"sim/blackout_sim_v2.py\":509,\"sim/blackout_sim_v3.py\":338,\"sim/blackout_sim_v31.py\":24,\"sim/blackout_sim_v32.py\":380,\"sim/blackout_sim_v33.py\":395,\"sim/blackout_sim_v34.py\":444,\"sim/candidate_stress_v31.py\":21,\"sim/heartbeat_boundaries_v31.py\":25,\"sim/heartbeat_sweep_v31.py\":46,\"sim/policy_sensitivity_v3.py\":19,\"sim/run_v32.py\":34,\"sim/run_v33.py\":58,\"sim/run_v34.py\":54,\"sim/run_v35.py\":273,\"sim/run_v36.py\":83,\"sim/run_v39.py\":153,\"sim/tune_v3.py\":16,\"src/Billboards.sol\":135,\"src/Civic.sol\":302,\"src/Economy.sol\":222,\"src/EndowmentEscrow.sol\":111,\"src/Enhancement.sol\":164,\"src/FarmCore.sol\":611,\"src/FarmEngine.sol\":299,\"src/FarmItems.sol\":165,\"src/FarmRewards.sol\":607,\"src/FeeRouter.sol\":313,\"src/GameRegistry.sol\":101,\"src/GridOperator.sol\":276,\"src/MarketFactory.sol\":61,\"src/PackSale.sol\":293,\"src/Params.sol\":181,\"src/RewardPool.sol\":113,\"src/Season.sol\":368,\"src/StandardAdapter.sol\":77,\"src/StandardMarket.sol\":22,\"src/StarterClaim.sol\":149,\"src/SwarmDesk.sol\":548,\"src/V4Market.sol\":543,\"src/interfaces/IGame.sol\":53,\"src/interfaces/IGameRegistry.sol\":15,\"src/interfaces/ILaunchHook.sol\":7,\"src/interfaces/IV4.sol\":26,\"src/interfaces/Interfaces.sol\":20,\"src/lib/ChainClock.sol\":22,\"src/lib/EconomyMath.sol\":48,\"src/lib/Errors.sol\":13,\"src/lib/GameModule.sol\":17,\"src/lib/ItemMath.sol\":31,\"src/lib/ItemMetadata.sol\":79,\"src/lib/ModuleCode.sol\":49,\"src/lib/Robinhood.sol\":15,\"src/lib/SwarmCode.sol\":18,\"src/oracle/OracleAttestation.sol\":221,\"src/oracle/SignatureCheckerCompat.sol\":14,\"test/AuditV314.t.sol\":116,\"test/AuditV315.t.sol\":199,\"test/AuditV317.t.sol\":359,\"test/AutoRepairReviewV35.t.sol\":39,\"test/Base.t.sol\":310,\"test/Bounties.t.sol\":290,\"test/CivicV35.t.sol\":224,\"test/Clock.t.sol\":54,\"test/DeployGateV314.t.sol\":94,\"test/Deployment.t.sol\":94,\"test/EconomyV35.t.sol\":398,\"test/Endowment.t.sol\":123,\"test/EndowmentEscrowV38.t.sol\":200,\"test/EndowmentGame.t.sol\":51,\"test/Epochs.t.sol\":177,\"test/Events.t.sol\":252,\"test/Factory.t.sol\":31,\"test/FarmDailyBasisV317.t.sol\":146,\"test/FeesParams.t.sol\":135,\"test/ForeignTokenTwin.t.sol\":288,\"test/Gas.t.sol\":110,\"test/GridV35.t.sol\":66,\"test/HeartbeatBpsV313.t.sol\":149,\"test/HookBinding.t.sol\":113,\"test/Invariants.t.sol\":211,\"test/Items.t.sol\":246,\"test/KeeperProfit.t.sol\":95,\"test/LaunchIntakeV317.t.sol\":200,\"test/LaunchL1V317.t.sol\":137,\"test/LazyAccounting.t.sol\":447,\"test/Market.t.sol\":121,\"test/OracleConformanceV37.t.sol\":105,\"test/Packs.t.sol\":167,\"test/Pause.t.sol\":76,\"test/PhasedReleaseV36.t.sol\":165,\"test/PotV35.t.sol\":106,\"test/PredictionV34.t.sol\":46,\"test/Registry.t.sol\":140,\"test/Regression.t.sol\":156,\"test/ReservedEventsV35.t.sol\":41,\"test/ReviewV34.t.sol\":145,\"test/SeasonAudit.t.sol\":204,\"test/StandardAdapter.t.sol\":81,\"test/StandardMarket.t.sol\":63,\"test/StandardV4Integration.t.sol\":128,\"test/SwarmDeskV37.t.sol\":705,\"test/TwinCaptureV312.t.sol\":255,\"test/V310.t.sol\":79,\"test/V33.t.sol\":561,\"test/V34.t.sol\":315,\"test/V39.t.sol\":211,\"test/V4Integration.t.sol\":229,\"test/WarReviewV35.t.sol\":69,\"test/YieldFloorReviewV35.t.sol\":31,\"test/deploy-gate-v314.test.mjs\":42,\"test/fixtures/keeper-v39-vectors.json\":56,\"test/fixtures/oracle-hash-vectors.json\":102,\"test/fork/RehearsalV311.t.sol\":812,\"test/fork/RobinhoodFork.t.sol\":39,\"test/keeper-v39.test.mjs\":34,\"test/mocks/MockGameRegistry.sol\":52,\"test/mocks/MockMarket.sol\":74,\"test/mocks/MockOracleSigner.sol\":17,\"test/mocks/MockSwarmIntake.sol\":67,\"test/mocks/MockToken.sol\":38,\"test/mocks/MockV4Manager.sol\":118,\"test/oracle-v310.test.mjs\":22,\"test/oracle-v37.test.mjs\":42,\"test/python/test_entropy_bot.py\":31,\"test/python/test_merkle.py\":19,\"test/python/test_regulator.py\":30,\"test/python/test_v31.py\":38,\"test/python/test_v32.py\":58,\"test/python/test_v34.py\":33,\"test/python/test_v35.py\":71,\"test/reveal.test.mjs\":24,\"test/ui-v35.test.mjs\":27,\"tools/check_deploy_gate.mjs\":48,\"tools/check_v32_results.py\":52,\"tools/check_v37_authority.py\":20,\"tools/entropy_bot.py\":106,\"tools/freepack_merkle.py\":20,\"tools/make_oracle_bodies.mjs\":45,\"tools/oracle_question_hash.mjs\":80,\"tools/pin_module_code.py\":95,\"tools/pin_swarm_code.py\":48,\"tools/regulator.py\":81,\"tools/rehearse_v311.sh\":28,\"tools/report_v31.py\":55,\"tools/schedule_bodies.mjs\":16,\"tools/starter_merkle.py\":72,\"tools/swarm_constructor_args.mjs\":57,\"ui/app.js\":178,\"ui/index.html\":22,\"ui/reveal.js\":34,\"ui/style.css\":3},\"excluded\":[\"vendor/\",\"node_modules/\"],\"truncated\":true}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"4c57df66e4c0979ac2246130fb564f0b60d5c4f77be20416cb1873a74ff1c78f","verifiedTreeHash":"97c05d0a20a134b065531298359c79d3ed5f19d0","verifierVersion":"0.1.0+35c7b362"},{"checks":[{"durationMs":29570,"exitCode":0,"name":"build","output":"Compiling 202 files with Solc 0.8.26\nSolc 0.8.26 finished in 29.41s\nCompiler run successful with warnings:\nWarning (2519): This declaration shadows an existing declaration.\n  --> src/lib/EconomyMath.sol:17:48:\n   |\n17 |         returns (uint256 chance, uint256 burn, uint256 bonus, uint256 daysWad)\n   |                                                ^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n  --> src/lib/EconomyMath.sol:44:5:\n   |\n44 |     function bonus(uint256 level) internal pure returns (uint256 b) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (8760): This declaration has the same name as another declaration.\n   --> src/V4Market.sol:291:22:\n    |\n291 |     function _record(bool sell, uint256 amount) private {\n    |                      ^^^^^^^^^\nNote: The other declaration is here:\n   --> src/V4Market.sol:482:5:\n    |\n482 |     function sell(uint256 amount, uint256 minOut, address recipient) external nonReentrant returns (uint256 received) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (8760): This declaration has the same name as another declaration.\n  --> test/mocks/MockSwarmIntake.sol:26:9:\n   |\n26 |         bytes4 failure,\n   |         ^^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> test/mocks/MockSwarmIntake.sol:44:5:\n   |\n44 |     function failure(bytes32 id, uint8 status, bytes32 reason) external returns (bool) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2072): Unused local variable.\n  --> test/EndowmentEscrowV38.t.sol:28:9:\n   |\n28 |         LocalApplicationFactory f = LocalApplicationFactory(address(d.registry.factory()));\n   |         ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> test/EndowmentEscrowV38.t.sol:121:82:\n    |\n121 |     function _registryArgs(address gameToken, address params, uint256 endowment, address factory)\n    |                                                                                  ^^^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/Events.t.sol:213:9:\n    |\n213 |         uint256 price = d.packs.quote(112);\n    |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n --> test/Gas.t.sol:9:9:\n  |\n9 |         uint256 price = d.packs.price();\n  |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Gas.t.sol:75:9:\n   |\n75 |         uint256 q = d.packs.quote(112);\n   |         ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Invariants.t.sol:56:9:\n   |\n56 |         uint256 price = d.packs.price();\n   |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Items.t.sol:76:9:\n   |\n76 |         uint256 cost = d.packs.quote(112);\n   |         ^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/Items.t.sol:106:9:\n    |\n106 |         uint256 q = d.packs.quote(16);\n    |         ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/LazyAccounting.t.sol:186:13:\n    |\n186 |             uint256 quote = d.packs.quote(112);\n    |             ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/LazyAccounting.t.sol:421:9:\n    |\n421 |         uint256 quote = d.packs.quote(112);\n    |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Packs.t.sol:37:9:\n   |\n37 |         uint256 quote = d.packs.quote(200);\n   |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Packs.t.sol:64:9:\n   |\n64 |         uint256 q = d.packs.quote(6);\n   |         ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Pause.t.sol:35:9:\n   |\n35 |         uint256 q = d.packs.quote(1);\n   |         ^^^^^^^^^\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n  --> test/Registry.t.sol:49:21:\n   |\n49 |     function _fresh(LocalApplicationFactory f) private returns (GameRegistry) {\n   |                     ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Regression.t.sol:73:9:\n   |\n73 |         uint256 previous = d.items.data(id).durability;\n   |         ^^^^^^^^^^^^^^^^\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> test/SwarmDeskV37.t.sol:485:65:\n    |\n485 |     function _registryArgs(address params, bytes32 starterRoot, address factory) private view returns (bytes memory) {\n    |                                                                 ^^^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/V33.t.sol:254:13:\n    |\n254 |             uint256 q = d.packs.quote(16);\n    |             ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/V33.t.sol:431:9:\n    |\n431 |         uint256 price = d.packs.price();\n    |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/V34.t.sol:78:9:\n   |\n78 |         uint256 q = d.packs.price();\n   |         ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/V39.t.sol:184:9:\n    |\n184 |         LocalApplicationFactory f = LocalApplicationFactory(address(d.registry.factory()));\n    |         ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> src/FarmRewards.sol:149:5:\n    |\n149 |     function ready() public view returns (bool) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to view\n   --> test/Base.t.sol:106:5:\n    |\n106 |     function oracleFixture() internal returns (SwarmDesk.OracleConfig memory o) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to view\n   --> test/AuditV315.t.sol:187:5:\n    |\n187 |     function testFixtureDeskBoundAgainstItsTokenLaunchRecord() public {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/fork/RehearsalV311.t.sol:224:5:\n    |\n224 |     function _oracle() internal view returns (SwarmDesk.OracleConfig memory o) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/fork/RehearsalV311.t.sol:283:5:\n    |\n283 |     function _mineHookSalt(bytes memory initCode) internal view returns (bytes32 salt, address hook) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":37745,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/RobinhoodFork.t.sol:RobinhoodForkTest\n[SKIP] testForkArbSysAndHistoricalHash() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 195.94µs (72.57µs CPU time)\n\nRan 2 tests for test/Clock.t.sol:ClockTest\n[PASS] testLocalEvmFutureBlockAnd256BlockBoundary() (gas: 225376)\n[PASS] testRobinhoodUsesArbSysNotL1EstimateAndHandlesExpiry() (gas: 238560)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 477.22µs (228.12µs CPU time)\n\nRan 2 tests for test/V310.t.sol:ToolchainPinsV310Test\n[PASS] testEveryModuleOfThisBuildMatchesOneToolchainPin() (gas: 168471)\n[PASS] testPinsAreOneToolchainAndRejectUnknownCode() (gas: 164239)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.72ms (2.25ms CPU time)\n\nRan 1 test for test/PredictionV34.t.sol:PredictionV34Test\n[PASS] testFullGraphPredictsPoolBeforeRegistryDeployment() (gas: 4162727)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 9.40ms (695.04µs CPU time)\n\nRan 1 test for test/DeployGateV314.t.sol:DeployGateV314Test\n[PASS] testAllLaunchConstructorsWorkWithNoProtocolCode() (gas: 47862067)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 12.84ms (12.66ms CPU time)\n\nRan 4 tests for test/LaunchIntakeV317.t.sol:LaunchIntakeV317Test\n[PASS] testEarlyPaidCallbackFailsAndExpiryDoesNotRefundOrReopenSlot() (gas: 5142047)\n[PASS] testPaidCallbackStoresUnder200kAfterRoleOneRegistration() (gas: 4799438)\n[PASS] testRegulatorStoresBeforeRoleOneButExecutionWaitsForModules() (gas: 444967)\n[PASS] testStreamZeroRevertsThenSameAttestationStoresAfterRoleOneRegistration() (gas: 4790718)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 15.84ms (5.27ms CPU time)\n\nRan 3 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] testConstructorRejectsMissingInputsAndDoesNotCallExternalContracts() (gas: 3994)\n[PASS] testForeignCallerDoesNotGetAnyAuthority() (gas: 43053059)\n[PASS] testImmutableGraphAndEip170Sizes() (gas: 187323)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 19.01ms (5.43ms CPU time)\n\nRan 6 tests for test/CivicV35.t.sol:CivicV35Test\n[PASS] testBillboardsBidRefundTextRulesAndPoolOnly() (gas: 945608)\n[PASS] testBlackMarketDescendingLimitedAndPause() (gas: 3828638)\n[PASS] testCollapseSuccessAndSingleOutageFailure() (gas: 810762)\n[PASS] testDormantDisabledAndNoticeOnce() (gas: 303076)\n[PASS] testOnceSeasonBoostBoundsAndSnapshot() (gas: 1722528)\n[PASS] testWarFreezeScoresConservationAndPayoutOnlyOnce() (gas: 1365382)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 19.24ms (11.45ms CPU time)\n\nRan 5 tests for test/Registry.t.sol:RegistryTest\n[PASS] testAllModulePinsMatchExactPinnedCompilerArtifacts() (gas: 1068880)\n[PASS] testAuthenticatedEnrollmentRejectsUncreatedWrongCodeAndWrongRegistry() (gas: 2930598)\n[PASS] testConstructorAcceptsEmptyGraphWithoutExternalCalls() (gas: 13657)\n[PASS] testCounterfeitRuntimeAtAnotherFactoryCannotEnroll() (gas: 1542191)\n[PASS] testCounterfeitRuntimeWithPoisonedCreditCannotEnroll() (gas: 5876476)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 11.25ms (3.92ms CPU time)\n\nRan 3 tests for test/HookBinding.t.sol:HookBindingTest\n[PASS] testHoldBeforeGameExistsThenBindOnceAndFlushExactStreams() (gas: 43434444)\n[PASS] testLookAlikeCannotBindEvenWhenTeamCalls() (gas: 1907686)\n[PASS] testWrongRouterAndMissingCodeRejectedBeforePermanentBind() (gas: 41150107)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 21.65ms (11.66ms CPU time)\n\nRan 6 tests for test/ForeignTokenTwin.t.sol:ForeignTokenTwinTest\n[PASS] testBinderBindsTheGenuineRegistryThenAlreadyDone() (gas: 2793358)\n[PASS] testBinderCannotBypassAnyProof() (gas: 7228653)\n[PASS] testForeignTwinCannotBindFromTheAttacker() (gas: 1433024)\n[PASS] testForeignTwinIsSelfConsistentAndPassesEveryProofExceptTheBinder() (gas: 137061)\n[PASS] testNoNonBinderCanBindEitherRegistry() (gas: 2005687)\n[PASS] testZeroBinderRevertsAtConstruction() (gas: 673051)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 21.70ms (9.85ms CPU time)\n\nRan 5 tests for test/ReviewV34.t.sol:ReviewV34Test\n[PASS] testCanonicalCompetingRegistryCannotTakeOverBinding() (gas: 9443175)\n[PASS] testDustBuyCannotConsumeGlobalBuyInterval() (gas: 336156)\n[PASS] testLateGreenEntrySettlesWithinReservedEnvelope() (gas: 4441470)\n[PASS] testMeaningfulSmallBuyCanUseLessThanMaximumBatch() (gas: 263646)\n[PASS] testSameConfigurationAtUncommittedCoordinatesCannotBind() (gas: 9529723)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 24.11ms (12.96ms CPU time)\n\nRan 5 tests for test/KeeperProfit.t.sol:KeeperProfitTest\n[PASS] testPaidPackEntropyKeeperProfit() (gas: 1182284)\nLogs:\n  paid pack entropy execution gas: 139616\n  paid pack entropy bounty wei: 3380475000000\n  paid pack entropy execution plus 21000 gas cost wei: 3212320000000\n\n[PASS] testPlanEntropyKeeperProfit() (gas: 1665588)\nLogs:\n  plan entropy execution gas: 163211\n  plan entropy bounty wei: 4474800000000\n  plan entropy execution plus 21000 gas cost wei: 3684220000000\n\n[PASS] testSeasonFinalizeThreeWinnersAndPrizeKeeperProfit() (gas: 3451194)\nLogs:\n  season finalize three winners and prize execution gas: 644073\n  season finalize three winners and prize bounty wei: 15825700000000\n  season finalize three winners and prize execution plus 21000 gas cost wei: 13301460000000\n\n[PASS] testSeasonPrepareIsConstantUnpaidWork() (gas: 1342777)\n[PASS] testStarterEntropyKeeperProfit() (gas: 324487)\nLogs:\n  starter entropy execution gas: 142744\n  starter entropy bounty wei: 3380150000000\n  starter entropy execution plus 21000 gas cost wei: 3274880000000\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 25.66ms (13.29ms CPU time)\n\nRan 6 tests for test/EndowmentEscrowV38.t.sol:EndowmentEscrowV38Test\n[PASS] testConstructorRejectsMissingInputs() (gas: 3911)\n[PASS] testForwardRejectsBadProofs() (gas: 2647974)\n[PASS] testForwardRequiresBalance() (gas: 748474)\n[PASS] testForwardSendsWholeBalanceOnceToAuthenticatedPoolAndFundsEndowment() (gas: 1702540)\n[PASS] testForwardWithRealEndowmentActivatesDrip() (gas: 12904786)\n[PASS] testTwinWithForeignTokenCannotDrainEscrow() (gas: 12918283)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 29.03ms (16.47ms CPU time)\n\nRan 3 tests for test/StandardAdapter.t.sol:StandardAdapterTest\n[PASS] testExistingHookKeyPreservedAndNoExtraFee() (gas: 330662)\n[PASS] testRequiresThirtyMinutesFreshOracleAndAuthorizedCallback() (gas: 198351)\n[PASS] testSettlementSlippageFailurePreservesCredits() (gas: 240594)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.87ms (1.10ms CPU time)\n\nRan 5 tests for test/fork/RehearsalV311.t.sol:RehearsalV311Test\n[SKIP] testRehearsalAttestedAnswerChangesPlanWithinBand() (gas: 0)\n[SKIP] testRehearsalGasPerLaunchUnderPlatformCeiling() (gas: 0)\n[SKIP] testRehearsalKeeperPassAdvancesEpochsRevealsEntropyAndClaimFeesPaysTeam() (gas: 0)\n[SKIP] testRehearsalLaunchTaxThenOnePercentAndSurcharge() (gas: 0)\n[SKIP] testRehearsalPacksOpenOneHourAfterLaunch() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 383.95µs (34.16µs CPU time)\n\nRan 5 tests for test/AuditV315.t.sol:AuditV315Test\n[PASS] testAttackerLaunchRecordNamesAnotherTokenAndIsRefused() (gas: 10743754)\n[PASS] testFakeMarketEchoingDeskTokenAndHashCannotBind() (gas: 6952035)\n[PASS] testFixtureDeskBoundAgainstItsTokenLaunchRecord() (gas: 58275)\n[PASS] testRealHookRecordedByTheLaunchFactoryBinds() (gas: 12051879)\n[PASS] testRecordWithOtherHookOrOtherPairCurrencyIsRefused() (gas: 6245556)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 32.34ms (16.15ms CPU time)\n\nRan 7 tests for test/V33.t.sol:LaunchProtectionTest\n[PASS] testBuyTaxHasImmutableSteps() (gas: 97524)\n[PASS] testLaunchTaxChargedAndRoutedEntirelyToPool() (gas: 227992)\n[PASS] testNoBuySizeLimitAtAnyLaunchStep() (gas: 1690997)\n[PASS] testNormalBuyAfterDecayHasNoLaunchTax() (gas: 1479403)\n[PASS] testSellsPayNormalFeeDuringLaunch() (gas: 339655)\n[PASS] testSnipersSplittingBuysStillPayTheCurve() (gas: 655730)\n[PASS] testViewsBeforeInitialization() (gas: 4727264)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 28.02ms (5.87ms CPU time)\n\nRan 2 tests for test/AutoRepairReviewV35.t.sol:IndependentAutoRepairReview\n[PASS] testAutomaticRepairRecordsHistoricalWeekBeforeCompletion() (gas: 5411876)\n[PASS] testLateAutomaticRepairCannotReopenSeasonEligibility() (gas: 4275820)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 43.49ms (28.88ms CPU time)\n\nRan 8 tests for test/PhasedReleaseV36.t.sol:PhasedReleaseV36Test\n[PASS] testBillboardsDisabledThenEnabled() (gas: 414524)\n[PASS] testEnableIsNoticedOnceNeverOffAndSwarmOnly() (gas: 355991)\n[PASS] testEnhancementDisabledThenEnabledOnce() (gas: 1098908)\n[PASS] testEverythingDeploysDisabledAndCoreStillWorks() (gas: 8179262)\n[PASS] testFuzzUnannouncedFeatureCannotBeEnabled(uint256) (runs: 256, μ: 30158, ~: 30004)\n[PASS] testLocksStakeAndLobbyDisabledThenEnabled() (gas: 2861203)\n[PASS] testPotDisabledFollowsV34RoutingThenEnabled() (gas: 455827)\n[PASS] testReservedEventsDisabledThenEnabled() (gas: 557745)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 47.03ms (37.40ms CPU time)\n\nRan 2 tests for test/GridV35.t.sol:GridV35Test\n[PASS] testGreenAndCheapBothFavorTheStableDistrict() (gas: 4110886)\n[PASS] testReservedEventsHaveZeroLaunchWeightAndPlanOnlyWhenEnabled() (gas: 723024)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 28.85ms (8.62ms CPU time)\n\nRan 3 tests for test/PotV35.t.sol:PotV35Test\n[PASS] testPotDepositRequiresActualTokensAndAuthority() (gas: 256924)\n[PASS] testPotSplitAndLotteryCommitSurvivesFullInventory() (gas: 11851210)\n[PASS] testPotUnclaimedRolloverOnlyAfterFourWeeksNoDoubleClaim() (gas: 6429769)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 27.30ms (19.77ms CPU time)\n\nRan 1 test for test/LaunchL1V317.t.sol:LaunchL1V317Test\n[PASS] testExactL1PairDeploysTogetherOnEmptyRobinhoodChain() (gas: 24816126)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 40.28ms (40.19ms CPU time)\n\nRan 8 tests for test/V39.t.sol:V39Test\n[PASS] testBaseDepositsAreEntirelyRewardEth() (gas: 190166)\n[PASS] testGridAcceptsSeverityFromThreeThousandAndRejectsBelow() (gas: 2948508)\n[PASS] testHookAddsExactlyOnePercentOnBuysAndSellsAfterLaunchWindow() (gas: 2180219)\n[PASS] testHookHasNoNetworkShareRecipientOrWithdrawal() (gas: 107668)\n[PASS] testMarketFactoryConfigHasNoNetworkRecipient() (gas: 5996094)\n[PASS] testRegistryAcceptsEitherToolchainPinAndNothingElse() (gas: 590544)\n[PASS] testSellSurchargeStillProgressiveAndCappedAtFifteenPercent() (gas: 1832600)\n[PASS] testStepLaunchTaxUnchangedAndFullyToRewards() (gas: 1291729)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 37.01ms (23.66ms CPU time)\n\nRan 2 tests for test/Factory.t.sol:FactoryTest\n[PASS] testFactoryInvalidSearchRange() (gas: 4937)\n[PASS] testHookFactoryFlagsImmutableConfigAndIdempotence() (gas: 7543837)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 77.21ms (61.69ms CPU time)\n\nRan 4 tests for test/OracleConformanceV37.t.sol:OracleConformanceV37Test\n[PASS] testAcceptsOriginalProtocolSignature() (gas: 17934)\n[PASS] testDigestMatchesUnmodifiedProtocolVector() (gas: 13636)\n[PASS] testFreshVectorSignerSignature() (gas: 30385)\n[PASS] testSelectorsExactlyMatchLiveProtocol() (gas: 3520)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.04ms (332.11µs CPU time)\n\nRan 3 tests for test/Pause.t.sol:PauseTest\n[PASS] testOnlySwarmBoundedDurationAndCannotExtendPause() (gas: 242972)\n[PASS] testSalePausedWhileEntropyClaimsWithdrawalsAndEpochsContinue() (gas: 15148717)\n[PASS] testUnpauseCannotResetNextPauseCooldown() (gas: 194647)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 38.73ms (31.21ms CPU time)\n\nRan 14 tests for test/V34.t.sol:V34Test\n[PASS] testBestFarmCapsAbsoluteSpendAndBreaksTiesByAddress() (gas: 4665724)\n[PASS] testBestFarmNeedsTwentyEpochsAndUsesCappedAbsoluteSpend() (gas: 4144232)\n[PASS] testBuybackSlippage150BpsMaxAndIntervalCannotBeBypassed() (gas: 756212)\n[PASS] testDonationsAndOrdinaryInflowsCannotPretendToBeEndowment() (gas: 1520675)\n[PASS] testEntropyAt256BoundaryAndAt257RearmsWithoutPayOrMint() (gas: 3283396)\n[PASS] testFirstRewardStartsCurrentEpochAtHalfTimeAndSnapshotCannotBeReplaced() (gas: 4843822)\n[PASS] testFreeFarmDoesNotDiluteDistrictOrClaimPaidPrize() (gas: 4739687)\n[PASS] testGameReadinessBothChecksRollbackEthAndTokenPurchase() (gas: 3618362)\n[PASS] testHookUninitializedCannotOpenOrStartEpochAndCallerCannotStartClock() (gas: 5889458)\n[PASS] testLaunchTaxExactBoundaries() (gas: 5772694)\n[PASS] testMythicGateEvaluatedAtRevealNotAtPayment() (gas: 1624053)\n[PASS] testPackOpeningFollowsHookAndNotLegacyDeployTimestamp() (gas: 101151)\n[PASS] testRemainderTransferredToPredictedPoolBeforeDeploymentAndNoApprovalNeeded() (gas: 2463041)\n[PASS] testStarterEntropyRearmsAfterClaimWindowAndNoDoubleMint() (gas: 772310)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 48.41ms (61.40ms CPU time)\n\nRan 1 test for test/WarReviewV35.t.sol:IndependentWarReview\n[PASS] testWarWinnerCannotChangeAfterDeadline() (gas: 5734360)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.15ms (1.02ms CPU time)\n\nRan 1 test for test/YieldFloorReviewV35.t.sol:IndependentYieldFloorReview\n[PASS] testFirstEpochItemQuotesKeepNonzeroFloorAtCorrectScale() (gas: 673277)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 753.43µs (674.75µs CPU time)\n\nRan 8 tests for test/V4Integration.t.sol:V4IntegrationTest\n[PASS] testRealV4BuyAndSingleSwapSellTaxConserveSettlement() (gas: 2268670)\n[PASS] testRealV4ManipulatedSpotCannotInstantlySetBuybackQuote() (gas: 1909849)\n[PASS] testRealV4SmallBuyPaysPositiveKeeperMargin() (gas: 2072620)\nLogs:\n  real V4 0.2ETH buy gas: 1933461\n  real V4 buy bounty wei: 48649700000000\n\n[PASS] testRealV4SystemBuyUsesTwapAndOnlySystemFunds() (gas: 2078453)\n[PASS] testRealV4SystemSalesUseDepthTwapNormalFeesAndConserveTokens() (gas: 2247054)\n[PASS] testSystemBuybackOffsetsRecordedSellImbalance() (gas: 2509567)\n[PASS] testTenEthPoolRewardBuyAtSpotTwapIncludesLpFee() (gas: 2151623)\n[PASS] testTenEthPoolSystemSellAtSpotTwapIncludesLpFee() (gas: 4120049)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 46.44ms (12.21ms CPU time)\n\nRan 10 tests for test/Bounties.t.sol:BountiesTest\n[PASS] testBuyBountyProportionalCapNoDustCreditAndFailureRollback() (gas: 680020)\n[PASS] testEmptyRosterAndInvalidBatchReceiveNothing() (gas: 1419248)\n[PASS] testEveryWorkKindBoundedByHeartbeatAndAuthorizedProducer() (gas: 64315585)\n[PASS] testLazySettlementUnpaidAndCannotReplay() (gas: 6970276)\n[PASS] testOnlyFinalizePaidOnceAndEmptyWeekUnpaid() (gas: 2292196)\n[PASS] testPackEntropyCapturedOnceWithFullInventoryAndThroughPause() (gas: 3713527)\n[PASS] testPlanResolutionPaidOnceIncludingAdvanceForwarding() (gas: 2934177)\n[PASS] testRemovedWorkBountiesRejectedEvenFromOldProducer() (gas: 179981)\n[PASS] testStarterEntropySurvivesFullInventoryExpiryAndPauseWithoutReplayPayment() (gas: 5324477)\n[PASS] testWorkCreditRespectsZeroGasPricePriceCeilingAndUnitCap() (gas: 333726)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 111.36ms (128.80ms CPU time)\n\nRan 8 tests for test/FeesParams.t.sol:FeesParamsTest\n[PASS] testAllDefaultParamsWithinHardBounds() (gas: 1255771)\n[PASS] testBuyBackPoolOnlySlippageFailureRollbackAndDustGriefBlocked() (gas: 774066)\n[PASS] testExactEthSplitsHeartbeatCapAndPullPayments() (gas: 512724)\n[PASS] testFuzzNoStepAboveTenPercent(uint96) (runs: 256, μ: 44982, ~: 45115)\nLogs:\n  Bound result 8139\n\n[PASS] testFuzzSplitsConserveEveryWei(uint96) (runs: 256, μ: 206746, ~: 210856)\nLogs:\n  Bound result 27064108224\n\n[PASS] testHeartbeatCapFixedAtOneEth() (gas: 207904)\n[PASS] testParamsStepCooldownBoundsAuthorityAndLetter() (gas: 195823)\n[PASS] testPoolNoPublicReserveRecycleOrPayment() (gas: 135304)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 117.75ms (97.09ms CPU time)\n\nRan 8 tests for test/TwinCaptureV312.t.sol:TwinCaptureV312Test\n[PASS] testBinderChoosingTwinOrphansHonestGame() (gas: 12068523)\n[PASS] testBinderChosenTwinCannotPayAttacker() (gas: 12034732)\n[PASS] testEOAMarketCannotBind() (gas: 5759282)\n[PASS] testHonestBindThenForwardReachesHonestPool() (gas: 6532903)\n[PASS] testHookWithForeignConfigurationCannotBind() (gas: 5801492)\n[PASS] testTwinCannotWinTheBindRace() (gas: 13565631)\n[PASS] testTwinWithForeignMarketCannotBind() (gas: 12270581)\n[PASS] testTwinWithForeignTokenCannotBind() (gas: 12441654)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 30.75ms (21.57ms CPU time)\n\nRan 2 tests for test/StandardMarket.t.sol:StandardMarketTest\n[PASS] testFuzzStandardSellNeverAddsProgressiveSurcharge(uint96) (runs: 256, μ: 1803744, ~: 1813953)\nLogs:\n  Bound result 27064108224\n\n[PASS] testStandardBuyOnePercentAllToRewards() (gas: 1673242)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 243.86ms (224.38ms CPU time)\n\nRan 6 tests for test/Market.t.sol:MarketTest\n[PASS] testBuyChargesExactlyOnePercentAllToRewards() (gas: 1729871)\n[PASS] testFuzzTotalFeeHardCap(uint96) (runs: 256, μ: 1804616, ~: 1809158)\nLogs:\n  Bound result 27064108224\n\n[PASS] testOnlyManagerCorrectPoolExactInputAndHookAddress() (gas: 111195)\n[PASS] testSingleDumpIncludesItselfAndFeeDecaysWithoutGriefReset() (gas: 17162149)\n[PASS] testTwapAveragesEthPriceAcrossUnequalPrices() (gas: 2330821)\n[PASS] testTwapWarmupAndFlashManipulationResistance() (gas: 1883301)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 239.45ms (268.32ms CPU time)\n\nRan 6 tests for test/Endowment.t.sol:EndowmentTest\n[PASS] testDirectTransferCannotBypassOrBackdateDrip() (gas: 368166)\n[PASS] testExactFundingFullLinearDripAndConservation() (gas: 832168)\n[PASS] testFuzzCumulativePaymentsCannotExceedVestedPrincipal(uint32,uint128) (runs: 256, μ: 522688, ~: 524739)\nLogs:\n  Bound result 3\n  Bound result 116473885\n\n[PASS] testNoTeamDonorOrSwarmWithdrawalOrReserveAuthority() (gas: 614309)\n[PASS] testParamsSnapshotCannotAccelerateOrRelockExistingEndowment() (gas: 303686)\n[PASS] testUnderfundingCannotActivateAndDonationsStayConserved() (gas: 453428)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 255.11ms (237.46ms CPU time)\n\nRan 18 tests for test/EconomyV35.t.sol:EconomyV35Test\n[PASS] testAllEnhancementTableEndpointsAndGlobalBonusCap() (gas: 1477864)\n[PASS] testDurabilityBoundariesAndIdleNoWear() (gas: 38169181)\n[PASS] testEnhanceBurnFailureAndLevelGate() (gas: 1218579)\n[PASS] testEnhanceCapsNoticeUpwardOnlyAndThirtyDays() (gas: 355848)\n[PASS] testEnhanceCommitCannotPlaceScrapOrRetryAndLapsesAsWorstOutcome() (gas: 2423527)\n[PASS] testFeeSalesDepthSlippageCadenceAndNormalFeePot() (gas: 1737855)\n[PASS] testFreeAllowlistOnceWindowStarterScrapAndMetadata() (gas: 3102778)\n[PASS] testFreeRootRemainsFrozenAfterSevenDays() (gas: 43976)\n[PASS] testFreeRootWindowAndIndexLimit() (gas: 55991)\n[PASS] testFuzzPriceCurveDaysBounds(uint32,uint32) (runs: 256, μ: 88980, ~: 90188)\nLogs:\n  Bound result 29\n\n[PASS] testLockBonusRedistributesWithinReservedEmission() (gas: 11683136)\n[PASS] testLockEscrowNoEarlyExitAndWalletCap() (gas: 5394589)\n[PASS] testQuoteScalesLastSettlementAndHasFloor() (gas: 4285279)\n[PASS] testRepairYieldQuoteAndAutoRepairCreditsOnly() (gas: 10812876)\n[PASS] testRoomsChargeYieldDaysAndRetainAgeGates() (gas: 2618884)\n[PASS] testSystemSellDustCannotOccupyCadenceAndCappedHeartbeatReturnsTokens() (gas: 1562949)\n[PASS] testTokenOnlyGiftSplitsNoEthPeg() (gas: 1738156)\n[PASS] testZapAtomicMinOutPauseAndRefund() (gas: 1441448)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 325.11ms (307.81ms CPU time)\n\nRan 5 tests for test/FarmDailyBasisV317.t.sol:FarmDailyBasisV317Test\n[PASS] testBasisRisesAtOnceToAHigherSettledYield() (gas: 15550655)\n[PASS] testDecayConstantIsExposed() (gas: 8403)\n[PASS] testProRataEntryEpochIsScaledToItsFullEpochEquivalent() (gas: 8748921)\n[PASS] testStarvingForManyEpochsDecaysGeometricallyNotToTheFloor() (gas: 28087075)\n[PASS] testZeroNetEpochOnlyDecaysTheBasisByOneStep() (gas: 14591209)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 327.41ms (246.66ms CPU time)\n\nRan 1 test for test/EndowmentGame.t.sol:EndowmentGameTest\n[PASS] testRealMiningCannotSpendFutureEndowment() (gas: 130998353)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 300.99ms (288.70ms CPU time)\n\nRan 1 test for test/StandardV4Integration.t.sol:StandardV4IntegrationTest\n[PASS] testStandardAdapterRealPoolPaysExistingHookExactlyOnce() (gas: 1948176)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 275.81ms (1.70ms CPU time)\n\nRan 11 tests for test/Items.t.sol:ItemsTest\n[PASS] testComputeHashSupportHashAndBonusesReplaceDuo() (gas: 4715342)\n[PASS] testDurabilityWearRepairAndEnhancementMetadataPreserved() (gas: 8393341)\n[PASS] testEquipRarityGatesAndMythicGate() (gas: 4162922)\n[PASS] testFullStackRarityCapAndRoomFlags() (gas: 7665589)\n[PASS] testInventoryMintCannotExceedCapacityAndExpansionRises() (gas: 3356807)\n[PASS] testLockedItemCannotBeScrappedUntilEpochRolls() (gas: 5989066)\n[PASS] testOffgridSavings() (gas: 2711135)\n[PASS] testPaidXpCannotBypassRoomTwoAgeGate() (gas: 3746447)\n[PASS] testRoomGatesAndLevelProgression() (gas: 78475814)\n[PASS] testScrapPaysPoolYieldAndCannotRepeat() (gas: 7561671)\n[PASS] testSoulboundOnlyOwnFarmAndNoDuplicateTypes() (gas: 2265957)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 426.24ms (434.99ms CPU time)\n\nRan 21 tests for test/SwarmDeskV37.t.sol:SwarmDeskV37Test\n[PASS] testBackupFailureUnknownFailureDeadlineAndPriceCap() (gas: 751317)\n[PASS] testBackupPullsExactPriceRecordsRequestAndRestrictsBodyAndCadence() (gas: 1207764)\n[PASS] testDeskSetHeartbeatBpsMovesFeeRouterShare() (gas: 945834)\n[PASS] testEmptyChainConstructorAndAuthenticatedBindingRejectSpoofs() (gas: 12683178)\n[PASS] testEventClampingAndFallbackWithoutAnswer() (gas: 1117363)\n[PASS] testExpiredOldSlotOldEpochAndUnexecutedAnswersNeverAct() (gas: 852773)\n[PASS] testFlatConstructorRejectsUnusedPackedBits() (gas: 7335783)\n[PASS] testForgedTamperedWrongSignerWrongDomainAndCallerRejected() (gas: 359833)\n[PASS] testFutureIssueWrongTypeMalformedLengthAndPriceNeverConsume() (gas: 327553)\n[PASS] testFuzzEveryParamHardBoundsAndTenPercentStep(uint8,uint248) (runs: 256, μ: 475999, ~: 477883)\nLogs:\n  Bound result 3\n\n[PASS] testNextSlotAcceptsSameQuestionAndChangedExecutionBytesReject() (gas: 1146136)\n[PASS] testNoAdminPathsAndEntireGraphUsesDesk() (gas: 428356)\n[PASS] testNoopRegulatorAcceptedAndParamsCooldownPreserved() (gas: 452656)\n[PASS] testRegulatorClampsParamsAnnouncesPhasesAndThirtyDayCaps() (gas: 1146623)\n[PASS] testRegulatorSkipsOutOfRangeKeysInsteadOfClampingToFortyFive() (gas: 501093)\n[PASS] testReplayDifferentSourceAndSecondAnswerSameSlotIgnored() (gas: 1068212)\n[PASS] testRobinhoodNativeClockCallbackWithin200k() (gas: 352907)\n[PASS] testScheduleDeliveryStoresUnder200kThenExecutesTwoPlans() (gas: 984580)\n[PASS] testSubmitRelayAcceptsAttestedAnswerFromAnyoneOnce() (gas: 1092075)\n[PASS] testSubmitRelayRejectsForgedWrongQuestionStaleAndMalformed() (gas: 1843104)\n[PASS] testWrongQuestionUnknownRequestWeakPanelAndWindowRejected() (gas: 364850)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 392.31ms (402.47ms CPU time)\n\nRan 3 tests for test/Gas.t.sol:GasTest\n[PASS] testGasCommonActions() (gas: 10873117)\nLogs:\n  buy token pack: 925868\n  open one pack: 514873\n  equip: 966814\n  repair wallet: 614735\n  enhancement commit: 568464\n  expand: 390489\n  token pack wallet: 655187\n  withdraw: 255483\n  unequip: 407017\n\n[PASS] testGasFullFarmLongIdleBoundedChunks() (gas: 119295605)\nLogs:\n  settle full 24-item farm eight epochs after 40 idle: 12496054\n\n[PASS] testGasTypicalFarmSettlementHasNoBounty() (gas: 8944774)\nLogs:\n  settle typical three-item farm one epoch: 923830\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 549.23ms (569.66ms CPU time)\n\nRan 9 tests for test/Packs.t.sol:PacksTest\n[PASS] testExactPaymentAndFutureBlockRequired() (gas: 1671228)\n[PASS] testExactRarityThresholdsAndMythicGate() (gas: 282935)\n[PASS] testExpiryRearmsWithoutMintingAndInventoryOpeningLimit() (gas: 3797222)\n[PASS] testFuzzVrgdaAlwaysBounded(uint32,uint32) (runs: 256, μ: 61875, ~: 63085)\nLogs:\n  Bound result 195287282\n\n[PASS] testItemTypeDistributionExact() (gas: 626492)\n[PASS] testNoWalletGlobalOrTokenPackDailyLimit() (gas: 4392810)\n[PASS] testStarterWindowProofTokenIdOnceAndInventoryFailureRetry() (gas: 881490)\n[PASS] testTokenPackSameQuoteAndSplitWhenUsingWalletOrCredits() (gas: 76592671)\n[PASS] testVrgdaInitialStepDecayFloorCeilingAndBulkPricing() (gas: 1299987)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 578.69ms (613.63ms CPU time)\n\nRan 6 tests for test/Regression.t.sol:RegressionTest\n[PASS] testCableRepairRestoresOnlyRemainingHalfEpoch() (gas: 11818095)\n[PASS] testEmptyEpochPreservesLastSettledRateButResetsScrapAllowance() (gas: 11008366)\n[PASS] testFuzzCableRepairBlendHandlesNonMonotonicRarityBonuses(uint16) (runs: 256, μ: 1374167, ~: 1374014)\nLogs:\n  Bound result 1\n\n[PASS] testRegisterOnlyAccountsDoNotAddSettlementWorkAndEmptyFarmCanRetire() (gas: 2037709)\n[PASS] testRepairAndPaidPackCannotRetroactivelyBoostEpoch() (gas: 9562743)\n[PASS] testUnlimitedFreshPacksCannotDrainPoolByScrapping() (gas: 9668475)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 613.05ms (653.34ms CPU time)\n\nRan 6 tests for test/L1CustodyV317.t.sol:L1CustodyV317Test\n[PASS] testConstructorRejectsFactoryAsDesk() (gas: 3783)\n[PASS] testForwardTransferCallbackCannotReenterOrDuplicatePayment() (gas: 7742635)\n[PASS] testFuzzEveryOutOfRangeCoordinatePreservesCustody(uint8,uint256) (runs: 512, μ: 1572886, ~: 1570506)\n[PASS] testFuzzTransferFailureRollsBackAndSameProofCanRetry(uint256) (runs: 512, μ: 1783868, ~: 1783620)\nLogs:\n  Bound result 461911131976276026404996288\n\n[PASS] testOnlyCanonicalTokenMovesAndNoAllowanceIsGranted() (gas: 1864042)\n[PASS] testZeroBalanceFailureDoesNotPreventLaterOneWeiForward() (gas: 1807576)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 657.92ms (884.06ms CPU time)\n\nRan 5 tests for test/AuditV314.t.sol:AuditV314Test\n[PASS] testDustAmountCannotReduceExecutedBatchAndEmptyQueueReverts() (gas: 1383695)\n[PASS] testLaterSameEpochCreditKeepsEarlierTaxVintage() (gas: 608585)\n[PASS] testLockInsertionWalkIsBoundedAndFailureIsAtomic() (gas: 30159768)\n[PASS] testOnlyFarmerCanRetireEvenAnEmptyFarm() (gas: 4306920)\n[PASS] testStaleSellAmountUsesCurrentDepthAndEnforcesCurrentMinimum() (gas: 1624852)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 1.08s (110.85ms CPU time)\n\nRan 7 tests for test/HeartbeatBpsV313.t.sol:HeartbeatBpsV313Test\n[PASS] testFuzzAnyShareConservesEveryWeiAndNeverMovesTeamOrPot(uint16,uint96) (runs: 256, μ: 1362926, ~: 1528351)\nLogs:\n  Bound result 203\n  Bound result 1130525\n\n[PASS] testLaunchDefaultIsTwoPercentAndSplitUnchanged() (gas: 230935)\n[PASS] testLoweredShareBackToFloorAndFloorIsHard() (gas: 401104)\n[PASS] testMaximumShareWithPotEnabledIsClippedToWhatIsLeft() (gas: 1867739)\n[PASS] testOnlyTheSwarmWithinBoundsStepAndCooldownCanMoveTheShare() (gas: 341795)\n[PASS] testRaisedShareStillStopsAtTheOneEthCap() (gas: 480520)\n[PASS] testSwarmSet220CreditsTwoPointTwoPercentOfSurchargeAndTokens() (gas: 543701)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 1.19s (1.19s CPU time)\n\nRan 13 tests for test/Events.t.sol:EventsTest\n[PASS] testCheapTariffAppliesCitywide() (gas: 6431880)\n[PASS] testColdPowerFireImmuneAndCleanPowerSurgeImmune() (gas: 7916395)\n[PASS] testFallbackAndExpiredSeedIndependentOfSwarmNumber() (gas: 1788804)\n[PASS] testFireNoCoolingZeroYieldColdPowerImmune() (gas: 6156432)\n[PASS] testGreenWaveRaisesDistrictMiningTenPercent() (gas: 6433957)\n[PASS] testLobbyOwnDistrictSplitDecayAndMinimumWeight() (gas: 1083530)\n[PASS] testOutageAndOffgridRoomMitigation() (gas: 7068792)\n[PASS] testPlansOnlyNextTwoOnceAndBoundedSeverity() (gas: 344926)\n[PASS] testRollingCapsAndInitialPositiveQuotaWithHostilePlans() (gas: 102269963)\n[PASS] testSurgeCanDestroyCommonButNeverLegendary() (gas: 6422908)\n[PASS] testSurgeDamagesExactlyOneItemAndCleanPowerImmune() (gas: 6305934)\n[PASS] testSurgeNeverDestroysLegendaryOrMythic() (gas: 9523164)\n[PASS] testTheftRouterDisabledAndRepairRestores() (gas: 6862770)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 969.75ms (352.12ms CPU time)\n\nRan 2 tests for test/ReservedEventsV35.t.sol:ReservedEventsV35Test\n[PASS] testFuzzReservedFestivalCannotExceedFifteenPercent(uint16) (runs: 256, μ: 4927537, ~: 4927534)\n[PASS] testReservedHeatwaveExtraCoolingWearAndBothProtections() (gas: 10178642)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.22s (1.24s CPU time)\n\nRan 6 tests for test/SeasonAudit.t.sol:SeasonAuditTest\n[PASS] testAuditThresholdStrictAndNoWhaleSoftCap() (gas: 40508248)\n[PASS] testLotteryEntitlementSurvivesFullInventory() (gas: 131721528)\n[PASS] testPackSupplyDropOnlyActiveFarmsAtDoublePace() (gas: 11743280)\n[PASS] testParameterChangesCannotChangeClosedEpochBetweenBatches() (gas: 12523805)\n[PASS] testSeasonCannotFinalizeEarlyAndExpiredLotteryMustRearm() (gas: 124179117)\n[PASS] testWeeklyThreeDistinctTicketWinnersFuturePackAndBestPrize() (gas: 124934770)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 1.22s (1.29s CPU time)\n\nRan 20 tests for test/V33.t.sol:V33Test\n[PASS] testActionBeforeExpiryMovesBucketWithoutDoubleCount() (gas: 25983504)\n[PASS] testAdvanceIsConstantInExpiringFarms() (gas: 38430108)\n[PASS] testAgeCapsAtBoundaries() (gas: 204552)\n[PASS] testClaimDoesNotRecommitWhileBehind() (gas: 37239808)\n[PASS] testClaimRecommitsAndPackRecommits() (gas: 60787577)\n[PASS] testDistrictScoreAveragePerFarmAndTenPercentWalletCap() (gas: 4607489)\n[PASS] testHeartbeatCapExcessGoesToPoolAndBaseFeeIsAllRewards() (gas: 270973)\n[PASS] testIdleFarmLeavesDenominatorAfterTwelveEpochs() (gas: 23504929)\n[PASS] testLaunchTaxDepositIsAllPoolAndMarketOnly() (gas: 137567)\n[PASS] testMergeRemoved() (gas: 512630)\n[PASS] testPackLobbySellSplit88Team10Heartbeat2() (gas: 407960)\n[PASS] testPackSaleOpensSixtyMinutesAfterLaunch() (gas: 1264387)\n[PASS] testPaidXpCannotBypassAgeGates() (gas: 59083319)\n[PASS] testPaidXpCappedPerDayActivityUncapped() (gas: 13264967)\n[PASS] testPartialRoomIsClippedNotReverted() (gas: 2156541)\n[PASS] testRewardsEarnedBeforeExpiryAreNeverLost() (gas: 47725769)\n[PASS] testSingleWhaleDistrictCannotWinAlone() (gas: 4534340)\n[PASS] testSyncRecommitsFromNextEpoch() (gas: 33379218)\n[PASS] testTokenPacksAlsoWaitForOpening() (gas: 59864)\n[PASS] testTopSpenderTrackingIsExact() (gas: 5411751)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 1.19s (863.93ms CPU time)\n\nRan 6 tests for test/L1BindingFailuresV317.t.sol:L1BindingFailuresV317Test\n[PASS] testEveryRecordPairingMismatchIsRejected() (gas: 3403482)\n[PASS] testFuzzInvalidCoordinatesAreAtomic(uint8,uint8) (runs: 512, μ: 1524517, ~: 1523395)\nLogs:\n  Bound result 113\n\n[PASS] testFuzzMutatingPinnedCodeCannotSpendBinding(uint256,uint8,bool) (runs: 512, μ: 1527136, ~: 1526789)\nLogs:\n  Bound result 2\n  Bound result 3\n\n[PASS] testFuzzNonBinderCannotUseBinderAsTransactionOrigin(address) (runs: 512, μ: 1521035, ~: 1520994)\n[PASS] testFuzzUnrecordedL2LaunchCannotAuthenticateAnEchoMarket(uint64) (runs: 512, μ: 1642868, ~: 1642800)\nLogs:\n  Bound result 18446744073709551522\n\n[PASS] testMissingParamsCodeFailsBeforeBindingThenCanBeRestored() (gas: 1571239)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 1.22s (2.12s CPU time)\n\nRan 2 tests for test/L1DeskInvariantV317.t.sol:L1DeskInvariantV317Test\n[PASS]\nL1DeskInvariantV317Test invariants:\n[PASS] invariant_DonationsEqualHeldTokensPlusPaidBackups\n[PASS] invariant_FailureCannotReopenPaidSlotOrLeaveAllowance\n L1DeskInvariantV317Test invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------------+-----------------+-------+---------+----------╮\n| Contract          | Selector        | Calls | Reverts | Discards |\n+==================================================================+\n| L1DeskHandlerV317 | ask             | 1135  | 0       | 0        |\n|-------------------+-----------------+-------+---------+----------|\n| L1DeskHandlerV317 | badBody         | 1176  | 0       | 0        |\n|-------------------+-----------------+-------+---------+----------|\n| L1DeskHandlerV317 | donate          | 1213  | 0       | 0        |\n|-------------------+-----------------+-------+---------+----------|\n| L1DeskHandlerV317 | elapse          | 1174  | 0       | 0        |\n|-------------------+-----------------+-------+---------+----------|\n| L1DeskHandlerV317 | expire          | 1148  | 0       | 0        |\n|-------------------+-----------------+-------+---------+----------|\n| L1DeskHandlerV317 | failRequest     | 1169  | 0       | 0        |\n|-------------------+-----------------+-------+---------+----------|\n| L1DeskHandlerV317 | transferFailure | 1177  | 0       | 0        |\n╰-------------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 31687303715884105727\n  Bound result 6633\n  Bound result 3893\n  Bound result 41000000000000000000\n  Bound result 28792003956564819968\n  Bound result 7999\n  Bound result 21289\n  Bound result 11547\n  Bound result 93007094423415997806\n  Bound result 16383\n  Bound result 56516\n  Bound result 87\n  Bound result 1076\n  Bound result 7315\n  Bound result 16777217\n\n[PASS] testHandlerPaidFailureAndExpiryDoNotRefundOrReopenSlot() (gas: 1241133)\nLogs:\n  Bound result 3600\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.95s (1.93s CPU time)\n\nRan 9 tests for test/Epochs.t.sol:EpochsTest\n[PASS] testCannotAdvanceEarlyAndBountyOnce() (gas: 2513731)\n[PASS] testClaimsEveryEpochAndRedistributionIsNextEpoch() (gas: 12010062)\n[PASS] testGasAdvanceIndependentOfRoster() (gas: 895978527)\nLogs:\n  advance empty roster: 1284212\n  advance 1000 farms: 1473392\n\n[PASS] testNoCatchupEmissionDuringGap() (gas: 6270392)\n[PASS] testNoRetroactiveEquipmentAndBoundedBatches() (gas: 5790681)\n[PASS] testNoWhaleCapHashShares() (gas: 10182869)\n[PASS] testReferralOneLevelSetOnceNoSelf() (gas: 7531610)\n[PASS] testTaxCurveExactAndFloor() (gas: 34112)\n[PASS] testWithdrawFailureRollsBackAndReentrancyCannotClaimTwice() (gas: 7446317)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 5.44s (5.52s CPU time)\n\nRan 2 tests for test/L1EscrowInvariantV317.t.sol:L1EscrowInvariantV317Test\n[PASS]\nL1EscrowInvariantV317Test invariants:\n[PASS] invariant_CustodyMatchesIndependentDepositAndExitLedger\n[PASS] invariant_ExitIsOneShotAndOnlyCanonicalTokenMoves\n L1EscrowInvariantV317Test invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------+-----------------+-------+---------+----------╮\n| Contract            | Selector        | Calls | Reverts | Discards |\n+====================================================================+\n| L1EscrowHandlerV317 | callbackForward | 3290  | 0       | 0        |\n|---------------------+-----------------+-------+---------+----------|\n| L1EscrowHandlerV317 | deposit         | 3308  | 0       | 0        |\n|---------------------+-----------------+-------+---------+----------|\n| L1EscrowHandlerV317 | failedTransfer  | 3230  | 0       | 0        |\n|---------------------+-----------------+-------+---------+----------|\n| L1EscrowHandlerV317 | forward         | 3289  | 0       | 0        |\n|---------------------+-----------------+-------+---------+----------|\n| L1EscrowHandlerV317 | rejectedProof   | 3267  | 0       | 0        |\n╰---------------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 9\n  Bound result 30000000000000000000\n  Bound result 32534162\n  Bound result 1319940630814975927667445244180947211582936073459973792410058512977127\n  Bound result 405685963460832\n  Bound result 5804\n  Bound result 113284100\n  Bound result 57896044618658097711785492504343953926634992332820282019728792003956564819968\n  Bound result 800000\n  Bound result 28000\n  Bound result 112\n  Bound result 452312848583266388373324160190187140051835877600158453279131187530910662655\n  Bound result 731687303715884105727\n  Bound result 1\n  Bound result 3062\n  Bound result 37000000000000000000\n  Bound result 209817139312686147544\n  Bound result 1290545738737391913346405505691599553337688339\n  Bound result 257\n  Bound result 41\n  Bound result 55042409466306505056786583079534469005465123638637189911756489477908360549942\n  Bound result 17000000000000000000\n  Bound result 50000000000000\n  Bound result 88\n  Bound result 501000000000000000000\n  Bound result 6575\n  Bound result 61\n  Bound result 254970499848944077689\n\n[PASS] testHandlerExercisesFailedExitSuccessAndLateDeposit() (gas: 7404836)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 8\n  Bound result 1\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 9.39s (9.38s CPU time)\n\nRan 12 tests for test/AuditV317.t.sol:AuditV317Test\n[PASS] testAdvanceEpochDefersUntilTheRearmedEventResolves() (gas: 1433172)\n[PASS] testDestroyedItemResyncWaitsUntilTheFarmIsCaughtUp() (gas: 12580622)\n[PASS] testDestroyedItemWeightStale() (gas: 10356036)\n[PASS] testEnhancementInsideWindowStillCapturesAndResolvesNormally() (gas: 1164136)\n[PASS] testEnhancementLapseEmitsResolvedAsFailureAndKeepsSoulboundChecks() (gas: 2005877)\n[PASS] testEnhancementRearmGrind() (gas: 53784157)\n[PASS] testOwnerActionClearsThePendingResync() (gas: 8345887)\n[PASS] testSubmittedPlanDiscardedAfterHashWindow() (gas: 1740590)\n[PASS] testUnlockBlockedWhileEpochStale() (gas: 895813)\n[PASS] testUnlockLiveAndCaughtUpStillResyncsWeight() (gas: 58436968)\n[PASS] testUnlockWhileBehindReturnsPrincipalAndSkipsResync() (gas: 56212427)\n[PASS] testUnplannedLapsedWindowAlsoRearmsAndNeverUsesAPrecomputableSeed() (gas: 230726)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 10.83s (618.54ms CPU time)\n\nRan 9 tests for test/LazyAccounting.t.sol:LazyAccountingTest\n[PASS] testAuditChargesTenPercentEvenAtHalfSeverityAndThresholdIsFrozen() (gas: 6161890)\n[PASS] testClaimCatchesUpWhilePacksPausedAndDoesNotEraseRemainingHistory() (gas: 25641763)\n[PASS] testExhaustedFarmCannotCollectRedistributionByRemainingIdle() (gas: 15191242)\n[PASS] testFuzzLazyEqualsIndependentEagerForRandomFarmsAndAllEvents(uint256) (runs: 256, μ: 45577180, ~: 45585337)\n[PASS] testGlobalAccumulatorAndWeightsAreSnapshottedBeforeMutations() (gas: 9311279)\n[PASS] testLateSeasonSettlementPaysMiningWithoutChangingFrozenWinners() (gas: 59490917)\n[PASS] testOneWeiMiningGreenCannotLockSettlementThroughEnvelopeRounding() (gas: 11069658)\n[PASS] testSparseMatureVintageConsumedBeforeRecentSlotAfterWrap() (gas: 43222421)\n[PASS] testStaleActionsRequireChunksAndNeverBlockGlobalAdvance() (gas: 40505475)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 10.83s (11.21s CPU time)\n\nRan 1 test for test/Invariants.t.sol:InvariantsTest\n[PASS]\nInvariantsTest invariants:\n[PASS] invariantAllowlistRootAndWalletLimit\n[PASS] invariantInventoryAndEthLiabilities\n[PASS] invariantLocksAndPotAlwaysBacked\n[PASS] invariantPriceAndParamsBounds\n[PASS] invariantReceiptsNeverForfeitOrFixMissingEntropy\n[PASS] invariantReservesBackedAndPendingCovered\n[PASS] invariantTokenConservationNoBurns\n InvariantsTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------+-----------+-------+---------+----------╮\n| Contract    | Selector  | Calls | Reverts | Discards |\n+======================================================+\n| GameHandler | advance   | 577   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | buy       | 614   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | claim     | 569   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | equip     | 578   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | expand    | 632   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | freeClaim | 569   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | fundPot   | 588   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | lock      | 612   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | resolve   | 587   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | rollover  | 587   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | settle    | 548   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | tokenPack | 563   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | unlock    | 571   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | unplace   | 597   | 0       | 0        |\n╰-------------+-----------+-------+---------+----------╯\n\nLogs:\n  Bound result 3\n  Bound result 4988\n  Bound result 150000000000000000\n  Bound result 360259408045869063709\n  Bound result 9043\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 37.60s (37.56s CPU time)\n\nRan 60 test suites in 37.60s (90.30s CPU time): 336 tests passed, 0 failed, 6 skipped (342 total tests)\n","passed":true},{"durationMs":183,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Billboards.bidBillboard(uint256,uint256,string,string)\",\"Billboards.settleBillboard(uint256,uint256)\",\"Billboards.withdrawRefund()\",\"Civic.announce(uint256,string)\",\"Civic.buyLot(uint256)\",\"Civic.claimWar(uint256)\",\"Civic.consumeCityEvent()\",\"Civic.enable(uint256)\",\"Civic.finishCollapse()\",\"Civic.finishWar()\",\"Civic.fundCollapse(uint256)\",\"Civic.fundWar(uint256)\",\"Civic.grantDistrictBoost(uint256,uint16,string)\",\"Civic.listLot(uint8,uint8,uint8)\",\"Civic.startCollapse(uint256)\",\"Civic.startWar(uint8,uint8)\",\"Economy.autoRepair(address,uint256,uint256[24])\",\"Economy.lock(uint256,uint256)\",\"Economy.unlock()\",\"EndowmentEscrow.forward(address,uint64,uint256,bytes,uint64,uint256,bytes)\",\"Enhancement.activateCap()\",\"Enhancement.announceCap(uint8,string)\",\"Enhancement.capture(uint256)\",\"Enhancement.commit(uint256,uint256,bool)\",\"Enhancement.resolve(uint256)\",\"FarmCore.activity(address,uint256,uint256,uint256)\",\"FarmCore.autoRepair(address,uint256)\",\"FarmCore.buyRoom(uint256,bool)\",\"FarmCore.buyTokenPack(bool)\",\"FarmCore.civicPurchase(address,uint256)\",\"FarmCore.claimDrop()\",\"FarmCore.expand(bool)\",\"FarmCore.grantDrop(address,bytes32)\",\"FarmCore.lobby(uint256,bool)\",\"FarmCore.paidPackBought(address,uint256,uint256)\",\"FarmCore.place(uint256,uint256,uint256)\",\"FarmCore.prepareEnhancement(address,uint256,uint256,bool)\",\"FarmCore.process(address,uint256)\",\"FarmCore.register(address)\",\"FarmCore.repair(uint256,bool)\",\"FarmCore.repairCable(bool)\",\"FarmCore.retire(address)\",\"FarmCore.scrap(uint256,uint256)\",\"FarmCore.setAutoRepair(bool,uint16)\",\"FarmCore.setReferrer(address)\",\"FarmCore.sync()\",\"FarmCore.syncFor(address)\",\"FarmCore.unplace(uint256,uint256)\",\"FarmEngine.process(address,uint256,(uint256[24],uint8[24],uint16[24],bool,uint64,uint16))\",\"FarmItems.destroy(uint256)\",\"FarmItems.equip(address,uint256)\",\"FarmItems.expand(address)\",\"FarmItems.maintain(uint256,uint16,uint8)\",\"FarmItems.mint(address,uint8,uint8,bool)\",\"FarmItems.mintDrop(address,bytes32)\",\"FarmItems.safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\",\"FarmItems.safeTransferFrom(address,address,uint256,uint256,bytes)\",\"FarmItems.unequip(address,uint256)\",\"FarmRewards.advanceEpoch()\",\"FarmRewards.award(address,uint256)\",\"FarmRewards.beginMining(address,uint256)\",\"FarmRewards.claim(uint256)\",\"FarmRewards.flagResync(address)\",\"FarmRewards.initialize(address)\",\"FarmRewards.recordSales(uint256)\",\"FarmRewards.releasePrize(uint256)\",\"FarmRewards.scrap(address,uint256,uint256)\",\"FarmRewards.setReferrer(address,address)\",\"FarmRewards.setWeight(address,uint256)\",\"FarmRewards.settle(address,uint256)\",\"FarmRewards.spend(address,uint256)\",\"FarmRewards.spendTo(address,uint256,address)\",\"FeeRouter.depositBaseFee()\",\"FeeRouter.depositLaunchTax()\",\"FeeRouter.depositLobby()\",\"FeeRouter.depositPack()\",\"FeeRouter.depositSellTax()\",\"FeeRouter.executeBuys(uint256,uint256)\",\"FeeRouter.executePotBuys(uint256,uint256)\",\"FeeRouter.executeSells(uint256,uint256)\",\"FeeRouter.payBounty(address)\",\"FeeRouter.payWork(address,uint8,uint256,uint256)\",\"FeeRouter.receive()\",\"FeeRouter.routeTokens(uint256)\",\"FeeRouter.withdraw()\",\"FeeRouter.zapBuy(uint256,address)\",\"GameRegistry.register(uint256,uint64,uint256,bytes)\",\"GridOperator.lobbyETH()\",\"GridOperator.resolve(uint256)\",\"GridOperator.resolveFor(uint256,address)\",\"GridOperator.shift(uint256)\",\"GridOperator.submitPlan(uint256,uint8,uint16,bytes32,string)\",\"GridOperator.tokenLobby(address,uint256)\",\"MarketFactory.deploy((address,address,int24,address,address,bytes32),bytes32)\",\"PackSale.buyPackFor(address)\",\"PackSale.buyPacksFor(address,uint256,uint256)\",\"PackSale.buyWithETH(address,uint256,uint256,uint256)\",\"PackSale.captureEntropy(uint256)\",\"PackSale.openPack(uint256)\",\"PackSale.pause(uint256)\",\"PackSale.rearm(uint256)\",\"PackSale.resolve(uint256,uint256)\",\"PackSale.rewardPack(address)\",\"PackSale.tokenPack(address)\",\"PackSale.unpause()\",\"Params.set(uint8,uint256,string)\",\"RewardPool.donate(uint256)\",\"RewardPool.fundEndowment()\",\"RewardPool.pay(address,uint256)\",\"RewardPool.recordInflow(uint256)\",\"RewardPool.recycle(uint256)\",\"RewardPool.reserve(uint256)\",\"Season.addPrize(uint256,uint256)\",\"Season.claimBest(uint256)\",\"Season.claimDistrict(uint256)\",\"Season.claimLottery(uint256)\",\"Season.complete(address,uint256)\",\"Season.depositPot(uint256)\",\"Season.finalize(uint256)\",\"Season.prepare(uint256,uint256)\",\"Season.rearm(uint256)\",\"Season.recordActivity(address,uint256,uint256,uint256)\",\"Season.recordRepair(address,uint256,uint256)\",\"Season.recordSpend(address,uint256,bool)\",\"Season.rollover(uint256)\",\"StandardAdapter.buy(uint256,address)\",\"StandardAdapter.unlockCallback(bytes)\",\"StandardMarket.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"StandardMarket.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"StandardMarket.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"StandardMarket.bindFeeRouter(address,uint64,uint256)\",\"StandardMarket.buy(uint256,address)\",\"StandardMarket.flushFees()\",\"StandardMarket.receive()\",\"StandardMarket.sell(uint256,uint256,address)\",\"StandardMarket.unlockCallback(bytes)\",\"StarterClaim.captureEntropy(uint256)\",\"StarterClaim.claim(uint256,bytes32[])\",\"StarterClaim.claimFree(uint256,bytes32[])\",\"StarterClaim.rearm(uint256)\",\"StarterClaim.resolve(uint256)\",\"SwarmDesk.askBackup(uint8,bytes)\",\"SwarmDesk.bind(address,bytes,bytes,uint64,uint8,uint64,uint8,uint64)\",\"SwarmDesk.clearExpired(bytes32)\",\"SwarmDesk.execute(uint8,bytes)\",\"SwarmDesk.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"SwarmDesk.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"SwarmDesk.submit((bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"V4Market.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"V4Market.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"V4Market.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"V4Market.bindFeeRouter(address,uint64,uint256)\",\"V4Market.buy(uint256,address)\",\"V4Market.flushFees()\",\"V4Market.receive()\",\"V4Market.sell(uint256,uint256,address)\",\"V4Market.unlockCallback(bytes)\"],\"files\":{\".gitignore\":8,\"ADAPTATION.md\":135,\"README.md\":86,\"artifacts/build-lint-v3.txt\":2369,\"artifacts/build-v3.txt\":3,\"artifacts/economic-targets-v3.json\":9,\"artifacts/fmt-v3.txt\":0,\"artifacts/foundry-v3.txt\":845,\"artifacts/funded-sensitivity/simulation-v3.json\":13928,\"artifacts/funded-sensitivity/simulation-v3.md\":51,\"artifacts/funding-sensitivity-v3.json\":342,\"artifacts/gas-actions-v3.txt\":15,\"artifacts/policy-sensitivity-v3.json\":554,\"artifacts/python-tests-v3.txt\":18,\"artifacts/regulator-example.json\":59,\"artifacts/robinhood-fork-v3.txt\":7,\"artifacts/runtime-sizes-v3.json\":23,\"artifacts/simulation-v3.json\":13928,\"artifacts/simulation-v3.md\":51,\"artifacts/tuned-funded/simulation-v3.json\":13928,\"artifacts/tuned-funded/simulation-v3.md\":51,\"artifacts/v2/README.md\":3,\"artifacts/v2/foundry-tests.txt\":178,\"artifacts/v2/offline-tests.txt\":187,\"artifacts/v2/offline-verification.json\":21,\"artifacts/v2/previous-README.md\":108,\"artifacts/v2/previous-design.md\":120,\"artifacts/v2/previous-report.md\":75,\"artifacts/v2/previous-security-review.md\":29,\"artifacts/v2/previous-simulation-assumptions.md\":52,\"artifacts/v2/robinhood-fork.txt\":7,\"artifacts/v2/rpc-probe.json\":16,\"artifacts/v2/runtime-sizes.json\":21,\"artifacts/v2/simulation.md\":95,\"artifacts/v2/verification.json\":110,\"artifacts/v31/allocation-summary.md\":6,\"artifacts/v31/baseline-budget.md\":14,\"artifacts/v31/boundary-checks.json\":10880,\"artifacts/v31/candidate-stress/simulation.json\":32636,\"artifacts/v31/evidence/factory-prediction.json\":14,\"artifacts/v31/evidence/launch-and-cost-facts.json\":130,\"artifacts/v31/evidence/standalone-hook-build.json\":38,\"artifacts/v31/final/comparison.md\":50,\"artifacts/v31/funded/comparison.md\":52,\"artifacts/v31/funded/replay.json\":290,\"artifacts/v31/funding-comparison.md\":8,\"artifacts/v31/regulator-example.json\":73,\"artifacts/v31/stress-comparison.md\":20,\"artifacts/v31/summary.json\":13,\"artifacts/v31/validation.json\":250,\"artifacts/v310/forge-test-launch.txt\":496,\"artifacts/v310/forge-test-repo-changed-suites.txt\":115,\"artifacts/v310/forge-test-repo-full-before-new-tests.txt\":437,\"artifacts/v310/pins-check.txt\":2,\"artifacts/v311/rehearsal.log\":377,\"artifacts/v312/forge-fmt.txt\":1,\"artifacts/v312/forge-test-launch.txt\":381,\"artifacts/v312/forge-test-repo.txt\":384,\"artifacts/v312/launch-creation-hashes.txt\":5,\"artifacts/v312/node-tests.txt\":10,\"artifacts/v312/pins-check.txt\":2,\"artifacts/v312/python-tests.txt\":3,\"artifacts/v312/rehearsal.log\":368,\"artifacts/v313/forge-fmt.txt\":0,\"artifacts/v313/forge-test.txt\":468,\"artifacts/v313/launch-creation-hashes.txt\":6,\"artifacts/v313/module-pins.txt\":15,\"artifacts/v313/pins-check.txt\":2,\"artifacts/v314/authority-check.txt\":1,\"artifacts/v314/consistency-check.txt\":1,\"artifacts/v314/creation-hashes.json\":21,\"artifacts/v314/deploy-gate.txt\":1,\"artifacts/v314/flatten-build.txt\":871,\"artifacts/v314/flatten-check.txt\":2,\"artifacts/v314/forge-build.txt\":4752,\"artifacts/v314/forge-fmt.txt\":0,\"artifacts/v314/forge-test.txt\":487,\"artifacts/v314/launch-creation-hashes.txt\":20,\"artifacts/v314/module-pins-check.txt\":1,\"artifacts/v314/node-tests.txt\":22,\"artifacts/v314/python-tests.txt\":39,\"artifacts/v314/rehearsal-build.log\":4895,\"artifacts/v314/rehearsal.log\":352,\"artifacts/v314/runtime-sizes.json\":21,\"artifacts/v314/swarm-pins-check.txt\":1,\"artifacts/v315/creation-hashes.json\":21,\"artifacts/v315/deploy-gate.txt\":1,\"artifacts/v315/forge-build.txt\":1062,\"artifacts/v315/forge-fmt.txt\":0,\"artifacts/v315/forge-test.txt\":412,\"artifacts/v315/launch-creation-hashes.txt\":20,\"artifacts/v315/module-pins-check.txt\":1,\"artifacts/v315/node-tests.txt\":22,\"artifacts/v315/python-tests.txt\":39,\"artifacts/v315/rehearsal-build.log\":4921,\"artifacts/v315/rehearsal.log\":387,\"artifacts/v315/runtime-sizes.json\":21,\"artifacts/v315/swarm-pins-check.txt\":1,\"artifacts/v316/creation-hashes.json\":21,\"artifacts/v316/deploy-gate.txt\":1,\"artifacts/v316/forge-build.txt\":4736,\"artifacts/v316/forge-fmt.txt\":0,\"artifacts/v316/forge-test.txt\":505,\"artifacts/v316/launch-creation-hashes.txt\":20,\"artifacts/v316/module-pins-check.txt\":1,\"artifacts/v316/node-tests.txt\":7,\"artifacts/v316/python-tests.txt\":3,\"artifacts/v316/rehearsal-build.log\":4921,\"artifacts/v316/rehearsal.log\":392,\"artifacts/v316/runtime-sizes.json\":21,\"artifacts/v316/swarm-pins-check.txt\":1,\"artifacts/v317/creation-hashes.json\":21,\"artifacts/v317/deploy-gate.txt\":1,\"artifacts/v317/forge-fmt.txt\":0,\"artifacts/v317/forge-test.txt\":442,\"artifacts/v317/launch-creation-hashes.txt\":20,\"artifacts/v317/module-pins-check.txt\":1,\"artifacts/v317/node-tests.txt\":14,\"artifacts/v317/python-tests.txt\":5,\"artifacts/v317/rehearsal-build.log\":4959,\"artifacts/v317/rehearsal.log\":392,\"artifacts/v317/runtime-sizes.json\":21,\"artifacts/v317/swarm-pins-check.txt\":1,\"artifacts/v32/contract-sizes.json\":54,\"artifacts/v32/forge-build.log\":2734,\"artifacts/v32/forge-fmt.log\":0,\"artifacts/v32/forge-test.log\":310,\"artifacts/v32/model-checks.log\":5,\"artifacts/v32/module-pins.log\":1,\"artifacts/v32/python-tests.log\":25,\"artifacts/v32/regulator-example.json\":73,\"artifacts/v32/simulation-checks.json\":11,\"artifacts/v32/simulation-checks.log\":11,\"artifacts/v32/validation.json\":61,\"artifacts/v32/verified-baseline/comparison.md\":8,\"artifacts/v32/verified-baseline/simulation.json\":22622,\"artifacts/v32/verified-sensitivities/comparison.md\":68,\"artifacts/v33/simulation.json\":116,\"artifacts/v34/build.txt\":2931,\"artifacts/v34/format.txt\":0,\"artifacts/v34/pins.txt\":1,\"artifacts/v34/python-tests.txt\":5,\"artifacts/v34/reveal-test.txt\":1,\"artifacts/v34/simulation.json\":91766,\"artifacts/v34/simulation.md\":43,\"artifacts/v34/tests.txt\":306,\"artifacts/v35/simulation.json\":22605,\"artifacts/v35/simulation.md\":104,\"artifacts/v35/verification.json\":132,\"artifacts/v36/simulation-phases.json\":179,\"artifacts/v36/simulation-phases.md\":13,\"artifacts/v37/byte-sizes.json\":131,\"artifacts/v37/verification.json\":28,\"artifacts/v39/forge-build-repo.txt\":3,\"artifacts/v39/forge-fmt.txt\":1,\"artifacts/v39/forge-test-launch.txt\":8,\"artifacts/v39/forge-test-repo.txt\":390,\"artifacts/v39/pins-check.txt\":2,\"artifacts/v39/pins.json\":68,\"artifacts/v39/runtime-sizes.json\":197,\"artifacts/v39/simulation.json\":381,\"artifacts/v39/simulation.md\":29,\"artifacts/verification-v3.json\":67,\"docs/accepted-v314.md\":10,\"docs/accepted-v315.md\":22,\"docs/accepted-v316.md\":24,\"docs/accepted-v317.md\":47,\"docs/api-v35.md\":41,\"docs/dependency-provenance.md\":9,\"docs/design.md\":69,\"docs/entropy-v34.md\":31,\"docs/launch-v31.md\":121,\"docs/launch-v314-plan.json\":191,\"docs/launch-v34.md\":44,\"docs/launch-v35.md\":40,\"docs/lazy-accounting-v32.md\":48,\"docs/m2-trust-assumption.md\":121,\"docs/oracle-v37/event.json\":1,\"docs/oracle-v37/oracle-config.json\":21,\"docs/oracle-v37/regulator.json\":1,\"docs/params-keys-v313.md\":113,\"docs/report-v3.md\":143,\"docs/report-v31.md\":128,\"docs/report-v32.md\":138,\"docs/report-v33.md\":107,\"docs/report-v34.md\":58,\"docs/report-v36.md\":89,\"docs/report-v38.md\":83,\"docs/research/b94e6839-platform-report.md\":238,\"docs/review-v31.md\":77,\"docs/review-v32.md\":32,\"docs/review-v33.md\":19,\"docs/review-v34.md\":30,\"docs/review-v35-independent.md\":69,\"docs/review-v37-independent.md\":44,\"docs/review-v39-independent.md\":105,\"docs/security-review.md\":29,\"docs/simulation-assumptions.md\":43,\"docs/simulation-v3-historical.md\":44,\"docs/simulation-v34.md\":34,\"foundry.toml\":21,\"keeper/README.md\":120,\"keeper/blackout-keeper.service\":23,\"keeper/keeper.env.example\":18,\"keeper/keeper.mjs\":578,\"keeper/lib/abi.mjs\":95,\"keeper/lib/eth.mjs\":186,\"keeper/lib/oracle.mjs\":57,\"keeper/wiring.example.json\":17,\"launch-v31.md\":3,\"launch-v36.md\":34,\"launch-v37.md\":144,\"launch-v38.md\":57,\"launch-v39.md\":249,\"launch/V4Market.sol\":1872,\"operations/dormant-v35.md\":17,\"regulator.md\":60,\"report.md\":489,\"script/Deploy.s.sol\":252,\"script/DeployMarket.s.sol\":15,\"script/PredictGame.s.sol\":49,\"script/SwarmArgs.sol\":38,\"sim/blackout_sim_v2.py\":509,\"sim/blackout_sim_v3.py\":338,\"sim/blackout_sim_v31.py\":24,\"sim/blackout_sim_v32.py\":380,\"sim/blackout_sim_v33.py\":395,\"sim/blackout_sim_v34.py\":444,\"sim/candidate_stress_v31.py\":21,\"sim/heartbeat_boundaries_v31.py\":25,\"sim/heartbeat_sweep_v31.py\":46,\"sim/policy_sensitivity_v3.py\":19,\"sim/run_v32.py\":34,\"sim/run_v33.py\":58,\"sim/run_v34.py\":54,\"sim/run_v35.py\":273,\"sim/run_v36.py\":83,\"sim/run_v39.py\":153,\"sim/tune_v3.py\":16,\"src/Billboards.sol\":135,\"src/Civic.sol\":302,\"src/Economy.sol\":222,\"src/EndowmentEscrow.sol\":111,\"src/Enhancement.sol\":164,\"src/FarmCore.sol\":611,\"src/FarmEngine.sol\":299,\"src/FarmItems.sol\":165,\"src/FarmRewards.sol\":607,\"src/FeeRouter.sol\":313,\"src/GameRegistry.sol\":101,\"src/GridOperator.sol\":276,\"src/MarketFactory.sol\":61,\"src/PackSale.sol\":293,\"src/Params.sol\":181,\"src/RewardPool.sol\":113,\"src/Season.sol\":368,\"src/StandardAdapter.sol\":77,\"src/StandardMarket.sol\":22,\"src/StarterClaim.sol\":149,\"src/SwarmDesk.sol\":548,\"src/V4Market.sol\":543,\"src/interfaces/IGame.sol\":53,\"src/interfaces/IGameRegistry.sol\":15,\"src/interfaces/ILaunchHook.sol\":7,\"src/interfaces/IV4.sol\":26,\"src/interfaces/Interfaces.sol\":20,\"src/lib/ChainClock.sol\":22,\"src/lib/EconomyMath.sol\":48,\"src/lib/Errors.sol\":13,\"src/lib/GameModule.sol\":17,\"src/lib/ItemMath.sol\":31,\"src/lib/ItemMetadata.sol\":79,\"src/lib/ModuleCode.sol\":49,\"src/lib/Robinhood.sol\":15,\"src/lib/SwarmCode.sol\":18,\"src/oracle/OracleAttestation.sol\":221,\"src/oracle/SignatureCheckerCompat.sol\":14,\"test/AuditV314.t.sol\":116,\"test/AuditV315.t.sol\":199,\"test/AuditV317.t.sol\":359,\"test/AutoRepairReviewV35.t.sol\":39,\"test/Base.t.sol\":310,\"test/Bounties.t.sol\":290,\"test/CivicV35.t.sol\":224,\"test/Clock.t.sol\":54,\"test/DeployGateV314.t.sol\":94,\"test/Deployment.t.sol\":94,\"test/EconomyV35.t.sol\":398,\"test/Endowment.t.sol\":123,\"test/EndowmentEscrowV38.t.sol\":200,\"test/EndowmentGame.t.sol\":51,\"test/Epochs.t.sol\":177,\"test/Events.t.sol\":252,\"test/Factory.t.sol\":31,\"test/FarmDailyBasisV317.t.sol\":146,\"test/FeesParams.t.sol\":135,\"test/ForeignTokenTwin.t.sol\":288,\"test/Gas.t.sol\":110,\"test/GridV35.t.sol\":66,\"test/HeartbeatBpsV313.t.sol\":149,\"test/HookBinding.t.sol\":113,\"test/Invariants.t.sol\":211,\"test/Items.t.sol\":246,\"test/KeeperProfit.t.sol\":95,\"test/L1BindingFailuresV317.t.sol\":169,\"test/L1CustodyV317.t.sol\":115,\"test/L1DeskInvariantV317.t.sol\":199,\"test/L1EscrowInvariantV317.t.sol\":180,\"test/L1V317Coverage.md\":33,\"test/LaunchIntakeV317.t.sol\":200,\"test/LaunchL1V317.t.sol\":137,\"test/LazyAccounting.t.sol\":447,\"test/Market.t.sol\":121,\"test/OracleConformanceV37.t.sol\":105,\"test/Packs.t.sol\":167,\"test/Pause.t.sol\":76,\"test/PhasedReleaseV36.t.sol\":165,\"test/PotV35.t.sol\":106,\"test/PredictionV34.t.sol\":46,\"test/Registry.t.sol\":140,\"test/Regression.t.sol\":156,\"test/ReservedEventsV35.t.sol\":41,\"test/ReviewV34.t.sol\":145,\"test/SeasonAudit.t.sol\":204,\"test/StandardAdapter.t.sol\":81,\"test/StandardMarket.t.sol\":63,\"test/StandardV4Integration.t.sol\":128,\"test/SwarmDeskV37.t.sol\":705,\"test/TwinCaptureV312.t.sol\":255,\"test/V310.t.sol\":79,\"test/V33.t.sol\":561,\"test/V34.t.sol\":315,\"test/V39.t.sol\":211,\"test/V4Integration.t.sol\":229,\"test/WarReviewV35.t.sol\":69,\"test/YieldFloorReviewV35.t.sol\":31,\"test/deploy-gate-v314.test.mjs\":42,\"test/fixtures/keeper-v39-vectors.json\":56,\"test/fixtures/oracle-hash-vectors.json\":102,\"test/fork/RehearsalV311.t.sol\":812,\"test/fork/RobinhoodFork.t.sol\":39,\"test/keeper-v39.test.mjs\":34,\"test/mocks/MockGameRegistry.sol\":52,\"test/mocks/MockMarket.sol\":74,\"test/mocks/MockOracleSigner.sol\":17,\"test/mocks/MockSwarmIntake.sol\":67,\"test/mocks/MockToken.sol\":38,\"test/mocks/MockV4Manager.sol\":118,\"test/oracle-v310.test.mjs\":22,\"test/oracle-v37.test.mjs\":42,\"test/python/test_entropy_bot.py\":31,\"test/python/test_merkle.py\":19,\"test/python/test_regulator.py\":30,\"test/python/test_v31.py\":38,\"test/python/test_v32.py\":58,\"test/python/test_v34.py\":33,\"test/python/test_v35.py\":71,\"test/reveal.test.mjs\":24,\"test/ui-v35.test.mjs\":27,\"tools/check_deploy_gate.mjs\":48,\"tools/check_v32_results.py\":52,\"tools/check_v37_authority.py\":20,\"tools/entropy_bot.py\":106,\"tools/freepack_merkle.py\":20,\"tools/make_oracle_bodies.mjs\":45,\"tools/oracle_question_hash.mjs\":80,\"tools/pin_module_code.py\":95,\"tools/pin_swarm_code.py\":48,\"tools/regulator.py\":81,\"tools/rehearse_v311.sh\":28,\"tools/report_v31.py\":55,\"tools/schedule_bodies.mjs\":16,\"tools/starter_merkle.py\":72,\"tools/swarm_constructor_args.mjs\":57,\"ui/app.js\":178,\"ui/index.html\":22,\"ui/reveal.js\":34,\"ui/style.css\":3},\"excluded\":[\"vendor/\",\"node_modules/\"],\"truncated\":true}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"92b7efeaacf6bebc3b76bac3e4faf3a7f767596870bcb913e489878daeab5270","verifiedTreeHash":"2fe865c63ed419577ffedf14da9d0d9a8eb3b2e0","verifierVersion":"0.1.0+7129bf9d"},{"checks":[{"durationMs":27618,"exitCode":0,"name":"build","output":"Compiling 198 files with Solc 0.8.26\nSolc 0.8.26 finished in 27.45s\nCompiler run successful with warnings:\nWarning (2519): This declaration shadows an existing declaration.\n  --> src/lib/EconomyMath.sol:17:48:\n   |\n17 |         returns (uint256 chance, uint256 burn, uint256 bonus, uint256 daysWad)\n   |                                                ^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n  --> src/lib/EconomyMath.sol:44:5:\n   |\n44 |     function bonus(uint256 level) internal pure returns (uint256 b) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (8760): This declaration has the same name as another declaration.\n   --> src/V4Market.sol:291:22:\n    |\n291 |     function _record(bool sell, uint256 amount) private {\n    |                      ^^^^^^^^^\nNote: The other declaration is here:\n   --> src/V4Market.sol:482:5:\n    |\n482 |     function sell(uint256 amount, uint256 minOut, address recipient) external nonReentrant returns (uint256 received) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (8760): This declaration has the same name as another declaration.\n  --> test/mocks/MockSwarmIntake.sol:26:9:\n   |\n26 |         bytes4 failure,\n   |         ^^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> test/mocks/MockSwarmIntake.sol:44:5:\n   |\n44 |     function failure(bytes32 id, uint8 status, bytes32 reason) external returns (bool) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2072): Unused local variable.\n  --> test/EndowmentEscrowV38.t.sol:28:9:\n   |\n28 |         LocalApplicationFactory f = LocalApplicationFactory(address(d.registry.factory()));\n   |         ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> test/EndowmentEscrowV38.t.sol:121:82:\n    |\n121 |     function _registryArgs(address gameToken, address params, uint256 endowment, address factory)\n    |                                                                                  ^^^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/Events.t.sol:213:9:\n    |\n213 |         uint256 price = d.packs.quote(112);\n    |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n --> test/Gas.t.sol:9:9:\n  |\n9 |         uint256 price = d.packs.price();\n  |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Gas.t.sol:75:9:\n   |\n75 |         uint256 q = d.packs.quote(112);\n   |         ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Invariants.t.sol:56:9:\n   |\n56 |         uint256 price = d.packs.price();\n   |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Items.t.sol:76:9:\n   |\n76 |         uint256 cost = d.packs.quote(112);\n   |         ^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/Items.t.sol:106:9:\n    |\n106 |         uint256 q = d.packs.quote(16);\n    |         ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/LazyAccounting.t.sol:186:13:\n    |\n186 |             uint256 quote = d.packs.quote(112);\n    |             ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/LazyAccounting.t.sol:421:9:\n    |\n421 |         uint256 quote = d.packs.quote(112);\n    |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Packs.t.sol:37:9:\n   |\n37 |         uint256 quote = d.packs.quote(200);\n   |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Packs.t.sol:64:9:\n   |\n64 |         uint256 q = d.packs.quote(6);\n   |         ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Pause.t.sol:35:9:\n   |\n35 |         uint256 q = d.packs.quote(1);\n   |         ^^^^^^^^^\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n  --> test/Registry.t.sol:49:21:\n   |\n49 |     function _fresh(LocalApplicationFactory f) private returns (GameRegistry) {\n   |                     ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Regression.t.sol:73:9:\n   |\n73 |         uint256 previous = d.items.data(id).durability;\n   |         ^^^^^^^^^^^^^^^^\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> test/SwarmDeskV37.t.sol:485:65:\n    |\n485 |     function _registryArgs(address params, bytes32 starterRoot, address factory) private view returns (bytes memory) {\n    |                                                                 ^^^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/V33.t.sol:254:13:\n    |\n254 |             uint256 q = d.packs.quote(16);\n    |             ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/V33.t.sol:431:9:\n    |\n431 |         uint256 price = d.packs.price();\n    |         ^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/V34.t.sol:78:9:\n   |\n78 |         uint256 q = d.packs.price();\n   |         ^^^^^^^^^\n\nWarning (2072): Unused local variable.\n   --> test/V39.t.sol:184:9:\n    |\n184 |         LocalApplicationFactory f = LocalApplicationFactory(address(d.registry.factory()));\n    |         ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> src/FarmRewards.sol:149:5:\n    |\n149 |     function ready() public view returns (bool) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to view\n   --> test/Base.t.sol:106:5:\n    |\n106 |     function oracleFixture() internal returns (SwarmDesk.OracleConfig memory o) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to view\n   --> test/AuditV315.t.sol:187:5:\n    |\n187 |     function testFixtureDeskBoundAgainstItsTokenLaunchRecord() public {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/fork/RehearsalV311.t.sol:224:5:\n    |\n224 |     function _oracle() internal view returns (SwarmDesk.OracleConfig memory o) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/fork/RehearsalV311.t.sol:283:5:\n    |\n283 |     function _mineHookSalt(bytes memory initCode) internal view returns (bytes32 salt, address hook) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":36491,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/Clock.t.sol:ClockTest\n[PASS] testLocalEvmFutureBlockAnd256BlockBoundary() (gas: 225376)\n[PASS] testRobinhoodUsesArbSysNotL1EstimateAndHandlesExpiry() (gas: 238560)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 537.82µs (373.11µs CPU time)\n\nRan 3 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] testConstructorRejectsMissingInputsAndDoesNotCallExternalContracts() (gas: 3994)\n[PASS] testForeignCallerDoesNotGetAnyAuthority() (gas: 43053059)\n[PASS] testImmutableGraphAndEip170Sizes() (gas: 187323)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 15.98ms (5.04ms CPU time)\n\nRan 1 test for test/PredictionV34.t.sol:PredictionV34Test\n[PASS] testFullGraphPredictsPoolBeforeRegistryDeployment() (gas: 4162727)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 18.43ms (1.00ms CPU time)\n\nRan 4 tests for test/LaunchIntakeV317.t.sol:LaunchIntakeV317Test\n[PASS] testEarlyPaidCallbackFailsAndExpiryDoesNotRefundOrReopenSlot() (gas: 5142047)\n[PASS] testPaidCallbackStoresUnder200kAfterRoleOneRegistration() (gas: 4799438)\n[PASS] testRegulatorStoresBeforeRoleOneButExecutionWaitsForModules() (gas: 444967)\n[PASS] testStreamZeroRevertsThenSameAttestationStoresAfterRoleOneRegistration() (gas: 4790718)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 19.18ms (5.91ms CPU time)\n\nRan 1 test for test/DeployGateV314.t.sol:DeployGateV314Test\n[PASS] testAllLaunchConstructorsWorkWithNoProtocolCode() (gas: 47862067)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 19.66ms (19.45ms CPU time)\n\nRan 5 tests for test/AuditV315.t.sol:AuditV315Test\n[PASS] testAttackerLaunchRecordNamesAnotherTokenAndIsRefused() (gas: 10743754)\n[PASS] testFakeMarketEchoingDeskTokenAndHashCannotBind() (gas: 6952035)\n[PASS] testFixtureDeskBoundAgainstItsTokenLaunchRecord() (gas: 58275)\n[PASS] testRealHookRecordedByTheLaunchFactoryBinds() (gas: 12051879)\n[PASS] testRecordWithOtherHookOrOtherPairCurrencyIsRefused() (gas: 6245556)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 23.39ms (9.56ms CPU time)\n\nRan 5 tests for test/KeeperProfit.t.sol:KeeperProfitTest\n[PASS] testPaidPackEntropyKeeperProfit() (gas: 1182284)\nLogs:\n  paid pack entropy execution gas: 139616\n  paid pack entropy bounty wei: 3380475000000\n  paid pack entropy execution plus 21000 gas cost wei: 3212320000000\n\n[PASS] testPlanEntropyKeeperProfit() (gas: 1665588)\nLogs:\n  plan entropy execution gas: 163211\n  plan entropy bounty wei: 4474800000000\n  plan entropy execution plus 21000 gas cost wei: 3684220000000\n\n[PASS] testSeasonFinalizeThreeWinnersAndPrizeKeeperProfit() (gas: 3451194)\nLogs:\n  season finalize three winners and prize execution gas: 644073\n  season finalize three winners and prize bounty wei: 15825700000000\n  season finalize three winners and prize execution plus 21000 gas cost wei: 13301460000000\n\n[PASS] testSeasonPrepareIsConstantUnpaidWork() (gas: 1342777)\n[PASS] testStarterEntropyKeeperProfit() (gas: 324487)\nLogs:\n  starter entropy execution gas: 142744\n  starter entropy bounty wei: 3380150000000\n  starter entropy execution plus 21000 gas cost wei: 3274880000000\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 25.37ms (11.65ms CPU time)\n\nRan 2 tests for test/GridV35.t.sol:GridV35Test\n[PASS] testGreenAndCheapBothFavorTheStableDistrict() (gas: 4110886)\n[PASS] testReservedEventsHaveZeroLaunchWeightAndPlanOnlyWhenEnabled() (gas: 723024)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 27.11ms (13.15ms CPU time)\n\nRan 6 tests for test/EndowmentEscrowV38.t.sol:EndowmentEscrowV38Test\n[PASS] testConstructorRejectsMissingInputs() (gas: 3911)\n[PASS] testForwardRejectsBadProofs() (gas: 2647974)\n[PASS] testForwardRequiresBalance() (gas: 748474)\n[PASS] testForwardSendsWholeBalanceOnceToAuthenticatedPoolAndFundsEndowment() (gas: 1702540)\n[PASS] testForwardWithRealEndowmentActivatesDrip() (gas: 12904786)\n[PASS] testTwinWithForeignTokenCannotDrainEscrow() (gas: 12918283)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 31.68ms (15.96ms CPU time)\n\nRan 1 test for test/LaunchL1V317.t.sol:LaunchL1V317Test\n[PASS] testExactL1PairDeploysTogetherOnEmptyRobinhoodChain() (gas: 24816126)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 33.63ms (33.47ms CPU time)\n\nRan 6 tests for test/CivicV35.t.sol:CivicV35Test\n[PASS] testBillboardsBidRefundTextRulesAndPoolOnly() (gas: 945608)\n[PASS] testBlackMarketDescendingLimitedAndPause() (gas: 3828638)\n[PASS] testCollapseSuccessAndSingleOutageFailure() (gas: 810762)\n[PASS] testDormantDisabledAndNoticeOnce() (gas: 303076)\n[PASS] testOnceSeasonBoostBoundsAndSnapshot() (gas: 1722528)\n[PASS] testWarFreezeScoresConservationAndPayoutOnlyOnce() (gas: 1365382)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 34.80ms (17.24ms CPU time)\n\nRan 5 tests for test/fork/RehearsalV311.t.sol:RehearsalV311Test\n[SKIP] testRehearsalAttestedAnswerChangesPlanWithinBand() (gas: 0)\n[SKIP] testRehearsalGasPerLaunchUnderPlatformCeiling() (gas: 0)\n[SKIP] testRehearsalKeeperPassAdvancesEpochsRevealsEntropyAndClaimFeesPaysTeam() (gas: 0)\n[SKIP] testRehearsalLaunchTaxThenOnePercentAndSurcharge() (gas: 0)\n[SKIP] testRehearsalPacksOpenOneHourAfterLaunch() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 511.24µs (46.25µs CPU time)\n\nRan 5 tests for test/Registry.t.sol:RegistryTest\n[PASS] testAllModulePinsMatchExactPinnedCompilerArtifacts() (gas: 1068880)\n[PASS] testAuthenticatedEnrollmentRejectsUncreatedWrongCodeAndWrongRegistry() (gas: 2930598)\n[PASS] testConstructorAcceptsEmptyGraphWithoutExternalCalls() (gas: 13657)\n[PASS] testCounterfeitRuntimeAtAnotherFactoryCannotEnroll() (gas: 1542191)\n[PASS] testCounterfeitRuntimeWithPoisonedCreditCannotEnroll() (gas: 5876476)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 17.90ms (6.20ms CPU time)\n\nRan 2 tests for test/Factory.t.sol:FactoryTest\n[PASS] testFactoryInvalidSearchRange() (gas: 4937)\n[PASS] testHookFactoryFlagsImmutableConfigAndIdempotence() (gas: 7543837)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 43.00ms (34.42ms CPU time)\n\nRan 3 tests for test/HookBinding.t.sol:HookBindingTest\n[PASS] testHoldBeforeGameExistsThenBindOnceAndFlushExactStreams() (gas: 43434444)\n[PASS] testLookAlikeCannotBindEvenWhenTeamCalls() (gas: 1907686)\n[PASS] testWrongRouterAndMissingCodeRejectedBeforePermanentBind() (gas: 41150107)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 47.02ms (16.09ms CPU time)\n\nRan 7 tests for test/V33.t.sol:LaunchProtectionTest\n[PASS] testBuyTaxHasImmutableSteps() (gas: 97524)\n[PASS] testLaunchTaxChargedAndRoutedEntirelyToPool() (gas: 227992)\n[PASS] testNoBuySizeLimitAtAnyLaunchStep() (gas: 1690997)\n[PASS] testNormalBuyAfterDecayHasNoLaunchTax() (gas: 1479403)\n[PASS] testSellsPayNormalFeeDuringLaunch() (gas: 339655)\n[PASS] testSnipersSplittingBuysStillPayTheCurve() (gas: 655730)\n[PASS] testViewsBeforeInitialization() (gas: 4727264)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 49.84ms (11.02ms CPU time)\n\nRan 2 tests for test/AutoRepairReviewV35.t.sol:IndependentAutoRepairReview\n[PASS] testAutomaticRepairRecordsHistoricalWeekBeforeCompletion() (gas: 5411876)\n[PASS] testLateAutomaticRepairCannotReopenSeasonEligibility() (gas: 4275820)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 63.38ms (41.40ms CPU time)\n\nRan 8 tests for test/PhasedReleaseV36.t.sol:PhasedReleaseV36Test\n[PASS] testBillboardsDisabledThenEnabled() (gas: 414524)\n[PASS] testEnableIsNoticedOnceNeverOffAndSwarmOnly() (gas: 355991)\n[PASS] testEnhancementDisabledThenEnabledOnce() (gas: 1098908)\n[PASS] testEverythingDeploysDisabledAndCoreStillWorks() (gas: 8179262)\n[PASS] testFuzzUnannouncedFeatureCannotBeEnabled(uint256) (runs: 256, μ: 30159, ~: 30004)\n[PASS] testLocksStakeAndLobbyDisabledThenEnabled() (gas: 2861203)\n[PASS] testPotDisabledFollowsV34RoutingThenEnabled() (gas: 455827)\n[PASS] testReservedEventsDisabledThenEnabled() (gas: 557745)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 49.13ms (38.66ms CPU time)\n\nRan 1 test for test/WarReviewV35.t.sol:IndependentWarReview\n[PASS] testWarWinnerCannotChangeAfterDeadline() (gas: 5734360)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 930.69µs (813.58µs CPU time)\n\nRan 1 test for test/YieldFloorReviewV35.t.sol:IndependentYieldFloorReview\n[PASS] testFirstEpochItemQuotesKeepNonzeroFloorAtCorrectScale() (gas: 673277)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 600.29µs (537.09µs CPU time)\n\nRan 4 tests for test/OracleConformanceV37.t.sol:OracleConformanceV37Test\n[PASS] testAcceptsOriginalProtocolSignature() (gas: 17934)\n[PASS] testDigestMatchesUnmodifiedProtocolVector() (gas: 13636)\n[PASS] testFreshVectorSignerSignature() (gas: 30385)\n[PASS] testSelectorsExactlyMatchLiveProtocol() (gas: 3520)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.01ms (332.48µs CPU time)\n\nRan 3 tests for test/PotV35.t.sol:PotV35Test\n[PASS] testPotDepositRequiresActualTokensAndAuthority() (gas: 256924)\n[PASS] testPotSplitAndLotteryCommitSurvivesFullInventory() (gas: 11851210)\n[PASS] testPotUnclaimedRolloverOnlyAfterFourWeeksNoDoubleClaim() (gas: 6429769)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 59.25ms (41.32ms CPU time)\n\nRan 8 tests for test/V39.t.sol:V39Test\n[PASS] testBaseDepositsAreEntirelyRewardEth() (gas: 190166)\n[PASS] testGridAcceptsSeverityFromThreeThousandAndRejectsBelow() (gas: 2948508)\n[PASS] testHookAddsExactlyOnePercentOnBuysAndSellsAfterLaunchWindow() (gas: 2180219)\n[PASS] testHookHasNoNetworkShareRecipientOrWithdrawal() (gas: 107668)\n[PASS] testMarketFactoryConfigHasNoNetworkRecipient() (gas: 5996094)\n[PASS] testRegistryAcceptsEitherToolchainPinAndNothingElse() (gas: 590544)\n[PASS] testSellSurchargeStillProgressiveAndCappedAtFifteenPercent() (gas: 1832600)\n[PASS] testStepLaunchTaxUnchangedAndFullyToRewards() (gas: 1291729)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 61.75ms (42.27ms CPU time)\n\nRan 8 tests for test/FeesParams.t.sol:FeesParamsTest\n[PASS] testAllDefaultParamsWithinHardBounds() (gas: 1255771)\n[PASS] testBuyBackPoolOnlySlippageFailureRollbackAndDustGriefBlocked() (gas: 774066)\n[PASS] testExactEthSplitsHeartbeatCapAndPullPayments() (gas: 512724)\n[PASS] testFuzzNoStepAboveTenPercent(uint96) (runs: 256, μ: 44982, ~: 45115)\nLogs:\n  Bound result 386\n\n[PASS] testFuzzSplitsConserveEveryWei(uint96) (runs: 256, μ: 206746, ~: 210856)\nLogs:\n  Bound result 27064108224\n\n[PASS] testHeartbeatCapFixedAtOneEth() (gas: 207904)\n[PASS] testParamsStepCooldownBoundsAuthorityAndLetter() (gas: 195823)\n[PASS] testPoolNoPublicReserveRecycleOrPayment() (gas: 135304)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 96.40ms (74.31ms CPU time)\n\nRan 6 tests for test/Endowment.t.sol:EndowmentTest\n[PASS] testDirectTransferCannotBypassOrBackdateDrip() (gas: 368166)\n[PASS] testExactFundingFullLinearDripAndConservation() (gas: 832168)\n[PASS] testFuzzCumulativePaymentsCannotExceedVestedPrincipal(uint32,uint128) (runs: 256, μ: 522690, ~: 524739)\nLogs:\n  Bound result 2510674\n  Bound result 82295997545681722034638701\n\n[PASS] testNoTeamDonorOrSwarmWithdrawalOrReserveAuthority() (gas: 614309)\n[PASS] testParamsSnapshotCannotAccelerateOrRelockExistingEndowment() (gas: 303686)\n[PASS] testUnderfundingCannotActivateAndDonationsStayConserved() (gas: 453428)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 100.78ms (92.01ms CPU time)\n\nRan 3 tests for test/StandardAdapter.t.sol:StandardAdapterTest\n[PASS] testExistingHookKeyPreservedAndNoExtraFee() (gas: 330662)\n[PASS] testRequiresThirtyMinutesFreshOracleAndAuthorizedCallback() (gas: 198351)\n[PASS] testSettlementSlippageFailurePreservesCredits() (gas: 240594)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.50ms (979.99µs CPU time)\n\nRan 5 tests for test/AuditV314.t.sol:AuditV314Test\n[PASS] testDustAmountCannotReduceExecutedBatchAndEmptyQueueReverts() (gas: 1383695)\n[PASS] testLaterSameEpochCreditKeepsEarlierTaxVintage() (gas: 608585)\n[PASS] testLockInsertionWalkIsBoundedAndFailureIsAtomic() (gas: 30159768)\n[PASS] testOnlyFarmerCanRetireEvenAnEmptyFarm() (gas: 4306920)\n[PASS] testStaleSellAmountUsesCurrentDepthAndEnforcesCurrentMinimum() (gas: 1624852)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 127.82ms (115.40ms CPU time)\n\nRan 8 tests for test/V4Integration.t.sol:V4IntegrationTest\n[PASS] testRealV4BuyAndSingleSwapSellTaxConserveSettlement() (gas: 2268670)\n[PASS] testRealV4ManipulatedSpotCannotInstantlySetBuybackQuote() (gas: 1909849)\n[PASS] testRealV4SmallBuyPaysPositiveKeeperMargin() (gas: 2072620)\nLogs:\n  real V4 0.2ETH buy gas: 1933461\n  real V4 buy bounty wei: 48649700000000\n\n[PASS] testRealV4SystemBuyUsesTwapAndOnlySystemFunds() (gas: 2078453)\n[PASS] testRealV4SystemSalesUseDepthTwapNormalFeesAndConserveTokens() (gas: 2247054)\n[PASS] testSystemBuybackOffsetsRecordedSellImbalance() (gas: 2509567)\n[PASS] testTenEthPoolRewardBuyAtSpotTwapIncludesLpFee() (gas: 2151623)\n[PASS] testTenEthPoolSystemSellAtSpotTwapIncludesLpFee() (gas: 4120049)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 74.43ms (20.23ms CPU time)\n\nRan 5 tests for test/FarmDailyBasisV317.t.sol:FarmDailyBasisV317Test\n[PASS] testBasisRisesAtOnceToAHigherSettledYield() (gas: 15550655)\n[PASS] testDecayConstantIsExposed() (gas: 8403)\n[PASS] testProRataEntryEpochIsScaledToItsFullEpochEquivalent() (gas: 8748921)\n[PASS] testStarvingForManyEpochsDecaysGeometricallyNotToTheFloor() (gas: 28087075)\n[PASS] testZeroNetEpochOnlyDecaysTheBasisByOneStep() (gas: 14591209)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 202.56ms (251.42ms CPU time)\n\nRan 5 tests for test/ReviewV34.t.sol:ReviewV34Test\n[PASS] testCanonicalCompetingRegistryCannotTakeOverBinding() (gas: 9443175)\n[PASS] testDustBuyCannotConsumeGlobalBuyInterval() (gas: 336156)\n[PASS] testLateGreenEntrySettlesWithinReservedEnvelope() (gas: 4441470)\n[PASS] testMeaningfulSmallBuyCanUseLessThanMaximumBatch() (gas: 263646)\n[PASS] testSameConfigurationAtUncommittedCoordinatesCannotBind() (gas: 9529723)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 20.08ms (11.82ms CPU time)\n\nRan 1 test for test/fork/RobinhoodFork.t.sol:RobinhoodForkTest\n[SKIP] testForkArbSysAndHistoricalHash() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 78.64µs (13.92µs CPU time)\n\nRan 3 tests for test/Pause.t.sol:PauseTest\n[PASS] testOnlySwarmBoundedDurationAndCannotExtendPause() (gas: 242972)\n[PASS] testSalePausedWhileEntropyClaimsWithdrawalsAndEpochsContinue() (gas: 15148717)\n[PASS] testUnpauseCannotResetNextPauseCooldown() (gas: 194647)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 60.29ms (49.10ms CPU time)\n\nRan 2 tests for test/V310.t.sol:ToolchainPinsV310Test\n[PASS] testEveryModuleOfThisBuildMatchesOneToolchainPin() (gas: 168471)\n[PASS] testPinsAreOneToolchainAndRejectUnknownCode() (gas: 164239)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.87ms (805.34µs CPU time)\n\nRan 8 tests for test/TwinCaptureV312.t.sol:TwinCaptureV312Test\n[PASS] testBinderChoosingTwinOrphansHonestGame() (gas: 12068523)\n[PASS] testBinderChosenTwinCannotPayAttacker() (gas: 12034732)\n[PASS] testEOAMarketCannotBind() (gas: 5759282)\n[PASS] testHonestBindThenForwardReachesHonestPool() (gas: 6532903)\n[PASS] testHookWithForeignConfigurationCannotBind() (gas: 5801492)\n[PASS] testTwinCannotWinTheBindRace() (gas: 13565631)\n[PASS] testTwinWithForeignMarketCannotBind() (gas: 12270581)\n[PASS] testTwinWithForeignTokenCannotBind() (gas: 12441654)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 31.38ms (29.66ms CPU time)\n\nRan 6 tests for test/Market.t.sol:MarketTest\n[PASS] testBuyChargesExactlyOnePercentAllToRewards() (gas: 1729871)\n[PASS] testFuzzTotalFeeHardCap(uint96) (runs: 256, μ: 1804616, ~: 1809158)\nLogs:\n  Bound result 27064108224\n\n[PASS] testOnlyManagerCorrectPoolExactInputAndHookAddress() (gas: 111195)\n[PASS] testSingleDumpIncludesItselfAndFeeDecaysWithoutGriefReset() (gas: 17162149)\n[PASS] testTwapAveragesEthPriceAcrossUnequalPrices() (gas: 2330821)\n[PASS] testTwapWarmupAndFlashManipulationResistance() (gas: 1883301)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 228.23ms (240.80ms CPU time)\n\nRan 2 tests for test/StandardMarket.t.sol:StandardMarketTest\n[PASS] testFuzzStandardSellNeverAddsProgressiveSurcharge(uint96) (runs: 256, μ: 1803744, ~: 1813953)\nLogs:\n  Bound result 27064108224\n\n[PASS] testStandardBuyOnePercentAllToRewards() (gas: 1673242)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 176.76ms (164.92ms CPU time)\n\nRan 1 test for test/StandardV4Integration.t.sol:StandardV4IntegrationTest\n[PASS] testStandardAdapterRealPoolPaysExistingHookExactlyOnce() (gas: 1948176)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 200.55ms (1.07ms CPU time)\n\nRan 14 tests for test/V34.t.sol:V34Test\n[PASS] testBestFarmCapsAbsoluteSpendAndBreaksTiesByAddress() (gas: 4665724)\n[PASS] testBestFarmNeedsTwentyEpochsAndUsesCappedAbsoluteSpend() (gas: 4144232)\n[PASS] testBuybackSlippage150BpsMaxAndIntervalCannotBeBypassed() (gas: 756212)\n[PASS] testDonationsAndOrdinaryInflowsCannotPretendToBeEndowment() (gas: 1520675)\n[PASS] testEntropyAt256BoundaryAndAt257RearmsWithoutPayOrMint() (gas: 3283396)\n[PASS] testFirstRewardStartsCurrentEpochAtHalfTimeAndSnapshotCannotBeReplaced() (gas: 4843822)\n[PASS] testFreeFarmDoesNotDiluteDistrictOrClaimPaidPrize() (gas: 4739687)\n[PASS] testGameReadinessBothChecksRollbackEthAndTokenPurchase() (gas: 3618362)\n[PASS] testHookUninitializedCannotOpenOrStartEpochAndCallerCannotStartClock() (gas: 5889458)\n[PASS] testLaunchTaxExactBoundaries() (gas: 5772694)\n[PASS] testMythicGateEvaluatedAtRevealNotAtPayment() (gas: 1624053)\n[PASS] testPackOpeningFollowsHookAndNotLegacyDeployTimestamp() (gas: 101151)\n[PASS] testRemainderTransferredToPredictedPoolBeforeDeploymentAndNoApprovalNeeded() (gas: 2463041)\n[PASS] testStarterEntropyRearmsAfterClaimWindowAndNoDoubleMint() (gas: 772310)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 49.89ms (41.81ms CPU time)\n\nRan 1 test for test/EndowmentGame.t.sol:EndowmentGameTest\n[PASS] testRealMiningCannotSpendFutureEndowment() (gas: 130998353)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 309.11ms (285.87ms CPU time)\n\nRan 6 tests for test/ForeignTokenTwin.t.sol:ForeignTokenTwinTest\n[PASS] testBinderBindsTheGenuineRegistryThenAlreadyDone() (gas: 2793358)\n[PASS] testBinderCannotBypassAnyProof() (gas: 7228653)\n[PASS] testForeignTwinCannotBindFromTheAttacker() (gas: 1433024)\n[PASS] testForeignTwinIsSelfConsistentAndPassesEveryProofExceptTheBinder() (gas: 137061)\n[PASS] testNoNonBinderCanBindEitherRegistry() (gas: 2005687)\n[PASS] testZeroBinderRevertsAtConstruction() (gas: 673051)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 427.96ms (16.53ms CPU time)\n\nRan 21 tests for test/SwarmDeskV37.t.sol:SwarmDeskV37Test\n[PASS] testBackupFailureUnknownFailureDeadlineAndPriceCap() (gas: 751317)\n[PASS] testBackupPullsExactPriceRecordsRequestAndRestrictsBodyAndCadence() (gas: 1207764)\n[PASS] testDeskSetHeartbeatBpsMovesFeeRouterShare() (gas: 945834)\n[PASS] testEmptyChainConstructorAndAuthenticatedBindingRejectSpoofs() (gas: 12683178)\n[PASS] testEventClampingAndFallbackWithoutAnswer() (gas: 1117363)\n[PASS] testExpiredOldSlotOldEpochAndUnexecutedAnswersNeverAct() (gas: 852773)\n[PASS] testFlatConstructorRejectsUnusedPackedBits() (gas: 7335783)\n[PASS] testForgedTamperedWrongSignerWrongDomainAndCallerRejected() (gas: 359833)\n[PASS] testFutureIssueWrongTypeMalformedLengthAndPriceNeverConsume() (gas: 327553)\n[PASS] testFuzzEveryParamHardBoundsAndTenPercentStep(uint8,uint248) (runs: 256, μ: 475840, ~: 477856)\nLogs:\n  Bound result 38\n\n[PASS] testNextSlotAcceptsSameQuestionAndChangedExecutionBytesReject() (gas: 1146136)\n[PASS] testNoAdminPathsAndEntireGraphUsesDesk() (gas: 428356)\n[PASS] testNoopRegulatorAcceptedAndParamsCooldownPreserved() (gas: 452656)\n[PASS] testRegulatorClampsParamsAnnouncesPhasesAndThirtyDayCaps() (gas: 1146623)\n[PASS] testRegulatorSkipsOutOfRangeKeysInsteadOfClampingToFortyFive() (gas: 501093)\n[PASS] testReplayDifferentSourceAndSecondAnswerSameSlotIgnored() (gas: 1068212)\n[PASS] testRobinhoodNativeClockCallbackWithin200k() (gas: 352907)\n[PASS] testScheduleDeliveryStoresUnder200kThenExecutesTwoPlans() (gas: 984580)\n[PASS] testSubmitRelayAcceptsAttestedAnswerFromAnyoneOnce() (gas: 1092075)\n[PASS] testSubmitRelayRejectsForgedWrongQuestionStaleAndMalformed() (gas: 1843104)\n[PASS] testWrongQuestionUnknownRequestWeakPanelAndWindowRejected() (gas: 364850)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 207.69ms (222.53ms CPU time)\n\nRan 13 tests for test/Events.t.sol:EventsTest\n[PASS] testCheapTariffAppliesCitywide() (gas: 6431880)\n[PASS] testColdPowerFireImmuneAndCleanPowerSurgeImmune() (gas: 7916395)\n[PASS] testFallbackAndExpiredSeedIndependentOfSwarmNumber() (gas: 1788804)\n[PASS] testFireNoCoolingZeroYieldColdPowerImmune() (gas: 6156432)\n[PASS] testGreenWaveRaisesDistrictMiningTenPercent() (gas: 6433957)\n[PASS] testLobbyOwnDistrictSplitDecayAndMinimumWeight() (gas: 1083530)\n[PASS] testOutageAndOffgridRoomMitigation() (gas: 7068792)\n[PASS] testPlansOnlyNextTwoOnceAndBoundedSeverity() (gas: 344926)\n[PASS] testRollingCapsAndInitialPositiveQuotaWithHostilePlans() (gas: 102269963)\n[PASS] testSurgeCanDestroyCommonButNeverLegendary() (gas: 6422908)\n[PASS] testSurgeDamagesExactlyOneItemAndCleanPowerImmune() (gas: 6305934)\n[PASS] testSurgeNeverDestroysLegendaryOrMythic() (gas: 9523164)\n[PASS] testTheftRouterDisabledAndRepairRestores() (gas: 6862770)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 429.73ms (339.63ms CPU time)\n\nRan 11 tests for test/Items.t.sol:ItemsTest\n[PASS] testComputeHashSupportHashAndBonusesReplaceDuo() (gas: 4715342)\n[PASS] testDurabilityWearRepairAndEnhancementMetadataPreserved() (gas: 8393341)\n[PASS] testEquipRarityGatesAndMythicGate() (gas: 4162922)\n[PASS] testFullStackRarityCapAndRoomFlags() (gas: 7665589)\n[PASS] testInventoryMintCannotExceedCapacityAndExpansionRises() (gas: 3356807)\n[PASS] testLockedItemCannotBeScrappedUntilEpochRolls() (gas: 5989066)\n[PASS] testOffgridSavings() (gas: 2711135)\n[PASS] testPaidXpCannotBypassRoomTwoAgeGate() (gas: 3746447)\n[PASS] testRoomGatesAndLevelProgression() (gas: 78475814)\n[PASS] testScrapPaysPoolYieldAndCannotRepeat() (gas: 7561671)\n[PASS] testSoulboundOnlyOwnFarmAndNoDuplicateTypes() (gas: 2265957)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 429.76ms (502.53ms CPU time)\n\nRan 9 tests for test/Packs.t.sol:PacksTest\n[PASS] testExactPaymentAndFutureBlockRequired() (gas: 1671228)\n[PASS] testExactRarityThresholdsAndMythicGate() (gas: 282935)\n[PASS] testExpiryRearmsWithoutMintingAndInventoryOpeningLimit() (gas: 3797222)\n[PASS] testFuzzVrgdaAlwaysBounded(uint32,uint32) (runs: 256, μ: 61899, ~: 63085)\nLogs:\n  Bound result 29\n\n[PASS] testItemTypeDistributionExact() (gas: 626492)\n[PASS] testNoWalletGlobalOrTokenPackDailyLimit() (gas: 4392810)\n[PASS] testStarterWindowProofTokenIdOnceAndInventoryFailureRetry() (gas: 881490)\n[PASS] testTokenPackSameQuoteAndSplitWhenUsingWalletOrCredits() (gas: 76592671)\n[PASS] testVrgdaInitialStepDecayFloorCeilingAndBulkPricing() (gas: 1299987)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 430.40ms (414.93ms CPU time)\n\nRan 6 tests for test/Regression.t.sol:RegressionTest\n[PASS] testCableRepairRestoresOnlyRemainingHalfEpoch() (gas: 11818095)\n[PASS] testEmptyEpochPreservesLastSettledRateButResetsScrapAllowance() (gas: 11008366)\n[PASS] testFuzzCableRepairBlendHandlesNonMonotonicRarityBonuses(uint16) (runs: 256, μ: 1374162, ~: 1374014)\nLogs:\n  Bound result 120\n\n[PASS] testRegisterOnlyAccountsDoNotAddSettlementWorkAndEmptyFarmCanRetire() (gas: 2037709)\n[PASS] testRepairAndPaidPackCannotRetroactivelyBoostEpoch() (gas: 9562743)\n[PASS] testUnlimitedFreshPacksCannotDrainPoolByScrapping() (gas: 9668475)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 447.71ms (479.72ms CPU time)\n\nRan 3 tests for test/Gas.t.sol:GasTest\n[PASS] testGasCommonActions() (gas: 10873117)\nLogs:\n  buy token pack: 925868\n  open one pack: 514873\n  equip: 966814\n  repair wallet: 614735\n  enhancement commit: 568464\n  expand: 390489\n  token pack wallet: 655187\n  withdraw: 255483\n  unequip: 407017\n\n[PASS] testGasFullFarmLongIdleBoundedChunks() (gas: 119295605)\nLogs:\n  settle full 24-item farm eight epochs after 40 idle: 12496054\n\n[PASS] testGasTypicalFarmSettlementHasNoBounty() (gas: 8944774)\nLogs:\n  settle typical three-item farm one epoch: 923830\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 615.29ms (651.69ms CPU time)\n\nRan 20 tests for test/V33.t.sol:V33Test\n[PASS] testActionBeforeExpiryMovesBucketWithoutDoubleCount() (gas: 25983504)\n[PASS] testAdvanceIsConstantInExpiringFarms() (gas: 38430108)\n[PASS] testAgeCapsAtBoundaries() (gas: 204552)\n[PASS] testClaimDoesNotRecommitWhileBehind() (gas: 37239808)\n[PASS] testClaimRecommitsAndPackRecommits() (gas: 60787577)\n[PASS] testDistrictScoreAveragePerFarmAndTenPercentWalletCap() (gas: 4607489)\n[PASS] testHeartbeatCapExcessGoesToPoolAndBaseFeeIsAllRewards() (gas: 270973)\n[PASS] testIdleFarmLeavesDenominatorAfterTwelveEpochs() (gas: 23504929)\n[PASS] testLaunchTaxDepositIsAllPoolAndMarketOnly() (gas: 137567)\n[PASS] testMergeRemoved() (gas: 512630)\n[PASS] testPackLobbySellSplit88Team10Heartbeat2() (gas: 407960)\n[PASS] testPackSaleOpensSixtyMinutesAfterLaunch() (gas: 1264387)\n[PASS] testPaidXpCannotBypassAgeGates() (gas: 59083319)\n[PASS] testPaidXpCappedPerDayActivityUncapped() (gas: 13264967)\n[PASS] testPartialRoomIsClippedNotReverted() (gas: 2156541)\n[PASS] testRewardsEarnedBeforeExpiryAreNeverLost() (gas: 47725769)\n[PASS] testSingleWhaleDistrictCannotWinAlone() (gas: 4534340)\n[PASS] testSyncRecommitsFromNextEpoch() (gas: 33379218)\n[PASS] testTokenPacksAlsoWaitForOpening() (gas: 59864)\n[PASS] testTopSpenderTrackingIsExact() (gas: 5411751)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 586.70ms (919.12ms CPU time)\n\nRan 10 tests for test/Bounties.t.sol:BountiesTest\n[PASS] testBuyBountyProportionalCapNoDustCreditAndFailureRollback() (gas: 680020)\n[PASS] testEmptyRosterAndInvalidBatchReceiveNothing() (gas: 1419248)\n[PASS] testEveryWorkKindBoundedByHeartbeatAndAuthorizedProducer() (gas: 64315585)\n[PASS] testLazySettlementUnpaidAndCannotReplay() (gas: 6970276)\n[PASS] testOnlyFinalizePaidOnceAndEmptyWeekUnpaid() (gas: 2292196)\n[PASS] testPackEntropyCapturedOnceWithFullInventoryAndThroughPause() (gas: 3713527)\n[PASS] testPlanResolutionPaidOnceIncludingAdvanceForwarding() (gas: 2934177)\n[PASS] testRemovedWorkBountiesRejectedEvenFromOldProducer() (gas: 179981)\n[PASS] testStarterEntropySurvivesFullInventoryExpiryAndPauseWithoutReplayPayment() (gas: 5324477)\n[PASS] testWorkCreditRespectsZeroGasPricePriceCeilingAndUnitCap() (gas: 333726)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 884.80ms (108.28ms CPU time)\n\nRan 7 tests for test/HeartbeatBpsV313.t.sol:HeartbeatBpsV313Test\n[PASS] testFuzzAnyShareConservesEveryWeiAndNeverMovesTeamOrPot(uint16,uint96) (runs: 256, μ: 1359059, ~: 1528009)\nLogs:\n  Bound result 851\n  Bound result 14264337593543950335\n\n[PASS] testLaunchDefaultIsTwoPercentAndSplitUnchanged() (gas: 230935)\n[PASS] testLoweredShareBackToFloorAndFloorIsHard() (gas: 401104)\n[PASS] testMaximumShareWithPotEnabledIsClippedToWhatIsLeft() (gas: 1867739)\n[PASS] testOnlyTheSwarmWithinBoundsStepAndCooldownCanMoveTheShare() (gas: 341795)\n[PASS] testRaisedShareStillStopsAtTheOneEthCap() (gas: 480520)\n[PASS] testSwarmSet220CreditsTwoPointTwoPercentOfSurchargeAndTokens() (gas: 543701)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 884.98ms (874.94ms CPU time)\n\nRan 18 tests for test/EconomyV35.t.sol:EconomyV35Test\n[PASS] testAllEnhancementTableEndpointsAndGlobalBonusCap() (gas: 1477864)\n[PASS] testDurabilityBoundariesAndIdleNoWear() (gas: 38169181)\n[PASS] testEnhanceBurnFailureAndLevelGate() (gas: 1218579)\n[PASS] testEnhanceCapsNoticeUpwardOnlyAndThirtyDays() (gas: 355848)\n[PASS] testEnhanceCommitCannotPlaceScrapOrRetryAndLapsesAsWorstOutcome() (gas: 2423527)\n[PASS] testFeeSalesDepthSlippageCadenceAndNormalFeePot() (gas: 1737855)\n[PASS] testFreeAllowlistOnceWindowStarterScrapAndMetadata() (gas: 3102778)\n[PASS] testFreeRootRemainsFrozenAfterSevenDays() (gas: 43976)\n[PASS] testFreeRootWindowAndIndexLimit() (gas: 55991)\n[PASS] testFuzzPriceCurveDaysBounds(uint32,uint32) (runs: 256, μ: 89024, ~: 90188)\nLogs:\n  Bound result 29\n\n[PASS] testLockBonusRedistributesWithinReservedEmission() (gas: 11683136)\n[PASS] testLockEscrowNoEarlyExitAndWalletCap() (gas: 5394589)\n[PASS] testQuoteScalesLastSettlementAndHasFloor() (gas: 4285279)\n[PASS] testRepairYieldQuoteAndAutoRepairCreditsOnly() (gas: 10812876)\n[PASS] testRoomsChargeYieldDaysAndRetainAgeGates() (gas: 2618884)\n[PASS] testSystemSellDustCannotOccupyCadenceAndCappedHeartbeatReturnsTokens() (gas: 1562949)\n[PASS] testTokenOnlyGiftSplitsNoEthPeg() (gas: 1738156)\n[PASS] testZapAtomicMinOutPauseAndRefund() (gas: 1441448)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 906.12ms (272.36ms CPU time)\n\nRan 2 tests for test/ReservedEventsV35.t.sol:ReservedEventsV35Test\n[PASS] testFuzzReservedFestivalCannotExceedFifteenPercent(uint16) (runs: 256, μ: 4927537, ~: 4927534)\n[PASS] testReservedHeatwaveExtraCoolingWearAndBothProtections() (gas: 10178642)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 870.84ms (903.95ms CPU time)\n\nRan 6 tests for test/SeasonAudit.t.sol:SeasonAuditTest\n[PASS] testAuditThresholdStrictAndNoWhaleSoftCap() (gas: 40508248)\n[PASS] testLotteryEntitlementSurvivesFullInventory() (gas: 131721528)\n[PASS] testPackSupplyDropOnlyActiveFarmsAtDoublePace() (gas: 11743280)\n[PASS] testParameterChangesCannotChangeClosedEpochBetweenBatches() (gas: 12523805)\n[PASS] testSeasonCannotFinalizeEarlyAndExpiredLotteryMustRearm() (gas: 124179117)\n[PASS] testWeeklyThreeDistinctTicketWinnersFuturePackAndBestPrize() (gas: 124934770)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 906.20ms (1.21s CPU time)\n\nRan 9 tests for test/Epochs.t.sol:EpochsTest\n[PASS] testCannotAdvanceEarlyAndBountyOnce() (gas: 2513731)\n[PASS] testClaimsEveryEpochAndRedistributionIsNextEpoch() (gas: 12010062)\n[PASS] testGasAdvanceIndependentOfRoster() (gas: 895978527)\nLogs:\n  advance empty roster: 1284212\n  advance 1000 farms: 1473392\n\n[PASS] testNoCatchupEmissionDuringGap() (gas: 6270392)\n[PASS] testNoRetroactiveEquipmentAndBoundedBatches() (gas: 5790681)\n[PASS] testNoWhaleCapHashShares() (gas: 10182869)\n[PASS] testReferralOneLevelSetOnceNoSelf() (gas: 7531610)\n[PASS] testTaxCurveExactAndFloor() (gas: 34112)\n[PASS] testWithdrawFailureRollsBackAndReentrancyCannotClaimTwice() (gas: 7446317)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 5.92s (5.99s CPU time)\n\nRan 12 tests for test/AuditV317.t.sol:AuditV317Test\n[PASS] testAdvanceEpochDefersUntilTheRearmedEventResolves() (gas: 1433172)\n[PASS] testDestroyedItemResyncWaitsUntilTheFarmIsCaughtUp() (gas: 12580622)\n[PASS] testDestroyedItemWeightStale() (gas: 10356036)\n[PASS] testEnhancementInsideWindowStillCapturesAndResolvesNormally() (gas: 1164136)\n[PASS] testEnhancementLapseEmitsResolvedAsFailureAndKeepsSoulboundChecks() (gas: 2005877)\n[PASS] testEnhancementRearmGrind() (gas: 53784157)\n[PASS] testOwnerActionClearsThePendingResync() (gas: 8345887)\n[PASS] testSubmittedPlanDiscardedAfterHashWindow() (gas: 1740590)\n[PASS] testUnlockBlockedWhileEpochStale() (gas: 895813)\n[PASS] testUnlockLiveAndCaughtUpStillResyncsWeight() (gas: 58436968)\n[PASS] testUnlockWhileBehindReturnsPrincipalAndSkipsResync() (gas: 56212427)\n[PASS] testUnplannedLapsedWindowAlsoRearmsAndNeverUsesAPrecomputableSeed() (gas: 230726)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 10.25s (543.49ms CPU time)\n\nRan 9 tests for test/LazyAccounting.t.sol:LazyAccountingTest\n[PASS] testAuditChargesTenPercentEvenAtHalfSeverityAndThresholdIsFrozen() (gas: 6161890)\n[PASS] testClaimCatchesUpWhilePacksPausedAndDoesNotEraseRemainingHistory() (gas: 25641763)\n[PASS] testExhaustedFarmCannotCollectRedistributionByRemainingIdle() (gas: 15191242)\n[PASS] testFuzzLazyEqualsIndependentEagerForRandomFarmsAndAllEvents(uint256) (runs: 256, μ: 45573470, ~: 45579763)\n[PASS] testGlobalAccumulatorAndWeightsAreSnapshottedBeforeMutations() (gas: 9311279)\n[PASS] testLateSeasonSettlementPaysMiningWithoutChangingFrozenWinners() (gas: 59490917)\n[PASS] testOneWeiMiningGreenCannotLockSettlementThroughEnvelopeRounding() (gas: 11069658)\n[PASS] testSparseMatureVintageConsumedBeforeRecentSlotAfterWrap() (gas: 43222421)\n[PASS] testStaleActionsRequireChunksAndNeverBlockGlobalAdvance() (gas: 40505475)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 10.73s (11.17s CPU time)\n\nRan 1 test for test/Invariants.t.sol:InvariantsTest\n[PASS]\nInvariantsTest invariants:\n[PASS] invariantAllowlistRootAndWalletLimit\n[PASS] invariantInventoryAndEthLiabilities\n[PASS] invariantLocksAndPotAlwaysBacked\n[PASS] invariantPriceAndParamsBounds\n[PASS] invariantReceiptsNeverForfeitOrFixMissingEntropy\n[PASS] invariantReservesBackedAndPendingCovered\n[PASS] invariantTokenConservationNoBurns\n InvariantsTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------+-----------+-------+---------+----------╮\n| Contract    | Selector  | Calls | Reverts | Discards |\n+======================================================+\n| GameHandler | advance   | 577   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | buy       | 614   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | claim     | 569   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | equip     | 578   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | expand    | 632   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | freeClaim | 569   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | fundPot   | 588   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | lock      | 612   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | resolve   | 587   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | rollover  | 587   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | settle    | 548   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | tokenPack | 563   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | unlock    | 571   | 0       | 0        |\n|-------------+-----------+-------+---------+----------|\n| GameHandler | unplace   | 597   | 0       | 0        |\n╰-------------+-----------+-------+---------+----------╯\n\nLogs:\n  Bound result 3\n  Bound result 4989\n  Bound result 150000000000000000\n  Bound result 360259408045869063709\n  Bound result 514264337593543950336\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 36.31s (36.29s CPU time)\n\nRan 56 test suites in 36.31s (73.57s CPU time): 320 tests passed, 0 failed, 6 skipped (326 total tests)\n","passed":true},{"durationMs":196,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Billboards.bidBillboard(uint256,uint256,string,string)\",\"Billboards.settleBillboard(uint256,uint256)\",\"Billboards.withdrawRefund()\",\"Civic.announce(uint256,string)\",\"Civic.buyLot(uint256)\",\"Civic.claimWar(uint256)\",\"Civic.consumeCityEvent()\",\"Civic.enable(uint256)\",\"Civic.finishCollapse()\",\"Civic.finishWar()\",\"Civic.fundCollapse(uint256)\",\"Civic.fundWar(uint256)\",\"Civic.grantDistrictBoost(uint256,uint16,string)\",\"Civic.listLot(uint8,uint8,uint8)\",\"Civic.startCollapse(uint256)\",\"Civic.startWar(uint8,uint8)\",\"Economy.autoRepair(address,uint256,uint256[24])\",\"Economy.lock(uint256,uint256)\",\"Economy.unlock()\",\"EndowmentEscrow.forward(address,uint64,uint256,bytes,uint64,uint256,bytes)\",\"Enhancement.activateCap()\",\"Enhancement.announceCap(uint8,string)\",\"Enhancement.capture(uint256)\",\"Enhancement.commit(uint256,uint256,bool)\",\"Enhancement.resolve(uint256)\",\"FarmCore.activity(address,uint256,uint256,uint256)\",\"FarmCore.autoRepair(address,uint256)\",\"FarmCore.buyRoom(uint256,bool)\",\"FarmCore.buyTokenPack(bool)\",\"FarmCore.civicPurchase(address,uint256)\",\"FarmCore.claimDrop()\",\"FarmCore.expand(bool)\",\"FarmCore.grantDrop(address,bytes32)\",\"FarmCore.lobby(uint256,bool)\",\"FarmCore.paidPackBought(address,uint256,uint256)\",\"FarmCore.place(uint256,uint256,uint256)\",\"FarmCore.prepareEnhancement(address,uint256,uint256,bool)\",\"FarmCore.process(address,uint256)\",\"FarmCore.register(address)\",\"FarmCore.repair(uint256,bool)\",\"FarmCore.repairCable(bool)\",\"FarmCore.retire(address)\",\"FarmCore.scrap(uint256,uint256)\",\"FarmCore.setAutoRepair(bool,uint16)\",\"FarmCore.setReferrer(address)\",\"FarmCore.sync()\",\"FarmCore.syncFor(address)\",\"FarmCore.unplace(uint256,uint256)\",\"FarmEngine.process(address,uint256,(uint256[24],uint8[24],uint16[24],bool,uint64,uint16))\",\"FarmItems.destroy(uint256)\",\"FarmItems.equip(address,uint256)\",\"FarmItems.expand(address)\",\"FarmItems.maintain(uint256,uint16,uint8)\",\"FarmItems.mint(address,uint8,uint8,bool)\",\"FarmItems.mintDrop(address,bytes32)\",\"FarmItems.safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\",\"FarmItems.safeTransferFrom(address,address,uint256,uint256,bytes)\",\"FarmItems.unequip(address,uint256)\",\"FarmRewards.advanceEpoch()\",\"FarmRewards.award(address,uint256)\",\"FarmRewards.beginMining(address,uint256)\",\"FarmRewards.claim(uint256)\",\"FarmRewards.flagResync(address)\",\"FarmRewards.initialize(address)\",\"FarmRewards.recordSales(uint256)\",\"FarmRewards.releasePrize(uint256)\",\"FarmRewards.scrap(address,uint256,uint256)\",\"FarmRewards.setReferrer(address,address)\",\"FarmRewards.setWeight(address,uint256)\",\"FarmRewards.settle(address,uint256)\",\"FarmRewards.spend(address,uint256)\",\"FarmRewards.spendTo(address,uint256,address)\",\"FeeRouter.depositBaseFee()\",\"FeeRouter.depositLaunchTax()\",\"FeeRouter.depositLobby()\",\"FeeRouter.depositPack()\",\"FeeRouter.depositSellTax()\",\"FeeRouter.executeBuys(uint256,uint256)\",\"FeeRouter.executePotBuys(uint256,uint256)\",\"FeeRouter.executeSells(uint256,uint256)\",\"FeeRouter.payBounty(address)\",\"FeeRouter.payWork(address,uint8,uint256,uint256)\",\"FeeRouter.receive()\",\"FeeRouter.routeTokens(uint256)\",\"FeeRouter.withdraw()\",\"FeeRouter.zapBuy(uint256,address)\",\"GameRegistry.register(uint256,uint64,uint256,bytes)\",\"GridOperator.lobbyETH()\",\"GridOperator.resolve(uint256)\",\"GridOperator.resolveFor(uint256,address)\",\"GridOperator.shift(uint256)\",\"GridOperator.submitPlan(uint256,uint8,uint16,bytes32,string)\",\"GridOperator.tokenLobby(address,uint256)\",\"MarketFactory.deploy((address,address,int24,address,address,bytes32),bytes32)\",\"PackSale.buyPackFor(address)\",\"PackSale.buyPacksFor(address,uint256,uint256)\",\"PackSale.buyWithETH(address,uint256,uint256,uint256)\",\"PackSale.captureEntropy(uint256)\",\"PackSale.openPack(uint256)\",\"PackSale.pause(uint256)\",\"PackSale.rearm(uint256)\",\"PackSale.resolve(uint256,uint256)\",\"PackSale.rewardPack(address)\",\"PackSale.tokenPack(address)\",\"PackSale.unpause()\",\"Params.set(uint8,uint256,string)\",\"RewardPool.donate(uint256)\",\"RewardPool.fundEndowment()\",\"RewardPool.pay(address,uint256)\",\"RewardPool.recordInflow(uint256)\",\"RewardPool.recycle(uint256)\",\"RewardPool.reserve(uint256)\",\"Season.addPrize(uint256,uint256)\",\"Season.claimBest(uint256)\",\"Season.claimDistrict(uint256)\",\"Season.claimLottery(uint256)\",\"Season.complete(address,uint256)\",\"Season.depositPot(uint256)\",\"Season.finalize(uint256)\",\"Season.prepare(uint256,uint256)\",\"Season.rearm(uint256)\",\"Season.recordActivity(address,uint256,uint256,uint256)\",\"Season.recordRepair(address,uint256,uint256)\",\"Season.recordSpend(address,uint256,bool)\",\"Season.rollover(uint256)\",\"StandardAdapter.buy(uint256,address)\",\"StandardAdapter.unlockCallback(bytes)\",\"StandardMarket.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"StandardMarket.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"StandardMarket.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"StandardMarket.bindFeeRouter(address,uint64,uint256)\",\"StandardMarket.buy(uint256,address)\",\"StandardMarket.flushFees()\",\"StandardMarket.receive()\",\"StandardMarket.sell(uint256,uint256,address)\",\"StandardMarket.unlockCallback(bytes)\",\"StarterClaim.captureEntropy(uint256)\",\"StarterClaim.claim(uint256,bytes32[])\",\"StarterClaim.claimFree(uint256,bytes32[])\",\"StarterClaim.rearm(uint256)\",\"StarterClaim.resolve(uint256)\",\"SwarmDesk.askBackup(uint8,bytes)\",\"SwarmDesk.bind(address,bytes,bytes,uint64,uint8,uint64,uint8,uint64)\",\"SwarmDesk.clearExpired(bytes32)\",\"SwarmDesk.execute(uint8,bytes)\",\"SwarmDesk.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"SwarmDesk.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"SwarmDesk.submit((bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"V4Market.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"V4Market.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"V4Market.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"V4Market.bindFeeRouter(address,uint64,uint256)\",\"V4Market.buy(uint256,address)\",\"V4Market.flushFees()\",\"V4Market.receive()\",\"V4Market.sell(uint256,uint256,address)\",\"V4Market.unlockCallback(bytes)\"],\"files\":{\".gitignore\":8,\"ADAPTATION.md\":135,\"README.md\":86,\"artifacts/build-lint-v3.txt\":2369,\"artifacts/build-v3.txt\":3,\"artifacts/economic-targets-v3.json\":9,\"artifacts/fmt-v3.txt\":0,\"artifacts/foundry-v3.txt\":845,\"artifacts/funded-sensitivity/simulation-v3.json\":13928,\"artifacts/funded-sensitivity/simulation-v3.md\":51,\"artifacts/funding-sensitivity-v3.json\":342,\"artifacts/gas-actions-v3.txt\":15,\"artifacts/policy-sensitivity-v3.json\":554,\"artifacts/python-tests-v3.txt\":18,\"artifacts/regulator-example.json\":59,\"artifacts/robinhood-fork-v3.txt\":7,\"artifacts/runtime-sizes-v3.json\":23,\"artifacts/simulation-v3.json\":13928,\"artifacts/simulation-v3.md\":51,\"artifacts/tuned-funded/simulation-v3.json\":13928,\"artifacts/tuned-funded/simulation-v3.md\":51,\"artifacts/v2/README.md\":3,\"artifacts/v2/foundry-tests.txt\":178,\"artifacts/v2/offline-tests.txt\":187,\"artifacts/v2/offline-verification.json\":21,\"artifacts/v2/previous-README.md\":108,\"artifacts/v2/previous-design.md\":120,\"artifacts/v2/previous-report.md\":75,\"artifacts/v2/previous-security-review.md\":29,\"artifacts/v2/previous-simulation-assumptions.md\":52,\"artifacts/v2/robinhood-fork.txt\":7,\"artifacts/v2/rpc-probe.json\":16,\"artifacts/v2/runtime-sizes.json\":21,\"artifacts/v2/simulation.md\":95,\"artifacts/v2/verification.json\":110,\"artifacts/v31/allocation-summary.md\":6,\"artifacts/v31/baseline-budget.md\":14,\"artifacts/v31/boundary-checks.json\":10880,\"artifacts/v31/candidate-stress/simulation.json\":32636,\"artifacts/v31/evidence/factory-prediction.json\":14,\"artifacts/v31/evidence/launch-and-cost-facts.json\":130,\"artifacts/v31/evidence/standalone-hook-build.json\":38,\"artifacts/v31/final/comparison.md\":50,\"artifacts/v31/funded/comparison.md\":52,\"artifacts/v31/funded/replay.json\":290,\"artifacts/v31/funding-comparison.md\":8,\"artifacts/v31/regulator-example.json\":73,\"artifacts/v31/stress-comparison.md\":20,\"artifacts/v31/summary.json\":13,\"artifacts/v31/validation.json\":250,\"artifacts/v310/forge-test-launch.txt\":496,\"artifacts/v310/forge-test-repo-changed-suites.txt\":115,\"artifacts/v310/forge-test-repo-full-before-new-tests.txt\":437,\"artifacts/v310/pins-check.txt\":2,\"artifacts/v311/rehearsal.log\":377,\"artifacts/v312/forge-fmt.txt\":1,\"artifacts/v312/forge-test-launch.txt\":381,\"artifacts/v312/forge-test-repo.txt\":384,\"artifacts/v312/launch-creation-hashes.txt\":5,\"artifacts/v312/node-tests.txt\":10,\"artifacts/v312/pins-check.txt\":2,\"artifacts/v312/python-tests.txt\":3,\"artifacts/v312/rehearsal.log\":368,\"artifacts/v313/forge-fmt.txt\":0,\"artifacts/v313/forge-test.txt\":468,\"artifacts/v313/launch-creation-hashes.txt\":6,\"artifacts/v313/module-pins.txt\":15,\"artifacts/v313/pins-check.txt\":2,\"artifacts/v314/authority-check.txt\":1,\"artifacts/v314/consistency-check.txt\":1,\"artifacts/v314/creation-hashes.json\":21,\"artifacts/v314/deploy-gate.txt\":1,\"artifacts/v314/flatten-build.txt\":871,\"artifacts/v314/flatten-check.txt\":2,\"artifacts/v314/forge-build.txt\":4752,\"artifacts/v314/forge-fmt.txt\":0,\"artifacts/v314/forge-test.txt\":487,\"artifacts/v314/launch-creation-hashes.txt\":20,\"artifacts/v314/module-pins-check.txt\":1,\"artifacts/v314/node-tests.txt\":22,\"artifacts/v314/python-tests.txt\":39,\"artifacts/v314/rehearsal-build.log\":4895,\"artifacts/v314/rehearsal.log\":352,\"artifacts/v314/runtime-sizes.json\":21,\"artifacts/v314/swarm-pins-check.txt\":1,\"artifacts/v315/creation-hashes.json\":21,\"artifacts/v315/deploy-gate.txt\":1,\"artifacts/v315/forge-build.txt\":1062,\"artifacts/v315/forge-fmt.txt\":0,\"artifacts/v315/forge-test.txt\":412,\"artifacts/v315/launch-creation-hashes.txt\":20,\"artifacts/v315/module-pins-check.txt\":1,\"artifacts/v315/node-tests.txt\":22,\"artifacts/v315/python-tests.txt\":39,\"artifacts/v315/rehearsal-build.log\":4921,\"artifacts/v315/rehearsal.log\":387,\"artifacts/v315/runtime-sizes.json\":21,\"artifacts/v315/swarm-pins-check.txt\":1,\"artifacts/v316/creation-hashes.json\":21,\"artifacts/v316/deploy-gate.txt\":1,\"artifacts/v316/forge-build.txt\":4736,\"artifacts/v316/forge-fmt.txt\":0,\"artifacts/v316/forge-test.txt\":505,\"artifacts/v316/launch-creation-hashes.txt\":20,\"artifacts/v316/module-pins-check.txt\":1,\"artifacts/v316/node-tests.txt\":7,\"artifacts/v316/python-tests.txt\":3,\"artifacts/v316/rehearsal-build.log\":4921,\"artifacts/v316/rehearsal.log\":392,\"artifacts/v316/runtime-sizes.json\":21,\"artifacts/v316/swarm-pins-check.txt\":1,\"artifacts/v317/creation-hashes.json\":21,\"artifacts/v317/deploy-gate.txt\":1,\"artifacts/v317/forge-fmt.txt\":0,\"artifacts/v317/forge-test.txt\":442,\"artifacts/v317/launch-creation-hashes.txt\":20,\"artifacts/v317/module-pins-check.txt\":1,\"artifacts/v317/node-tests.txt\":14,\"artifacts/v317/python-tests.txt\":5,\"artifacts/v317/rehearsal-build.log\":4959,\"artifacts/v317/rehearsal.log\":392,\"artifacts/v317/runtime-sizes.json\":21,\"artifacts/v317/swarm-pins-check.txt\":1,\"artifacts/v32/contract-sizes.json\":54,\"artifacts/v32/forge-build.log\":2734,\"artifacts/v32/forge-fmt.log\":0,\"artifacts/v32/forge-test.log\":310,\"artifacts/v32/model-checks.log\":5,\"artifacts/v32/module-pins.log\":1,\"artifacts/v32/python-tests.log\":25,\"artifacts/v32/regulator-example.json\":73,\"artifacts/v32/simulation-checks.json\":11,\"artifacts/v32/simulation-checks.log\":11,\"artifacts/v32/validation.json\":61,\"artifacts/v32/verified-baseline/comparison.md\":8,\"artifacts/v32/verified-baseline/simulation.json\":22622,\"artifacts/v32/verified-sensitivities/comparison.md\":68,\"artifacts/v33/simulation.json\":116,\"artifacts/v34/build.txt\":2931,\"artifacts/v34/format.txt\":0,\"artifacts/v34/pins.txt\":1,\"artifacts/v34/python-tests.txt\":5,\"artifacts/v34/reveal-test.txt\":1,\"artifacts/v34/simulation.json\":91766,\"artifacts/v34/simulation.md\":43,\"artifacts/v34/tests.txt\":306,\"artifacts/v35/simulation.json\":22605,\"artifacts/v35/simulation.md\":104,\"artifacts/v35/verification.json\":132,\"artifacts/v36/simulation-phases.json\":179,\"artifacts/v36/simulation-phases.md\":13,\"artifacts/v37/byte-sizes.json\":131,\"artifacts/v37/verification.json\":28,\"artifacts/v39/forge-build-repo.txt\":3,\"artifacts/v39/forge-fmt.txt\":1,\"artifacts/v39/forge-test-launch.txt\":8,\"artifacts/v39/forge-test-repo.txt\":390,\"artifacts/v39/pins-check.txt\":2,\"artifacts/v39/pins.json\":68,\"artifacts/v39/runtime-sizes.json\":197,\"artifacts/v39/simulation.json\":381,\"artifacts/v39/simulation.md\":29,\"artifacts/verification-v3.json\":67,\"docs/accepted-v314.md\":10,\"docs/accepted-v315.md\":22,\"docs/accepted-v316.md\":24,\"docs/accepted-v317.md\":47,\"docs/api-v35.md\":41,\"docs/dependency-provenance.md\":9,\"docs/design.md\":69,\"docs/entropy-v34.md\":31,\"docs/launch-v31.md\":121,\"docs/launch-v314-plan.json\":191,\"docs/launch-v34.md\":44,\"docs/launch-v35.md\":40,\"docs/lazy-accounting-v32.md\":48,\"docs/m2-trust-assumption.md\":121,\"docs/oracle-v37/event.json\":1,\"docs/oracle-v37/oracle-config.json\":21,\"docs/oracle-v37/regulator.json\":1,\"docs/params-keys-v313.md\":113,\"docs/report-v3.md\":143,\"docs/report-v31.md\":128,\"docs/report-v32.md\":138,\"docs/report-v33.md\":107,\"docs/report-v34.md\":58,\"docs/report-v36.md\":89,\"docs/report-v38.md\":83,\"docs/research/b94e6839-platform-report.md\":238,\"docs/review-v31.md\":77,\"docs/review-v32.md\":32,\"docs/review-v33.md\":19,\"docs/review-v34.md\":30,\"docs/review-v35-independent.md\":69,\"docs/review-v37-independent.md\":44,\"docs/review-v39-independent.md\":105,\"docs/security-review.md\":29,\"docs/simulation-assumptions.md\":43,\"docs/simulation-v3-historical.md\":44,\"docs/simulation-v34.md\":34,\"foundry.toml\":21,\"keeper/README.md\":120,\"keeper/blackout-keeper.service\":23,\"keeper/keeper.env.example\":18,\"keeper/keeper.mjs\":578,\"keeper/lib/abi.mjs\":95,\"keeper/lib/eth.mjs\":186,\"keeper/lib/oracle.mjs\":57,\"keeper/wiring.example.json\":17,\"launch-v31.md\":3,\"launch-v36.md\":34,\"launch-v37.md\":144,\"launch-v38.md\":57,\"launch-v39.md\":249,\"launch.json\":25,\"launch/V4Market.sol\":1872,\"operations/dormant-v35.md\":17,\"regulator.md\":60,\"report.md\":489,\"script/Deploy.s.sol\":252,\"script/DeployMarket.s.sol\":15,\"script/PredictGame.s.sol\":49,\"script/SwarmArgs.sol\":38,\"sim/blackout_sim_v2.py\":509,\"sim/blackout_sim_v3.py\":338,\"sim/blackout_sim_v31.py\":24,\"sim/blackout_sim_v32.py\":380,\"sim/blackout_sim_v33.py\":395,\"sim/blackout_sim_v34.py\":444,\"sim/candidate_stress_v31.py\":21,\"sim/heartbeat_boundaries_v31.py\":25,\"sim/heartbeat_sweep_v31.py\":46,\"sim/policy_sensitivity_v3.py\":19,\"sim/run_v32.py\":34,\"sim/run_v33.py\":58,\"sim/run_v34.py\":54,\"sim/run_v35.py\":273,\"sim/run_v36.py\":83,\"sim/run_v39.py\":153,\"sim/tune_v3.py\":16,\"src/Billboards.sol\":135,\"src/Civic.sol\":302,\"src/Economy.sol\":222,\"src/EndowmentEscrow.sol\":111,\"src/Enhancement.sol\":164,\"src/FarmCore.sol\":611,\"src/FarmEngine.sol\":299,\"src/FarmItems.sol\":165,\"src/FarmRewards.sol\":607,\"src/FeeRouter.sol\":313,\"src/GameRegistry.sol\":101,\"src/GridOperator.sol\":276,\"src/MarketFactory.sol\":61,\"src/PackSale.sol\":293,\"src/Params.sol\":181,\"src/RewardPool.sol\":113,\"src/Season.sol\":368,\"src/StandardAdapter.sol\":77,\"src/StandardMarket.sol\":22,\"src/StarterClaim.sol\":149,\"src/SwarmDesk.sol\":548,\"src/V4Market.sol\":543,\"src/interfaces/IGame.sol\":53,\"src/interfaces/IGameRegistry.sol\":15,\"src/interfaces/ILaunchHook.sol\":7,\"src/interfaces/IV4.sol\":26,\"src/interfaces/Interfaces.sol\":20,\"src/lib/ChainClock.sol\":22,\"src/lib/EconomyMath.sol\":48,\"src/lib/Errors.sol\":13,\"src/lib/GameModule.sol\":17,\"src/lib/ItemMath.sol\":31,\"src/lib/ItemMetadata.sol\":79,\"src/lib/ModuleCode.sol\":49,\"src/lib/Robinhood.sol\":15,\"src/lib/SwarmCode.sol\":18,\"src/oracle/OracleAttestation.sol\":221,\"src/oracle/SignatureCheckerCompat.sol\":14,\"test/AuditV314.t.sol\":116,\"test/AuditV315.t.sol\":199,\"test/AuditV317.t.sol\":359,\"test/AutoRepairReviewV35.t.sol\":39,\"test/Base.t.sol\":310,\"test/Bounties.t.sol\":290,\"test/CivicV35.t.sol\":224,\"test/Clock.t.sol\":54,\"test/DeployGateV314.t.sol\":94,\"test/Deployment.t.sol\":94,\"test/EconomyV35.t.sol\":398,\"test/Endowment.t.sol\":123,\"test/EndowmentEscrowV38.t.sol\":200,\"test/EndowmentGame.t.sol\":51,\"test/Epochs.t.sol\":177,\"test/Events.t.sol\":252,\"test/Factory.t.sol\":31,\"test/FarmDailyBasisV317.t.sol\":146,\"test/FeesParams.t.sol\":135,\"test/ForeignTokenTwin.t.sol\":288,\"test/Gas.t.sol\":110,\"test/GridV35.t.sol\":66,\"test/HeartbeatBpsV313.t.sol\":149,\"test/HookBinding.t.sol\":113,\"test/Invariants.t.sol\":211,\"test/Items.t.sol\":246,\"test/KeeperProfit.t.sol\":95,\"test/LaunchIntakeV317.t.sol\":200,\"test/LaunchL1V317.t.sol\":137,\"test/LazyAccounting.t.sol\":447,\"test/Market.t.sol\":121,\"test/OracleConformanceV37.t.sol\":105,\"test/Packs.t.sol\":167,\"test/Pause.t.sol\":76,\"test/PhasedReleaseV36.t.sol\":165,\"test/PotV35.t.sol\":106,\"test/PredictionV34.t.sol\":46,\"test/Registry.t.sol\":140,\"test/Regression.t.sol\":156,\"test/ReservedEventsV35.t.sol\":41,\"test/ReviewV34.t.sol\":145,\"test/SeasonAudit.t.sol\":204,\"test/StandardAdapter.t.sol\":81,\"test/StandardMarket.t.sol\":63,\"test/StandardV4Integration.t.sol\":128,\"test/SwarmDeskV37.t.sol\":705,\"test/TwinCaptureV312.t.sol\":255,\"test/V310.t.sol\":79,\"test/V33.t.sol\":561,\"test/V34.t.sol\":315,\"test/V39.t.sol\":211,\"test/V4Integration.t.sol\":229,\"test/WarReviewV35.t.sol\":69,\"test/YieldFloorReviewV35.t.sol\":31,\"test/deploy-gate-v314.test.mjs\":42,\"test/fixtures/keeper-v39-vectors.json\":56,\"test/fixtures/oracle-hash-vectors.json\":102,\"test/fork/RehearsalV311.t.sol\":812,\"test/fork/RobinhoodFork.t.sol\":39,\"test/keeper-v39.test.mjs\":34,\"test/mocks/MockGameRegistry.sol\":52,\"test/mocks/MockMarket.sol\":74,\"test/mocks/MockOracleSigner.sol\":17,\"test/mocks/MockSwarmIntake.sol\":67,\"test/mocks/MockToken.sol\":38,\"test/mocks/MockV4Manager.sol\":118,\"test/oracle-v310.test.mjs\":22,\"test/oracle-v37.test.mjs\":42,\"test/python/test_entropy_bot.py\":31,\"test/python/test_merkle.py\":19,\"test/python/test_regulator.py\":30,\"test/python/test_v31.py\":38,\"test/python/test_v32.py\":58,\"test/python/test_v34.py\":33,\"test/python/test_v35.py\":71,\"test/reveal.test.mjs\":24,\"test/ui-v35.test.mjs\":27,\"tools/check_deploy_gate.mjs\":48,\"tools/check_v32_results.py\":52,\"tools/check_v37_authority.py\":20,\"tools/entropy_bot.py\":106,\"tools/freepack_merkle.py\":20,\"tools/make_oracle_bodies.mjs\":45,\"tools/oracle_question_hash.mjs\":80,\"tools/pin_module_code.py\":95,\"tools/pin_swarm_code.py\":48,\"tools/regulator.py\":81,\"tools/rehearse_v311.sh\":28,\"tools/report_v31.py\":55,\"tools/schedule_bodies.mjs\":16,\"tools/starter_merkle.py\":72,\"tools/swarm_constructor_args.mjs\":57,\"ui/app.js\":178,\"ui/index.html\":22,\"ui/reveal.js\":34,\"ui/style.css\":3},\"excluded\":[\"vendor/\",\"node_modules/\"],\"truncated\":true}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"c9478702f33ae912c6577aa36c1d75125684dc668c5a4c139302233ff76cdfe4","verifiedTreeHash":"c912a76610fde8b9509d898a019f4c7a195305dd","verifierVersion":"0.1.0+7129bf9d"}]}