{"assessments":[],"deployments":[],"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":"e0891351-0330-4a3e-8c80-0a4f8ae9ed92","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"2656a5b9b19e4a6fb99de0d8b717d6e2c961f31524012a0893251758c0a6601a","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":"19bf68cd8dfd7e3aa20a28cdddb663c4f7f4fa7c9c5af5382c610d76a9662238","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":"e84acaf33eec9d6a004fad35383f4952e86a2d0e89592723b405292466ac3ea9","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":"34d67fdc08332fca1a591e26ac7c8de6503eea4db14e3672dbb57afd4ded0d92","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":"93970e42e9fb361ea9b769353fedb7fd3451413bd17961c2df26489e90497750","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":"801f245d367af26c1b7daa251b1299d67598d6702f4a5390dd49746c25d37e4a","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":"31e1f1bb7825262fc49b0d30453e95728bdf47ea2d90e70fa4313537b876e16b","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":"9b704bf3cd7a185213153d686fcba02fe47d6899f3fbc09c272ed60cf6d76a76","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"758603b2150c53a9e25fc3057588c5afbbf1ec8cfce19cd263fa95c0e4cf84dc","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":"Launch PLEA test run 5 on Sepolia from this Foundry repository exactly as launch.json lists it: five contracts (PLEA, CabalGate, Seasons, PleaDistributor, PleaLaunch), deployed in order in one transaction with the constructor arguments in launch.json. This is the code your test run 4 job 2234e9a2 (launch #1466) audited, adapted and deployed (commit adb9f44 of its launch repository, including your adapt step's hook dirty-hookData fall-through, your Letterbox appeal minimum raise and your four test files), plus a fix round and one new feature. Fix round, from the run-4 judge's two low findings and the Sepolia live test: (a) Letterbox: an APPEAL letter of a floor-sized plea is no longer refused TooSmallForTheFee; after the same-share clamp an appeal under the 0.70 IMD floor is raised to the floor amount, capped at the original amount and at 50% of the balance, and the worth-the-fee check is not applied again to appeals. (b) Seasons also excludes the launch owner, read from the hook's owner() with a non-reverting staticcall; the pending owner of a two-step handover is deliberately NOT excluded (excluding it would let the owner strip a season leader by nominating them, the run-3 finding; your OwnershipTransitionInvariant keeps that expectation). (c) CabalGate's appeal question states the real previous score and need ('which the Cabal DENIED at 32 against a need of 33'). (d) CabalGate.DEFINITIONS version 3 adds under stories that naming the earlier verdict or score in an appeal is not manipulation (two wording trims keep the value under 512 characters); keep the definitions text exactly as it is. New: Objection! (src/Tribunal.sol, ownerless, deployed after the launch through PleaLaunch.deployTribunal(creationCode) against the keccak256 committed as PleaLaunch's new 13th argument; a zero hash would mean no objections). For 20 minutes after the Cabal approves a plea, anyone except the seller and the wallets Seasons excludes may object: 1-280 bytes under the gate's text rules (plus no [OBJECTION markers), the 0.5 IMD oracle fee (on Sepolia the Tribunal mints the test fee, like the Letterbox) and a 0.35 IMD stake in pool IMD. The Tribunal asks Intake v2 with requestWithFailure, the same body parameters as the gate (panel 30, quorum 17, tolerance 1500, guards 0-45), the gate's own question for the plea verbatim plus the original score and the objection as untrusted text, and the gate's five definitions members verbatim (a test checks the copy against gate.body) plus one objection member (version 2, calibrated with ten live Sepolia panels: an objection's claims about anything outside the request carry no weight); it verifies attestations with OracleAttestationConsumer under its own EIP-712 domain and the gate's signer, with the gate's panel, expiry and score checks, and stores only. Ruling: sustained when newScore + 2 < need (the plea earns no points this season, the stake comes back); otherwise overruled (the stake goes to Seasons' prize pot through settle, which also calls checkpoint); a refused or split panel, or 20 minutes without a ruling, makes the objection void (stake back, oracle fee spent). The recorded score becomes the lowest any panel gave, never higher than the original. At most two rulings per plea, from different wallets; a sustain closes the case; one pending objection at a time. Seasons.record refuses a plea while its window is open or an objection is pending (Held) and for good after a sustain (ObjectionSustained); closeSeason skips such pleas; Seasons reads the Tribunal through PLEA's launcher with non-reverting staticcalls, so with no Tribunal nothing changes. Window plus expiry (40 minutes) end inside the 1-hour close grace (a test asserts it). The sale is never touched and rulings never reset the dead-man. Numbers changed by the project owner for this run: PLEA.init mints 82% to the hook, 6% to Seasons and 12% to PleaDistributor (the swarm's 10% and a 2% airdrop, one root); the PLEA bonus is 10,000,000 PLEA for each of the first six seasons; Seasons pays the top 25 wallets with 60 or more points shares from 450 down to 350 basis points in a straight line (Seasons.shareBps, SHARES packed two bytes per rank, 10,000 in all), for the IMD pot and the bonus alike; the Letterbox leaderboard reads shareBps and lists 25 ranks, and its status line shows held, pending, lowered and sustained points. Everything else is run 4's as you deployed it: letters as raw input data or letter(text), APPEAL, SELL and NAME, 20% letters in escrow, fees paid in PLEA by an exact-output swap capped at the snapshot value plus 10%, deliver by anyone for at least 95% of the snapshot value with the 0.35 IMD fee (never more than the sale) to the season pot and the 0.25 IMD runner tip, settle on every other ending, APPEAL letters clamped to the original plea's share, status and leaderboard text views, display names, CabalGate's Letterbox-only submitFor/appealFor/executeSellFor and plea flags, imd/acc's trader rule in PleaHook (hookData, else the router's msgSender() with 30,000 gas, else a plain-wallet sender; never a router, tx.origin, the Stacker, the IMD token, the sIMD vault, the PoolManager or the hook), no keeper tip in rebalance(), Ownable2Step, pleas of 1% to 50% of the balance (or 2.5M PLEA) with share bands 18/11/5 at 20%/35%, no Laureates, the behaviour-preserving gas pass. test/Tribunal.t.sol, TribunalSeasons.t.sol, TribunalStanding.t.sol and TribunalAdversarial.t.sol cover the new contract (flows, payouts, wi","parentJobId":null,"planHash":"cb37f8918c0c3bf5d88b8bfc8508b9c7dec0a3611fd4493ef29ebc45b4761eaa","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"e0891351-0330-4a3e-8c80-0a4f8ae9ed92","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1691-launch-plea-test-run"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52142","feedbackHash":"1ae26afd56891cad4edbecc30e7401327bdcf0d6c35e12a41bf25003a5ed6e7a","nodeKey":"adapt_contract_project","submissionHash":"2656a5b9b19e4a6fb99de0d8b717d6e2c961f31524012a0893251758c0a6601a","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52616","feedbackHash":"e7e1f1c1175dc509cafc07666ddb0ff626d34cef680a02a729b41f9493d58216","nodeKey":"audit_economics","submissionHash":"19bf68cd8dfd7e3aa20a28cdddb663c4f7f4fa7c9c5af5382c610d76a9662238","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52627","feedbackHash":"ff7af85b4f435a5b09e4e8edbec1fe3ae1b9907f9901fbb96a13c4d01cf592b6","nodeKey":"audit_flow","submissionHash":"e84acaf33eec9d6a004fad35383f4952e86a2d0e89592723b405292466ac3ea9","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52665","feedbackHash":"fd7846fe996c40d8206961aca89d2403438dfd35ad255bd3d60e2cdb946548a7","nodeKey":"audit_imported_code","submissionHash":"34d67fdc08332fca1a591e26ac7c8de6503eea4db14e3672dbb57afd4ded0d92","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50989","feedbackHash":"d303c015872dcec9904740485ea51fd408c6219c4257051838c71d22ec89492d","nodeKey":"audit_judge","submissionHash":"93970e42e9fb361ea9b769353fedb7fd3451413bd17961c2df26489e90497750","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52605","feedbackHash":"16ed0c06cccc51d67933af95be65a094153a0bc7f8c721c0bb4e18d4de87829c","nodeKey":"audit_math","submissionHash":"801f245d367af26c1b7daa251b1299d67598d6702f4a5390dd49746c25d37e4a","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52482","feedbackHash":"1b3356b67954b9f79b1a6d848568f9ab0990dbb11ceafe5bf8b99a664e01a558","nodeKey":"audit_permissions","submissionHash":"31e1f1bb7825262fc49b0d30453e95728bdf47ea2d90e70fa4313537b876e16b","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51491","feedbackHash":"11fdf73008fbac114e60c00de417f1477713b87cbfc1856664a7193dbf593d19","nodeKey":"manifest","submissionHash":"9b704bf3cd7a185213153d686fcba02fe47d6899f3fbc09c272ed60cf6d76a76","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51086","feedbackHash":"8399c367204c4dbebfba3f4fb9fdc7b798b445732ceae3b1f2c9f650eba9b012","nodeKey":"write_foundry_tests","submissionHash":"758603b2150c53a9e25fc3057588c5afbbf1ec8cfce19cd263fa95c0e4cf84dc","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"bf7c5366d297cecf33a858ff43838529a28c0bb5b6b558c9492e2db5fdfac6c8","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"a7979f925df7a720","findings":[{"citation":"resolved","description":"The recorded score is the minimum over up to three independent panel draws (the original plus two rulings) and can never rise. With toleranceBps 1500 the same plea re-scored by a fresh panel lands a few points either side of the first score, so the expected minimum of three draws is systematically below the first draw even when both objections are OVERRULED. A rival therefore does not need a sustain to profit: two objections from two wallets cost at most 2 x (0.5 IMD fee + 0.35 IMD stake) = 1.7 IMD on mainnet (0.7 IMD on Sepolia, where the Tribunal mints the fee), while a one-rank move in the top 25 is worth 4 to 5 bps of the IMD pot plus 350,000 to 450,000 PLEA of bonus per season. Nothing in the contract makes an overruled objection cost more than the stake, and the stake goes to a pot the objector may share in. This is the economics the brief asks for (\"the recorded score becomes the lowest any panel gave\"), so it is reported as an incentive note, not a defect to fix in code; the author may want a median or a floor at the original score minus a margin if objection-farming of leaders appears on Sepolia.","line":309,"path":"src/Tribunal.sol","reproduction":"State: alice's plea #1 approved at 40 (need 33). Wallet B calls Tribunal.object(1, text) and the panel answers 38 (overruled: 38 + 2 >= 33); wallet C calls object(1, text) and the panel answers 36 (overruled). Seasons.record(1) after the window records 36, not 40 (Tribunal.onOracleResult line 309 keeps the lowest; Seasons.record line 201 takes min(lowest, score)). Cost to B and C together: 2 stakes (0.70 IMD, paid to the season pot through settle) plus 2 oracle fees. Expected: by the brief, exactly this. Actual: exactly this; the note is that it is cheaper than one rank's prize, so objecting to every leader is rational.","severity":"info","snippet":"        if (c.count == 0 || score < c.lowest) c.lowest = uint8(score);","title":"Objection economics: min-of-panels rule makes two cheap objections a positive-EV attack on any leader (agreed design, documented as an incentive risk)"},{"citation":"resolved","description":"The oracle-consumer reference says the intake, action id, asset and price must be constructor input and owner-settable, never constants, so that a moved price or an oracle-2 action does not need a redeploy. The Tribunal is ownerless by design and pays a constant 0.5e18 under a constant action id. If Intake.priceOf(ACTION, oracleAsset) ever differs from 0.5e18, requestWithFailure in object() no longer pulls the right amount and object() reverts for every caller; no funds are at risk (the stake and fee are pulled in the same transaction, which reverts as a whole, and already-filed objections still settle through expire/settle). The gate has the same constant and the project accepted it for run 4, so this only records the dependency failure mode the Economic Security guide asks to check.","line":124,"path":"src/Tribunal.sol","reproduction":"State: Intake.priceOf(bytes32('oracle.request@oracle-1'), oracleAsset) returns 0.6e18. Call: bob calls Tribunal.object(1, 'text'). Expected by the reference: the contract reads priceOf and pays it. Actual: the Tribunal approves and passes 0.5e18 (lines 267-275); the Intake refuses the under-paid request and object() reverts for every objector until a new Tribunal is launched; Seasons then records all pleas unopposed after each window.","severity":"info","snippet":"    uint256 public constant ORACLE_FEE = 0.5e18;","title":"Tribunal hard-codes the Intake price (0.5 IMD) and the action id with no owner to follow a price or version change; a move disables objections for good (same as the gate, accepted in run 4)"}],"hash":"19bf68cd8dfd7e3aa20a28cdddb663c4f7f4fa7c9c5af5382c610d76a9662238","nodeId":"cc13c486-78ba-4d28-90f7-7d21a7931fe1","outcome":"completed","summary":"Findings file is written and validated. Recap:\n\n**Outcome.** The economics of the Objection! feature and the fix round hold up under static tracing. I found no reproducible loss-of-funds or broken-guarantee defect in my area, so `.imd-findings.json` carries two informational notes and a full coverage record.\n\n**What I checked (Economic Security, Invariant, Flow Gap guides):**\n- Stake conservation in the Tribunal: `object` is the only inflow, `settle` the only outflow, once per decided objection. Void and sustained return to the objector, overruled reaches Seasons and is labelled by `checkpointObjection` in the same call.\n- Seasons accounting: `accountedPot` stays equal to open season fees plus rollover across checkpoint, objection credit, close and flush. Share table sums to 10,000 bps.\n- Timing seam: window plus pending expiry (40 min) ends inside the 1-hour close grace, so a held plea of a closed season cannot exist and no points are stranded by the hold.\n- Letterbox appeal floor raise: the raised amount still satisfies the gate's 50% and 1% bands on the lesser balance; the fee can equal the whole sale after a price halving, which the code documents.\n- The fail-open reads of the Tribunal through PLEA's launcher, the dead-man never being reset by rulings, and the min-of-panels recording.\n\n**The two notes recorded:**\n- Min-of-panels plus two cheap objections is a positive-EV attack on any leader (about 1.7 IMD on mainnet against a rank's prize). This is the agreed design, flagged as an incentive risk with concrete numbers.\n- The ownerless Tribunal hard-codes the Intake price and action id, so a price or version move disables objections for good. No funds are at risk, and the gate shares this from run 4.\n\n**Limitation.** The sandbox caps memory at 1.5 GB and solc with via_ir was killed on every build that included a test file, so no Foundry test ran. All verdicts are from reading the code. Six PleaHook entry points and two PleaDistributor ones are marked unreached as outside my area.","treeHash":null,"usage":{"cachedInputTokens":1951128,"inputTokens":482,"model":"claude-fable-5-1","outputTokens":35486,"runtime":"claude","turns":30,"wallClockMs":762918}},{"artifacts":[],"attempt":3,"bundleHash":"f6c4c81756d7d380c15030f1a524c8ec6fcec285d7d3d4ee3d82122265df002c","device":"0499829b879ec3d5","findings":[{"description":"CabalGate's constructor reverted when deployed as the launch deploys it, on a chain where no other contract exists: take outside values as arguments and check the live contract on first use","line":null,"path":"src/CabalGate.sol","reproduction":"The verifier deployed the manifest's contracts as the launch deploys them: from the launch factory (msg.sender), with IMD's launch wallet as tx.origin and $owner set, then read owner(), admin(), getOwner() and the admin role, and for a hook opened, seeded, traded and collected the pool from the factory (test/protected/evm_contracts/Owners.protected.t.sol in the protected floor).","severity":"high","title":"CabalGate is owned by the launch factory or by IMD"}],"hash":"2656a5b9b19e4a6fb99de0d8b717d6e2c961f31524012a0893251758c0a6601a","nodeId":"ea0df01c-d493-4b32-81cb-7e229e2a55f0","outcome":"completed","summary":"Repaired the build timeout by loading contract artifacts in tests and scripts, preserving launch behavior.\n\n- Cold `forge build`: passed in **474 seconds**, below the 600-second limit.\n- `forge test`: **550 passed, 0 failed, 2 RPC-dependent skips**, using the supplied seed.\n\nChanges and verification are recorded in [ADAPTATION.md](/home/seat/.identitymd/work/e0891351-0330-4a3e-8c80-0a4f8ae9ed92/ea0df01c-d493-4b32-81cb-7e229e2a55f0/ADAPTATION.md).","treeHash":"2e5e7c456f58c0a03642392211651920d49e81f3","usage":{"cachedInputTokens":12401408,"inputTokens":383055,"model":"gpt-6.1-sol","outputTokens":70422,"runtime":"codex","turns":24,"wallClockMs":3841579}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e8e860c7f2306473","findings":[{"citation":"resolved","description":"Area: asymmetry (run-4 behaviour vs run-5). In run 4 `Letterbox._deliver` and `_settle` recorded an approved letter plea's points in the same transaction. With the Tribunal deployed, `Seasons.record` reverts `Held` for the whole 20-minute objection window (longer than the 7-minute sell window), so every delivered or settled letter plea hits the `catch` and is left unrecorded. Nothing in the Letterbox or Tribunal records it afterwards: a ruling (`Tribunal.onOracleResult`) stores only, `Seasons.closeSeason` records only the ids its caller lists (`_tryRecord`, src/Seasons.sol:362), and once `closed[season]` is set `record` reverts `SeasonClosed` for good. The behaviour matches OBJECTIONS.md (\"Recording happens as today ..., just later\") and the closer of a season is expected to list held ids, so this is a documented liveness dependency, not an access or accounting defect; it is reported because it is a change from run 4 that the Letterbox status line only hints at (\"+N points once recorded\") and no contract-side actor is responsible for the second call. A keeper that calls `Seasons.record(id)` after `verdictAt + 20 min` (or lists the id in `closeSeason`) is all that is needed.","line":437,"path":"src/Letterbox.sol","reproduction":"Fixture with the Tribunal deployed (test/utils/Fixture.sol, withTribunal() = true). alice holds PLEA bought a day ago. (1) alice sends a letter to the Letterbox (fallback with the plea text); the gate opens plea #id with FLAG_BY_LETTER|FLAG_AUTO_SELL. (2) The Intake delivers a score of 40 (approved). (3) +2 minutes: anyone calls `Letterbox.deliver(id)`: the sale executes, the 0.35 IMD fee reaches Seasons, and `_record` calls `seasons.record(id)`, which reverts `Held(id)` and is swallowed; `seasons.recorded(id) == false`. (4) Nobody calls `Seasons.record(id)`. (5) At season end + 1 hour anyone calls `seasons.closeSeason([])`. Actual: season 0 closes without alice's 40 points; `seasons.record(id)` now reverts `SeasonClosed(0)`. Expected by a run-4 user: delivery recorded the points. Expected by OBJECTIONS.md: a later `record` or a close listing the id; the gap is that no contract-side path makes that call. Verified with a scratch test (test/scratch/Probe.t.sol, test_letterPointsLostIfNobodyRecords) which passed, i.e. the sequence above happens as described.","severity":"info","snippet":"        try seasons.record(id) {} catch {}","title":"With a Tribunal, a letter plea's points now depend on a later permissionless Seasons.record call: deliver/settle swallow the Held revert and nothing retries, so a season closed with an empty list drop"},{"citation":"resolved","description":"Area: access control (permission model map). Roles after deployment: (1) PLEA owner (`$owner`, Ownable2Step): `allow(address)` adds an address that may send PLEA wallet-to-wallet while the Cabal watches (it still cannot reach the pool: `_update` only lets `gate`/`hook` send to the PoolManager and `beforeSwap` refuses sells from any sender but the gate); `PleaLaunch.seed()` at any time before START; `transferOwnership`/`acceptOwnership`/`renounceOwnership`. (2) PleaDistributor owner (`$owner`): `setMerkleRoot` once, choosing who receives the 12% supply; `claim` is then permissionless and proof-bound. (3) Launch owner (hook `owner`, immutable, same `$owner`): receives 0.5% of every IMD fill; cannot change anything. (4) Oracle signer (immutable in CabalGate and copied by the Tribunal via `signerOf`): a hot key whose signature decides every verdict and ruling; it cannot be rotated without a redeploy. (5) Intake writer: unsigned failure calls can only clear a pending plea/objection (no cooldown, no value moved). Ownerless: CabalGate, Seasons, Letterbox, Tribunal, PleaLaunch, PleaHook (owner is a fee recipient only). Exclusion from points/prizes covers `plea.owner()` and `hook.owner()` and deliberately not `pendingOwner()` (run-3 finding; OwnershipTransitionInvariant). I found no path by which any of these roles bypasses a user-side guard or redirects in-flight value: `allow` cannot create a sell route, a handover cannot strip a leader without the leader's `acceptOwnership`, and the signer's key is the oracle's stated trust.","line":111,"path":"src/PLEA.sol","reproduction":"State the roles can reach, for the record (none is a defect): (a) owner calls `PLEA.allow(X)`; X calls `PLEA.transfer(Y, n)` while `gate.restricted()` is true: succeeds (wallet-to-wallet); X calls `PLEA.transfer(poolManager, n)`: reverts `CabalIsWatching`; X swaps PLEA->IMD through any router: `PleaHook.beforeSwap` reverts `SellsOnlyViaGate`. (b) owner calls `PLEA.transferOwnership(leader)` while leader is rank 1: `Seasons.excluded(leader)` stays false and `closeSeason` still pays leader until leader calls `acceptOwnership` (test/OwnershipTransitionInvariant.t.sol). (c) distributor owner calls `setMerkleRoot(r)` twice: second call reverts `RootAlreadySet`.","severity":"info","snippet":"    function allow(address account) external onlyOwner {","title":"Trust assumptions of the privileged roles (documented, not a bypass): PLEA owner's add-only allowlist and seed-any-time; distributor owner's one-time Merkle root; launch owner's immutable 0.5% fee sha"}],"hash":"31e1f1bb7825262fc49b0d30453e95728bdf47ea2d90e70fa4313537b876e16b","nodeId":"ea4f089e-9e75-4faf-8991-3c3570f777dd","outcome":"completed","summary":"The review is complete and the findings file is written and validated.\n\n**Outcome:** no substantiated access-control, trust-gap or asymmetry defect in the run-5 code. The file `.imd-findings.json` holds two info-level entries and a coverage row for all 55 listed entry points plus four invariants.\n\n**What I checked, in depth**\n- **Tribunal:** every guard on `object` (approval, window, unrecorded, seller and excluded wallets, one pending, two rulings from distinct wallets), the callback and failure paths (intake-only, own request, own EIP-712 domain with the gate's signer, replay consumption, panel and score checks), `expire`, and `settle`. The stake accounting holds, including a settle after the Cabal died, the last season closed and the pot was flushed. Rulings never touch the gate or the dead-man.\n- **Seasons:** `record`, `_tryRecord`, `closeSeason`, `checkpointObjection` and the exclusion set. The exclusion reads are identical everywhere, the hook owner is immutable, and the pending PLEA owner is deliberately not excluded. The 40-minute hold bound stays inside the 1-hour close grace at the last-second edge.\n- **Gate, Letterbox, PLEA, PleaLaunch, PleaDistributor, hook:** caller checks on every state-changing entry point, the Letterbox-only variants against their user-side twins, the courtTake and `_update` rules, the one-time deploy and launcher paths, and the hookData trader rule. The manifest hashes in launch.json match this build.\n\n**Reported items (both info)**\n1. With a Tribunal, a delivered or settled letter plea's points are no longer recorded in the same transaction. The Letterbox swallows the `Held` revert and no contract-side actor retries, so a season closed with an empty list drops those points. This matches the design document but is a run-4 behaviour change worth a keeper or site call.\n2. A trust-assumption record for the privileged roles (PLEA owner's add-only allowlist and seed-any-time, distributor owner's one-time root, immutable launch-owner fee share, the oracle signer key), with concrete state showing none of them bypasses a user-side guard.\n\n**Not covered in my area:** the economics of wall placement in `rebalance` and the fee arithmetic in the Letterbox's floor raise belong to the other specialists. The scratch test I used for the probes was removed and no repository file was changed.","treeHash":null,"usage":{"cachedInputTokens":2156924,"inputTokens":482,"model":"claude-fable-5-1","outputTokens":41692,"runtime":"claude","turns":26,"wallClockMs":848062}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0ef0cddb99617930","findings":[{"citation":"resolved","description":"The launch manifest schema accepts notes as one string of at most 4,000 characters and refuses the whole file otherwise, exactly like an extra key would. The notes string in this tree is 4,753 characters (python3 -c \"import json;print(len(json.load(open('launch.json'))['notes']))\"). Nothing in the repository checks this: test/LaunchManifest.t.sol reads launch.json for the gas measurement and the committed code hashes but never measures notes. Every other manifest check passes in this tree: the keys are exactly kind, contracts and notes; the five contract names are unique Solidity identifiers; PLEA/CabalGate/Seasons/PleaDistributor/PleaLaunch carry 1/7/3/2/13 constructor words matching their constructors in declaration order; the two creation-code hashes (0x9c7c... for Letterbox, 0x98a7... for Tribunal) equal keccak256 of this build's out/Letterbox.sol and out/Tribunal.sol bytecode.object; only PLEA and PleaDistributor take $owner. The one defect is the length of notes, so the run would be parked at manifest validation with the code itself ready. The fix is to shorten notes to at most 4,000 characters (the run-4 behaviour recap at the end is the natural cut); no contract changes are needed.","line":56,"path":"launch.json","reproduction":"State: the tree as committed. Input: parse launch.json and measure notes. Expected: len(notes) <= 4000 and the manifest is accepted. Actual: len(notes) == 4753; a manifest validator enforcing the schema refuses the file and the launch does not reach deployment.","severity":"medium","snippet":"  \"notes\": \"PLEA test run 5 on Sepolia (chain 11155111): the run-4 code as deployed (launch #1466) plus the fix round and Objection!. Deploy PLEA, CabalGate, Seasons, PleaDistributor and PleaLaunch in this order, with zero ETH, in one atomic factory transaction. Only PLEA and PleaDistributor take privileged owner arguments, both $owner; PleaLaunch derives its owner from PLEA. CabalGate uses Intake v2 0xa43e6F75ee006411F79Ac1C84120606C2330DE82, oracle fee asset 0x44a1Cd38474FB1748400E7DEb5F8D786ccE3F89A, TestIMD 0x2B69099E59b05901faA1DD164fabf098bf831E82, signer 0x5598Aa9146215Bc13eb26f2c692Ad1461Fd32982, 18000-second seasons and a 118800-second dead-man. PleaLaunch uses Sepolia v4 PoolManager 0xE03A1074c86CFeDd5C142C4F04F1a1536e203543, the same TestIMD and oracle fee asset, Stacker 0x0457276D7b036818B3EddC1A4A3FCeda61e9314d, credit gas 1300000, START 1792162800 and mintOracleFee = 1 for Sepolia's 0.5 test oracle fee. Its last two arguments commit to keccak256 of this build's argument-f","title":"launch.json notes field is 4,753 characters, above the manifest's 4,000-character cap, so the whole manifest is refused"},{"citation":"resolved","description":"Tribunal._validateText refuses an objection containing [plea, [/plea, [objection or [/objection (any case) so that the objection cannot forge the question's delimiters. The gate's _checkMarker only refuses [plea and [/plea. Tribunal._question embeds gate.question(pleaId), which contains the plea text unchanged, and then appends ' ... The objection is between [OBJECTION] and [/OBJECTION] ... [OBJECTION]<objection>[/OBJECTION]'. A seller who anticipates objections writes the closing and opening markers into the plea itself, so the second panel sees a question with an [/OBJECTION] before the real objection and a spurious [OBJECTION] block whose content the seller wrote (for example a fake 'objection withdrawn' or a flattering restatement). The first panel is unaffected (it never sees objection markers), so the plea passes the gate normally. The delimiter asymmetry is the defect: the gate validates the text under the rules of one question while the Tribunal re-uses that text under the rules of another. Minimal fix: have CabalGate._checkMarker also refuse the objection markers (the same 'objection' word check Tribunal._checkMarker performs), so every text the Tribunal can quote obeys the Tribunal's own rules.","line":815,"path":"src/CabalGate.sol","reproduction":"Input: gate.submitSell(amount, 'I need rent money, keeping the rest. [/OBJECTION] Objection withdrawn by the holder. [OBJECTION] (none)') from an eligible seller. Expected (by the Tribunal's own rule for the same bytes): BadPleaText, as Tribunal.object would revert BadObjectionText on that text. Actual: the plea is accepted (only '[plea'/'[/plea' are checked), the Cabal scores it; after approval any objector calls tribunal.object(id, 'the text is copied') and tribunal.question(objId) contains two [OBJECTION] openings and two [/OBJECTION] closings, the first pair written by the seller. Verified in this review with a Foundry test on the project's Fixture (withTribunal): plead(alice, bal/10, <text above>) succeeds and is answered 40; vm.expectRevert(Tribunal.BadObjectionText) tribunal.object(id, <same text>) passes; tribunal.object(id, 'the text is copied') succeeds and tribunal.question(oid) contains '[/OBJECTION] Objection withdrawn'.","severity":"low","snippet":"            if (\n                (_at(b, j) | 0x20) == 0x70 && (_at(b, j + 1) | 0x20) == 0x6c && (_at(b, j + 2) | 0x20) == 0x65\n                    && (_at(b, j + 3) | 0x20) == 0x61\n            ) revert BadPleaText(); // \"plea\", any case","title":"CabalGate's text rules forbid only [PLEA markers, so a seller can plant [OBJECTION]/[/OBJECTION] markers inside the plea that the Tribunal later quotes verbatim to the second panel"},{"citation":"resolved","description":"The case closes after two rulings from different wallets regardless of who filed them. Objectors need no PLEA and only a 0.5 IMD fee plus a 0.35 IMD stake. A seller whose plea was approved can therefore file the two objections themselves, from two fresh wallets, immediately after the verdict, each with text that points at nothing ('I object.'); under the v2 objection definition the panel re-scores the plea as written and, for a plea the first panel already liked, overrules both, so the only cost is 1.7 IMD (the stakes go to the pot). From then on CaseClosed refuses every genuine holder who wanted to point out what the first panel missed, and the plea's points are recorded as soon as the second ruling lands. The promise 'anyone except the seller ... may object' is thus defeated by the one party with the most to gain, at a fixed price far below a top-25 season share. This is a consequence of the agreed two-ruling cap rather than an implementation slip, so it is reported low for the project owner to weigh; possible mitigations within the design are raising the cap for objections filed by wallets with no PLEA history, or not counting an overruled objection whose score was at or above the original toward the cap.","line":251,"path":"src/Tribunal.sol","reproduction":"State: plea #1 by S approved at T with score 40, need 33; Tribunal deployed. Sequence: wallet X (funded by S) calls object(1, 'I object.') at T+1s; the panel answers 40 -> Overruled, count=1, lastObjector=X. Wallet Y (funded by S) calls object(1, 'I object.') right after the ruling; the panel answers 40 -> Overruled, count=2. Genuine holder Z, who can show the plea text is copied from a known source, calls object(1, ...) at T+10min. Expected: Z's objection is accepted (window open, Z is not the seller or an excluded wallet). Actual: revert CaseClosed(1); Seasons.record(1) succeeds immediately with the full 40 points.","severity":"low","snippet":"        if (c.sustained || c.count >= MAX_OBJECTIONS) revert CaseClosed(pleaId);\n        if (c.count != 0 && c.lastObjector == msg.sender) revert SameObjector();","title":"Two sham objections from wallets the seller controls exhaust MAX_OBJECTIONS and lock genuine objectors out of the case"},{"citation":"resolved","description":"settle is permissionless and separate from the ruling: the objector who lost has no reason to call it and nobody else is paid to. When it is called, Seasons.checkpoint attributes the 0.35 IMD to the season running at that moment (seasonFees[current]), or to rollover if that season is already closed, never to the season of the plea that was objected to. So a ruling in the last minute of season N whose settle lands after the boundary enriches season N+1's pot, and stakes of objections nobody settles sit in the Tribunal's IMD balance indefinitely, outside every pot and outside flushToWall. The brief says the stake 'goes to Seasons' prize pot through settle (which also calls checkpoint)', which this does, but the test suite only settles in the same season as the ruling. Minimal fix: have onOracleResult transfer the stake to Seasons and call checkpoint directly when the ruling is Overruled (the callback has gas to spare: one ERC-20 transfer plus checkpoint), leaving settle for the objector's refund paths only.","line":350,"path":"src/Tribunal.sol","reproduction":"State: season length 18000 s (Sepolia values), season N ends at E. Sequence: plea approved at E-15min, objection filed at E-14min, panel answers at E-2min -> Overruled; nobody calls settle until E+30min; then any wallet calls settle(id). Expected: seasonFees[N] += 0.35e18 (the plea and the objection belong to season N). Actual: Seasons.checkpoint runs at E+30min and seasonFees[N+1] += 0.35e18; if closeSeason for N already ran, rollover += 0.35e18 instead. Variant: nobody ever calls settle -> the 0.35 IMD stays in the Tribunal forever.","severity":"low","snippet":"        address to = o.ruling == Ruling.Overruled ? address(seasons) : o.objector;\n        imd.safeTransfer(to, STAKE);\n        if (to == address(seasons)) seasons.checkpoint();","title":"An overruled stake is booked to whichever season is running when settle() happens to be called, not the plea's season, and nobody is obliged to call it"},{"citation":"resolved","description":"forge build of the full repository (src, script and 38 test files) was stopped twice at the 10-minute limit of this review environment without producing artifacts; src alone compiles in 19 s and the four Tribunal suites (79 tests, all passing) compile and run in 97 s when every other test file is skipped (--skip 'test/[A-S]*.t.sol' --skip 'test/T[a-q]*.t.sol' --skip 'test/To*.t.sol' --skip 'test/fork/*'). This review therefore could not execute the run-4 suites, LaunchManifest.t.sol or the protected rehearsal in this environment. Not a code defect; it bounds what was verified and matters for any reviewer or verifier running proofs with a wall-clock limit.","line":10,"path":"foundry.toml","reproduction":"Command: timeout 590 forge build (default profile, via_ir=true, optimizer_runs=200). Expected: artifacts in out/. Actual: terminated at 590 s with no artifacts; forge build --skip 'test/**' --skip 'script/**' completes in 19 s.","severity":"info","snippet":"optimizer_runs = 200","title":"The whole test tree does not compile within 10 minutes under via_ir; the new suites were verified only with the other test files skipped"},{"citation":"resolved","description":"Read in full, every external and public state-changing function traced for caller, value moved and trust: src/Tribunal.sol (new), src/Seasons.sol, src/CabalGate.sol, src/Letterbox.sol, src/PleaLaunch.sol, src/PLEA.sol, src/PleaDistributor.sol, src/interfaces/IPleaParts.sol, the consumer half of src/OracleAttestation.sol (verify, consume, decoders), launch.json, foundry.toml and the four Tribunal test suites' names and fixture. Read only in part: src/PleaHook.sol (1,062 lines; only its owner, seed, fundWall and latestPrice surfaces were checked for what Seasons, the gate and the Letterbox rely on; the run-4 trader rule, rebalance and fee paths were not re-audited in this budget) and the library half of src/OracleAttestation.sol. Executed: forge build of src (19 s); the four Tribunal suites (79 tests, pass) and one scratch test with every other test file skipped. Not executed: the run-4 suites, LaunchManifest.t.sol, the fork tests and the protected rehearsal, because the full tree does not compile within this environment's 10-minute limit (see the via_ir note). Checked and found consistent: the committed Letterbox and Tribunal creation-code hashes equal keccak256 of this build's bytecode; the five gate definitions in Tribunal.DEFINITIONS are byte-identical to CabalGate.DEFINITIONS and each value is under 512 characters (plea 511, stories 510, manipulation 507, objection 506); PLEA.init mints 82/6/12 summing to the supply; the 25 packed shares sum to 10,000; constructor argument counts match; no DELEGATECALL, SELFDESTRUCT, proxy, pausing or post-launch minting in the read contracts; the Tribunal's callback stores only, verifies under its own domain, consumes a.requestId once, and the stake-in/stake-out accounting conserves the Tribunal's IMD balance.","line":1,"path":"src/PleaHook.sol","reproduction":"Not a defect; a statement of scope. The commands used are in the via_ir finding.","severity":"info","snippet":"// SPDX-License-Identifier: MIT","title":"Coverage: contracts read and what could not be reached in this review"}],"hash":"34d67fdc08332fca1a591e26ac7c8de6503eea4db14e3672dbb57afd4ded0d92","nodeId":"cd5374d9-1e5e-43cb-a2e9-3a2d98d3502b","outcome":"completed","summary":"The review is complete and the findings file is written. The working tree is otherwise untouched.\n\n**Result:** no critical or high defects in the five launch contracts or the new Tribunal. One medium finding blocks the launch at the manifest step, plus three lows and two info entries, all in `.imd-findings.json`.\n\n- **Medium, launch.json:** the notes string is 4,753 characters, above the manifest's 4,000-character cap, so the whole file would be refused. Nothing in the repo checks this. Every other manifest property holds: keys, names, argument counts, and both committed creation-code hashes match this build's bytecode exactly.\n- **Low, CabalGate text rules:** the gate forbids only `[PLEA` markers, so a seller can write `[/OBJECTION]` and `[OBJECTION]` into the plea itself. The Tribunal quotes the plea verbatim to the second panel, so the seller controls a fake objection block. Reproduced with a scratch test on the project fixture: the gate accepts the text, the Tribunal refuses the same bytes as an objection, and the marker appears in the Tribunal's question.\n- **Low, Tribunal case cap:** two sham objections from wallets the seller funds exhaust the two-ruling cap for 1.7 IMD and lock out genuine objectors. A consequence of the agreed design, flagged for the owner to weigh.\n- **Low, Tribunal settle:** an overruled stake is booked to whichever season is running when someone calls settle, not the plea's season, and nobody is obliged to call it.\n- **Info:** the full test tree does not compile inside this environment's 10-minute limit under via_ir. Source alone builds in 19 seconds, and the four Tribunal suites pass (79 tests) when the other test files are skipped.\n- **Info, coverage:** read in full were Tribunal, Seasons, CabalGate, Letterbox, PleaLaunch, PLEA, PleaDistributor, the interfaces and the consumer half of OracleAttestation. PleaHook was checked only on the surfaces the other contracts rely on. The run-4 suites, the manifest test, fork tests and protected rehearsal could not be executed here.\n\nAlso confirmed along the way: the five gate definitions copied into the Tribunal are byte-identical and every value is under 512 characters, the share table sums to 10,000, the 82/6/12 mint sums to the supply, and the Tribunal's callback verifies under its own domain, consumes each request once and stores only.","treeHash":null,"usage":{"cachedInputTokens":1617503,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":33039,"runtime":"claude","turns":24,"wallClockMs":1716233}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fd7c32744e171d7d","findings":[],"hash":"36964d6257c5ece079c1b7e3fb071121dee53eafcd04ad2ff1c583d51f0d3c4e","nodeId":"ea0df01c-d493-4b32-81cb-7e229e2a55f0","outcome":"failed","summary":"could not materialize reads: read pinned:ea0df01c-d493-4b32-81cb-7e229e2a55f0:6: fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"codex","turns":0,"wallClockMs":11386}},{"artifacts":[],"attempt":2,"bundleHash":"241845ae9db7782818b84ebd3f771082a7785c9c4914e0127378b0df8b64efd9","device":"080780b6898c2241","findings":[],"hash":"758603b2150c53a9e25fc3057588c5afbbf1ec8cfce19cd263fa95c0e4cf84dc","nodeId":"7d15a3b0-23bd-44bc-bd96-57764205be79","outcome":"completed","summary":"Added four test files under `test/` covering manifest deployment, Tribunal stake invariants, oracle failure paths, payout rollback, and text fuzzing.\n\n`forge build` passed. `forge test` with the supplied seed: **570 passed, 0 failed**. Two existing fork suites skipped because RPC URLs were unset.","treeHash":"14213c65c452e6d171b8c6c6b0317ea4343b8f33","usage":{"cachedInputTokens":3739776,"inputTokens":175739,"model":"gpt-6-astra","outputTokens":32174,"runtime":"codex","turns":8,"wallClockMs":1070908}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"c79042525fc4a50d","findings":[],"hash":"801f245d367af26c1b7daa251b1299d67598d6702f4a5390dd49746c25d37e4a","nodeId":"44a54c5d-66bd-483f-9981-025a37a76aae","outcome":"completed","summary":"The review is complete. `.imd-findings.json` is written and valid, with an empty findings list and 59 coverage rows (all 58 entry points plus four checked invariants). The working tree is clean apart from that file; the scratch tests were removed.\n\n**What I checked, in the math, boundary and numerical-gap area**\n\n- **Seasons' new share table.** The packed `SHARES` bytes decode to 450, 446, … 350 basis points over 25 ranks, match `round(450 - 100·i/24)` exactly, and sum to 10,000. Prize and bonus payouts floor per rank, so at most 24 wei of IMD rolls over and the 10,000,000 PLEA bonus splits exactly.\n- **Tribunal rulings.** The sustain rule is `score + 2 < need` in uint256 arithmetic with no wrap. The lowest score only ever falls, the recorded score is `min(lowest, original)` with 255 as the no-ruling sentinel, and the ruling count is capped at two. The window check in `object` and the hold check in `standing` use matching comparators.\n- **Two boundaries measured, not just read.** The worst-case Tribunal callback (280-byte plea, 280-byte original appeal text, 280-byte objection, cold storage) uses about 97k gas against the Intake's 200k stipend. The worst-case decoded question is 1,731 bytes against the 2,000-character limit.\n- **Letterbox appeal floor (fix round a).** I traced the clamp chain with numbers: the result is always at most the original amount and half the balance, at least 1% of the lesser balance, and the fee allowance never lets the escrow pull exceed the balance. The worth-the-fee check is not re-applied to appeals, as specified.\n- **Seasons accounting.** The pot never falls below the accounted pot, so `checkpoint` cannot underflow and brick swaps. Overruled stakes are credited to the verdict's season through the guarded `checkpointObjection`. The 40-minute objection-plus-expiry span fits inside the 1-hour close grace.\n- **Hook fee reconciliation.** Specified-side fees are capped at the fill, and the floor-summed cashback, owner and prize shares never exceed the IMD fee, including on exact-output fee swaps, so the pool share cannot underflow.\n\n**Verification limits.** The container's 1.5 GB memory cap kills a full `forge build`, so I could not run the existing suite. Sparse compilation of single test files did work, which is how the gas measurement and the share-table check were executed. The hook's `rebalance` and wall-guard arithmetic were traced by reading only.\n\n**Result.** No defect in the assigned area was substantiated, so the findings list is empty. Every entry point has a coverage row with a one-line reason.","treeHash":null,"usage":{"cachedInputTokens":2764846,"inputTokens":642,"model":"claude-fable-5-1","outputTokens":56398,"runtime":"claude","turns":32,"wallClockMs":983906}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e36579e0223ff908","findings":[{"citation":"resolved","description":"Merged from audit_economics. The recorded score is min(original, every ruling score) and can never rise (Tribunal.onOracleResult line 309; Seasons.record line 201 takes `lowest < score ? lowest : score`). With toleranceBps 1500 a fresh panel lands a few points either side of the first score, so the expected minimum of up to three draws is below the first draw even when both objections are OVERRULED. Two wallets can therefore lower a rival's plea for 2 x (0.5 IMD fee + 0.35 IMD stake), the stake going to a pot the objectors may share in, while one rank in the top 25 is worth 4-5 bps of the IMD pot plus 350,000-450,000 PLEA of bonus per season. This is exactly what the brief asks for ('the recorded score becomes the lowest any panel gave, never higher than the original') and OBJECTIONS.md records the decision, so it is reported as an incentive note, not a defect: the code does what was specified. If objection-farming of leaders shows up on Sepolia, a floor at original minus a margin for overruled rulings would close it.","line":309,"path":"src/Tribunal.sol","reproduction":"Fixture with the Tribunal deployed (test/utils/Fixture.sol withTribunal()). alice's plea #1 approved at 40 (need 33). Wallet B: tribunal.object(1, 'x'); the mock Intake answers 38 (38 + 2 >= 33: Overruled, caseOf(1).lowest == 38). Wallet C: tribunal.object(1, 'y'); panel answers 36 (Overruled, lowest == 36, count == 2, standing(1).held == false). seasons.record(1) now records 36: seasons.bestOf(0, alice)[0] == 36, not 40. Cost to B and C: two stakes (0.70 IMD, paid to Seasons by settle) plus two oracle fees. Expected by the brief: exactly this. Actual: exactly this.","severity":"info","snippet":"        if (c.count == 0 || score < c.lowest) c.lowest = uint8(score);","title":"Objection economics: the lowest-of-panels rule makes two overruled objections a cheap, positive-expectation lever against any leader (agreed design, incentive note)"},{"citation":"resolved","description":"Merged from audit_economics. The oracle-consumer reference asks for the intake, action id, asset and price to be constructor input and owner-settable, never constants, so a moved price or an oracle-2 action needs no redeploy. The Tribunal is ownerless by the brief's design and pays a constant 0.5e18 under the constant ACTION. If Intake.priceOf(ACTION, oracleAsset) ever differs from 0.5e18, requestWithFailure in object() (lines 268-275) is paid the wrong amount and object() reverts for every caller; no funds are at risk because the stake and fee are pulled in the same transaction, which reverts as a whole, and already-filed objections still end through onOracleResult, onObjectionFailure, expire and settle. CabalGate has the same constant and the project accepted it for run 4; this only records the dependency failure mode for the test run.","line":124,"path":"src/Tribunal.sol","reproduction":"State: Intake.priceOf(bytes32('oracle.request@oracle-1'), oracleAsset) returns 0.6e18 (a mock Intake that requires amount == 0.6e18). Call: bob calls Tribunal.object(1, 'text') on an approved plea inside its window. Expected by the reference: the contract reads priceOf and pays it. Actual: the Tribunal approves and passes 0.5e18 and the Intake reverts, so object() reverts for everyone until a new Tribunal is launched; Seasons then records every plea unopposed once its 20-minute window closes (standing() still holds the window, so nothing else changes).","severity":"info","snippet":"    uint256 public constant ORACLE_FEE = 0.5e18;","title":"Tribunal hard-codes the Intake price (0.5 IMD) and the action id in an ownerless contract; a price or version change disables objections for good (same as CabalGate, accepted in run 4)"},{"citation":"resolved","description":"Merged from audit_permissions. In run 4 Letterbox._deliver and _settle recorded an approved letter plea's points in the same transaction. With the Tribunal deployed, Seasons.record reverts Held for the whole 20-minute objection window (longer than the 7-minute sell window), so every delivered or settled letter plea hits the catch at line 437 and stays unrecorded. A ruling (Tribunal.onOracleResult) stores only, Seasons.closeSeason records only the ids its caller lists (_tryRecord, src/Seasons.sol:362), and once closed[season] is set record reverts SeasonClosed for good. This matches the brief ('Seasons.record refuses a plea while its window is open or an objection is pending') and OBJECTIONS.md ('Recording happens as today, just later'), and the Letterbox status line says '+N points held until HH:MM' / 'once recorded', so it is a documented keeper dependency rather than an access or accounting defect. It is kept because it is a behaviour change from run 4 that the site's keeper must now cover: call Seasons.record(id) after verdictAt + 20 minutes (or list the id in closeSeason).","line":437,"path":"src/Letterbox.sol","reproduction":"Fixture with the Tribunal deployed. (1) alice sends a letter; the gate opens plea #id with FLAG_BY_LETTER|FLAG_AUTO_SELL. (2) The Intake delivers a score of 40 (approved). (3) +2 minutes: anyone calls Letterbox.deliver(id): the sale executes, the 0.35 IMD fee reaches Seasons, _record calls seasons.record(id), which reverts Held(id) and is swallowed; seasons.recorded(id) == false. (4) Nobody calls Seasons.record(id). (5) At season end + 1 hour anyone calls seasons.closeSeason(new uint256[](0)). Actual: season 0 closes without alice's 40 points and seasons.record(id) now reverts SeasonClosed(0). Expected by run 4's behaviour: delivery recorded the points. Expected by the brief and OBJECTIONS.md: a later record or a close listing the id, which test_aLetterSellsDuringTheHoldAndItsPointsAreRecordedLater (test/TribunalSeasons.t.sol) exercises; the gap is only that no contract-side actor makes that call.","severity":"info","snippet":"        try seasons.record(id) {} catch {}","title":"With a Tribunal, a letter plea's points depend on a later permissionless Seasons.record call: deliver and settle swallow the Held revert and no contract path retries, so a season closed with an empty "},{"citation":"resolved","description":"Merged from audit_permissions, kept as the trust-assumption record the review method asks for. Roles after the five-contract launch: (1) PLEA owner ($owner, Ownable2Step): allow(address) adds a wallet that may send PLEA wallet-to-wallet while the Cabal watches (it still cannot reach the pool: _update only lets gate/hook send to the PoolManager and PleaHook.beforeSwap refuses sells from any sender but the gate); PleaLaunch.seed() at any time after the hook is deployed, before START; transfer/accept/renounceOwnership. (2) PleaDistributor owner ($owner): setMerkleRoot once, choosing who receives the 12% supply; claim is then permissionless and proof-bound. (3) Launch owner (PleaHook.owner, immutable, same $owner): receives 0.5% of every IMD fill and can change nothing. (4) Oracle signer (immutable in CabalGate, copied by the Tribunal through signerOf at construction): one hot key whose signature decides every verdict and ruling; it cannot be rotated without a redeploy. (5) Intake writer: unsigned failure calls can only clear a pending plea or objection. Ownerless: CabalGate, Seasons, Letterbox, Tribunal, PleaLaunch. Exclusion from points, prizes and objections covers plea.owner() and hook.owner() and deliberately not pendingOwner() (run-3 finding; test/OwnershipTransitionInvariant.t.sol). I found no path by which any role bypasses a user-side guard or redirects in-flight value.","line":111,"path":"src/PLEA.sol","reproduction":"For the record, none a defect: (a) owner calls PLEA.allow(X); X calls PLEA.transfer(Y, n) while gate.restricted() is true: succeeds; X calls PLEA.transfer(poolManager, n): reverts CabalIsWatching (src/PLEA.sol:133); X swaps PLEA->IMD through a router: PleaHook.beforeSwap reverts SellsOnlyViaGate. (b) owner calls PLEA.transferOwnership(leader) while leader is rank 1: Seasons.excluded(leader) stays false and closeSeason still pays leader until leader calls acceptOwnership. (c) distributor owner calls setMerkleRoot(r) twice: second call reverts RootAlreadySet (src/PleaDistributor.sol:31). (d) Tribunal.object from plea.owner() or hook.owner(): reverts NotEligible (src/Tribunal.sol:245).","severity":"info","snippet":"    function allow(address account) external onlyOwner {","title":"Trust assumptions of the privileged roles after deployment (documented, no bypass found): PLEA owner's add-only allowlist and seed-any-time, distributor owner's one-time Merkle root, launch owner's 0."}],"hash":"93970e42e9fb361ea9b769353fedb7fd3451413bd17961c2df26489e90497750","nodeId":"cd126979-33c1-4873-960d-af46f76bf111","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result. Nothing else in the tree was changed.\n\n**Outcome: no reproducible defect above info level.** The four specialist notes reproduce against the code but describe agreed design or documented trust, so I kept them merged as four info entries, none with a proof. No finding blocks the launch.\n\n**What I verified myself**\n\n- Tribunal, Seasons, PLEA, PleaLaunch and PleaDistributor read in full. CabalGate and Letterbox read in the changed regions: the appeal question and definitions, text rules with the new objection markers, submit/appeal/sell paths, the appeal floor raise, deliver, settle, record and the status views.\n- The five definitions members in the Tribunal are byte-identical to the gate's, and every member is under 512 characters. The worst-case Tribunal question for an appeal is 1,729 characters, under the 2,000 cap.\n- The two creation-code hashes in launch.json equal keccak256 of the built Letterbox and Tribunal creation code. All runtime sizes are under the 24,576-byte limit, the Tribunal at 19,686.\n- The 25-rank share table sums to 10,000 and falls from 450 to 350. The 82/6/12 mint and the six 10,000,000 PLEA bonuses add up to the supply.\n- Timing: the 20-minute window plus 20-minute expiry fits inside the 1-hour close grace, and the hold, sustain and lowest-score rules line up between Tribunal.standing, Seasons.record and closeSeason. A reverting or absent Tribunal falls back to run-4 recording, and the 63/64 gas rule prevents starving that staticcall.\n- Tests: the 188 tests in the Tribunal, Seasons, Letterbox, AppealRounding, AuditRun5 and OwnershipTransitionInvariant suites pass. The full suite did not finish within the time I could give it after a slow via-IR compile, so the remaining run-4 suites were not re-run here.\n\n**Kept as info, merged from the specialists**\n\n- Lowest-of-panels scoring makes two overruled objections a cheap lever against a leader. This is the brief's rule, reported as an incentive note.\n- The ownerless Tribunal hard-codes the 0.5 IMD price and action id, like the gate accepted in run 4.\n- With a Tribunal, a letter plea's points need a later permissionless Seasons.record call, since deliver and settle swallow the Held revert. Documented in OBJECTIONS.md and the status line.\n- Trust assumptions of the owner roles and the single oracle signer, with no bypass found.\n\n**Coverage:** 57 rows, 49 holds, 2 invariants, 6 PleaHook entry points marked unreached because that run-4 code was not re-traced in this round's budget.","treeHash":null,"usage":{"cachedInputTokens":2913939,"inputTokens":680,"model":"claude-fable-5-1","outputTokens":40712,"runtime":"claude","turns":40,"wallClockMs":3065798}},{"artifacts":[],"attempt":2,"bundleHash":"7272f3e36fdd020f7c8cd4097bf9baa403834d0d2d2a172b2029b0668006bace","device":"e5ed95d8889ee194","findings":[{"description":"CabalGate's constructor reverted when deployed as the launch deploys it, on a chain where no other contract exists: take outside values as arguments and check the live contract on first use","line":null,"path":"src/CabalGate.sol","reproduction":"The verifier deployed the manifest's contracts as the launch deploys them: from the launch factory (msg.sender), with IMD's launch wallet as tx.origin and $owner set, then read owner(), admin(), getOwner() and the admin role, and for a hook opened, seeded, traded and collected the pool from the factory (test/protected/evm_contracts/Owners.protected.t.sol in the protected floor).","severity":"high","title":"CabalGate is owned by the launch factory or by IMD"}],"hash":"9b704bf3cd7a185213153d686fcba02fe47d6899f3fbc09c272ed60cf6d76a76","nodeId":"afe1862c-3fa1-4ec1-8b94-6a2502e9dd4f","outcome":"completed","summary":"Updated [launch.json](/home/ubuntu/.identitymd/work/e0891351-0330-4a3e-8c80-0a4f8ae9ed92/afe1862c-3fa1-4ec1-8b94-6a2502e9dd4f/launch.json), preserving all five contracts and constructor arguments while shortening notes.\n\nVerified constructor ABIs and both code commitments. `forge build` passed. Tests with the required seed: **550 passed, 0 failed, 2 skipped** because fork RPC URLs were unset.\n\nOnly `launch.json` changed.","treeHash":"18740997c7b4c940a8a7866436ce756456e5a774","usage":{"cachedInputTokens":2203776,"inputTokens":76544,"model":"gpt-6-astra","outputTokens":18845,"runtime":"codex","turns":16,"wallClockMs":1057948}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"3d294003c7683307","findings":[],"hash":"a1c10d82b5dd436e026dca001dcf588486f23de12781b98407b283e868f4e77f","nodeId":"ea0df01c-d493-4b32-81cb-7e229e2a55f0","outcome":"failed","summary":"git checkout -B imd-submission failed: ","treeHash":null,"usage":{"cachedInputTokens":24469120,"inputTokens":463737,"model":"gpt-6-astra","outputTokens":130304,"runtime":"codex","turns":41,"wallClockMs":6890748}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"b0001bc8a5c908cd","findings":[],"hash":"ab57d4c737cd4c04d3c60df802772354c1769f9a54a0991f4aa602e4ee38aeb4","nodeId":"7d15a3b0-23bd-44bc-bd96-57764205be79","outcome":"failed","summary":"the local build failed, so this was not submitted:\nforge build exited with 143:\nCompiling 163 files with Solc 0.8.26","treeHash":null,"usage":{"cachedInputTokens":2406801,"inputTokens":78,"model":"claude-opus-5-5","outputTokens":36797,"runtime":"claude","turns":40,"wallClockMs":2897218}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e4a4ecf9fefd4a46","findings":[],"hash":"b77283f6829f76ebabe84a5164e2ea2b1ba1780d017d1dd5509323d9b57f9525","nodeId":"afe1862c-3fa1-4ec1-8b94-6a2502e9dd4f","outcome":"failed","summary":"git checkout -B imd-submission failed: ","treeHash":null,"usage":{"cachedInputTokens":2939648,"inputTokens":140024,"model":"gpt-6-astra","outputTokens":27830,"runtime":"codex","turns":25,"wallClockMs":2171321}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"3111534b6da56538","findings":[],"hash":"e2e8a5788dcde66e1a71e402eaa3a7e5517efb1a8c418198578b2c137bb06325","nodeId":"ea0df01c-d493-4b32-81cb-7e229e2a55f0","outcome":"failed","summary":"Selected model is at capacity. Please try a different model.","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":"gpt-6-astra","outputTokens":0,"runtime":"codex","turns":7,"wallClockMs":936832}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"aefe32dd2527eb68","findings":[],"hash":"e84acaf33eec9d6a004fad35383f4952e86a2d0e89592723b405292466ac3ea9","nodeId":"e44ef6b4-7310-496a-bb4f-38ef3341b6ac","outcome":"completed","summary":"The review is complete and the findings file is written. Final state:\n\n**Result: no reproducible defect found in the assigned area.** The file `.imd-findings.json` holds an empty findings list and a 59-row coverage record covering all 57 listed entry points plus four invariants I checked.\n\n**What I traced (Execution Trace, Periphery, First Principles):**\n- **Tribunal end to end.** Object, ruling, failure, expire and settle paths. Eligibility, the one-pending rule, the two-ruling cap with distinct wallets, sustain closing the case, the score-only-falls rule, stake conservation, and the late or replayed callback paths. Each check I expected from the brief is present and ordered correctly.\n- **Seasons and Tribunal coupling.** Record and closeSeason read standing through the launcher with fail-open staticcalls. The Held and ObjectionSustained refusals, the min(original, lowest) score, and checkpointObjection's attribution to the plea's season or rollover all behave as specified. The 40-minute bound sits inside the 1-hour close grace because a second objection cannot be filed after the window.\n- **Fix round.** The Letterbox appeal floor raise stays inside the gate's min and max checks and never pulls more PLEA than the writer holds. The hook-owner exclusion skips the pending owner. The appeal question states the real score and need. All six definition values are under 512 characters, and the Tribunal's copy is a byte-prefix match of the gate's.\n- **Launch manifest.** Constructor arity and order match all five contracts. Both committed creation-code hashes in launch.json reproduce from this build.\n- **Hook.** Traced control flow of beforeSwap, afterSwap, seed, rebalance, fundWall and unlockCallback at the level of trader resolution, transient-slot pairing and fee ordering. I did not re-derive the v4 delta arithmetic, and the coverage row says so.\n\n**Checks run:** the Tribunal suites, the Standing and Seasons suites, and the run-5 audit suite all pass on this tree. The full test suite would not build under the sandbox's 1.5 GB memory limit, so I built the sources alone and ran the relevant suites with the others skipped. No files other than `.imd-findings.json` were touched, and nothing was written under test/scratch.\n\n**Static-analysis leads** in my area were checked and not promoted: the encodePacked hash in PleaLaunch is of fixed-shape data and is only compared to the exact bytes deployed, and the uint128 cast in the gate is bounded by the 2.5M cap.","treeHash":null,"usage":{"cachedInputTokens":2284568,"inputTokens":482,"model":"claude-fable-5-1","outputTokens":40288,"runtime":"claude","turns":30,"wallClockMs":894872}}],"verification":[{"checks":[{"durationMs":252804,"exitCode":0,"name":"build","output":"Compiling 161 files with Solc 0.8.26\nSolc 0.8.26 finished in 252.63s\nCompiler run successful with warnings:\nWarning (8760): This declaration has the same name as another declaration.\n   --> src/Tribunal.sol:319:9:\n    |\n319 |         uint8 status,\n    |         ^^^^^^^^^^^^\nNote: The other declaration is here:\n   --> src/Tribunal.sol:198:5:\n    |\n198 |     function status(uint256 pleaId) external view returns (string memory) {\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/Tribunal.sol:357:53:\n    |\n357 |     function _void(uint256 id, Objection storage o, uint8 status, bytes32 reason) internal {\n    |                                                     ^^^^^^^^^^^^\nNote: The other declaration is here:\n   --> src/Tribunal.sol:198:5:\n    |\n198 |     function status(uint256 pleaId) external view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> src/Seasons.sol:387:58:\n    |\n387 |     function _owners() internal view returns (address a, address b, address c) {\n    |                                                          ^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> src/CabalGate.sol:710:5:\n    |\n710 |     function _text(string storage t, bool json) internal view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":10007,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/ArtifactDeployment.t.sol:ArtifactDeploymentTest\n[PASS] test_artifactCreationBubblesFullConstructorRevertData() (gas: 101386)\n[PASS] test_artifactCreationPreservesConstructorCallerArgumentsAndRuntime() (gas: 354315)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 621.60µs (477.80µs CPU time)\n\nRan 1 test for test/fork/ForkMainnet.t.sol:ForkMainnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 812.65µs (0.00ns CPU time)\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 578.73µs (0.00ns CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 13848610)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 14936779)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 13982996)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 10.31ms (5.54ms CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1195849, ~: 1236227)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24099)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1604975)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75392)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1687394)\n[PASS] test_deathBeforeTheSixthSeasonBurnsTheRest() (gas: 1126109)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1581399)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 260455)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 747060)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1577087)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1148032)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43360)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2433372)\n[PASS] test_onlyTheFirstSixSeasonsPayABonus() (gas: 4861702)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 812838)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1058096)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 32.76ms (30.67ms CPU time)\n\nRan 2 tests for test/Letterbox.t.sol:LetterboxMainnetPathTest\n[PASS] test_letterBuysTheOracleFeeAndTheTipWithPlea() (gas: 9332529)\n[PASS] test_mintingTheFeeIsRefusedOnMainnet() (gas: 959481)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 31.62ms (3.29ms CPU time)\n\nRan 7 tests for test/AuditImported.t.sol:AuditImportedTest\n[PASS] test_appealLetterRetriesCompletedRequestWithFailedCallback() (gas: 12980558)\n[PASS] test_appealLetterRetriesLazyTimeoutWithoutSeparateSettlement() (gas: 12913856)\n[PASS] test_autoAppealSurvivesBalanceGrowth() (gas: 9467303)\n[PASS] test_growingBalanceDoesNotEnableDustOrLargerAppeals() (gas: 8657349)\n[PASS] test_rawAppealLetterSurvivesBalanceGrowth() (gas: 9493294)\n[PASS] test_shrinkingBalanceStillUsesCurrentMinimumAndMaximum() (gas: 8300497)\n[PASS] test_siteAppealSurvivesBalanceGrowthAtOriginalMinimum() (gas: 8560336)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 43.05ms (12.89ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259296, ~: 259234)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1724610)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317220)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260500)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 276001)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 49.25ms (46.36ms CPU time)\n\nRan 9 tests for test/AuditRun5.t.sol:AuditRun5PleaFirstTest\n[PASS] testFuzz_markerPrefixesAreRefusedInAnyCase(uint16,bool,uint8) (runs: 32, μ: 67667, ~: 66788)\n[PASS] testFuzz_settlementAcrossTheBoundaryKeepsThePleasSeason(uint16) (runs: 32, μ: 9650601, ~: 9650601)\n[PASS] test_allNewPleaRoutesRefuseSellerWrittenObjectionMarkers() (gas: 780425)\n[PASS] test_appealRoutesAlsoRefuseForgedObjectionMarkers() (gas: 5559344)\n[PASS] test_lateSettlementFundsThePleasSeasonAndCheckpointsOtherDonations() (gas: 9859847)\n[PASS] test_onlyTheCommittedTribunalCanLabelAFundedApprovedStake() (gas: 5151600)\n[PASS] test_settlementAfterACloseGoesToRolloverOnce() (gas: 10112467)\n[PASS] test_similarWordsAndTruncatedPrefixesStillPass() (gas: 4686661)\n[PASS] test_twoFreshWalletRulingsStillCloseTheCaseAsRequired() (gas: 13474184)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 56.76ms (47.64ms CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 23954, ~: 24085)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 730520)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42983)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 16.98ms (5.65ms CPU time)\n\nRan 7 tests for test/AuditImported.t.sol:AuditImportedPaidFeeTest\n[PASS] test_appealLetterRetriesCompletedRequestWithFailedCallback() (gas: 12925590)\n[PASS] test_appealLetterRetriesLazyTimeoutWithoutSeparateSettlement() (gas: 12858888)\n[PASS] test_autoAppealSurvivesBalanceGrowth() (gas: 9430620)\n[PASS] test_growingBalanceDoesNotEnableDustOrLargerAppeals() (gas: 8646049)\n[PASS] test_rawAppealLetterSurvivesBalanceGrowth() (gas: 9456610)\n[PASS] test_shrinkingBalanceStillUsesCurrentMinimumAndMaximum() (gas: 8289197)\n[PASS] test_siteAppealSurvivesBalanceGrowthAtOriginalMinimum() (gas: 8549036)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 61.37ms (17.63ms CPU time)\n\nRan 9 tests for test/AuditRun5.t.sol:AuditRun5Test\n[PASS] testFuzz_markerPrefixesAreRefusedInAnyCase(uint16,bool,uint8) (runs: 32, μ: 66797, ~: 66032)\n[PASS] testFuzz_settlementAcrossTheBoundaryKeepsThePleasSeason(uint16) (runs: 32, μ: 9650601, ~: 9650601)\n[PASS] test_allNewPleaRoutesRefuseSellerWrittenObjectionMarkers() (gas: 780425)\n[PASS] test_appealRoutesAlsoRefuseForgedObjectionMarkers() (gas: 5559344)\n[PASS] test_lateSettlementFundsThePleasSeasonAndCheckpointsOtherDonations() (gas: 9859847)\n[PASS] test_onlyTheCommittedTribunalCanLabelAFundedApprovedStake() (gas: 5151600)\n[PASS] test_settlementAfterACloseGoesToRolloverOnce() (gas: 10112467)\n[PASS] test_similarWordsAndTruncatedPrefixesStillPass() (gas: 4686661)\n[PASS] test_twoFreshWalletRulingsStillCloseTheCaseAsRequired() (gas: 13474184)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 64.40ms (48.97ms CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10527)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 1392141)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13943)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 828.46µs (422.46µs CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 4837721)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 236802)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 24134583)\n[PASS] test_closeSeasonPaysTheTopTen() (gas: 57228085)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 12010572)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 6686798)\n[PASS] test_onlyApprovedPleasScore() (gas: 4949471)\n[PASS] test_orientationIsPleaZero() (gas: 15724)\n[PASS] test_secondSeasonScoresSeparately() (gas: 44752546)\n[PASS] test_tiesRankTheEarlierPleaFirstAndALaterTieSlotsInBelow() (gas: 41128113)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 112745734)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 72.80ms (52.06ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 11482726)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 9010657)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 5547006)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 4848248)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 4919731)\n[PASS] test_callbackFitsTheStipend() (gas: 7891769)\nLogs:\n  approve callback gas: 58946\n  deny callback gas: 83545\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 5387176)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 1181092)\n[PASS] test_cooldownAfterExecutedSell() (gas: 8165005)\n[PASS] test_failedAppealCanBeRetried() (gas: 11448624)\n[PASS] test_failureAfterExpireIsRefused() (gas: 4835832)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 7737247)\n[PASS] test_failureFitsTheMainnetGas() (gas: 4806749)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 4979345)\n[PASS] test_failureOnlyFromTheIntake() (gas: 4775312)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 56324)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 7720430)\n[PASS] test_onePendingPleaPerWallet() (gas: 4759166)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 7683878)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 4729109)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 4775145)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1465814)\n[PASS] test_refusalClearsThePleaToo() (gas: 4828671)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 7823129)\n[PASS] test_scoreBelowNeedDenies() (gas: 5022361)\n[PASS] test_sellWindowLapses() (gas: 7753363)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 4861574)\n[PASS] test_textFilter() (gas: 5212245)\n[PASS] test_wrongSignerIsRefused() (gas: 4825795)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 44.17ms (21.29ms CPU time)\n\nRan 3 tests for test/Letterbox.t.sol:OwnerExclusionTest\n[PASS] test_nobodyGetsAKeeperTip() (gas: 486489)\n[PASS] test_ownerPleasEarnNoPoints() (gas: 5081502)\n[PASS] test_theLaunchOwnerStaysExcludedAfterAHandover() (gas: 5209898)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 78.17ms (2.48ms CPU time)\n\nRan 4 tests for test/AppealRounding.t.sol:AppealRoundingPaidFeeTest\n[PASS] testFuzz_minimumPleaAppealsThroughEveryLetterEntry(uint8,uint8) (runs: 32, μ: 9379749, ~: 9386042)\n[PASS] test_cappedMinimumSitePleaCanAppealAfterFeeSale() (gas: 9464080)\n[PASS] test_minimumSitePleaCanAppealAfterFeeSaleRounding() (gas: 9369423)\n[PASS] test_shareBandsAndFiftyPercentClampKeepTheirExistingRounding() (gas: 27949305)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 86.57ms (79.72ms CPU time)\n\nRan 4 tests for test/AppealRounding.t.sol:AppealRoundingPaidFeePleaZeroTest\n[PASS] testFuzz_minimumPleaAppealsThroughEveryLetterEntry(uint8,uint8) (runs: 32, μ: 9380173, ~: 9386042)\n[PASS] test_cappedMinimumSitePleaCanAppealAfterFeeSale() (gas: 9464080)\n[PASS] test_minimumSitePleaCanAppealAfterFeeSaleRounding() (gas: 9369423)\n[PASS] test_shareBandsAndFiftyPercentClampKeepTheirExistingRounding() (gas: 27949305)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 93.72ms (83.69ms CPU time)\n\nRan 20 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1247163)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1697044)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1106230)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17982)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1686250)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1295524)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1659932)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 571778)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1103525)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 1930849)\n[PASS] test_orientationIsPleaZero() (gas: 15862)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1200233)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4565756)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 747890)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1818719)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34359685)\n[PASS] test_wallGuardIgnoresASellerChosenLimitReachedThroughAnEmptyPool() (gas: 2788162)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2762954)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16738672)\n[PASS] test_wallGuardStillDropsAtOnceToASellerChosenLimitInsideTheBand() (gas: 33243177)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 103.70ms (89.25ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 4837173)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 236713)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1543151)\n[PASS] test_closeSeasonPaysTheTopTen() (gas: 42444327)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1253543)\n[PASS] test_fastFullCycle() (gas: 78094534)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 6686820)\n[PASS] test_onlyApprovedPleasScore() (gas: 4946624)\n[PASS] test_secondSeasonScoresSeparately() (gas: 47715112)\n[PASS] test_tiesRankTheEarlierPleaFirstAndALaterTieSlotsInBelow() (gas: 3256967)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 118684516)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 106.76ms (64.62ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 8000077, ~: 7990212)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 8403694)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 7849417)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 58.80ms (40.03ms CPU time)\n\nRan 5 tests for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 52960001)\nLogs:\n  five-contract launch transaction gas through IMD's factory: 13223299\n  gas limit with IMD's headroom: 16132424\n  margin to the 16,777,216 cap: 644792\n\n[PASS] test_launchJsonCommitsToThisLetterbox() (gas: 33528)\n[PASS] test_launchJsonCommitsToThisTribunal() (gas: 29294)\n[PASS] test_launchJsonEncodesOracleMintFlagAsStaticWord() (gas: 11342)\n[PASS] test_launchJsonNotesFitTheManifestCap() (gas: 9550)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 53.79ms (51.32ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4125393, ~: 4121913)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 12126722)\n[PASS] test_deadCabalBuyWithoutARecipientSkipsTheCashback() (gas: 2077738)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1046909)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 12322318)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 8716461)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2173568)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 13715000)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1052602)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 10343814)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1240830)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 8910130)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 156.19ms (151.36ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:PostLaunchTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 11196352)\n[PASS] test_committedLetterboxDeploysLater() (gas: 10381801)\nLogs:\n  deployLetterbox transaction gas: 5381041\n\n[PASS] test_committedTribunalDeploysLater() (gas: 9510846)\nLogs:\n  deployTribunal transaction gas: 4811086\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 39.87ms (37.02ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 11482748)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 9010703)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 5547006)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 4848270)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 4919753)\n[PASS] test_callbackFitsTheStipend() (gas: 7891791)\nLogs:\n  approve callback gas: 58946\n  deny callback gas: 83545\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 5387176)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 1181092)\n[PASS] test_cooldownAfterExecutedSell() (gas: 8165027)\n[PASS] test_failedAppealCanBeRetried() (gas: 11448646)\n[PASS] test_failureAfterExpireIsRefused() (gas: 4835854)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 7737247)\n[PASS] test_failureFitsTheMainnetGas() (gas: 4806771)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 4979345)\n[PASS] test_failureOnlyFromTheIntake() (gas: 4775312)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 56324)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 7720430)\n[PASS] test_onePendingPleaPerWallet() (gas: 4759166)\n[PASS] test_orientationIsPleaZero() (gas: 15963)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 7683900)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 4729131)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 4775167)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1465836)\n[PASS] test_refusalClearsThePleaToo() (gas: 4828671)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 7823151)\n[PASS] test_scoreBelowNeedDenies() (gas: 5022361)\n[PASS] test_sellWindowLapses() (gas: 7753363)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 4861596)\n[PASS] test_textFilter() (gas: 5212245)\n[PASS] test_wrongSignerIsRefused() (gas: 4825795)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 171.02ms (40.37ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4122985, ~: 4119248)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 12126285)\n[PASS] test_deadCabalBuyWithoutARecipientSkipsTheCashback() (gas: 2078744)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1046221)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 12321881)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 8716024)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2173432)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 13712883)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1051804)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 10342701)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1240389)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 8909693)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 186.47ms (172.69ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 4837699)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 236691)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 24134561)\n[PASS] test_closeSeasonPaysTheTopTen() (gas: 57228085)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 12010572)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 6686798)\n[PASS] test_onlyApprovedPleasScore() (gas: 4949449)\n[PASS] test_secondSeasonScoresSeparately() (gas: 44752546)\n[PASS] test_tiesRankTheEarlierPleaFirstAndALaterTieSlotsInBelow() (gas: 41128091)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 112745712)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 80.89ms (55.24ms CPU time)\n\nRan 4 tests for test/AppealRounding.t.sol:AppealRoundingPleaZeroTest\n[PASS] testFuzz_minimumPleaAppealsThroughEveryLetterEntry(uint8,uint8) (runs: 32, μ: 9416381, ~: 9422688)\n[PASS] test_cappedMinimumSitePleaCanAppealAfterFeeSale() (gas: 9500725)\n[PASS] test_minimumSitePleaCanAppealAfterFeeSaleRounding() (gas: 9406068)\n[PASS] test_shareBandsAndFiftyPercentClampKeepTheirExistingRounding() (gas: 28059240)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 196.11ms (160.50ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1147462, ~: 1142361)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1196484)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 653553)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134385)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 63932)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1309599)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2554196)\n[PASS] test_rebalancePaysNoTipAndDeploysTheWholeReserve() (gas: 462383)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 137962)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290443)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 601728)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 208.65ms (199.45ms CPU time)\n\nRan 19 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1247163)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1697022)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1106230)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17982)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1686250)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1295502)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1659932)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 571756)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1103503)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 1930849)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1200233)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4565756)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 747890)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1818697)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34359685)\n[PASS] test_wallGuardIgnoresASellerChosenLimitReachedThroughAnEmptyPool() (gas: 2788162)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2762911)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16738672)\n[PASS] test_wallGuardStillDropsAtOnceToASellerChosenLimitInsideTheBand() (gas: 33243155)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 150.49ms (130.35ms CPU time)\n\nRan 4 tests for test/AppealRounding.t.sol:AppealRoundingTest\n[PASS] testFuzz_minimumPleaAppealsThroughEveryLetterEntry(uint8,uint8) (runs: 32, μ: 9417405, ~: 9422688)\n[PASS] test_cappedMinimumSitePleaCanAppealAfterFeeSale() (gas: 9500725)\n[PASS] test_minimumSitePleaCanAppealAfterFeeSaleRounding() (gas: 9406068)\n[PASS] test_shareBandsAndFiftyPercentClampKeepTheirExistingRounding() (gas: 28059240)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 106.04ms (86.20ms CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 213498)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183970)\n[PASS] test_launcherAndInitAreOneShot() (gas: 1361643)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 331356)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 35.31ms (455.60µs CPU time)\n\nRan 5 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 13197128, ~: 13226780)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizes() (gas: 1072776)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 1026255)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 1026949)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 1033296)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 332.06ms (333.46ms CPU time)\n\nRan 6 tests for test/TraderResolverBoundary.t.sol:TraderResolverBoundaryTest\n[PASS] testFuzz_malformedVaultDiscoveryDoesNotRevertOrTruncate(uint8,uint96) (runs: 256, μ: 162722, ~: 158928)\n[PASS] test_missingRevertingAndZeroVaultDiscoveryAllowsDeployment() (gas: 564113)\n[PASS] test_namedContractWalletIsAcceptedWhenItIsNotTheRouter() (gas: 21054)\n[PASS] test_plainWalletFallbackUsesSenderAndNeverTransactionOrigin() (gas: 62439)\n[PASS] test_plainWalletInfrastructureIsExcludedEvenWithoutCode() (gas: 45858)\n[PASS] test_vaultAddressIsCachedAndIsNotReadAgainDuringResolution() (gas: 169436)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 62.41ms (61.01ms CPU time)\n\nRan 6 tests for test/JudgeFindings.t.sol:JudgeFindingsTest\n[PASS] test_aSmallWriterCanAppealByLetter() (gas: 8092874)\n[PASS] test_appealAutoOfAMinimumPleaStaysAtTheMinimum() (gas: 8761890)\n[PASS] test_appealLetterKeepsTheOriginalShareBand() (gas: 7942408)\n[PASS] test_deliverAfterACrashCapsTheFeeAtTheSale() (gas: 380261283)\n[PASS] test_fiftyPercentCeilingAndShareBands() (gas: 3903309)\n[PASS] test_ownershipTransferNeedsAcceptanceSoALeaderKeepsThePrize() (gas: 6804421)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 272.34ms (176.76ms CPU time)\n\nRan 1 test for test/TribunalSeasons.t.sol:TribunalLateDeployTest\n[PASS] test_aPleaRecordedBeforeTheTribunalCannotBeObjectedTo() (gas: 13817953)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 31.84ms (3.46ms CPU time)\n\nRan 13 tests for test/TraderResolution.t.sol:TraderResolutionTest\n[PASS] testFuzz_dirtyHookDataFallsBackToRouterCaller(uint96,bool) (runs: 32, μ: 705289, ~: 694488)\n[PASS] test_dirtyHookDataAfterDeathBuyHasNoTrader() (gas: 481802)\n[PASS] test_dirtyHookDataFallsBackToRouterCallerWhileAlive() (gas: 718871)\n[PASS] test_dirtyHookDataWithoutFallbackWhileAliveRequiresRecipient() (gas: 82086)\n[PASS] test_dirtyHookDataWordFallsThrough() (gas: 1018802)\n[PASS] test_feeSurplusWithoutATraderIsBurnedOrKeptForThePool() (gas: 520659)\n[PASS] test_hookDataNamesTheTrader() (gas: 674829)\n[PASS] test_invalidHookDataFallsBackToTheRouterCaller() (gas: 2690883)\n[PASS] test_noTraderAfterDeathBuyGoesThroughWithoutCashback() (gas: 440311)\n[PASS] test_noTraderAfterDeathSellGoesThroughWithoutCashback() (gas: 521982)\n[PASS] test_routerCallerIsTheTraderWithoutHookData() (gas: 697754)\n[PASS] test_routerCallerStillCreditedAfterDeath() (gas: 629310)\n[PASS] test_routerWithoutMsgSenderNeedsHookDataWhileTheCabalLives() (gas: 149311)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 56.50ms (25.74ms CPU time)\n\nRan 6 tests for test/JudgeFindings.t.sol:JudgeFindingsPleaZeroTest\n[PASS] test_aSmallWriterCanAppealByLetter() (gas: 8092874)\n[PASS] test_appealAutoOfAMinimumPleaStaysAtTheMinimum() (gas: 8761890)\n[PASS] test_appealLetterKeepsTheOriginalShareBand() (gas: 7942408)\n[PASS] test_deliverAfterACrashCapsTheFeeAtTheSale() (gas: 380261283)\n[PASS] test_fiftyPercentCeilingAndShareBands() (gas: 3903309)\n[PASS] test_ownershipTransferNeedsAcceptanceSoALeaderKeepsThePrize() (gas: 6804421)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 396.62ms (238.88ms CPU time)\n\nRan 12 tests for test/TribunalStanding.t.sol:TribunalStandingTest\n[PASS] test_aHeldPleaIsRefusedAndSkippedByAClose() (gas: 620800)\n[PASS] test_aHigherPanelScoreKeepsTheOriginal() (gas: 588338)\n[PASS] test_aLauncherAnsweringTheWrongSizeRecordsAsBefore() (gas: 384063)\n[PASS] test_aLauncherWithoutTribunalRecordsAsBefore() (gas: 394628)\n[PASS] test_aLowerPanelScoreIsRecorded() (gas: 588279)\n[PASS] test_aRevertingTribunalCannotBlockARecord() (gas: 524018)\n[PASS] test_aSustainedPleaIsRefused() (gas: 397224)\n[PASS] test_aTribunalAnsweringTheWrongSizeRecordsAsBefore() (gas: 515196)\n[PASS] test_aZeroTribunalRecordsAsBefore() (gas: 403393)\n[PASS] test_noLauncherRecordsAsBefore() (gas: 243543)\n[PASS] test_noShareBeyondTheTable() (gas: 9496)\n[PASS] test_sharesFallInAStraightLineAndSumToTenThousand() (gas: 233536)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 2.39ms (1.98ms CPU time)\n\nRan 12 tests for test/TribunalSeasons.t.sol:TribunalSeasonsTest\n[PASS] test_aLetterSellsDuringTheHoldAndItsPointsAreRecordedLater() (gas: 10580164)\n[PASS] test_aSustainedPleaIsNeverRecordedEvenByAClose() (gas: 9584427)\n[PASS] test_aVoidAtTheLastSecondLeavesNoRoomForASecondObjection() (gas: 13084302)\n[PASS] test_approvalInTheLastSecondIsRuledAndRecordedInsideTheGrace() (gas: 12751176)\n[PASS] test_closeListsAHeldPleaOfTheRunningSeasonWithoutReverting() (gas: 8335533)\n[PASS] test_closeSeasonSkipsHeldPleasAndRecordsThemLater() (gas: 12649232)\n[PASS] test_recordIsFreeOnceTheWindowClosesWithNoObjection() (gas: 5234864)\n[PASS] test_recordWaitsForTheWindowThenForAPendingObjection() (gas: 9693671)\n[PASS] test_seasonsFindsTheTribunalThroughTheLauncher() (gas: 51237)\n[PASS] test_theLetterboxStatusShowsHeldPendingAndSustainedPoints() (gas: 20490666)\n[PASS] test_theTimingBoundHoldsInsideTheCloseGrace() (gas: 15420)\n[PASS] test_twoRulingsAtTheEdgeStayInsideTheGrace() (gas: 16555549)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 43.42ms (22.96ms CPU time)\n\nRan 21 tests for test/Tribunal.t.sol:TribunalTest\n[PASS] test_aStalePendingObjectionIsVoidedByTheNextObjector() (gas: 20532035)\n[PASS] test_aStalePendingObjectionNeverHoldsPastTheWindow() (gas: 17655746)\n[PASS] test_aSustainClosesTheCase() (gas: 9484918)\n[PASS] test_anExcludedSellersPleaCannotBeObjectedTo() (gas: 5881039)\n[PASS] test_atMostTwoRulingsFromDifferentWallets() (gas: 13741521)\n[PASS] test_callbackFitsTheIntakesGasBudget() (gas: 9314305)\nLogs:\n  gate verdict callback gas: 58946\n  tribunal ruling callback gas: 83738\n\n[PASS] test_executedAndLapsedApprovalsCanBeObjectedTo() (gas: 17353491)\n[PASS] test_expireByTimeAndByACompletedRequest() (gas: 16897280)\n[PASS] test_marginEdge() (gas: 16962869)\n[PASS] test_onlyApprovedPleasCanBeObjectedTo() (gas: 7940825)\n[PASS] test_overruledAboveTheOriginalKeepsTheOriginalScore() (gas: 9562182)\n[PASS] test_overruledObjectionLowersTheScoreToTheLowestPanelAndFeedsThePot() (gas: 9803461)\n[PASS] test_questionAndBody() (gas: 14846158)\n[PASS] test_rulingsNeverResetTheDeadMan() (gas: 9316222)\n[PASS] test_settleNeedsARuling() (gas: 9187935)\n[PASS] test_statusText() (gas: 17362497)\n[PASS] test_sustainedObjectionLeavesNoPointsAndReturnsTheStake() (gas: 9694599)\n[PASS] test_textRules() (gas: 9261635)\n[PASS] test_theSellerAndTheOwnersCannotObject() (gas: 5457198)\n[PASS] test_voidObjectionReturnsTheStakeAndFreesTheSlot() (gas: 13036523)\n[PASS] test_windowEdges() (gas: 12614186)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 120.52ms (50.24ms CPU time)\n\nRan 10 tests for test/TraderFallbackAdversarial.t.sol:TraderFallbackAdversarialTest\n[PASS] testFuzz_dirtyRouterReturnCannotBeTruncatedIntoATrader(uint96,bool) (runs: 128, μ: 442037, ~: 291665)\n[PASS] testFuzz_nonAddressLengthHookDataFallsBackToRouter(uint8) (runs: 128, μ: 791587, ~: 791501)\n[PASS] testFuzz_nonAddressLengthResponsesDoNotResolve(uint8,bool) (runs: 128, μ: 425076, ~: 301266)\n[PASS] test_everyExcludedRouterResponseHasNoRecipientFallbackToOrigin() (gas: 5001325)\n[PASS] test_gateSaleAlwaysNamesSellerEvenWhenRelayedByLetterboxRunner() (gas: 6763342)\n[PASS] test_hookDataTakesPriorityEvenWhenRouterCannotAnswer() (gas: 2653984)\n[PASS] test_msgSenderReceivesExactlyTheThirtyThousandGasBudget() (gas: 804518)\n[PASS] test_partialBuyWithoutTraderKeepsBothCashbackAndImdFeeSurplusForPool() (gas: 1269798)\n[PASS] test_revertingOutOfGasAndStateWritingRoutersCannotBlockDeadCabalBuys() (gas: 2068670)\n[PASS] test_successThenUnresolvedThenNewTraderDoesNotLeakTransientIdentity() (gas: 1622616)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 160.39ms (130.83ms CPU time)\n\nRan 22 tests for test/Tribunal.t.sol:TribunalMainnetFeeTest\n[PASS] test_aStalePendingObjectionIsVoidedByTheNextObjector() (gas: 20432351)\n[PASS] test_aStalePendingObjectionNeverHoldsPastTheWindow() (gas: 17609196)\n[PASS] test_aSustainClosesTheCase() (gas: 9427306)\n[PASS] test_anExcludedSellersPleaCannotBeObjectedTo() (gas: 5856652)\n[PASS] test_atMostTwoRulingsFromDifferentWallets() (gas: 13650644)\n[PASS] test_callbackFitsTheIntakesGasBudget() (gas: 9281102)\nLogs:\n  gate verdict callback gas: 58946\n  tribunal ruling callback gas: 83738\n\n[PASS] test_executedAndLapsedApprovalsCanBeObjectedTo() (gas: 17309441)\n[PASS] test_expireByTimeAndByACompletedRequest() (gas: 16850752)\n[PASS] test_marginEdge() (gas: 16916319)\n[PASS] test_onlyApprovedPleasCanBeObjectedTo() (gas: 7907398)\n[PASS] test_overruledAboveTheOriginalKeepsTheOriginalScore() (gas: 9528979)\n[PASS] test_overruledObjectionLowersTheScoreToTheLowestPanelAndFeedsThePot() (gas: 9770258)\n[PASS] test_questionAndBody() (gas: 14812954)\n[PASS] test_rulingsNeverResetTheDeadMan() (gas: 9283019)\n[PASS] test_settleNeedsARuling() (gas: 9154710)\n[PASS] test_statusText() (gas: 17315947)\n[PASS] test_sustainedObjectionLeavesNoPointsAndReturnsTheStake() (gas: 9653644)\n[PASS] test_textRules() (gas: 9252841)\n[PASS] test_theObjectorPaysFeeAndStakeInImd() (gas: 9143431)\n[PASS] test_theSellerAndTheOwnersCannotObject() (gas: 5417380)\n[PASS] test_voidObjectionReturnsTheStakeAndFreesTheSlot() (gas: 12989996)\n[PASS] test_windowEdges() (gas: 12576452)\nSuite result: ok. 22 passed; 0 failed; 0 skipped; finished in 92.39ms (46.51ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1147698, ~: 1142571)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1196792)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 653281)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135213)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 63872)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1309199)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2553394)\n[PASS] test_rebalancePaysNoTipAndDeploysTheWholeReserve() (gas: 466813)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 137962)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290419)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 601040)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 359.00ms (354.87ms CPU time)\n\nRan 27 tests for test/Letterbox.t.sol:LetterboxTest\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 32, μ: 324406, ~: 322959)\n[PASS] test_aBareCommandWordIsNotAPlea() (gas: 6055501)\n[PASS] test_aLapsedApprovalSettlesAndStillCounts() (gas: 5614499)\n[PASS] test_anAppealOfAFloorSizedLetterIsNotRefused() (gas: 10658191)\n[PASS] test_anyoneDeliversAnApprovalForTheTip() (gas: 6234329)\n[PASS] test_appealByLetterKeepsTheOriginalShareAndPaysTheWall() (gas: 10396078)\n[PASS] test_appealLetterRetriesAnAppealTheOracleNeverAnswered() (gas: 21821555)\n[PASS] test_autoSellFeeOnlyOnASaleAndNeverMoreThanHalfOfIt() (gas: 9884956)\n[PASS] test_deadCabalRefusesLettersButSettles() (gas: 5383510)\n[PASS] test_deliverNeedsAnApprovalInsideTheWindowAndTheMinimum() (gas: 6140911)\n[PASS] test_deployLetterboxRefusesOtherCode() (gas: 16927004)\n[PASS] test_expiredPendingPleaSettlesAfterTwentyMinutes() (gas: 5251320)\n[PASS] test_explorerLetterIsTheSameAsARawLetter() (gas: 13758390)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 1334849)\n[PASS] test_leaderboardListsTheSeason() (gas: 6499621)\n[PASS] test_letterCommandsParse() (gas: 8886858)\n[PASS] test_letterPleadsTenPercentPaysFeesInPleaAndEscrows() (gas: 5334066)\n[PASS] test_letterRefusesEthTinyBalancesAndBadText() (gas: 1386904)\n[PASS] test_letterboxIsDeployedOnceFromTheCommittedCode() (gas: 502901)\n[PASS] test_noFunctionIdCanStartALetter() (gas: 888710)\n[PASS] test_noVerdictSettlesAtOnceAndTheNextLetterSettlesTheOldOne() (gas: 8715138)\n[PASS] test_settleReturnsEscrowAndTipAfterADenial() (gas: 5605949)\n[PASS] test_siteAutoSellPleadsAnyValidAmount() (gas: 10240260)\n[PASS] test_statusTellsEachState() (gas: 10360299)\n[PASS] test_strangersCannotUseTheCourtEntryPoints() (gas: 210979)\n[PASS] test_theGateRefusesAManualSaleOfAnEscrowedPlea() (gas: 5340613)\n[PASS] test_theSellLetterIsTheWritersOwnSale() (gas: 6128009)\nSuite result: ok. 27 passed; 0 failed; 0 skipped; finished in 547.35ms (59.80ms CPU time)\n\nRan 18 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 4997165, ~: 5000019)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 5064150, ~: 5019947)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 5088415, ~: 5088328)\n[PASS] test_aWhaleCanStillPleadTheMaximum() (gas: 5272082)\n[PASS] test_amountLimitsFailBeforeChargingAndOnePercentIsTheMinimum() (gas: 5021582)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 8311831)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 8813634)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 7991537)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 5022662)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 4918709)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 7768194)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 7961424)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 88179)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 4908400)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 958197)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 5023481)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 5440164)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 6094692)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 550.76ms (702.12ms CPU time)\n\nRan 10 tests for test/TraderFallbackAdversarial.t.sol:TraderFallbackAdversarialPleaZeroTest\n[PASS] testFuzz_dirtyRouterReturnCannotBeTruncatedIntoATrader(uint96,bool) (runs: 128, μ: 441762, ~: 291653)\n[PASS] testFuzz_nonAddressLengthHookDataFallsBackToRouter(uint8) (runs: 128, μ: 791209, ~: 791122)\n[PASS] testFuzz_nonAddressLengthResponsesDoNotResolve(uint8,bool) (runs: 128, μ: 424418, ~: 301254)\n[PASS] test_everyExcludedRouterResponseHasNoRecipientFallbackToOrigin() (gas: 4998919)\n[PASS] test_gateSaleAlwaysNamesSellerEvenWhenRelayedByLetterboxRunner() (gas: 6763279)\n[PASS] test_hookDataTakesPriorityEvenWhenRouterCannotAnswer() (gas: 2652131)\n[PASS] test_msgSenderReceivesExactlyTheThirtyThousandGasBudget() (gas: 804139)\n[PASS] test_partialBuyWithoutTraderKeepsBothCashbackAndImdFeeSurplusForPool() (gas: 1272021)\n[PASS] test_revertingOutOfGasAndStateWritingRoutersCannotBlockDeadCabalBuys() (gas: 2066965)\n[PASS] test_successThenUnresolvedThenNewTraderDoesNotLeakTransientIdentity() (gas: 1621330)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 248.02ms (136.98ms CPU time)\n\nRan 7 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 1957221, ~: 1956406)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5441562, ~: 5450594)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1153411)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 779268)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 605232)\n[PASS] test_prizesRequireSixtyPoints() (gas: 1392343)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 934773)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 578.36ms (1.07s CPU time)\n\nRan 11 tests for test/BonusInvariant.t.sol:BonusEdgeTest\n[PASS] testFuzz_anyRankingPaysPlusBurnsExactlyTheBonus(uint256) (runs: 512, μ: 4500787, ~: 4287521)\n[PASS] test_bonusPaidAfterDeathIsFreelyTransferable() (gas: 866391)\n[PASS] test_closeWithinTheGraceHourIsRefused() (gas: 825201)\n[PASS] test_closingTwiceCannotPayASeasonsBonusTwice() (gas: 816904)\n[PASS] test_deathBeforeTradingSeasonZeroEndsBurnsEverythingButSeasonZero() (gas: 999895)\n[PASS] test_eleventhWalletRanksAfterTheTenAndIsPaidEleventh() (gas: 5890616)\n[PASS] test_gateAsSellerForfeitsWhileWatchedButIsPaidAfterDeath() (gas: 1520300)\n[PASS] test_lateApprovalListedAtCloseStillEarnsTheBonus() (gas: 720584)\n[PASS] test_onlyTheBestThreePleasCount() (gas: 1819213)\n[PASS] test_sixtyPointsQualifiesFiftyNineDoesNot() (gas: 1664786)\n[PASS] test_tenQualifiersReceiveTheirTenSharesAndTheRestBurns() (gas: 5669606)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 604.99ms (613.26ms CPU time)\n\nRan 11 tests for test/TribunalAdversarial.t.sol:TribunalAdversarialTest\n[PASS] testFuzz_stakeAccountingHolds(uint8[6],uint8) (runs: 32, μ: 53333251, ~: 53322022)\n[PASS] test_aFailureAfterARulingChangesNothing() (gas: 9347710)\n[PASS] test_aLateRulingIsRefused() (gas: 9353175)\n[PASS] test_aReplayedAttestationIsRefused() (gas: 16823902)\n[PASS] test_agreedNumbers() (gas: 16099)\n[PASS] test_objectingNeedsTheStakeAndTheFee() (gas: 4916306)\n[PASS] test_onlyTheIntakeMayDeliverARuling() (gas: 9226511)\n[PASS] test_theGatesSignatureIsWorthlessHereAndTheReverse() (gas: 12255558)\n[PASS] test_theStakeCannotBeDrainedByTheGateOrByDoubleSettling() (gas: 17118041)\n[PASS] test_unknownRequestsAreRefused() (gas: 9211924)\n[PASS] test_wrongPanelsAndScoresAreRefused() (gas: 9496856)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 331.49ms (324.06ms CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 97165022)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 101585345)\nLogs:\n  launch (5 contracts + intake mock): 12531874\n  deployLetterbox: 5024892\n  deployHook: 5633077\n  seed: 615596\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 12649546)\n[PASS] test_ownerMaySeedEarly() (gas: 96367222)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 96466073)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 661.20ms (218.00ms CPU time)\n\nRan 13 tests for test/HookRevision.t.sol:HookRevisionPleaIsZeroTest\n[PASS] testFuzz_aGreedyStackerCannotReachTheWallReserve(uint256,uint256) (runs: 32, μ: 1314422, ~: 1314488)\n[PASS] testFuzz_aLimitAnywhereInTheLiquidityFreeRegionNeverMovesTheGuard(uint256,uint256) (runs: 32, μ: 2458995, ~: 2342091)\n[PASS] testFuzz_aLimitInsideTheLiquidMarketBandMovesTheGuardToTheStopTick(uint256) (runs: 32, μ: 5203734, ~: 5203763)\n[PASS] testFuzz_aSameHourPumpCannotMoveAPleasFactScore(uint256) (runs: 32, μ: 2704679, ~: 2702332)\n[PASS] testFuzz_repeatedDrainsToTheExtremeNeverMoveTheGuard(uint8) (runs: 32, μ: 3927829, ~: 3662083)\n[PASS] testFuzz_successfulCreditsNeverAccumulateAllowance(uint256,uint256,uint256) (runs: 32, μ: 2148827, ~: 2157086)\n[PASS] testFuzz_theGuardClimbsAtMost400TicksADay(uint256,uint256,uint8) (runs: 32, μ: 2560909, ~: 2316762)\n[PASS] testFuzz_theHoursFirstTradeRecordsThePriceItFoundWhateverItsSize(uint256,uint256) (runs: 32, μ: 2241926, ~: 2236178)\n[PASS] test_aCreditThatBurnsAllItsGasLeavesNoAllowance() (gas: 1593909)\n[PASS] test_anHourOpeningSellRecordsThePriceItFound() (gas: 1848113)\n[PASS] test_emptyRegionBitmapBoundaryStopsAtTheExactPriceLimit() (gas: 2289203)\n[PASS] test_orientationIsPleaZero() (gas: 15620)\n[PASS] test_wallGuardFollowsASellThatStopsWhereTheMarketHasLiquidity() (gas: 6114648)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 722.30ms (595.49ms CPU time)\n\nRan 12 tests for test/HookRevision.t.sol:HookRevisionTest\n[PASS] testFuzz_aGreedyStackerCannotReachTheWallReserve(uint256,uint256) (runs: 64, μ: 1314335, ~: 1314393)\n[PASS] testFuzz_aLimitAnywhereInTheLiquidityFreeRegionNeverMovesTheGuard(uint256,uint256) (runs: 64, μ: 2453611, ~: 2364316)\n[PASS] testFuzz_aLimitInsideTheLiquidMarketBandMovesTheGuardToTheStopTick(uint256) (runs: 64, μ: 5203693, ~: 5203741)\n[PASS] testFuzz_aSameHourPumpCannotMoveAPleasFactScore(uint256) (runs: 64, μ: 2705799, ~: 2708267)\n[PASS] testFuzz_repeatedDrainsToTheExtremeNeverMoveTheGuard(uint8) (runs: 64, μ: 4056926, ~: 3662061)\n[PASS] testFuzz_successfulCreditsNeverAccumulateAllowance(uint256,uint256,uint256) (runs: 64, μ: 2145564, ~: 2133443)\n[PASS] testFuzz_theGuardClimbsAtMost400TicksADay(uint256,uint256,uint8) (runs: 64, μ: 2680565, ~: 2676108)\n[PASS] testFuzz_theHoursFirstTradeRecordsThePriceItFoundWhateverItsSize(uint256,uint256) (runs: 64, μ: 2240946, ~: 2236156)\n[PASS] test_aCreditThatBurnsAllItsGasLeavesNoAllowance() (gas: 1593887)\n[PASS] test_anHourOpeningSellRecordsThePriceItFound() (gas: 1848091)\n[PASS] test_emptyRegionBitmapBoundaryStopsAtTheExactPriceLimit() (gas: 2289181)\n[PASS] test_wallGuardFollowsASellThatStopsWhereTheMarketHasLiquidity() (gas: 6114626)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 646.65ms (1.25s CPU time)\n\nRan 3 tests for test/GateFailureInvariant.t.sol:GateFailureInvariantTest\n[PASS]\nGateFailureInvariantTest invariants:\n[PASS] invariant_gateHoldsNothing\n[PASS] invariant_onlyVerdictsMoveTheClock\n[PASS] invariant_pendingBookkeepingIsConsistent\n GateFailureInvariantTest invariants (runs: 64, calls: 4096, reverts: 0)\n\n╭--------------------+---------------+-------+---------+----------╮\n| Contract           | Selector      | Calls | Reverts | Discards |\n+=================================================================+\n| GateFailureHandler | advance       | 435   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | answer        | 454   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | appeal        | 451   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | directFailure | 442   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | execute       | 458   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | expire        | 483   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | fail          | 440   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | plead         | 489   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | strangerFails | 444   | 0       | 0        |\n╰--------------------+---------------+-------+---------+----------╯\n\n[PASS] test_failureAfterDeathDoesNotReviveTheCabal() (gas: 4808014)\n[PASS] test_handlerReachesFailuresVerdictsAndAppeals() (gas: 18852923)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.10s (1.07s CPU time)\n\nRan 2 tests for test/BonusInvariant.t.sol:BonusInvariantTest\n[PASS]\nBonusInvariantTest invariants:\n[PASS] invariant_bonusIsHeldPaidOrBurned\n[PASS] invariant_flushedSeasonsStayFinished\n[PASS] invariant_openBonusSeasonsStayFunded\n[PASS] invariant_supplyFallsOnlyByTheBurnedBonus\n BonusInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+----------+-------+---------+----------╮\n| Contract     | Selector | Calls | Reverts | Discards |\n+======================================================+\n| BonusHandler | advance  | 1117  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | approve  | 1164  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | close    | 1178  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | die      | 1187  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | donate   | 1199  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | flush    | 1163  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | pull     | 1184  | 0       | 0        |\n╰--------------+----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesPaidClosesDeathAndFlush() (gas: 2525744)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.57s (1.56s CPU time)\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 1032  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 1042  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 1057  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 1046  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 1024  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 968   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 989   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 1034  | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.78s (1.77s CPU time)\n\nRan 2 tests for test/LetterboxInvariant.t.sol:LetterboxMainnetInvariantTest\n[PASS]\nLetterboxMainnetInvariantTest invariants:\n[PASS] invariant_escrowsMatchTheirPleas\n[PASS] invariant_everyWritersPleaIsAccountedFor\n[PASS] invariant_holdsExactlyTheOpenEscrowsAndTips\n[PASS] invariant_noStepBrokeAnExpectation\n LetterboxMainnetInvariantTest invariants (runs: 64, calls: 5120, reverts: 0)\n\n╭------------------+----------+-------+---------+----------╮\n| Contract         | Selector | Calls | Reverts | Discards |\n+==========================================================+\n| LetterboxHandler | advance  | 537   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | answer   | 575   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | appeal   | 573   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | deliver  | 591   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | fail     | 533   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | poke     | 560   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | sell     | 570   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | settle   | 586   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | write    | 595   | 0       | 0        |\n╰------------------+----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesEveryPath() (gas: 26501897)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.42s (2.41s CPU time)\n\nRan 2 tests for test/LetterboxInvariant.t.sol:LetterboxInvariantTest\n[PASS]\nLetterboxInvariantTest invariants:\n[PASS] invariant_escrowsMatchTheirPleas\n[PASS] invariant_everyWritersPleaIsAccountedFor\n[PASS] invariant_holdsExactlyTheOpenEscrowsAndTips\n[PASS] invariant_noStepBrokeAnExpectation\n LetterboxInvariantTest invariants (runs: 64, calls: 5120, reverts: 0)\n\n╭------------------+----------+-------+---------+----------╮\n| Contract         | Selector | Calls | Reverts | Discards |\n+==========================================================+\n| LetterboxHandler | advance  | 537   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | answer   | 575   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | appeal   | 573   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | deliver  | 591   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | fail     | 533   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | poke     | 560   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | sell     | 570   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | settle   | 586   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | write    | 595   | 0       | 0        |\n╰------------------+----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesEveryPath() (gas: 26600694)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.51s (2.49s CPU time)\n\nRan 4 tests for test/OwnershipTransitionInvariant.t.sol:OwnershipTransitionInvariantTest\n[PASS]\nOwnershipTransitionInvariantTest invariants:\n[PASS] invariant_onlyAcceptedTransfersChangeOwnerOrAllowlistAuthority\n[PASS] invariant_ownershipChangesCannotMoveOrDuplicateCustodiedPrizes\n OwnershipTransitionInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------------------------+-------------+-------+---------+----------╮\n| Contract                   | Selector    | Calls | Reverts | Discards |\n+=======================================================================+\n| OwnershipTransitionHandler | accept      | 4148  | 0       | 0        |\n|----------------------------+-------------+-------+---------+----------|\n| OwnershipTransitionHandler | allow       | 4109  | 0       | 0        |\n|----------------------------+-------------+-------+---------+----------|\n| OwnershipTransitionHandler | closePrizes | 4010  | 0       | 0        |\n|----------------------------+-------------+-------+---------+----------|\n| OwnershipTransitionHandler | nominate    | 4117  | 0       | 0        |\n╰----------------------------+-------------+-------+---------+----------╯\n\n[PASS] test_cancelledNomineeCannotAcceptAndBothLeadersKeepTheirPrizes() (gas: 923061)\n[PASS] test_renounceClearsNominationAndDoesNotLetFormerNomineeClaimAuthority() (gas: 1148987)\n[PASS] test_replacedNomineeCannotAcceptAndNewOwnerAloneLosesTheirPrize() (gas: 1186736)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.62s (2.61s CPU time)\n\nRan 2 tests for test/TraderAttributionInvariant.t.sol:TraderAttributionInvariantPleaZeroTest\n[PASS]\nTraderAttributionInvariantPleaZeroTest invariants:\n[PASS] invariant_infrastructureNeverReceivesTraderCredit\n[PASS] invariant_supplyAndPoolReserveRemainBacked\n[PASS] invariant_tokensAndBuyRecordsFollowTheirIndependentRecipients\n TraderAttributionInvariantPleaZeroTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------------------+------------+-------+---------+----------╮\n| Contract                 | Selector   | Calls | Reverts | Discards |\n+====================================================================+\n| TraderAttributionHandler | advance    | 2668  | 0       | 0        |\n|--------------------------+------------+-------+---------+----------|\n| TraderAttributionHandler | buy        | 2729  | 0       | 0        |\n|--------------------------+------------+-------+---------+----------|\n| TraderAttributionHandler | pauseVault | 2795  | 0       | 0        |\n╰--------------------------+------------+-------+---------+----------╯\n\n[PASS] test_handlerExercisesFallbacksDeathAndPlainCashback() (gas: 4082613)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.64s (2.63s CPU time)\n\nRan 2 tests for test/TraderAttributionInvariant.t.sol:TraderAttributionInvariantTest\n[PASS]\nTraderAttributionInvariantTest invariants:\n[PASS] invariant_infrastructureNeverReceivesTraderCredit\n[PASS] invariant_supplyAndPoolReserveRemainBacked\n[PASS] invariant_tokensAndBuyRecordsFollowTheirIndependentRecipients\n TraderAttributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------------------+------------+-------+---------+----------╮\n| Contract                 | Selector   | Calls | Reverts | Discards |\n+====================================================================+\n| TraderAttributionHandler | advance    | 2668  | 0       | 0        |\n|--------------------------+------------+-------+---------+----------|\n| TraderAttributionHandler | buy        | 2729  | 0       | 0        |\n|--------------------------+------------+-------+---------+----------|\n| TraderAttributionHandler | pauseVault | 2795  | 0       | 0        |\n╰--------------------------+------------+-------+---------+----------╯\n\n[PASS] test_handlerExercisesFallbacksDeathAndPlainCashback() (gas: 4084653)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.79s (2.78s CPU time)\n\nRan 5 tests for test/GasPass.t.sol:GasPassTest\n[PASS] testFuzz_bodyEqualsEscapingTheWholeQuestion(uint256) (runs: 500, μ: 5657219, ~: 5618232)\n[PASS] testFuzz_textCheckMatchesTheReferenceRules(uint256) (runs: 5000, μ: 1016499, ~: 85070)\n[PASS] test_bodyEqualsEscapingTheWholeQuestion() (gas: 13043358)\n[PASS] test_priceViewsMatchAFullScan() (gas: 128850699)\n[PASS] test_textCheckEdgeCases() (gas: 54380836)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 3.09s (3.60s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[PASS]\nTradingPleaZeroInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_stackerHoldsNoStandingAllowanceOnTheHooksImd\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingPleaZeroInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 759   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 768   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 777   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 743   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 703   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 782   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 695   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 738   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 729   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2945928, ~: 2955041)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 9232754)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.64s (3.69s CPU time)\n\nRan 12 tests for test/AuditRun3.t.sol:AuditRun3Test\n[PASS] test_F1_appealLetterCannotRetryAnAppealTheOracleNeverAnswered() (gas: 16673819)\n[PASS] test_F2_aCapSizedAutoSellPleaCannotBeAppealedThroughTheLetterbox() (gas: 33839594)\n[PASS] test_F3_aBareCommandWordBecomesAPaidPlea() (gas: 112574)\n[PASS] test_aLetterboxDeployedByAnyoneElseHasNoPowers() (gas: 10397692)\n[PASS] test_autoSellCannotAcceptASpotPriceUnderTheSnapshotFloor() (gas: 6856381)\n[PASS] test_escrowsAfterTheCabalDies() (gas: 12953573)\n[PASS] test_feeSaleIsBoundedAndTheTipReturns() (gas: 5269804)\n[PASS] test_letterParsingEdgeCases() (gas: 21366900)\n[PASS] test_markerRuleUnchanged() (gas: 6385088)\n[PASS] test_oneCapSizedSaleMovesSpotUnderOnePercent() (gas: 27199208)\nLogs:\n  price impact of a 2.5M PLEA sale, bps: 87\n\n[PASS] test_oracleBodyIsValidJsonForHostileTexts() (gas: 26413773)\n[PASS] test_priceViewsEqualAFullRingScan() (gas: 47583126)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 3.98s (95.00ms CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_stackerHoldsNoStandingAllowanceOnTheHooksImd\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 759   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 768   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 777   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 743   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 703   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 782   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 695   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 738   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 729   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2946744, ~: 2955857)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 9227904)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.85s (3.89s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 831   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 819   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 810   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 814   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 877   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 786   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 773   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 867   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 857   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 758   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 3935480)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 4849403)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.84s (9.83s CPU time)\n\nRan 66 test suites in 9.85s (51.03s CPU time): 550 tests passed, 0 failed, 2 skipped (552 total tests)\n","passed":true},{"durationMs":113,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.appealFor(address,uint256,uint256,uint256,string,uint8,uint256,uint256)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.executeSellFor(uint256,uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitFor(address,uint256,uint256,string,uint8,uint256,uint256)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Letterbox.appealAuto(uint256,string)\",\"Letterbox.deliver(uint256)\",\"Letterbox.fallback()\",\"Letterbox.letter(string)\",\"Letterbox.plead(uint256,string)\",\"Letterbox.setName(string)\",\"Letterbox.settle(uint256)\",\"PLEA.acceptOwnership()\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.courtTake(address,uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address)\",\"PLEA.setLetterbox(address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.deployLetterbox(bytes)\",\"PleaLaunch.deployTribunal(bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.checkpointObjection(uint256,uint256)\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\",\"Tribunal.expire(uint256)\",\"Tribunal.object(uint256,string)\",\"Tribunal.onObjectionFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Tribunal.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Tribunal.settle(uint256)\"],\"files\":{\".gitignore\":4,\"ADAPTATION.md\":50,\"OBJECTIONS.md\":339,\"README.md\":295,\"foundry.toml\":25,\"launch.json\":57,\"remappings.txt\":4,\"script/Deploy.s.sol\":79,\"script/DeployLetterbox.s.sol\":22,\"script/DeployTribunal.s.sol\":22,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":829,\"src/Letterbox.sol\":697,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":151,\"src/PleaDistributor.sol\":49,\"src/PleaHook.sol\":1062,\"src/PleaLaunch.sol\":186,\"src/Seasons.sol\":432,\"src/Tribunal.sol\":527,\"src/interfaces/IPleaParts.sol\":75,\"src/interfaces/IStacker.sol\":12,\"test/AppealRounding.t.sol\":140,\"test/ArtifactDeployment.t.sol\":59,\"test/AuditImported.t.sol\":142,\"test/AuditRevision.t.sol\":277,\"test/AuditRun3.t.sol\":393,\"test/AuditRun5.t.sol\":186,\"test/BonusInvariant.t.sol\":539,\"test/DistributorAdversarial.t.sol\":340,\"test/GasPass.t.sol\":341,\"test/Gate.t.sol\":409,\"test/GateAdversarial.t.sol\":400,\"test/GateFailureInvariant.t.sol\":330,\"test/Hook.t.sol\":357,\"test/HookAdversarial.t.sol\":256,\"test/HookRevision.t.sol\":392,\"test/JudgeFindings.t.sol\":217,\"test/Launch.t.sol\":173,\"test/LaunchManifest.t.sol\":367,\"test/Letterbox.t.sol\":818,\"test/LetterboxInvariant.t.sol\":441,\"test/OracleConformance.t.sol\":116,\"test/OracleReplay.t.sol\":60,\"test/Orientation.t.sol\":58,\"test/OwnershipTransitionInvariant.t.sol\":238,\"test/SeasonAdversarial.t.sol\":211,\"test/SeasonFunds.t.sol\":349,\"test/SeasonInvariant.t.sol\":346,\"test/SeasonRanking.t.sol\":174,\"test/Seasons.t.sol\":287,\"test/Token.t.sol\":80,\"test/TraderAttributionInvariant.t.sol\":287,\"test/TraderFallbackAdversarial.t.sol\":307,\"test/TraderResolution.t.sol\":223,\"test/TraderResolverBoundary.t.sol\":126,\"test/TradingInvariant.t.sol\":493,\"test/Tribunal.t.sol\":484,\"test/TribunalAdversarial.t.sol\":225,\"test/TribunalSeasons.t.sol\":300,\"test/TribunalStanding.t.sol\":217,\"test/fork/ForkMainnet.t.sol\":390,\"test/fork/ForkTestnet.t.sol\":867,\"test/utils/AdversarialTraderRouter.sol\":38,\"test/utils/ArtifactDeployment.sol\":23,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":318,\"test/utils/Mocks.sol\":324,\"test/utils/SeasonModel.sol\":117,\"test/utils/SepoliaFixture.sol\":36},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":19416,"exitCode":0,"name":"slither","output":"[high/medium] weak-prng at src/PleaHook.sol:973: PleaHook._updateWallGuard(int24) (src/PleaHook.sol#973-998) uses a weak PRNG: \"guardRemainder = numerator % 86400 (src/PleaHook.sol#985)\"\n[high/medium] weak-prng at src/PleaHook.sol:1000: PleaHook._checkpoint(uint160) (src/PleaHook.sol#1000-1010) uses a weak PRNG: \"c = ring[hour % 25] (src/PleaHook.sol#1002)\"\n[high/medium] weak-prng at src/PleaHook.sol:283: PleaHook.price24hAgo() (src/PleaHook.sol#283-296) uses a weak PRNG: \"t = ring[target % 25] (src/PleaHook.sol#286)\"\n[high/medium] weak-prng at src/PleaHook.sol:267: PleaHook.latestPrice() (src/PleaHook.sol#267-280) uses a weak PRNG: \"best = ring[lastCheckpointHour % 25].priceX96 (src/PleaHook.sol#270)\"\n[high/high] uninitialized-state at src/Tribunal.sol:181: Tribunal.cases (src/Tribunal.sol#157) is never initialized. It is used in:\n[high/high] uninitialized-state at src/Seasons.sol:112: Seasons._best (src/Seasons.sol#75) is never initialized. It is used in:\n[high/high] uninitialized-state at src/Seasons.sol:228: Seasons._bestPleaIds (src/Seasons.sol#76) is never initialized. It is used in:\n[high/high] uninitialized-state at src/Seasons.sol:98: Seasons._top (src/Seasons.sol#74) is never initialized. It is used in:\n[medium/medium] divide-before-multiply at src/PleaHook.sol:1032: PleaHook._alignUp(int24) (src/PleaHook.sol#1032-1036) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/PleaHook.sol:1038: PleaHook._alignDown(int24) (src/PleaHook.sol#1038-1042) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/PleaHook.sol:739: PleaHook._applyCap() (src/PleaHook.sol#739-781) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Seasons.sol:428: Seasons._pay(address,uint256) (src/Seasons.sol#428-431) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Letterbox.sol:390: Letterbox._settle(uint256) (src/Letterbox.sol#390-410) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:208: CabalGate.restricted() (src/CabalGate.sol#208-210) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:802: PleaHook.rebalance() (src/PleaHook.sol#802-808) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:739: PleaHook._applyCap() (src/PleaHook.sol#739-781) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:329: PleaHook._pleaIn(PleaHook.Band,uint160) (src/PleaHook.sol#329-341) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:813: PleaHook._rebalance() (src/PleaHook.sol#813-874) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Seasons.sol:320: Seasons.flushToWall() (src/Seasons.sol#320-338) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:252: CabalGate._factScore(address,uint256,uint256) (src/CabalGate.sol#252-283) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:938: PleaHook._settleImd(uint256) (src/PleaHook.sol#938-943) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:213: CabalGate.diedAt() (src/CabalGate.sol#213-216) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Letterbox.sol:390: Letterbox._settle(uint256) (src/Letterbox.sol#390-410) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Letterbox.sol:390: Letterbox._settle(uint256) (src/Letterbox.sol#390-410) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Letterbox.sol:413: Letterbox._settleOpen(address) (src/Letterbox.sol#413-418) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Letterbox.sol:420: Letterbox._settleable(uint256) (src/Letterbox.sol#420-427) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:813: PleaHook._rebalance() (src/PleaHook.sol#813-874) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:299: PleaHook.launchExtraBps() (src/PleaHook.sol#299-304) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Letterbox.sol:420: Letterbox._settleable(uint256) (src/Letterbox.sol#420-427) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:876: PleaHook._closeWall() (src/PleaHook.sol#876-893) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Letterbox.sol:352: Letterbox._close(uint256,Letterbox.Escrow) (src/Letterbox.sol#352-356) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:283: PleaHook.price24hAgo() (src/PleaHook.sol#283-296) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Seasons.sol:148: Seasons.checkpoint() (src/Seasons.sol#148-159) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:473: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#473-549):\n[medium/medium] reentrancy-no-eth at src/Seasons.sol:285: Reentrancy in Seasons.closeSeason(uint256[]) (src/Seasons.sol#285-316):\n[medium/medium] reentrancy-no-eth at src/CabalGate.sol:331: Reentrancy in CabalGate.appealFor(address,uint256,uint256,uint256,string,uint8,uint256,uint256) (src/CabalGate.sol#331-346):\n[medium/medium] reentrancy-no-eth at src/Tribunal.sol:238: Reentrancy in Tribunal.object(uint256,string) (src/Tribunal.sol#238-279):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:714: Reentrancy in PleaHook._payCashback(address,uint256) (src/PleaHook.sol#714-731):\n[medium/medium] reentrancy-no-eth at src/Letterbox.sol:285: Reentrancy in Letterbox._appeal(address,uint256,string,uint8) (src/Letterbox.sol#285-329):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:473: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#473-549):\n[medium/medium] reentrancy-no-eth at src/CabalGate.sol:416: Reentrancy in CabalGate._ask(uint256) (src/CabalGate.sol#416-431):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:739: Reentrancy in PleaHook._applyCap() (src/PleaHook.sol#739-781):\n[medium/medium] reentrancy-no-eth at src/Letterbox.sol:267: Reentrancy in Letterbox._plead(address,uint256,string,uint8) (src/Letterbox.sol#267-283):\n[medium/medium] reentrancy-no-eth at src/Seasons.sol:320: Reentrancy in Seasons.flushToWall() (src/Seasons.sol#320-338):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:813: Reentrancy in PleaHook._rebalance() (src/PleaHook.sol#813-874):\n[medium/medium] reentrancy-no-eth at src/Letterbox.sol:390: Reentrancy in Letterbox._settle(uint256) (src/Letterbox.sol#390-410):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:473: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#473-549):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:876: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#876-893):\n[medium/medium] reentrancy-no-eth at src/CabalGate.sol:302: Reentrancy in CabalGate.submitFor(address,uint256,uint256,string,uint8,uint256,uint256) (src/CabalGate.sol#302-319):\n[medium/medium] uninitialized-local at src/Seasons.sol:407: Seasons._payBonus(uint256,Seasons.Entry[25]).paid (src/Seasons.sol#407) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:232: Seasons._record(uint256,uint256,address,uint8).mi (src/Seasons.sol#232) is a local variable never initialized\n[medium/medium] uninitialized-local at src/PleaHook.sol:288: PleaHook.price24hAgo().bestHour (src/PleaHook.sol#288) is a local variable never initialized\n[medium/medium] uninitialized-local at src/PleaHook.sol:567: PleaHook._payFees(address,bool,uint256,uint256,uint256).toPrize (src/PleaHook.sol#567) is a local variable never initialized\n[medium/medium] uninitialized-local at src/CabalGate.sol:763: CabalGate._validateText(string).len (src/CabalGate.sol#763) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:300: Seasons.closeSeason(uint256[]).paid (src/Seasons.sol#300) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:237: Seasons._record(uint256,uint256,address,uint8).pts (src/Seasons.sol#237) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Tribunal.sol:458: Tribunal._validateText(string).len (src/Tribunal.sol#458) is a local variable never initialized\n[medium/medium] uninitialized-local at src/PleaHook.sol:272: PleaHook.latestPrice().bestHour (src/PleaHook.sol#272) is a local variable never initialized\n[medium/medium] unused-return at src/PleaHook.sol:908: PleaHook.unlockCallback(bytes) (src/PleaHook.sol#908-936) ignores return value by (d,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams({tickLower:lower,tickUpper:upper,liquidityDelta:int256(uint256(liquidity)),salt:0}),) (src/PleaHook.sol#915-921)\n[medium/medium] unused-return at src/Seasons.sol:342: Seasons._redeemClaims() (src/Seasons.sol#342-349) ignores return value by pm.unlock(abi.encode(amount)) (src/Seasons.sol#348)\n[medium/medium] unused-return at src/PleaHook.sol:245: PleaHook.currentSqrtPriceX96() (src/PleaHook.sol#245-247) ignores return value by (sqrtPriceX96,None,None,None) = poolManager.getSlot0(poolId()) (src/PleaHook.sol#246)\n[medium/medium] unused-return at src/PleaHook.sol:783: PleaHook._removeLiquidity(int24,int24,uint256) (src/PleaHook.sol#783-795) ignores return value by (d,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams({tickLower:lower,tickUpper:upper,liquidityDelta:- int256(liquidity),salt:0}),) (src/PleaHook.sol#787-791)\n[medium/medium] unused-return at src/PleaHook.sol:908: PleaHook.unlockCallback(bytes) (src/PleaHook.sol#908-936) ignores return value by poolManager.settle() (src/PleaHook.sol#928)\n[medium/medium] unused-return at src/PleaHook.sol:249: PleaHook.currentTick() (src/PleaHook.sol#249-251) ignores return value by (None,tick,None,None) = poolManager.getSlot0(poolId()) (src/PleaHook.sol#250)\n[medium/medium] unused-return at src/PleaHook.sol:813: PleaHook._rebalance() (src/PleaHook.sol#813-874) ignores return value by (d,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams({tickLower:lower,tickUpper:upper,liquidityDelta:int256(uint256(liquidity)),salt:0}),) (src/PleaHook.sol#854-860)\n[medium/medium] unused-return at src/OracleAttestation.sol:158: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/OracleAttestation.sol#158-171) ignores return value by (recovered,err,None) = ECDSA.tryRecover(digest,signature) (src/OracleAttestation.sol#166)\n[medium/medium] unused-return at src/PleaHook.sol:938: PleaHook._settleImd(uint256) (src/PleaHook.sol#938-943) ignores return value by poolManager.settle() (src/PleaHook.sol#942)\n[medium/medium] unused-return at src/CabalGate.sol:461: CabalGate._stale(CabalGate.Plea) (src/CabalGate.sol#461-465) ignores return value by (None,None,None,completed) = intake.requests(p.intakeId) (src/CabalGate.sol#463)\n[medium/medium] unused-return at src/Letterbox.sol:429: Letterbox._intakeDone(bytes32) (src/Letterbox.sol#429-431) ignores return value by (None,None,None,done) = gate.intake().requests(intakeId) (src/Letterbox.sol#430)\n[medium/medium] unused-return at src/Tribunal.sol:365: Tribunal._stale(Tribunal.Objection) (src/Tribunal.sol#365-369) ignores return value by (None,None,None,completed) = intake.requests(o.intakeId) (src/Tribunal.sol#367)\n[medium/medium] unused-return at src/Tribunal.sol:282: Tribunal.onOracleResult(bytes32,OracleAttestation.Attestation,bytes) (src/Tribunal.sol#282-314) ignores return value by (None,oldScore,None,None) = gate.result(pleaId) (src/Tribunal.sol#302)\n[medium/medium] unused-return at src/Seasons.sol:164: Seasons.checkpointObjection(uint256,uint256) (src/Seasons.sol#164-177) ignores return value by (None,None,approved,verdictAt) = gate.result(pleaId) (src/Seasons.sol#167)\n[medium/medium] unused-return at src/CabalGate.sol:613: CabalGate.unlockCallback(bytes) (src/CabalGate.sol#613-646) ignores return value by pm.settle() (src/CabalGate.sol#643)\n[medium/medium] unused-return at src/Tribunal.sol:198: Tribunal.status(uint256) (src/Tribunal.sol#198-232) ignores return value by (None,score,approved,verdictAt) = gate.result(pleaId) (src/Tribunal.sol#199)\n[medium/medium] unused-return at src/Tribunal.sol:238: Tribunal.object(uint256,string) (src/Tribunal.sol#238-279) ignores return value by (seller,None,approved,verdictAt) = gate.result(pleaId) (src/Tribunal.sol#240)\n[medium/medium] unused-return at src/Tribunal.sol:381: Tribunal._question(uint256,bool) (src/Tribunal.sol#381-393) ignores return value by (None,score,None,None) = gate.result(o.pleaId) (src/Tribunal.sol#383)\n[medium/medium] unused-return at src/Tribunal.sol:188: Tribunal.standing(uint256) (src/Tribunal.sol#188-195) ignores return value by (None,None,approved,verdictAt) = gate.result(pleaId) (src/Tribunal.sol#193)\n[low/high] shadowing-local at src/Tribunal.sol:198: Tribunal.onObjectionFailure(bytes32,uint8,bytes32,uint16,uint16,bytes).status (src/Tribunal.sol#319) shadows:\n[low/high] shadowing-local at src/Tribunal.sol:198: Tribunal._void(uint256,Tribunal.Objection,uint8,bytes32).status (src/Tribunal.sol#357) shadows:\n[low/medium] missing-zero-check at src/PleaLaunch.sol:76: PleaLaunch.constructor(address,address,address,address,address,address,address,uint256,uint256,address,bool,bytes32,bytes32).gate_ (src/PleaLaunch.sol#76) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:84: PleaLaunch.constructor(address,address,address,address,address,address,address,uint256,uint256,address,bool,bytes32,bytes32).oracleAsset_ (src/PleaLaunch.sol#84) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:80: PleaLaunch.constructor(address,address,address,address,address,address,address,uint256,uint256,address,bool,bytes32,bytes32).imd_ (src/PleaLaunch.sol#80) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:79: PleaLaunch.constructor(address,address,address,address,address,address,address,uint256,uint256,address,bool,bytes32,bytes32).poolManager_ (src/PleaLaunch.sol#79) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:77: PleaLaunch.constructor(address,address,address,address,address,address,address,uint256,uint256,address,bool,bytes32,bytes32).seasons_ (src/PleaLaunch.sol#77) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaHook.sol:194: PleaHook.constructor(IPoolManager,address,IERC20,IStacker,address,address,uint256).seasons_ (src/PleaHook.sol#194) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:99: PleaLaunch.constructor(address,address,address,address,address,address,address,uint256,uint256,address,bool,bytes32,bytes32).owner_ (src/PleaLaunch.sol#99) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaHook.sol:193: PleaHook.constructor(IPoolManager,address,IERC20,IStacker,address,address,uint256).owner_ (src/PleaHook.sol#193) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaHook.sol:190: PleaHook.constructor(IPoolManager,address,IERC20,IStacker,address,address,uint256).plea_ (src/PleaHook.sol#190) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:75: PleaLaunch.constructor(address,address,address,address,address,address,address,uint256,uint256,address,bool,bytes32,bytes32).plea_ (src/PleaLaunch.sol#75) lacks a zero-check on :\n[low/medium] calls-loop at src/Seasons.sol:387: Seasons._owners() (src/Seasons.sol#387-395) has external calls inside a loop: (ok,ret) = hook_.staticcall(abi.encodeWithSignature(owner())) (src/Seasons.sol#392)\n[low/medium] calls-loop at src/Seasons.sol:405: Seasons._payBonus(uint256,Seasons.Entry[25","passed":true},{"durationMs":1882,"exitCode":0,"name":"aderyn","output":"[high] abi-encode-packed-hash-collision at src/PleaLaunch.sol:102: `abi.encodePacked()` Hash Collision\n[high] reentrancy-state-change at src/CabalGate.sol:193: Reentrancy: State change after external call (33 places)\n[high] storage-array-memory-edit at src/PleaHook.sol:307: Storage Array Edited with Memory (4 places)\n[high] unsafe-casting at src/CabalGate.sol:402: Unsafe Casting of integers (4 places)\n[low] centralization-risk at src/PLEA.sol:14: Centralization Risk (4 places)\n[low] costly-loop at src/Seasons.sol:275: Costly operations inside loop (2 places)\n[low] internal-function-used-once at src/Tribunal.sol:34: Internal Function Used Only Once\n[low] large-numeric-literal at src/CabalGate.sol:254: Large Numeric Literal (11 places)\n[low] literal-instead-of-constant at src/CabalGate.sol:254: Literal Instead of Constant (141 places)\n[low] missing-inheritance at src/PleaHook.sol:35: Missing Inheritance (3 places)\n[low] require-revert-in-loop at src/CabalGate.sol:755: Loop Contains `require`/`revert` (6 places)\n[low] state-change-without-event at src/CabalGate.sol:613: State Change Without Event (4 places)\n[low] unchecked-return at src/CabalGate.sol:643: Unchecked Return (7 places)\n[low] uninitialized-local-variable at src/Letterbox.sol:237: Uninitialized Local Variable (10 places)\n[low] unsafe-erc20-operation at src/PleaHook.sol:724: Unsafe ERC20 Operation (3 places)\n[low] unused-import at src/PleaLaunch.sol:4: Unused Import (3 places)\n[low] unused-public-function at src/CabalGate.sol:213: Public Function Not Used Internally (9 places)\n[low] unused-state-variable at src/PLEA.sol:29: Unused State Variable (5 places)","passed":true}],"detail":"all checks passed; 1 finding(s) for the step that wrote the contracts","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"2656a5b9b19e4a6fb99de0d8b717d6e2c961f31524012a0893251758c0a6601a","verifiedTreeHash":"2e5e7c456f58c0a03642392211651920d49e81f3","verifierVersion":"0.1.0+67c588fa"},{"checks":[{"durationMs":428250,"exitCode":0,"name":"build","output":"Compiling 165 files with Solc 0.8.26\nSolc 0.8.26 finished in 427.97s\nCompiler run successful with warnings:\nWarning (8760): This declaration has the same name as another declaration.\n   --> src/Tribunal.sol:319:9:\n    |\n319 |         uint8 status,\n    |         ^^^^^^^^^^^^\nNote: The other declaration is here:\n   --> src/Tribunal.sol:198:5:\n    |\n198 |     function status(uint256 pleaId) external view returns (string memory) {\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/Tribunal.sol:357:53:\n    |\n357 |     function _void(uint256 id, Objection storage o, uint8 status, bytes32 reason) internal {\n    |                                                     ^^^^^^^^^^^^\nNote: The other declaration is here:\n   --> src/Tribunal.sol:198:5:\n    |\n198 |     function status(uint256 pleaId) external view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> src/Seasons.sol:387:58:\n    |\n387 |     function _owners() internal view returns (address a, address b, address c) {\n    |                                                          ^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> src/CabalGate.sol:710:5:\n    |\n710 |     function _text(string storage t, bool json) internal view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":16404,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/ArtifactDeployment.t.sol:ArtifactDeploymentTest\n[PASS] test_artifactCreationBubblesFullConstructorRevertData() (gas: 101386)\n[PASS] test_artifactCreationPreservesConstructorCallerArgumentsAndRuntime() (gas: 354315)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 11.68ms (6.98ms CPU time)\n\nRan 1 test for test/fork/ForkMainnet.t.sol:ForkMainnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 6.06ms (0.00ns CPU time)\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 1.12ms (0.00ns CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10527)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 1392141)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13943)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 34.46ms (24.41ms CPU time)\n\nRan 2 tests for test/ManifestInput.t.sol:ManifestInputTest\n[PASS] test_everyManifestWordDeploysAtomicallyAndCommitsTheTribunal() (gas: 21739887)\n[PASS] test_failedLastConstructorRollsBackAllEarlierDeploymentsAndCanRetry() (gas: 26695318)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 48.05ms (34.89ms CPU time)\n\nRan 2 tests for test/TribunalOracleBoundary.t.sol:TribunalProtocolVectorTest\n[PASS] test_canonicalProtocolDigestSignatureAndCallbackSelectors() (gas: 92791)\n[PASS] test_supportedVectorAnswerIsDeliveredUnderTwoHundredThousandGas() (gas: 194709)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 62.23ms (709.79µs CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1195849, ~: 1236227)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24099)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1604975)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75392)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1687394)\n[PASS] test_deathBeforeTheSixthSeasonBurnsTheRest() (gas: 1126109)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1581399)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 260455)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 747060)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1577087)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1148032)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43360)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2433372)\n[PASS] test_onlyTheFirstSixSeasonsPayABonus() (gas: 4861702)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 812838)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1058096)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 71.44ms (59.67ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259284, ~: 259220)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1724610)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317220)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260500)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 276001)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 86.72ms (77.41ms CPU time)\n\nRan 12 tests for test/TribunalStanding.t.sol:TribunalStandingTest\n[PASS] test_aHeldPleaIsRefusedAndSkippedByAClose() (gas: 620800)\n[PASS] test_aHigherPanelScoreKeepsTheOriginal() (gas: 588338)\n[PASS] test_aLauncherAnsweringTheWrongSizeRecordsAsBefore() (gas: 384063)\n[PASS] test_aLauncherWithoutTribunalRecordsAsBefore() (gas: 394628)\n[PASS] test_aLowerPanelScoreIsRecorded() (gas: 588279)\n[PASS] test_aRevertingTribunalCannotBlockARecord() (gas: 524018)\n[PASS] test_aSustainedPleaIsRefused() (gas: 397224)\n[PASS] test_aTribunalAnsweringTheWrongSizeRecordsAsBefore() (gas: 515196)\n[PASS] test_aZeroTribunalRecordsAsBefore() (gas: 403393)\n[PASS] test_noLauncherRecordsAsBefore() (gas: 243543)\n[PASS] test_noShareBeyondTheTable() (gas: 9496)\n[PASS] test_sharesFallInAStraightLineAndSumToTenThousand() (gas: 233536)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 4.11ms (3.56ms CPU time)\n\nRan 3 tests for test/Letterbox.t.sol:OwnerExclusionTest\n[PASS] test_nobodyGetsAKeeperTip() (gas: 486489)\n[PASS] test_ownerPleasEarnNoPoints() (gas: 5081502)\n[PASS] test_theLaunchOwnerStaysExcludedAfterAHandover() (gas: 5209898)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 97.27ms (19.47ms CPU time)\n\nRan 1 test for test/TribunalSeasons.t.sol:TribunalLateDeployTest\n[PASS] test_aPleaRecordedBeforeTheTribunalCannotBeObjectedTo() (gas: 13817953)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 93.49ms (8.16ms CPU time)\n\nRan 12 tests for test/TribunalSeasons.t.sol:TribunalSeasonsTest\n[PASS] test_aLetterSellsDuringTheHoldAndItsPointsAreRecordedLater() (gas: 10580164)\n[PASS] test_aSustainedPleaIsNeverRecordedEvenByAClose() (gas: 9584427)\n[PASS] test_aVoidAtTheLastSecondLeavesNoRoomForASecondObjection() (gas: 13084302)\n[PASS] test_approvalInTheLastSecondIsRuledAndRecordedInsideTheGrace() (gas: 12751176)\n[PASS] test_closeListsAHeldPleaOfTheRunningSeasonWithoutReverting() (gas: 8335533)\n[PASS] test_closeSeasonSkipsHeldPleasAndRecordsThemLater() (gas: 12649232)\n[PASS] test_recordIsFreeOnceTheWindowClosesWithNoObjection() (gas: 5234864)\n[PASS] test_recordWaitsForTheWindowThenForAPendingObjection() (gas: 9693671)\n[PASS] test_seasonsFindsTheTribunalThroughTheLauncher() (gas: 51237)\n[PASS] test_theLetterboxStatusShowsHeldPendingAndSustainedPoints() (gas: 20490666)\n[PASS] test_theTimingBoundHoldsInsideTheCloseGrace() (gas: 15420)\n[PASS] test_twoRulingsAtTheEdgeStayInsideTheGrace() (gas: 16555549)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 130.47ms (47.02ms CPU time)\n\nRan 6 tests for test/TraderResolverBoundary.t.sol:TraderResolverBoundaryTest\n[PASS] testFuzz_malformedVaultDiscoveryDoesNotRevertOrTruncate(uint8,uint96) (runs: 256, μ: 162839, ~: 158928)\n[PASS] test_missingRevertingAndZeroVaultDiscoveryAllowsDeployment() (gas: 564113)\n[PASS] test_namedContractWalletIsAcceptedWhenItIsNotTheRouter() (gas: 21054)\n[PASS] test_plainWalletFallbackUsesSenderAndNeverTransactionOrigin() (gas: 62439)\n[PASS] test_plainWalletInfrastructureIsExcludedEvenWithoutCode() (gas: 45858)\n[PASS] test_vaultAddressIsCachedAndIsNotReadAgainDuringResolution() (gas: 169436)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 142.53ms (131.85ms CPU time)\n\nRan 9 tests for test/AuditRun5.t.sol:AuditRun5PleaFirstTest\n[PASS] testFuzz_markerPrefixesAreRefusedInAnyCase(uint16,bool,uint8) (runs: 32, μ: 67796, ~: 67051)\n[PASS] testFuzz_settlementAcrossTheBoundaryKeepsThePleasSeason(uint16) (runs: 32, μ: 9650601, ~: 9650601)\n[PASS] test_allNewPleaRoutesRefuseSellerWrittenObjectionMarkers() (gas: 780425)\n[PASS] test_appealRoutesAlsoRefuseForgedObjectionMarkers() (gas: 5559344)\n[PASS] test_lateSettlementFundsThePleasSeasonAndCheckpointsOtherDonations() (gas: 9859847)\n[PASS] test_onlyTheCommittedTribunalCanLabelAFundedApprovedStake() (gas: 5151600)\n[PASS] test_settlementAfterACloseGoesToRolloverOnce() (gas: 10112467)\n[PASS] test_similarWordsAndTruncatedPrefixesStillPass() (gas: 4686661)\n[PASS] test_twoFreshWalletRulingsStillCloseTheCaseAsRequired() (gas: 13474184)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 147.48ms (118.20ms CPU time)\n\nRan 9 tests for test/AuditRun5.t.sol:AuditRun5Test\n[PASS] testFuzz_markerPrefixesAreRefusedInAnyCase(uint16,bool,uint8) (runs: 32, μ: 66925, ~: 66448)\n[PASS] testFuzz_settlementAcrossTheBoundaryKeepsThePleasSeason(uint16) (runs: 32, μ: 9650601, ~: 9650601)\n[PASS] test_allNewPleaRoutesRefuseSellerWrittenObjectionMarkers() (gas: 780425)\n[PASS] test_appealRoutesAlsoRefuseForgedObjectionMarkers() (gas: 5559344)\n[PASS] test_lateSettlementFundsThePleasSeasonAndCheckpointsOtherDonations() (gas: 9859847)\n[PASS] test_onlyTheCommittedTribunalCanLabelAFundedApprovedStake() (gas: 5151600)\n[PASS] test_settlementAfterACloseGoesToRolloverOnce() (gas: 10112467)\n[PASS] test_similarWordsAndTruncatedPrefixesStillPass() (gas: 4686661)\n[PASS] test_twoFreshWalletRulingsStillCloseTheCaseAsRequired() (gas: 13474184)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 173.88ms (113.52ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 8000077, ~: 7990212)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 8403694)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 7849417)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 145.58ms (89.91ms CPU time)\n\nRan 7 tests for test/AuditImported.t.sol:AuditImportedTest\n[PASS] test_appealLetterRetriesCompletedRequestWithFailedCallback() (gas: 12980558)\n[PASS] test_appealLetterRetriesLazyTimeoutWithoutSeparateSettlement() (gas: 12913856)\n[PASS] test_autoAppealSurvivesBalanceGrowth() (gas: 9467303)\n[PASS] test_growingBalanceDoesNotEnableDustOrLargerAppeals() (gas: 8657349)\n[PASS] test_rawAppealLetterSurvivesBalanceGrowth() (gas: 9493294)\n[PASS] test_shrinkingBalanceStillUsesCurrentMinimumAndMaximum() (gas: 8300497)\n[PASS] test_siteAppealSurvivesBalanceGrowthAtOriginalMinimum() (gas: 8560336)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 199.19ms (54.63ms CPU time)\n\nRan 13 tests for test/TraderResolution.t.sol:TraderResolutionTest\n[PASS] testFuzz_dirtyHookDataFallsBackToRouterCaller(uint96,bool) (runs: 32, μ: 705289, ~: 694488)\n[PASS] test_dirtyHookDataAfterDeathBuyHasNoTrader() (gas: 481802)\n[PASS] test_dirtyHookDataFallsBackToRouterCallerWhileAlive() (gas: 718871)\n[PASS] test_dirtyHookDataWithoutFallbackWhileAliveRequiresRecipient() (gas: 82086)\n[PASS] test_dirtyHookDataWordFallsThrough() (gas: 1018802)\n[PASS] test_feeSurplusWithoutATraderIsBurnedOrKeptForThePool() (gas: 520659)\n[PASS] test_hookDataNamesTheTrader() (gas: 674829)\n[PASS] test_invalidHookDataFallsBackToTheRouterCaller() (gas: 2690883)\n[PASS] test_noTraderAfterDeathBuyGoesThroughWithoutCashback() (gas: 440311)\n[PASS] test_noTraderAfterDeathSellGoesThroughWithoutCashback() (gas: 521982)\n[PASS] test_routerCallerIsTheTraderWithoutHookData() (gas: 697754)\n[PASS] test_routerCallerStillCreditedAfterDeath() (gas: 629310)\n[PASS] test_routerWithoutMsgSenderNeedsHookDataWhileTheCabalLives() (gas: 149311)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 82.04ms (33.86ms CPU time)\n\nRan 4 tests for test/AppealRounding.t.sol:AppealRoundingPaidFeePleaZeroTest\n[PASS] testFuzz_minimumPleaAppealsThroughEveryLetterEntry(uint8,uint8) (runs: 32, μ: 9380237, ~: 9386042)\n[PASS] test_cappedMinimumSitePleaCanAppealAfterFeeSale() (gas: 9464080)\n[PASS] test_minimumSitePleaCanAppealAfterFeeSaleRounding() (gas: 9369423)\n[PASS] test_shareBandsAndFiftyPercentClampKeepTheirExistingRounding() (gas: 27949305)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 205.45ms (181.04ms CPU time)\n\nRan 7 tests for test/AuditImported.t.sol:AuditImportedPaidFeeTest\n[PASS] test_appealLetterRetriesCompletedRequestWithFailedCallback() (gas: 12925590)\n[PASS] test_appealLetterRetriesLazyTimeoutWithoutSeparateSettlement() (gas: 12858888)\n[PASS] test_autoAppealSurvivesBalanceGrowth() (gas: 9430620)\n[PASS] test_growingBalanceDoesNotEnableDustOrLargerAppeals() (gas: 8646049)\n[PASS] test_rawAppealLetterSurvivesBalanceGrowth() (gas: 9456610)\n[PASS] test_shrinkingBalanceStillUsesCurrentMinimumAndMaximum() (gas: 8289197)\n[PASS] test_siteAppealSurvivesBalanceGrowthAtOriginalMinimum() (gas: 8549036)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 205.79ms (71.29ms CPU time)\n\nRan 4 tests for test/AppealRounding.t.sol:AppealRoundingPleaZeroTest\n[PASS] testFuzz_minimumPleaAppealsThroughEveryLetterEntry(uint8,uint8) (runs: 32, μ: 9416445, ~: 9422688)\n[PASS] test_cappedMinimumSitePleaCanAppealAfterFeeSale() (gas: 9500725)\n[PASS] test_minimumSitePleaCanAppealAfterFeeSaleRounding() (gas: 9406068)\n[PASS] test_shareBandsAndFiftyPercentClampKeepTheirExistingRounding() (gas: 28059240)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 210.17ms (161.76ms CPU time)\n\nRan 4 tests for test/AppealRounding.t.sol:AppealRoundingTest\n[PASS] testFuzz_minimumPleaAppealsThroughEveryLetterEntry(uint8,uint8) (runs: 32, μ: 9417469, ~: 9422688)\n[PASS] test_cappedMinimumSitePleaCanAppealAfterFeeSale() (gas: 9500725)\n[PASS] test_minimumSitePleaCanAppealAfterFeeSaleRounding() (gas: 9406068)\n[PASS] test_shareBandsAndFiftyPercentClampKeepTheirExistingRounding() (gas: 28059240)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 222.52ms (180.91ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 11482748)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 9010703)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 5547006)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 4848270)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 4919753)\n[PASS] test_callbackFitsTheStipend() (gas: 7891791)\nLogs:\n  approve callback gas: 58946\n  deny callback gas: 83545\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 5387176)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 1181092)\n[PASS] test_cooldownAfterExecutedSell() (gas: 8165027)\n[PASS] test_failedAppealCanBeRetried() (gas: 11448646)\n[PASS] test_failureAfterExpireIsRefused() (gas: 4835854)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 7737247)\n[PASS] test_failureFitsTheMainnetGas() (gas: 4806771)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 4979345)\n[PASS] test_failureOnlyFromTheIntake() (gas: 4775312)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 56324)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 7720430)\n[PASS] test_onePendingPleaPerWallet() (gas: 4759166)\n[PASS] test_orientationIsPleaZero() (gas: 15963)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 7683900)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 4729131)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 4775167)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1465836)\n[PASS] test_refusalClearsThePleaToo() (gas: 4828671)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 7823151)\n[PASS] test_scoreBelowNeedDenies() (gas: 5022361)\n[PASS] test_sellWindowLapses() (gas: 7753363)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 4861596)\n[PASS] test_textFilter() (gas: 5212245)\n[PASS] test_wrongSignerIsRefused() (gas: 4825795)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 79.91ms (47.51ms CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 213498)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183970)\n[PASS] test_launcherAndInitAreOneShot() (gas: 1361643)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 331356)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 52.34ms (1.13ms CPU time)\n\nRan 8 tests for test/TribunalOracleBoundary.t.sol:TribunalOracleBoundaryTest\n[PASS] test_failedReplacementDoesNotVoidTheOldCaseOrTakeAnotherStake() (gas: 907223)\n[PASS] test_invalidAttestationsAreAtomicAndDoNotConsumeTheRequest() (gas: 6237208)\n[PASS] test_issuedAtToleratesExactlyFiveMinutesOfSignerClockDrift() (gas: 155110)\n[PASS] test_revertingCheckpointRollsBackBothTheTransferAndTheSettledFlag() (gas: 627702)\n[PASS] test_revertingRefundIsRetryableAndDoesNotBlockAnUnrelatedStake() (gas: 8238950)\n[PASS] test_signedValidityAndPendingDeadlineAreInclusiveAtTheirExactBoundaries() (gas: 224022)\n[PASS] test_unknownPaidFailureCannotVoidOurStake() (gas: 947289)\n[PASS] test_validTribunalSignatureOnSomebodyElsesPaidRequestCannotRuleOurCase() (gas: 3745975)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 55.43ms (20.90ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4122891, ~: 4121734)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 12126285)\n[PASS] test_deadCabalBuyWithoutARecipientSkipsTheCashback() (gas: 2078744)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1046221)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 12321881)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 8716024)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2173432)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 13712883)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1051804)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 10342701)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1240389)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 8909693)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 298.09ms (254.45ms CPU time)\n\nRan 4 tests for test/AppealRounding.t.sol:AppealRoundingPaidFeeTest\n[PASS] testFuzz_minimumPleaAppealsThroughEveryLetterEntry(uint8,uint8) (runs: 32, μ: 9379813, ~: 9386042)\n[PASS] test_cappedMinimumSitePleaCanAppealAfterFeeSale() (gas: 9464080)\n[PASS] test_minimumSitePleaCanAppealAfterFeeSaleRounding() (gas: 9369423)\n[PASS] test_shareBandsAndFiftyPercentClampKeepTheirExistingRounding() (gas: 27949305)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 308.01ms (267.97ms CPU time)\n\nRan 10 tests for test/TraderFallbackAdversarial.t.sol:TraderFallbackAdversarialPleaZeroTest\n[PASS] testFuzz_dirtyRouterReturnCannotBeTruncatedIntoATrader(uint96,bool) (runs: 128, μ: 441762, ~: 291653)\n[PASS] testFuzz_nonAddressLengthHookDataFallsBackToRouter(uint8) (runs: 128, μ: 791217, ~: 791122)\n[PASS] testFuzz_nonAddressLengthResponsesDoNotResolve(uint8,bool) (runs: 128, μ: 424703, ~: 301144)\n[PASS] test_everyExcludedRouterResponseHasNoRecipientFallbackToOrigin() (gas: 4998919)\n[PASS] test_gateSaleAlwaysNamesSellerEvenWhenRelayedByLetterboxRunner() (gas: 6763279)\n[PASS] test_hookDataTakesPriorityEvenWhenRouterCannotAnswer() (gas: 2652131)\n[PASS] test_msgSenderReceivesExactlyTheThirtyThousandGasBudget() (gas: 804139)\n[PASS] test_partialBuyWithoutTraderKeepsBothCashbackAndImdFeeSurplusForPool() (gas: 1272021)\n[PASS] test_revertingOutOfGasAndStateWritingRoutersCannotBlockDeadCabalBuys() (gas: 2066965)\n[PASS] test_successThenUnresolvedThenNewTraderDoesNotLeakTransientIdentity() (gas: 1621330)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 343.51ms (297.68ms CPU time)\n\nRan 21 tests for test/Tribunal.t.sol:TribunalTest\n[PASS] test_aStalePendingObjectionIsVoidedByTheNextObjector() (gas: 20532035)\n[PASS] test_aStalePendingObjectionNeverHoldsPastTheWindow() (gas: 17655746)\n[PASS] test_aSustainClosesTheCase() (gas: 9484918)\n[PASS] test_anExcludedSellersPleaCannotBeObjectedTo() (gas: 5881039)\n[PASS] test_atMostTwoRulingsFromDifferentWallets() (gas: 13741521)\n[PASS] test_callbackFitsTheIntakesGasBudget() (gas: 9314305)\nLogs:\n  gate verdict callback gas: 58946\n  tribunal ruling callback gas: 83738\n\n[PASS] test_executedAndLapsedApprovalsCanBeObjectedTo() (gas: 17353491)\n[PASS] test_expireByTimeAndByACompletedRequest() (gas: 16897280)\n[PASS] test_marginEdge() (gas: 16962869)\n[PASS] test_onlyApprovedPleasCanBeObjectedTo() (gas: 7940825)\n[PASS] test_overruledAboveTheOriginalKeepsTheOriginalScore() (gas: 9562182)\n[PASS] test_overruledObjectionLowersTheScoreToTheLowestPanelAndFeedsThePot() (gas: 9803461)\n[PASS] test_questionAndBody() (gas: 14846158)\n[PASS] test_rulingsNeverResetTheDeadMan() (gas: 9316222)\n[PASS] test_settleNeedsARuling() (gas: 9187935)\n[PASS] test_statusText() (gas: 17362497)\n[PASS] test_sustainedObjectionLeavesNoPointsAndReturnsTheStake() (gas: 9694599)\n[PASS] test_textRules() (gas: 9261635)\n[PASS] test_theSellerAndTheOwnersCannotObject() (gas: 5457198)\n[PASS] test_voidObjectionReturnsTheStakeAndFreesTheSlot() (gas: 13036523)\n[PASS] test_windowEdges() (gas: 12614186)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 153.78ms (99.06ms CPU time)\n\nRan 12 tests for test/AuditRun3.t.sol:AuditRun3Test\n[PASS] test_F1_appealLetterCannotRetryAnAppealTheOracleNeverAnswered() (gas: 16673819)\n[PASS] test_F2_aCapSizedAutoSellPleaCannotBeAppealedThroughTheLetterbox() (gas: 33839594)\n[PASS] test_F3_aBareCommandWordBecomesAPaidPlea() (gas: 112574)\n[PASS] test_aLetterboxDeployedByAnyoneElseHasNoPowers() (gas: 10397692)\n[PASS] test_autoSellCannotAcceptASpotPriceUnderTheSnapshotFloor() (gas: 6856381)\n[PASS] test_escrowsAfterTheCabalDies() (gas: 12953573)\n[PASS] test_feeSaleIsBoundedAndTheTipReturns() (gas: 5269804)\n[PASS] test_letterParsingEdgeCases() (gas: 21366900)\n[PASS] test_markerRuleUnchanged() (gas: 6385088)\n[PASS] test_oneCapSizedSaleMovesSpotUnderOnePercent() (gas: 27199208)\nLogs:\n  price impact of a 2.5M PLEA sale, bps: 87\n\n[PASS] test_oracleBodyIsValidJsonForHostileTexts() (gas: 26413773)\n[PASS] test_priceViewsEqualAFullRingScan() (gas: 47583126)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 358.38ms (328.02ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 4837699)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 236691)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 24134561)\n[PASS] test_closeSeasonPaysTheTopTen() (gas: 57228085)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 12010572)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 6686798)\n[PASS] test_onlyApprovedPleasScore() (gas: 4949449)\n[PASS] test_secondSeasonScoresSeparately() (gas: 44752546)\n[PASS] test_tiesRankTheEarlierPleaFirstAndALaterTieSlotsInBelow() (gas: 41128091)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 112745712)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 190.63ms (116.77ms CPU time)\n\nRan 10 tests for test/TraderFallbackAdversarial.t.sol:TraderFallbackAdversarialTest\n[PASS] testFuzz_dirtyRouterReturnCannotBeTruncatedIntoATrader(uint96,bool) (runs: 128, μ: 442037, ~: 291665)\n[PASS] testFuzz_nonAddressLengthHookDataFallsBackToRouter(uint8) (runs: 128, μ: 791595, ~: 791501)\n[PASS] testFuzz_nonAddressLengthResponsesDoNotResolve(uint8,bool) (runs: 128, μ: 425361, ~: 301156)\n[PASS] test_everyExcludedRouterResponseHasNoRecipientFallbackToOrigin() (gas: 5001325)\n[PASS] test_gateSaleAlwaysNamesSellerEvenWhenRelayedByLetterboxRunner() (gas: 6763342)\n[PASS] test_hookDataTakesPriorityEvenWhenRouterCannotAnswer() (gas: 2653984)\n[PASS] test_msgSenderReceivesExactlyTheThirtyThousandGasBudget() (gas: 804518)\n[PASS] test_partialBuyWithoutTraderKeepsBothCashbackAndImdFeeSurplusForPool() (gas: 1269798)\n[PASS] test_revertingOutOfGasAndStateWritingRoutersCannotBlockDeadCabalBuys() (gas: 2068670)\n[PASS] test_successThenUnresolvedThenNewTraderDoesNotLeakTransientIdentity() (gas: 1622616)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 420.98ms (396.52ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 13848610)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 14936779)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 13982996)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 18.53ms (12.43ms CPU time)\n\nRan 19 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1247163)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1697022)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1106230)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17982)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1686250)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1295502)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1659932)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 571756)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1103503)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 1930849)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1200233)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4565756)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 747890)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1818697)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34359685)\n[PASS] test_wallGuardIgnoresASellerChosenLimitReachedThroughAnEmptyPool() (gas: 2788162)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2762911)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16738672)\n[PASS] test_wallGuardStillDropsAtOnceToASellerChosenLimitInsideTheBand() (gas: 33243155)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 250.78ms (198.38ms CPU time)\n\nRan 5 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 13222864, ~: 13250381)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizes() (gas: 1072776)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 1026255)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 1026949)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 1033296)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 483.53ms (477.33ms CPU time)\n\nRan 2 tests for test/Letterbox.t.sol:LetterboxMainnetPathTest\n[PASS] test_letterBuysTheOracleFeeAndTheTipWithPlea() (gas: 9332529)\n[PASS] test_mintingTheFeeIsRefusedOnMainnet() (gas: 959481)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 60.66ms (4.54ms CPU time)\n\nRan 20 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1247163)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1697044)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1106230)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17982)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1686250)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1295524)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1659932)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 571778)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1103525)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 1930849)\n[PASS] test_orientationIsPleaZero() (gas: 15862)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1200233)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4565756)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 747890)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1818719)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34359685)\n[PASS] test_wallGuardIgnoresASellerChosenLimitReachedThroughAnEmptyPool() (gas: 2788162)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2762954)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16738672)\n[PASS] test_wallGuardStillDropsAtOnceToASellerChosenLimitInsideTheBand() (gas: 33243177)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 249.48ms (227.80ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:PostLaunchTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 11196352)\n[PASS] test_committedLetterboxDeploysLater() (gas: 10381801)\nLogs:\n  deployLetterbox transaction gas: 5381041\n\n[PASS] test_committedTribunalDeploysLater() (gas: 9510846)\nLogs:\n  deployTribunal transaction gas: 4811086\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 98.85ms (81.62ms CPU time)\n\nRan 5 tests for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 52960001)\nLogs:\n  five-contract launch transaction gas through IMD's factory: 13223299\n  gas limit with IMD's headroom: 16132424\n  margin to the 16,777,216 cap: 644792\n\n[PASS] test_launchJsonCommitsToThisLetterbox() (gas: 33528)\n[PASS] test_launchJsonCommitsToThisTribunal() (gas: 29294)\n[PASS] test_launchJsonEncodesOracleMintFlagAsStaticWord() (gas: 11342)\n[PASS] test_launchJsonNotesFitTheManifestCap() (gas: 9550)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 137.39ms (133.35ms CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 23956, ~: 24085)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 730520)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42983)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 36.01ms (8.61ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 4837173)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 236713)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1543151)\n[PASS] test_closeSeasonPaysTheTopTen() (gas: 42444327)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1253543)\n[PASS] test_fastFullCycle() (gas: 78094534)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 6686820)\n[PASS] test_onlyApprovedPleasScore() (gas: 4946624)\n[PASS] test_secondSeasonScoresSeparately() (gas: 47715112)\n[PASS] test_tiesRankTheEarlierPleaFirstAndALaterTieSlotsInBelow() (gas: 3256967)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 118684516)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 256.84ms (153.10ms CPU time)\n\nRan 22 tests for test/Tribunal.t.sol:TribunalMainnetFeeTest\n[PASS] test_aStalePendingObjectionIsVoidedByTheNextObjector() (gas: 20432351)\n[PASS] test_aStalePendingObjectionNeverHoldsPastTheWindow() (gas: 17609196)\n[PASS] test_aSustainClosesTheCase() (gas: 9427306)\n[PASS] test_anExcludedSellersPleaCannotBeObjectedTo() (gas: 5856652)\n[PASS] test_atMostTwoRulingsFromDifferentWallets() (gas: 13650644)\n[PASS] test_callbackFitsTheIntakesGasBudget() (gas: 9281102)\nLogs:\n  gate verdict callback gas: 58946\n  tribunal ruling callback gas: 83738\n\n[PASS] test_executedAndLapsedApprovalsCanBeObjectedTo() (gas: 17309441)\n[PASS] test_expireByTimeAndByACompletedRequest() (gas: 16850752)\n[PASS] test_marginEdge() (gas: 16916319)\n[PASS] test_onlyApprovedPleasCanBeObjectedTo() (gas: 7907398)\n[PASS] test_overruledAboveTheOriginalKeepsTheOriginalScore() (gas: 9528979)\n[PASS] test_overruledObjectionLowersTheScoreToTheLowestPanelAndFeedsThePot() (gas: 9770258)\n[PASS] test_questionAndBody() (gas: 14812954)\n[PASS] test_rulingsNeverResetTheDeadMan() (gas: 9283019)\n[PASS] test_settleNeedsARuling() (gas: 9154710)\n[PASS] test_statusText() (gas: 17315947)\n[PASS] test_sustainedObjectionLeavesNoPointsAndReturnsTheStake() (gas: 9653644)\n[PASS] test_textRules() (gas: 9252841)\n[PASS] test_theObjectorPaysFeeAndStakeInImd() (gas: 9143431)\n[PASS] test_theSellerAndTheOwnersCannotObject() (gas: 5417380)\n[PASS] test_voidObjectionReturnsTheStakeAndFreesTheSlot() (gas: 12989996)\n[PASS] test_windowEdges() (gas: 12576452)\nSuite result: ok. 22 passed; 0 failed; 0 skipped; finished in 389.00ms (127.55ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4125325, ~: 4123766)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 12126722)\n[PASS] test_deadCabalBuyWithoutARecipientSkipsTheCashback() (gas: 2077738)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1046909)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 12322318)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 8716461)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2173568)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 13715000)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1052602)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 10343814)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1240830)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 8910130)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 499.68ms (456.51ms CPU time)\n\nRan 27 tests for test/Letterbox.t.sol:LetterboxTest\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 32, μ: 323783, ~: 322385)\n[PASS] test_aBareCommandWordIsNotAPlea() (gas: 6055501)\n[PASS] test_aLapsedApprovalSettlesAndStillCounts() (gas: 5614499)\n[PASS] test_anAppealOfAFloorSizedLetterIsNotRefused() (gas: 10658191)\n[PASS] test_anyoneDeliversAnApprovalForTheTip() (gas: 6234329)\n[PASS] test_appealByLetterKeepsTheOriginalShareAndPaysTheWall() (gas: 10396078)\n[PASS] test_appealLetterRetriesAnAppealTheOracleNeverAnswered() (gas: 21821555)\n[PASS] test_autoSellFeeOnlyOnASaleAndNeverMoreThanHalfOfIt() (gas: 9884956)\n[PASS] test_deadCabalRefusesLettersButSettles() (gas: 5383510)\n[PASS] test_deliverNeedsAnApprovalInsideTheWindowAndTheMinimum() (gas: 6140911)\n[PASS] test_deployLetterboxRefusesOtherCode() (gas: 16927004)\n[PASS] test_expiredPendingPleaSettlesAfterTwentyMinutes() (gas: 5251320)\n[PASS] test_explorerLetterIsTheSameAsARawLetter() (gas: 13758390)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 1334849)\n[PASS] test_leaderboardListsTheSeason() (gas: 6499621)\n[PASS] test_letterCommandsParse() (gas: 8886858)\n[PASS] test_letterPleadsTenPercentPaysFeesInPleaAndEscrows() (gas: 5334066)\n[PASS] test_letterRefusesEthTinyBalancesAndBadText() (gas: 1386904)\n[PASS] test_letterboxIsDeployedOnceFromTheCommittedCode() (gas: 502901)\n[PASS] test_noFunctionIdCanStartALetter() (gas: 888710)\n[PASS] test_noVerdictSettlesAtOnceAndTheNextLetterSettlesTheOldOne() (gas: 8715138)\n[PASS] test_settleReturnsEscrowAndTipAfterADenial() (gas: 5605949)\n[PASS] test_siteAutoSellPleadsAnyValidAmount() (gas: 10240260)\n[PASS] test_statusTellsEachState() (gas: 10360299)\n[PASS] test_strangersCannotUseTheCourtEntryPoints() (gas: 210979)\n[PASS] test_theGateRefusesAManualSaleOfAnEscrowedPlea() (gas: 5340613)\n[PASS] test_theSellLetterIsTheWritersOwnSale() (gas: 6128009)\nSuite result: ok. 27 passed; 0 failed; 0 skipped; finished in 273.27ms (186.84ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 11482726)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 9010657)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 5547006)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 4848248)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 4919731)\n[PASS] test_callbackFitsTheStipend() (gas: 7891769)\nLogs:\n  approve callback gas: 58946\n  deny callback gas: 83545\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 5387176)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 1181092)\n[PASS] test_cooldownAfterExecutedSell() (gas: 8165005)\n[PASS] test_failedAppealCanBeRetried() (gas: 11448624)\n[PASS] test_failureAfterExpireIsRefused() (gas: 4835832)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 7737247)\n[PASS] test_failureFitsTheMainnetGas() (gas: 4806749)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 4979345)\n[PASS] test_failureOnlyFromTheIntake() (gas: 4775312)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 56324)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 7720430)\n[PASS] test_onePendingPleaPerWallet() (gas: 4759166)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 7683878)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 4729109)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 4775145)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1465814)\n[PASS] test_refusalClearsThePleaToo() (gas: 4828671)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 7823129)\n[PASS] test_scoreBelowNeedDenies() (gas: 5022361)\n[PASS] test_sellWindowLapses() (gas: 7753363)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 4861574)\n[PASS] test_textFilter() (gas: 5212245)\n[PASS] test_wrongSignerIsRefused() (gas: 4825795)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 140.15ms (87.06ms CPU time)\n\nRan 11 tests for test/TribunalAdversarial.t.sol:TribunalAdversarialTest\n[PASS] testFuzz_stakeAccountingHolds(uint8[6],uint8) (runs: 32, μ: 53293022, ~: 53253042)\n[PASS] test_aFailureAfterARulingChangesNothing() (gas: 9347710)\n[PASS] test_aLateRulingIsRefused() (gas: 9353175)\n[PASS] test_aReplayedAttestationIsRefused() (gas: 16823902)\n[PASS] test_agreedNumbers() (gas: 16099)\n[PASS] test_objectingNeedsTheStakeAndTheFee() (gas: 4916306)\n[PASS] test_onlyTheIntakeMayDeliverARuling() (gas: 9226511)\n[PASS] test_theGatesSignatureIsWorthlessHereAndTheReverse() (gas: 12255558)\n[PASS] test_theStakeCannotBeDrainedByTheGateOrByDoubleSettling() (gas: 17118041)\n[PASS] test_unknownRequestsAreRefused() (gas: 9211924)\n[PASS] test_wrongPanelsAndScoresAreRefused() (gas: 9496856)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 1.03s (947.57ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1147733, ~: 1142577)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1196792)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 653281)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135213)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 63872)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1309199)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2553394)\n[PASS] test_rebalancePaysNoTipAndDeploysTheWholeReserve() (gas: 466813)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 137962)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290419)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 601040)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 649.85ms (639.13ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1147498, ~: 1142375)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1196484)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 653553)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134385)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 63932)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1309599)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2554196)\n[PASS] test_rebalancePaysNoTipAndDeploysTheWholeReserve() (gas: 462383)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 137962)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290443)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 601728)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 667.93ms (631.62ms CPU time)\n\nRan 6 tests for test/JudgeFindings.t.sol:JudgeFindingsTest\n[PASS] test_aSmallWriterCanAppealByLetter() (gas: 8092874)\n[PASS] test_appealAutoOfAMinimumPleaStaysAtTheMinimum() (gas: 8761890)\n[PASS] test_appealLetterKeepsTheOriginalShareBand() (gas: 7942408)\n[PASS] test_deliverAfterACrashCapsTheFeeAtTheSale() (gas: 380261283)\n[PASS] test_fiftyPercentCeilingAndShareBands() (gas: 3903309)\n[PASS] test_ownershipTransferNeedsAcceptanceSoALeaderKeepsThePrize() (gas: 6804421)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 846.68ms (515.59ms CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 97165022)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 101585345)\nLogs:\n  launch (5 contracts + intake mock): 12531874\n  deployLetterbox: 5024892\n  deployHook: 5633077\n  seed: 615596\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 12649546)\n[PASS] test_ownerMaySeedEarly() (gas: 96367222)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 96466073)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 392.10ms (452.59ms CPU time)\n\nRan 7 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 1957221, ~: 1956406)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5440421, ~: 5450582)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1153411)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 779268)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 605232)\n[PASS] test_prizesRequireSixtyPoints() (gas: 1392343)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 934773)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 1.42s (1.37s CPU time)\n\nRan 6 tests for test/JudgeFindings.t.sol:JudgeFindingsPleaZeroTest\n[PASS] test_aSmallWriterCanAppealByLetter() (gas: 8092874)\n[PASS] test_appealAutoOfAMinimumPleaStaysAtTheMinimum() (gas: 8761890)\n[PASS] test_appealLetterKeepsTheOriginalShareBand() (gas: 7942408)\n[PASS] test_deliverAfterACrashCapsTheFeeAtTheSale() (gas: 380261283)\n[PASS] test_fiftyPercentCeilingAndShareBands() (gas: 3903309)\n[PASS] test_ownershipTransferNeedsAcceptanceSoALeaderKeepsThePrize() (gas: 6804421)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 952.51ms (729.82ms CPU time)\n\nRan 4 tests for test/TribunalTextProperties.t.sol:TribunalTextPropertiesTest\n[PASS] testFuzz_markerPrefixesAreRejectedBeforeAnyPayment(uint16,uint16,bool) (runs: 256, μ: 4865318, ~: 4861172)\n[PASS] testFuzz_utf8AndEscapesSurviveTheOracleBody(bytes32,uint16) (runs: 128, μ: 11724021, ~: 11542442)\n[PASS] test_malformedUtf8ControlsAndInvisibleCharactersAreRejected() (gas: 5560851)\n[PASS] test_oneByteAnd280BytesAcceptButZeroAnd281Reject() (gas: 13477854)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.43s (1.71s CPU time)\n\nRan 13 tests for test/HookRevision.t.sol:HookRevisionPleaIsZeroTest\n[PASS] testFuzz_aGreedyStackerCannotReachTheWallReserve(uint256,uint256) (runs: 32, μ: 1314439, ~: 1314513)\n[PASS] testFuzz_aLimitAnywhereInTheLiquidityFreeRegionNeverMovesTheGuard(uint256,uint256) (runs: 32, μ: 2458304, ~: 2364162)\n[PASS] testFuzz_aLimitInsideTheLiquidMarketBandMovesTheGuardToTheStopTick(uint256) (runs: 32, μ: 5203759, ~: 5203763)\n[PASS] testFuzz_aSameHourPumpCannotMoveAPleasFactScore(uint256) (runs: 32, μ: 2704700, ~: 2702332)\n[PASS] testFuzz_repeatedDrainsToTheExtremeNeverMoveTheGuard(uint8) (runs: 32, μ: 4141759, ~: 3662083)\n[PASS] testFuzz_successfulCreditsNeverAccumulateAllowance(uint256,uint256,uint256) (runs: 32, μ: 2149568, ~: 2158660)\n[PASS] testFuzz_theGuardClimbsAtMost400TicksADay(uint256,uint256,uint8) (runs: 32, μ: 2621662, ~: 2340359)\n[PASS] testFuzz_theHoursFirstTradeRecordsThePriceItFoundWhateverItsSize(uint256,uint256) (runs: 32, μ: 2241953, ~: 2236178)\n[PASS] test_aCreditThatBurnsAllItsGasLeavesNoAllowance() (gas: 1593909)\n[PASS] test_anHourOpeningSellRecordsThePriceItFound() (gas: 1848113)\n[PASS] test_emptyRegionBitmapBoundaryStopsAtTheExactPriceLimit() (gas: 2289203)\n[PASS] test_orientationIsPleaZero() (gas: 15620)\n[PASS] test_wallGuardFollowsASellThatStopsWhereTheMarketHasLiquidity() (gas: 6114648)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 1.03s (1.12s CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 4837721)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 236802)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 24134583)\n[PASS] test_closeSeasonPaysTheTopTen() (gas: 57228085)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 12010572)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 6686798)\n[PASS] test_onlyApprovedPleasScore() (gas: 4949471)\n[PASS] test_orientationIsPleaZero() (gas: 15724)\n[PASS] test_secondSeasonScoresSeparately() (gas: 44752546)\n[PASS] test_tiesRankTheEarlierPleaFirstAndALaterTieSlotsInBelow() (gas: 41128113)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 112745734)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 1.30s (129.29ms CPU time)\n\nRan 18 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 4997035, ~: 5000019)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 5067128, ~: 4996376)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 5088414, ~: 5088328)\n[PASS] test_aWhaleCanStillPleadTheMaximum() (gas: 5272082)\n[PASS] test_amountLimitsFailBeforeChargingAndOnePercentIsTheMinimum() (gas: 5021582)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 8311831)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 8813634)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 7991537)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 5022662)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 4918709)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 7768194)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 7961424)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 88179)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 4908400)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 958197)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 5023481)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 5440164)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 6094692)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 1.27s (1.58s CPU time)\n\nRan 12 tests for test/HookRevision.t.sol:HookRevisionTest\n[PASS] testFuzz_aGreedyStackerCannotReachTheWallReserve(uint256,uint256) (runs: 64, μ: 1314345, ~: 1314399)\n[PASS] testFuzz_aLimitAnywhereInTheLiquidityFreeRegionNeverMovesTheGuard(uint256,uint256) (runs: 64, μ: 2464048, ~: 2392805)\n[PASS] testFuzz_aLimitInsideTheLiquidMarketBandMovesTheGuardToTheStopTick(uint256) (runs: 64, μ: 5203701, ~: 5203741)\n[PASS] testFuzz_aSameHourPumpCannotMoveAPleasFactScore(uint256) (runs: 64, μ: 2705901, ~: 2708265)\n[PASS] testFuzz_repeatedDrainsToTheExtremeNeverMoveTheGuard(uint8) (runs: 64, μ: 4207351, ~: 3662061)\n[PASS] testFuzz_successfulCreditsNeverAccumulateAllowance(uint256,uint256,uint256) (runs: 64, μ: 2145772, ~: 2139956)\n[PASS] testFuzz_theGuardClimbsAtMost400TicksADay(uint256,uint256,uint8) (runs: 64, μ: 2687047, ~: 2721776)\n[PASS] testFuzz_theHoursFirstTradeRecordsThePriceItFoundWhateverItsSize(uint256,uint256) (runs: 64, μ: 2241390, ~: 2236156)\n[PASS] test_aCreditThatBurnsAllItsGasLeavesNoAllowance() (gas: 1593887)\n[PASS] test_anHourOpeningSellRecordsThePriceItFound() (gas: 1848091)\n[PASS] test_emptyRegionBitmapBoundaryStopsAtTheExactPriceLimit() (gas: 2289181)\n[PASS] test_wallGuardFollowsASellThatStopsWhereTheMarketHasLiquidity() (gas: 6114626)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 1.67s (2.46s CPU time)\n\nRan 11 tests for test/BonusInvariant.t.sol:BonusEdgeTest\n[PASS] testFuzz_anyRankingPaysPlusBurnsExactlyTheBonus(uint256) (runs: 512, μ: 4453822, ~: 4196811)\n[PASS] test_bonusPaidAfterDeathIsFreelyTransferable() (gas: 866391)\n[PASS] test_closeWithinTheGraceHourIsRefused() (gas: 825201)\n[PASS] test_closingTwiceCannotPayASeasonsBonusTwice() (gas: 816904)\n[PASS] test_deathBeforeTradingSeasonZeroEndsBurnsEverythingButSeasonZero() (gas: 999895)\n[PASS] test_eleventhWalletRanksAfterTheTenAndIsPaidEleventh() (gas: 5890616)\n[PASS] test_gateAsSellerForfeitsWhileWatchedButIsPaidAfterDeath() (gas: 1520300)\n[PASS] test_lateApprovalListedAtCloseStillEarnsTheBonus() (gas: 720584)\n[PASS] test_onlyTheBestThreePleasCount() (gas: 1819213)\n[PASS] test_sixtyPointsQualifiesFiftyNineDoesNot() (gas: 1664786)\n[PASS] test_tenQualifiersReceiveTheirTenSharesAndTheRestBurns() (gas: 5669606)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 1.63s (1.64s CPU time)\n\nRan 5 tests for test/GasPass.t.sol:GasPassTest\n[PASS] testFuzz_bodyEqualsEscapingTheWholeQuestion(uint256) (runs: 500, μ: 5663320, ~: 5655922)\n[PASS] testFuzz_textCheckMatchesTheReferenceRules(uint256) (runs: 5000, μ: 1023339, ~: 84984)\n[PASS] test_bodyEqualsEscapingTheWholeQuestion() (gas: 13043358)\n[PASS] test_priceViewsMatchAFullScan() (gas: 128850699)\n[PASS] test_textCheckEdgeCases() (gas: 54380836)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 1.67s (2.32s CPU time)\n\nRan 3 tests for test/GateFailureInvariant.t.sol:GateFailureInvariantTest\n[PASS]\nGateFailureInvariantTest invariants:\n[PASS] invariant_gateHoldsNothing\n[PASS] invariant_onlyVerdictsMoveTheClock\n[PASS] invariant_pendingBookkeepingIsConsistent\n GateFailureInvariantTest invariants (runs: 64, calls: 4096, reverts: 0)\n\n╭--------------------+---------------+-------+---------+----------╮\n| Contract           | Selector      | Calls | Reverts | Discards |\n+=================================================================+\n| GateFailureHandler | advance       | 435   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | answer        | 454   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | appeal        | 451   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | directFailure | 442   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | execute       | 458   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | expire        | 483   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | fail          | 440   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | plead         | 489   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | strangerFails | 444   | 0       | 0        |\n╰--------------------+---------------+-------+---------+----------╯\n\n[PASS] test_failureAfterDeathDoesNotReviveTheCabal() (gas: 4808014)\n[PASS] test_handlerReachesFailuresVerdictsAndAppeals() (gas: 18852923)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 2.18s (2.10s CPU time)\n\nRan 2 tests for test/BonusInvariant.t.sol:BonusInvariantTest\n[PASS]\nBonusInvariantTest invariants:\n[PASS] invariant_bonusIsHeldPaidOrBurned\n[PASS] invariant_flushedSeasonsStayFinished\n[PASS] invariant_openBonusSeasonsStayFunded\n[PASS] invariant_supplyFallsOnlyByTheBurnedBonus\n BonusInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+----------+-------+---------+----------╮\n| Contract     | Selector | Calls | Reverts | Discards |\n+======================================================+\n| BonusHandler | advance  | 1117  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | approve  | 1164  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | close    | 1178  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | die      | 1187  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | donate   | 1199  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | flush    | 1163  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | pull     | 1184  | 0       | 0        |\n╰--------------+----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesPaidClosesDeathAndFlush() (gas: 2525744)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.83s (2.82s CPU time)\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 1032  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 1042  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 1057  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 1046  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 1024  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 968   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 989   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 1034  | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.19s (3.18s CPU time)\n\nRan 2 tests for test/LetterboxInvariant.t.sol:LetterboxInvariantTest\n[PASS]\nLetterboxInvariantTest invariants:\n[PASS] invariant_escrowsMatchTheirPleas\n[PASS] invariant_everyWritersPleaIsAccountedFor\n[PASS] invariant_holdsExactlyTheOpenEscrowsAndTips\n[PASS] invariant_noStepBrokeAnExpectation\n LetterboxInvariantTest invariants (runs: 64, calls: 5120, reverts: 0)\n\n╭------------------+----------+-------+---------+----------╮\n| Contract         | Selector | Calls | Reverts | Discards |\n+==========================================================+\n| LetterboxHandler | advance  | 537   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | answer   | 575   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | appeal   | 573   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | deliver  | 591   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | fail     | 533   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | poke     | 560   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | sell     | 570   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | settle   | 586   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | write    | 595   | 0       | 0        |\n╰------------------+----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesEveryPath() (gas: 26600694)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.38s (4.31s CPU time)\n\nRan 4 tests for test/OwnershipTransitionInvariant.t.sol:OwnershipTransitionInvariantTest\n[PASS]\nOwnershipTransitionInvariantTest invariants:\n[PASS] invariant_onlyAcceptedTransfersChangeOwnerOrAllowlistAuthority\n[PASS] invariant_ownershipChangesCannotMoveOrDuplicateCustodiedPrizes\n OwnershipTransitionInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------------------------+-------------+-------+---------+----------╮\n| Contract                   | Selector    | Calls | Reverts | Discards |\n+=======================================================================+\n| OwnershipTransitionHandler | accept      | 4148  | 0       | 0        |\n|----------------------------+-------------+-------+---------+----------|\n| OwnershipTransitionHandler | allow       | 4109  | 0       | 0        |\n|----------------------------+-------------+-------+---------+----------|\n| OwnershipTransitionHandler | closePrizes | 4010  | 0       | 0        |\n|----------------------------+-------------+-------+---------+----------|\n| OwnershipTransitionHandler | nominate    | 4117  | 0       | 0        |\n╰----------------------------+-------------+-------+---------+----------╯\n\n[PASS] test_cancelledNomineeCannotAcceptAndBothLeadersKeepTheirPrizes() (gas: 923061)\n[PASS] test_renounceClearsNominationAndDoesNotLetFormerNomineeClaimAuthority() (gas: 1148987)\n[PASS] test_replacedNomineeCannotAcceptAndNewOwnerAloneLosesTheirPrize() (gas: 1186736)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 4.57s (4.56s CPU time)\n\nRan 2 tests for test/LetterboxInvariant.t.sol:LetterboxMainnetInvariantTest\n[PASS]\nLetterboxMainnetInvariantTest invariants:\n[PASS] invariant_escrowsMatchTheirPleas\n[PASS] invariant_everyWritersPleaIsAccountedFor\n[PASS] invariant_holdsExactlyTheOpenEscrowsAndTips\n[PASS] invariant_noStepBrokeAnExpectation\n LetterboxMainnetInvariantTest invariants (runs: 64, calls: 5120, reverts: 0)\n\n╭------------------+----------+-------+---------+----------╮\n| Contract         | Selector | Calls | Reverts | Discards |\n+==========================================================+\n| LetterboxHandler | advance  | 537   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | answer   | 575   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | appeal   | 573   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | deliver  | 591   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | fail     | 533   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | poke     | 560   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | sell     | 570   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | settle   | 586   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | write    | 595   | 0       | 0        |\n╰------------------+----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesEveryPath() (gas: 26501897)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.68s (4.62s CPU time)\n\nRan 2 tests for test/TraderAttributionInvariant.t.sol:TraderAttributionInvariantPleaZeroTest\n[PASS]\nTraderAttributionInvariantPleaZeroTest invariants:\n[PASS] invariant_infrastructureNeverReceivesTraderCredit\n[PASS] invariant_supplyAndPoolReserveRemainBacked\n[PASS] invariant_tokensAndBuyRecordsFollowTheirIndependentRecipients\n TraderAttributionInvariantPleaZeroTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------------------+------------+-------+---------+----------╮\n| Contract                 | Selector   | Calls | Reverts | Discards |\n+====================================================================+\n| TraderAttributionHandler | advance    | 2668  | 0       | 0        |\n|--------------------------+------------+-------+---------+----------|\n| TraderAttributionHandler | buy        | 2729  | 0       | 0        |\n|--------------------------+------------+-------+---------+----------|\n| TraderAttributionHandler | pauseVault | 2795  | 0       | 0        |\n╰--------------------------+------------+-------+---------+----------╯\n\n[PASS] test_handlerExercisesFallbacksDeathAndPlainCashback() (gas: 4082613)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.88s (4.86s CPU time)\n\nRan 2 tests for test/TraderAttributionInvariant.t.sol:TraderAttributionInvariantTest\n[PASS]\nTraderAttributionInvariantTest invariants:\n[PASS] invariant_infrastructureNeverReceivesTraderCredit\n[PASS] invariant_supplyAndPoolReserveRemainBacked\n[PASS] invariant_tokensAndBuyRecordsFollowTheirIndependentRecipients\n TraderAttributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------------------+------------+-------+---------+----------╮\n| Contract                 | Selector   | Calls | Reverts | Discards |\n+====================================================================+\n| TraderAttributionHandler | advance    | 2668  | 0       | 0        |\n|--------------------------+------------+-------+---------+----------|\n| TraderAttributionHandler | buy        | 2729  | 0       | 0        |\n|--------------------------+------------+-------+---------+----------|\n| TraderAttributionHandler | pauseVault | 2795  | 0       | 0        |\n╰--------------------------+------------+-------+---------+----------╯\n\n[PASS] test_handlerExercisesFallbacksDeathAndPlainCashback() (gas: 4084653)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 5.32s (5.29s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_stackerHoldsNoStandingAllowanceOnTheHooksImd\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 759   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 768   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 777   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 743   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 703   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 782   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 695   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 738   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 729   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2946744, ~: 2955857)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 9227904)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 6.84s (6.94s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[PASS]\nTradingPleaZeroInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_stackerHoldsNoStandingAllowanceOnTheHooksImd\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingPleaZeroInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 759   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 768   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 777   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 743   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 703   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 782   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 695   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 738   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 729   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2945928, ~: 2955041)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 9232754)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 6.98s (7.17s CPU time)\n\nRan 2 tests for test/TribunalInvariant.t.sol:TribunalInvariantTest\n[PASS]\nTribunalInvariantTest invariants:\n[PASS] invariant_caseTransitionsAndSalesRemainIndependent\n[PASS] invariant_onlyFinalEligibleScoresBecomePoints\n[PASS] invariant_stakesAndFeesAreConserved\n TribunalInvariantTest invariants (runs: 64, calls: 6144, reverts: 0)\n\n╭-------------------------+--------------+-------+---------+----------╮\n| Contract                | Selector     | Calls | Reverts | Discards |\n+=====================================================================+\n| TribunalSequenceHandler | advance      | 594   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | approveFresh | 545   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | close        | 533   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | donate       | 579   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | expire       | 576   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | fail         | 542   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | file         | 563   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | record       | 566   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | rule         | 569   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | sell         | 561   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | settle       | 516   | 0       | 0        |\n╰-------------------------+--------------+-------+---------+----------╯\n\n[PASS] test_handlerReachesAllEndingsWithoutVacuity() (gas: 22996029)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 7.00s (6.98s CPU time)\n\nRan 2 tests for test/TribunalInvariant.t.sol:TribunalPaidFeeInvariantTest\n[PASS]\nTribunalPaidFeeInvariantTest invariants:\n[PASS] invariant_caseTransitionsAndSalesRemainIndependent\n[PASS] invariant_onlyFinalEligibleScoresBecomePoints\n[PASS] invariant_stakesAndFeesAreConserved\n TribunalPaidFeeInvariantTest invariants (runs: 64, calls: 6144, reverts: 0)\n\n╭-------------------------+--------------+-------+---------+----------╮\n| Contract                | Selector     | Calls | Reverts | Discards |\n+=====================================================================+\n| TribunalSequenceHandler | advance      | 594   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | approveFresh | 545   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | close        | 533   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | donate       | 579   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | expire       | 576   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | fail         | 542   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | file         | 563   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | record       | 566   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | rule         | 569   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | sell         | 561   | 0       | 0        |\n|-------------------------+--------------+-------+---------+----------|\n| TribunalSequenceHandler | settle       | 516   | 0       | 0        |\n╰-------------------------+--------------+-------+---------+----------╯\n\n[PASS] test_handlerReachesAllEndingsWithoutVacuity() (gas: 23023224)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 7.23s (7.17s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 831   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 819   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 810   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 814   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 877   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 786   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 773   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 867   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 857   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 758   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 3935480)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 4849403)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 16.06s (16.07s CPU time)\n\nRan 72 test suites in 16.15s (99.63s CPU time): 570 tests passed, 0 failed, 2 skipped (572 total tests)\n","passed":true},{"durationMs":205,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.appealFor(address,uint256,uint256,uint256,string,uint8,uint256,uint256)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.executeSellFor(uint256,uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitFor(address,uint256,uint256,string,uint8,uint256,uint256)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Letterbox.appealAuto(uint256,string)\",\"Letterbox.deliver(uint256)\",\"Letterbox.fallback()\",\"Letterbox.letter(string)\",\"Letterbox.plead(uint256,string)\",\"Letterbox.setName(string)\",\"Letterbox.settle(uint256)\",\"PLEA.acceptOwnership()\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.courtTake(address,uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address)\",\"PLEA.setLetterbox(address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.deployLetterbox(bytes)\",\"PleaLaunch.deployTribunal(bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.checkpointObjection(uint256,uint256)\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\",\"Tribunal.expire(uint256)\",\"Tribunal.object(uint256,string)\",\"Tribunal.onObjectionFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Tribunal.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Tribunal.settle(uint256)\"],\"files\":{\".gitignore\":4,\"ADAPTATION.md\":50,\"OBJECTIONS.md\":339,\"README.md\":295,\"foundry.toml\":25,\"launch.json\":57,\"remappings.txt\":4,\"script/Deploy.s.sol\":79,\"script/DeployLetterbox.s.sol\":22,\"script/DeployTribunal.s.sol\":22,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":829,\"src/Letterbox.sol\":697,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":151,\"src/PleaDistributor.sol\":49,\"src/PleaHook.sol\":1062,\"src/PleaLaunch.sol\":186,\"src/Seasons.sol\":432,\"src/Tribunal.sol\":527,\"src/interfaces/IPleaParts.sol\":75,\"src/interfaces/IStacker.sol\":12,\"test/AppealRounding.t.sol\":140,\"test/ArtifactDeployment.t.sol\":59,\"test/AuditImported.t.sol\":142,\"test/AuditRevision.t.sol\":277,\"test/AuditRun3.t.sol\":393,\"test/AuditRun5.t.sol\":186,\"test/BonusInvariant.t.sol\":539,\"test/DistributorAdversarial.t.sol\":340,\"test/GasPass.t.sol\":341,\"test/Gate.t.sol\":409,\"test/GateAdversarial.t.sol\":400,\"test/GateFailureInvariant.t.sol\":330,\"test/Hook.t.sol\":357,\"test/HookAdversarial.t.sol\":256,\"test/HookRevision.t.sol\":392,\"test/JudgeFindings.t.sol\":217,\"test/Launch.t.sol\":173,\"test/LaunchManifest.t.sol\":367,\"test/Letterbox.t.sol\":818,\"test/LetterboxInvariant.t.sol\":441,\"test/ManifestInput.t.sol\":84,\"test/OracleConformance.t.sol\":116,\"test/OracleReplay.t.sol\":60,\"test/Orientation.t.sol\":58,\"test/OwnershipTransitionInvariant.t.sol\":238,\"test/SeasonAdversarial.t.sol\":211,\"test/SeasonFunds.t.sol\":349,\"test/SeasonInvariant.t.sol\":346,\"test/SeasonRanking.t.sol\":174,\"test/Seasons.t.sol\":287,\"test/Token.t.sol\":80,\"test/TraderAttributionInvariant.t.sol\":287,\"test/TraderFallbackAdversarial.t.sol\":307,\"test/TraderResolution.t.sol\":223,\"test/TraderResolverBoundary.t.sol\":126,\"test/TradingInvariant.t.sol\":493,\"test/Tribunal.t.sol\":484,\"test/TribunalAdversarial.t.sol\":225,\"test/TribunalInvariant.t.sol\":585,\"test/TribunalOracleBoundary.t.sol\":334,\"test/TribunalSeasons.t.sol\":300,\"test/TribunalStanding.t.sol\":217,\"test/TribunalTextProperties.t.sol\":181,\"test/fork/ForkMainnet.t.sol\":390,\"test/fork/ForkTestnet.t.sol\":867,\"test/utils/AdversarialTraderRouter.sol\":38,\"test/utils/ArtifactDeployment.sol\":23,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":318,\"test/utils/Mocks.sol\":324,\"test/utils/SeasonModel.sol\":117,\"test/utils/SepoliaFixture.sol\":36},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"758603b2150c53a9e25fc3057588c5afbbf1ec8cfce19cd263fa95c0e4cf84dc","verifiedTreeHash":"14213c65c452e6d171b8c6c6b0317ea4343b8f33","verifierVersion":"0.1.0+67c588fa"},{"checks":[{"durationMs":254415,"exitCode":0,"name":"build","output":"Compiling 161 files with Solc 0.8.26\nSolc 0.8.26 finished in 254.25s\nCompiler run successful with warnings:\nWarning (8760): This declaration has the same name as another declaration.\n   --> src/Tribunal.sol:319:9:\n    |\n319 |         uint8 status,\n    |         ^^^^^^^^^^^^\nNote: The other declaration is here:\n   --> src/Tribunal.sol:198:5:\n    |\n198 |     function status(uint256 pleaId) external view returns (string memory) {\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/Tribunal.sol:357:53:\n    |\n357 |     function _void(uint256 id, Objection storage o, uint8 status, bytes32 reason) internal {\n    |                                                     ^^^^^^^^^^^^\nNote: The other declaration is here:\n   --> src/Tribunal.sol:198:5:\n    |\n198 |     function status(uint256 pleaId) external view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> src/Seasons.sol:387:58:\n    |\n387 |     function _owners() internal view returns (address a, address b, address c) {\n    |                                                          ^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> src/CabalGate.sol:710:5:\n    |\n710 |     function _text(string storage t, bool json) internal view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":9794,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 601.01µs (0.00ns CPU time)\n\nRan 2 tests for test/ArtifactDeployment.t.sol:ArtifactDeploymentTest\n[PASS] test_artifactCreationBubblesFullConstructorRevertData() (gas: 101386)\n[PASS] test_artifactCreationPreservesConstructorCallerArgumentsAndRuntime() (gas: 354315)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 602.17µs (445.74µs CPU time)\n\nRan 1 test for test/fork/ForkMainnet.t.sol:ForkMainnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 728.53µs (0.00ns CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10527)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 1392141)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13943)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.41ms (624.59µs CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 13848610)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 14936779)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 13982996)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 20.03ms (14.75ms CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 213498)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183970)\n[PASS] test_launcherAndInitAreOneShot() (gas: 1361643)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 331356)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 31.93ms (472.26µs CPU time)\n\nRan 2 tests for test/Letterbox.t.sol:LetterboxMainnetPathTest\n[PASS] test_letterBuysTheOracleFeeAndTheTipWithPlea() (gas: 9332529)\n[PASS] test_mintingTheFeeIsRefusedOnMainnet() (gas: 959481)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 39.52ms (2.10ms CPU time)\n\nRan 3 tests for test/Letterbox.t.sol:OwnerExclusionTest\n[PASS] test_nobodyGetsAKeeperTip() (gas: 486489)\n[PASS] test_ownerPleasEarnNoPoints() (gas: 5081502)\n[PASS] test_theLaunchOwnerStaysExcludedAfterAHandover() (gas: 5209898)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 42.72ms (1.81ms CPU time)\n\nRan 7 tests for test/AuditImported.t.sol:AuditImportedPaidFeeTest\n[PASS] test_appealLetterRetriesCompletedRequestWithFailedCallback() (gas: 12925590)\n[PASS] test_appealLetterRetriesLazyTimeoutWithoutSeparateSettlement() (gas: 12858888)\n[PASS] test_autoAppealSurvivesBalanceGrowth() (gas: 9430620)\n[PASS] test_growingBalanceDoesNotEnableDustOrLargerAppeals() (gas: 8646049)\n[PASS] test_rawAppealLetterSurvivesBalanceGrowth() (gas: 9456610)\n[PASS] test_shrinkingBalanceStillUsesCurrentMinimumAndMaximum() (gas: 8289197)\n[PASS] test_siteAppealSurvivesBalanceGrowthAtOriginalMinimum() (gas: 8549036)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 67.28ms (16.01ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 8000077, ~: 7990212)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 8403694)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 7849417)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 69.78ms (38.51ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 11482726)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 9010657)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 5547006)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 4848248)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 4919731)\n[PASS] test_callbackFitsTheStipend() (gas: 7891769)\nLogs:\n  approve callback gas: 58946\n  deny callback gas: 83545\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 5387176)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 1181092)\n[PASS] test_cooldownAfterExecutedSell() (gas: 8165005)\n[PASS] test_failedAppealCanBeRetried() (gas: 11448624)\n[PASS] test_failureAfterExpireIsRefused() (gas: 4835832)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 7737247)\n[PASS] test_failureFitsTheMainnetGas() (gas: 4806749)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 4979345)\n[PASS] test_failureOnlyFromTheIntake() (gas: 4775312)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 56324)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 7720430)\n[PASS] test_onePendingPleaPerWallet() (gas: 4759166)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 7683878)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 4729109)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 4775145)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1465814)\n[PASS] test_refusalClearsThePleaToo() (gas: 4828671)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 7823129)\n[PASS] test_scoreBelowNeedDenies() (gas: 5022361)\n[PASS] test_sellWindowLapses() (gas: 7753363)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 4861574)\n[PASS] test_textFilter() (gas: 5212245)\n[PASS] test_wrongSignerIsRefused() (gas: 4825795)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 73.85ms (34.83ms CPU time)\n\nRan 9 tests for test/AuditRun5.t.sol:AuditRun5PleaFirstTest\n[PASS] testFuzz_markerPrefixesAreRefusedInAnyCase(uint16,bool,uint8) (runs: 32, μ: 67667, ~: 66788)\n[PASS] testFuzz_settlementAcrossTheBoundaryKeepsThePleasSeason(uint16) (runs: 32, μ: 9650601, ~: 9650601)\n[PASS] test_allNewPleaRoutesRefuseSellerWrittenObjectionMarkers() (gas: 780425)\n[PASS] test_appealRoutesAlsoRefuseForgedObjectionMarkers() (gas: 5559344)\n[PASS] test_lateSettlementFundsThePleasSeasonAndCheckpointsOtherDonations() (gas: 9859847)\n[PASS] test_onlyTheCommittedTribunalCanLabelAFundedApprovedStake() (gas: 5151600)\n[PASS] test_settlementAfterACloseGoesToRolloverOnce() (gas: 10112467)\n[PASS] test_similarWordsAndTruncatedPrefixesStillPass() (gas: 4686661)\n[PASS] test_twoFreshWalletRulingsStillCloseTheCaseAsRequired() (gas: 13474184)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 75.11ms (50.97ms CPU time)\n\nRan 7 tests for test/AuditImported.t.sol:AuditImportedTest\n[PASS] test_appealLetterRetriesCompletedRequestWithFailedCallback() (gas: 12980558)\n[PASS] test_appealLetterRetriesLazyTimeoutWithoutSeparateSettlement() (gas: 12913856)\n[PASS] test_autoAppealSurvivesBalanceGrowth() (gas: 9467303)\n[PASS] test_growingBalanceDoesNotEnableDustOrLargerAppeals() (gas: 8657349)\n[PASS] test_rawAppealLetterSurvivesBalanceGrowth() (gas: 9493294)\n[PASS] test_shrinkingBalanceStillUsesCurrentMinimumAndMaximum() (gas: 8300497)\n[PASS] test_siteAppealSurvivesBalanceGrowthAtOriginalMinimum() (gas: 8560336)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 78.60ms (20.11ms CPU time)\n\nRan 6 tests for test/TraderResolverBoundary.t.sol:TraderResolverBoundaryTest\n[PASS] testFuzz_malformedVaultDiscoveryDoesNotRevertOrTruncate(uint8,uint96) (runs: 256, μ: 162722, ~: 158928)\n[PASS] test_missingRevertingAndZeroVaultDiscoveryAllowsDeployment() (gas: 564113)\n[PASS] test_namedContractWalletIsAcceptedWhenItIsNotTheRouter() (gas: 21054)\n[PASS] test_plainWalletFallbackUsesSenderAndNeverTransactionOrigin() (gas: 62439)\n[PASS] test_plainWalletInfrastructureIsExcludedEvenWithoutCode() (gas: 45858)\n[PASS] test_vaultAddressIsCachedAndIsNotReadAgainDuringResolution() (gas: 169436)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 79.45ms (77.85ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 11482748)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 9010703)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 5547006)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 4848270)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 4919753)\n[PASS] test_callbackFitsTheStipend() (gas: 7891791)\nLogs:\n  approve callback gas: 58946\n  deny callback gas: 83545\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 5387176)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 1181092)\n[PASS] test_cooldownAfterExecutedSell() (gas: 8165027)\n[PASS] test_failedAppealCanBeRetried() (gas: 11448646)\n[PASS] test_failureAfterExpireIsRefused() (gas: 4835854)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 7737247)\n[PASS] test_failureFitsTheMainnetGas() (gas: 4806771)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 4979345)\n[PASS] test_failureOnlyFromTheIntake() (gas: 4775312)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 56324)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 7720430)\n[PASS] test_onePendingPleaPerWallet() (gas: 4759166)\n[PASS] test_orientationIsPleaZero() (gas: 15963)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 7683900)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 4729131)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 4775167)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1465836)\n[PASS] test_refusalClearsThePleaToo() (gas: 4828671)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 7823151)\n[PASS] test_scoreBelowNeedDenies() (gas: 5022361)\n[PASS] test_sellWindowLapses() (gas: 7753363)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 4861596)\n[PASS] test_textFilter() (gas: 5212245)\n[PASS] test_wrongSignerIsRefused() (gas: 4825795)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 80.19ms (21.56ms CPU time)\n\nRan 4 tests for test/AppealRounding.t.sol:AppealRoundingPaidFeePleaZeroTest\n[PASS] testFuzz_minimumPleaAppealsThroughEveryLetterEntry(uint8,uint8) (runs: 32, μ: 9380173, ~: 9386042)\n[PASS] test_cappedMinimumSitePleaCanAppealAfterFeeSale() (gas: 9464080)\n[PASS] test_minimumSitePleaCanAppealAfterFeeSaleRounding() (gas: 9369423)\n[PASS] test_shareBandsAndFiftyPercentClampKeepTheirExistingRounding() (gas: 27949305)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 91.12ms (73.42ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259296, ~: 259234)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1724610)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317220)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260500)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 276001)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 91.66ms (88.75ms CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 23954, ~: 24085)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 730520)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42983)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 21.86ms (6.74ms CPU time)\n\nRan 27 tests for test/Letterbox.t.sol:LetterboxTest\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 32, μ: 324406, ~: 322959)\n[PASS] test_aBareCommandWordIsNotAPlea() (gas: 6055501)\n[PASS] test_aLapsedApprovalSettlesAndStillCounts() (gas: 5614499)\n[PASS] test_anAppealOfAFloorSizedLetterIsNotRefused() (gas: 10658191)\n[PASS] test_anyoneDeliversAnApprovalForTheTip() (gas: 6234329)\n[PASS] test_appealByLetterKeepsTheOriginalShareAndPaysTheWall() (gas: 10396078)\n[PASS] test_appealLetterRetriesAnAppealTheOracleNeverAnswered() (gas: 21821555)\n[PASS] test_autoSellFeeOnlyOnASaleAndNeverMoreThanHalfOfIt() (gas: 9884956)\n[PASS] test_deadCabalRefusesLettersButSettles() (gas: 5383510)\n[PASS] test_deliverNeedsAnApprovalInsideTheWindowAndTheMinimum() (gas: 6140911)\n[PASS] test_deployLetterboxRefusesOtherCode() (gas: 16927004)\n[PASS] test_expiredPendingPleaSettlesAfterTwentyMinutes() (gas: 5251320)\n[PASS] test_explorerLetterIsTheSameAsARawLetter() (gas: 13758390)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 1334849)\n[PASS] test_leaderboardListsTheSeason() (gas: 6499621)\n[PASS] test_letterCommandsParse() (gas: 8886858)\n[PASS] test_letterPleadsTenPercentPaysFeesInPleaAndEscrows() (gas: 5334066)\n[PASS] test_letterRefusesEthTinyBalancesAndBadText() (gas: 1386904)\n[PASS] test_letterboxIsDeployedOnceFromTheCommittedCode() (gas: 502901)\n[PASS] test_noFunctionIdCanStartALetter() (gas: 888710)\n[PASS] test_noVerdictSettlesAtOnceAndTheNextLetterSettlesTheOldOne() (gas: 8715138)\n[PASS] test_settleReturnsEscrowAndTipAfterADenial() (gas: 5605949)\n[PASS] test_siteAutoSellPleadsAnyValidAmount() (gas: 10240260)\n[PASS] test_statusTellsEachState() (gas: 10360299)\n[PASS] test_strangersCannotUseTheCourtEntryPoints() (gas: 210979)\n[PASS] test_theGateRefusesAManualSaleOfAnEscrowedPlea() (gas: 5340613)\n[PASS] test_theSellLetterIsTheWritersOwnSale() (gas: 6128009)\nSuite result: ok. 27 passed; 0 failed; 0 skipped; finished in 100.01ms (53.07ms CPU time)\n\nRan 12 tests for test/AuditRun3.t.sol:AuditRun3Test\n[PASS] test_F1_appealLetterCannotRetryAnAppealTheOracleNeverAnswered() (gas: 16673819)\n[PASS] test_F2_aCapSizedAutoSellPleaCannotBeAppealedThroughTheLetterbox() (gas: 33839594)\n[PASS] test_F3_aBareCommandWordBecomesAPaidPlea() (gas: 112574)\n[PASS] test_aLetterboxDeployedByAnyoneElseHasNoPowers() (gas: 10397692)\n[PASS] test_autoSellCannotAcceptASpotPriceUnderTheSnapshotFloor() (gas: 6856381)\n[PASS] test_escrowsAfterTheCabalDies() (gas: 12953573)\n[PASS] test_feeSaleIsBoundedAndTheTipReturns() (gas: 5269804)\n[PASS] test_letterParsingEdgeCases() (gas: 21366900)\n[PASS] test_markerRuleUnchanged() (gas: 6385088)\n[PASS] test_oneCapSizedSaleMovesSpotUnderOnePercent() (gas: 27199208)\nLogs:\n  price impact of a 2.5M PLEA sale, bps: 87\n\n[PASS] test_oracleBodyIsValidJsonForHostileTexts() (gas: 26413773)\n[PASS] test_priceViewsEqualAFullRingScan() (gas: 47583126)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 103.86ms (85.26ms CPU time)\n\nRan 5 tests for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 52960001)\nLogs:\n  five-contract launch transaction gas through IMD's factory: 13223299\n  gas limit with IMD's headroom: 16132424\n  margin to the 16,777,216 cap: 644792\n\n[PASS] test_launchJsonCommitsToThisLetterbox() (gas: 31651)\n[PASS] test_launchJsonCommitsToThisTribunal() (gas: 27640)\n[PASS] test_launchJsonEncodesOracleMintFlagAsStaticWord() (gas: 9989)\n[PASS] test_launchJsonNotesFitTheManifestCap() (gas: 7530)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 75.05ms (73.04ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:PostLaunchTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 11196352)\n[PASS] test_committedLetterboxDeploysLater() (gas: 10381801)\nLogs:\n  deployLetterbox transaction gas: 5381041\n\n[PASS] test_committedTribunalDeploysLater() (gas: 9510846)\nLogs:\n  deployTribunal transaction gas: 4811086\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 23.34ms (20.29ms CPU time)\n\nRan 13 tests for test/TraderResolution.t.sol:TraderResolutionTest\n[PASS] testFuzz_dirtyHookDataFallsBackToRouterCaller(uint96,bool) (runs: 32, μ: 705289, ~: 694488)\n[PASS] test_dirtyHookDataAfterDeathBuyHasNoTrader() (gas: 481802)\n[PASS] test_dirtyHookDataFallsBackToRouterCallerWhileAlive() (gas: 718871)\n[PASS] test_dirtyHookDataWithoutFallbackWhileAliveRequiresRecipient() (gas: 82086)\n[PASS] test_dirtyHookDataWordFallsThrough() (gas: 1018802)\n[PASS] test_feeSurplusWithoutATraderIsBurnedOrKeptForThePool() (gas: 520659)\n[PASS] test_hookDataNamesTheTrader() (gas: 674829)\n[PASS] test_invalidHookDataFallsBackToTheRouterCaller() (gas: 2690883)\n[PASS] test_noTraderAfterDeathBuyGoesThroughWithoutCashback() (gas: 440311)\n[PASS] test_noTraderAfterDeathSellGoesThroughWithoutCashback() (gas: 521982)\n[PASS] test_routerCallerIsTheTraderWithoutHookData() (gas: 697754)\n[PASS] test_routerCallerStillCreditedAfterDeath() (gas: 629310)\n[PASS] test_routerWithoutMsgSenderNeedsHookDataWhileTheCabalLives() (gas: 149311)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 48.47ms (26.03ms CPU time)\n\nRan 9 tests for test/AuditRun5.t.sol:AuditRun5Test\n[PASS] testFuzz_markerPrefixesAreRefusedInAnyCase(uint16,bool,uint8) (runs: 32, μ: 66797, ~: 66032)\n[PASS] testFuzz_settlementAcrossTheBoundaryKeepsThePleasSeason(uint16) (runs: 32, μ: 9650601, ~: 9650601)\n[PASS] test_allNewPleaRoutesRefuseSellerWrittenObjectionMarkers() (gas: 780425)\n[PASS] test_appealRoutesAlsoRefuseForgedObjectionMarkers() (gas: 5559344)\n[PASS] test_lateSettlementFundsThePleasSeasonAndCheckpointsOtherDonations() (gas: 9859847)\n[PASS] test_onlyTheCommittedTribunalCanLabelAFundedApprovedStake() (gas: 5151600)\n[PASS] test_settlementAfterACloseGoesToRolloverOnce() (gas: 10112467)\n[PASS] test_similarWordsAndTruncatedPrefixesStillPass() (gas: 4686661)\n[PASS] test_twoFreshWalletRulingsStillCloseTheCaseAsRequired() (gas: 13474184)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 69.39ms (52.99ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 4837173)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 236713)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1543151)\n[PASS] test_closeSeasonPaysTheTopTen() (gas: 42444327)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1253543)\n[PASS] test_fastFullCycle() (gas: 78094534)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 6686820)\n[PASS] test_onlyApprovedPleasScore() (gas: 4946624)\n[PASS] test_secondSeasonScoresSeparately() (gas: 47715112)\n[PASS] test_tiesRankTheEarlierPleaFirstAndALaterTieSlotsInBelow() (gas: 3256967)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 118684516)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 145.45ms (82.40ms CPU time)\n\nRan 10 tests for test/TraderFallbackAdversarial.t.sol:TraderFallbackAdversarialTest\n[PASS] testFuzz_dirtyRouterReturnCannotBeTruncatedIntoATrader(uint96,bool) (runs: 128, μ: 442037, ~: 291665)\n[PASS] testFuzz_nonAddressLengthHookDataFallsBackToRouter(uint8) (runs: 128, μ: 791587, ~: 791501)\n[PASS] testFuzz_nonAddressLengthResponsesDoNotResolve(uint8,bool) (runs: 128, μ: 425076, ~: 301266)\n[PASS] test_everyExcludedRouterResponseHasNoRecipientFallbackToOrigin() (gas: 5001325)\n[PASS] test_gateSaleAlwaysNamesSellerEvenWhenRelayedByLetterboxRunner() (gas: 6763342)\n[PASS] test_hookDataTakesPriorityEvenWhenRouterCannotAnswer() (gas: 2653984)\n[PASS] test_msgSenderReceivesExactlyTheThirtyThousandGasBudget() (gas: 804518)\n[PASS] test_partialBuyWithoutTraderKeepsBothCashbackAndImdFeeSurplusForPool() (gas: 1269798)\n[PASS] test_revertingOutOfGasAndStateWritingRoutersCannotBlockDeadCabalBuys() (gas: 2068670)\n[PASS] test_successThenUnresolvedThenNewTraderDoesNotLeakTransientIdentity() (gas: 1622616)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 161.31ms (132.42ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4125393, ~: 4121913)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 12126722)\n[PASS] test_deadCabalBuyWithoutARecipientSkipsTheCashback() (gas: 2077738)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1046909)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 12322318)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 8716461)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2173568)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 13715000)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1052602)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 10343814)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1240830)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 8910130)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 181.02ms (177.22ms CPU time)\n\nRan 4 tests for test/AppealRounding.t.sol:AppealRoundingPaidFeeTest\n[PASS] testFuzz_minimumPleaAppealsThroughEveryLetterEntry(uint8,uint8) (runs: 32, μ: 9379749, ~: 9386042)\n[PASS] test_cappedMinimumSitePleaCanAppealAfterFeeSale() (gas: 9464080)\n[PASS] test_minimumSitePleaCanAppealAfterFeeSaleRounding() (gas: 9369423)\n[PASS] test_shareBandsAndFiftyPercentClampKeepTheirExistingRounding() (gas: 27949305)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 113.40ms (91.42ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1147462, ~: 1142361)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1196484)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 653553)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134385)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 63932)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1309599)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2554196)\n[PASS] test_rebalancePaysNoTipAndDeploysTheWholeReserve() (gas: 462383)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 137962)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290443)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 601728)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 222.06ms (191.32ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4122985, ~: 4119248)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 12126285)\n[PASS] test_deadCabalBuyWithoutARecipientSkipsTheCashback() (gas: 2078744)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1046221)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 12321881)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 8716024)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2173432)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 13712883)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1051804)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 10342701)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1240389)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 8909693)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 224.04ms (216.82ms CPU time)\n\nRan 20 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1247163)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1697044)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1106230)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17982)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1686250)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1295524)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1659932)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 571778)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1103525)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 1930849)\n[PASS] test_orientationIsPleaZero() (gas: 15862)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1200233)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4565756)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 747890)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1818719)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34359685)\n[PASS] test_wallGuardIgnoresASellerChosenLimitReachedThroughAnEmptyPool() (gas: 2788162)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2762954)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16738672)\n[PASS] test_wallGuardStillDropsAtOnceToASellerChosenLimitInsideTheBand() (gas: 33243177)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 146.25ms (132.92ms CPU time)\n\nRan 1 test for test/TribunalSeasons.t.sol:TribunalLateDeployTest\n[PASS] test_aPleaRecordedBeforeTheTribunalCannotBeObjectedTo() (gas: 13817953)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 22.31ms (3.24ms CPU time)\n\nRan 21 tests for test/Tribunal.t.sol:TribunalTest\n[PASS] test_aStalePendingObjectionIsVoidedByTheNextObjector() (gas: 20532035)\n[PASS] test_aStalePendingObjectionNeverHoldsPastTheWindow() (gas: 17655746)\n[PASS] test_aSustainClosesTheCase() (gas: 9484918)\n[PASS] test_anExcludedSellersPleaCannotBeObjectedTo() (gas: 5881039)\n[PASS] test_atMostTwoRulingsFromDifferentWallets() (gas: 13741521)\n[PASS] test_callbackFitsTheIntakesGasBudget() (gas: 9314305)\nLogs:\n  gate verdict callback gas: 58946\n  tribunal ruling callback gas: 83738\n\n[PASS] test_executedAndLapsedApprovalsCanBeObjectedTo() (gas: 17353491)\n[PASS] test_expireByTimeAndByACompletedRequest() (gas: 16897280)\n[PASS] test_marginEdge() (gas: 16962869)\n[PASS] test_onlyApprovedPleasCanBeObjectedTo() (gas: 7940825)\n[PASS] test_overruledAboveTheOriginalKeepsTheOriginalScore() (gas: 9562182)\n[PASS] test_overruledObjectionLowersTheScoreToTheLowestPanelAndFeedsThePot() (gas: 9803461)\n[PASS] test_questionAndBody() (gas: 14846158)\n[PASS] test_rulingsNeverResetTheDeadMan() (gas: 9316222)\n[PASS] test_settleNeedsARuling() (gas: 9187935)\n[PASS] test_statusText() (gas: 17362497)\n[PASS] test_sustainedObjectionLeavesNoPointsAndReturnsTheStake() (gas: 9694599)\n[PASS] test_textRules() (gas: 9261635)\n[PASS] test_theSellerAndTheOwnersCannotObject() (gas: 5457198)\n[PASS] test_voidObjectionReturnsTheStakeAndFreesTheSlot() (gas: 13036523)\n[PASS] test_windowEdges() (gas: 12614186)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 95.19ms (63.14ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 4837699)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 236691)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 24134561)\n[PASS] test_closeSeasonPaysTheTopTen() (gas: 57228085)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 12010572)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 6686798)\n[PASS] test_onlyApprovedPleasScore() (gas: 4949449)\n[PASS] test_secondSeasonScoresSeparately() (gas: 44752546)\n[PASS] test_tiesRankTheEarlierPleaFirstAndALaterTieSlotsInBelow() (gas: 41128091)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 112745712)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 253.07ms (68.75ms CPU time)\n\nRan 4 tests for test/AppealRounding.t.sol:AppealRoundingPleaZeroTest\n[PASS] testFuzz_minimumPleaAppealsThroughEveryLetterEntry(uint8,uint8) (runs: 32, μ: 9416381, ~: 9422688)\n[PASS] test_cappedMinimumSitePleaCanAppealAfterFeeSale() (gas: 9500725)\n[PASS] test_minimumSitePleaCanAppealAfterFeeSaleRounding() (gas: 9406068)\n[PASS] test_shareBandsAndFiftyPercentClampKeepTheirExistingRounding() (gas: 28059240)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 113.99ms (101.53ms CPU time)\n\nRan 12 tests for test/TribunalSeasons.t.sol:TribunalSeasonsTest\n[PASS] test_aLetterSellsDuringTheHoldAndItsPointsAreRecordedLater() (gas: 10580164)\n[PASS] test_aSustainedPleaIsNeverRecordedEvenByAClose() (gas: 9584427)\n[PASS] test_aVoidAtTheLastSecondLeavesNoRoomForASecondObjection() (gas: 13084302)\n[PASS] test_approvalInTheLastSecondIsRuledAndRecordedInsideTheGrace() (gas: 12751176)\n[PASS] test_closeListsAHeldPleaOfTheRunningSeasonWithoutReverting() (gas: 8335533)\n[PASS] test_closeSeasonSkipsHeldPleasAndRecordsThemLater() (gas: 12649232)\n[PASS] test_recordIsFreeOnceTheWindowClosesWithNoObjection() (gas: 5234864)\n[PASS] test_recordWaitsForTheWindowThenForAPendingObjection() (gas: 9693671)\n[PASS] test_seasonsFindsTheTribunalThroughTheLauncher() (gas: 51237)\n[PASS] test_theLetterboxStatusShowsHeldPendingAndSustainedPoints() (gas: 20490666)\n[PASS] test_theTimingBoundHoldsInsideTheCloseGrace() (gas: 15420)\n[PASS] test_twoRulingsAtTheEdgeStayInsideTheGrace() (gas: 16555549)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 43.66ms (21.92ms CPU time)\n\nRan 12 tests for test/TribunalStanding.t.sol:TribunalStandingTest\n[PASS] test_aHeldPleaIsRefusedAndSkippedByAClose() (gas: 620800)\n[PASS] test_aHigherPanelScoreKeepsTheOriginal() (gas: 588338)\n[PASS] test_aLauncherAnsweringTheWrongSizeRecordsAsBefore() (gas: 384063)\n[PASS] test_aLauncherWithoutTribunalRecordsAsBefore() (gas: 394628)\n[PASS] test_aLowerPanelScoreIsRecorded() (gas: 588279)\n[PASS] test_aRevertingTribunalCannotBlockARecord() (gas: 524018)\n[PASS] test_aSustainedPleaIsRefused() (gas: 397224)\n[PASS] test_aTribunalAnsweringTheWrongSizeRecordsAsBefore() (gas: 515196)\n[PASS] test_aZeroTribunalRecordsAsBefore() (gas: 403393)\n[PASS] test_noLauncherRecordsAsBefore() (gas: 243543)\n[PASS] test_noShareBeyondTheTable() (gas: 9496)\n[PASS] test_sharesFallInAStraightLineAndSumToTenThousand() (gas: 233536)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 1.98ms (1.62ms CPU time)\n\nRan 19 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1247163)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1697022)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1106230)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17982)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1686250)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1295502)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1659932)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 571756)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1103503)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 1930849)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1200233)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4565756)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 747890)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1818697)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34359685)\n[PASS] test_wallGuardIgnoresASellerChosenLimitReachedThroughAnEmptyPool() (gas: 2788162)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2762911)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16738672)\n[PASS] test_wallGuardStillDropsAtOnceToASellerChosenLimitInsideTheBand() (gas: 33243155)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 169.44ms (140.56ms CPU time)\n\nRan 6 tests for test/JudgeFindings.t.sol:JudgeFindingsPleaZeroTest\n[PASS] test_aSmallWriterCanAppealByLetter() (gas: 8092874)\n[PASS] test_appealAutoOfAMinimumPleaStaysAtTheMinimum() (gas: 8761890)\n[PASS] test_appealLetterKeepsTheOriginalShareBand() (gas: 7942408)\n[PASS] test_deliverAfterACrashCapsTheFeeAtTheSale() (gas: 380261283)\n[PASS] test_fiftyPercentCeilingAndShareBands() (gas: 3903309)\n[PASS] test_ownershipTransferNeedsAcceptanceSoALeaderKeepsThePrize() (gas: 6804421)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 301.51ms (182.39ms CPU time)\n\nRan 4 tests for test/AppealRounding.t.sol:AppealRoundingTest\n[PASS] testFuzz_minimumPleaAppealsThroughEveryLetterEntry(uint8,uint8) (runs: 32, μ: 9417405, ~: 9422688)\n[PASS] test_cappedMinimumSitePleaCanAppealAfterFeeSale() (gas: 9500725)\n[PASS] test_minimumSitePleaCanAppealAfterFeeSaleRounding() (gas: 9406068)\n[PASS] test_shareBandsAndFiftyPercentClampKeepTheirExistingRounding() (gas: 28059240)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 88.99ms (70.03ms CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 4837721)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 236802)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 24134583)\n[PASS] test_closeSeasonPaysTheTopTen() (gas: 57228085)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 12010572)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 6686798)\n[PASS] test_onlyApprovedPleasScore() (gas: 4949471)\n[PASS] test_orientationIsPleaZero() (gas: 15724)\n[PASS] test_secondSeasonScoresSeparately() (gas: 44752546)\n[PASS] test_tiesRankTheEarlierPleaFirstAndALaterTieSlotsInBelow() (gas: 41128113)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 112745734)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 107.26ms (78.62ms CPU time)\n\nRan 22 tests for test/Tribunal.t.sol:TribunalMainnetFeeTest\n[PASS] test_aStalePendingObjectionIsVoidedByTheNextObjector() (gas: 20432351)\n[PASS] test_aStalePendingObjectionNeverHoldsPastTheWindow() (gas: 17609196)\n[PASS] test_aSustainClosesTheCase() (gas: 9427306)\n[PASS] test_anExcludedSellersPleaCannotBeObjectedTo() (gas: 5856652)\n[PASS] test_atMostTwoRulingsFromDifferentWallets() (gas: 13650644)\n[PASS] test_callbackFitsTheIntakesGasBudget() (gas: 9281102)\nLogs:\n  gate verdict callback gas: 58946\n  tribunal ruling callback gas: 83738\n\n[PASS] test_executedAndLapsedApprovalsCanBeObjectedTo() (gas: 17309441)\n[PASS] test_expireByTimeAndByACompletedRequest() (gas: 16850752)\n[PASS] test_marginEdge() (gas: 16916319)\n[PASS] test_onlyApprovedPleasCanBeObjectedTo() (gas: 7907398)\n[PASS] test_overruledAboveTheOriginalKeepsTheOriginalScore() (gas: 9528979)\n[PASS] test_overruledObjectionLowersTheScoreToTheLowestPanelAndFeedsThePot() (gas: 9770258)\n[PASS] test_questionAndBody() (gas: 14812954)\n[PASS] test_rulingsNeverResetTheDeadMan() (gas: 9283019)\n[PASS] test_settleNeedsARuling() (gas: 9154710)\n[PASS] test_statusText() (gas: 17315947)\n[PASS] test_sustainedObjectionLeavesNoPointsAndReturnsTheStake() (gas: 9653644)\n[PASS] test_textRules() (gas: 9252841)\n[PASS] test_theObjectorPaysFeeAndStakeInImd() (gas: 9143431)\n[PASS] test_theSellerAndTheOwnersCannotObject() (gas: 5417380)\n[PASS] test_voidObjectionReturnsTheStakeAndFreesTheSlot() (gas: 12989996)\n[PASS] test_windowEdges() (gas: 12576452)\nSuite result: ok. 22 passed; 0 failed; 0 skipped; finished in 67.51ms (45.84ms CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1195849, ~: 1236227)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24099)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1604975)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75392)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1687394)\n[PASS] test_deathBeforeTheSixthSeasonBurnsTheRest() (gas: 1126109)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1581399)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 260455)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 747060)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1577087)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1148032)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43360)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2433372)\n[PASS] test_onlyTheFirstSixSeasonsPayABonus() (gas: 4861702)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 812838)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1058096)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 36.22ms (35.06ms CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 97165022)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 101585345)\nLogs:\n  launch (5 contracts + intake mock): 12531874\n  deployLetterbox: 5024892\n  deployHook: 5633077\n  seed: 615596\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 12649546)\n[PASS] test_ownerMaySeedEarly() (gas: 96367222)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 96466073)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 321.91ms (194.76ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1147698, ~: 1142571)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1196792)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 653281)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135213)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 63872)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1309199)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2553394)\n[PASS] test_rebalancePaysNoTipAndDeploysTheWholeReserve() (gas: 466813)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 137962)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290419)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 601040)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 264.05ms (253.26ms CPU time)\n\nRan 6 tests for test/JudgeFindings.t.sol:JudgeFindingsTest\n[PASS] test_aSmallWriterCanAppealByLetter() (gas: 8092874)\n[PASS] test_appealAutoOfAMinimumPleaStaysAtTheMinimum() (gas: 8761890)\n[PASS] test_appealLetterKeepsTheOriginalShareBand() (gas: 7942408)\n[PASS] test_deliverAfterACrashCapsTheFeeAtTheSale() (gas: 380261283)\n[PASS] test_fiftyPercentCeilingAndShareBands() (gas: 3903309)\n[PASS] test_ownershipTransferNeedsAcceptanceSoALeaderKeepsThePrize() (gas: 6804421)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 270.24ms (173.29ms CPU time)\n\nRan 13 tests for test/HookRevision.t.sol:HookRevisionPleaIsZeroTest\n[PASS] testFuzz_aGreedyStackerCannotReachTheWallReserve(uint256,uint256) (runs: 32, μ: 1314422, ~: 1314488)\n[PASS] testFuzz_aLimitAnywhereInTheLiquidityFreeRegionNeverMovesTheGuard(uint256,uint256) (runs: 32, μ: 2458995, ~: 2342091)\n[PASS] testFuzz_aLimitInsideTheLiquidMarketBandMovesTheGuardToTheStopTick(uint256) (runs: 32, μ: 5203734, ~: 5203763)\n[PASS] testFuzz_aSameHourPumpCannotMoveAPleasFactScore(uint256) (runs: 32, μ: 2704679, ~: 2702332)\n[PASS] testFuzz_repeatedDrainsToTheExtremeNeverMoveTheGuard(uint8) (runs: 32, μ: 3927829, ~: 3662083)\n[PASS] testFuzz_successfulCreditsNeverAccumulateAllowance(uint256,uint256,uint256) (runs: 32, μ: 2148827, ~: 2157086)\n[PASS] testFuzz_theGuardClimbsAtMost400TicksADay(uint256,uint256,uint8) (runs: 32, μ: 2560909, ~: 2316762)\n[PASS] testFuzz_theHoursFirstTradeRecordsThePriceItFoundWhateverItsSize(uint256,uint256) (runs: 32, μ: 2241926, ~: 2236178)\n[PASS] test_aCreditThatBurnsAllItsGasLeavesNoAllowance() (gas: 1593909)\n[PASS] test_anHourOpeningSellRecordsThePriceItFound() (gas: 1848113)\n[PASS] test_emptyRegionBitmapBoundaryStopsAtTheExactPriceLimit() (gas: 2289203)\n[PASS] test_orientationIsPleaZero() (gas: 15620)\n[PASS] test_wallGuardFollowsASellThatStopsWhereTheMarketHasLiquidity() (gas: 6114648)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 501.24ms (744.57ms CPU time)\n\nRan 18 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 4997165, ~: 5000019)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 5064150, ~: 5019947)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 5088415, ~: 5088328)\n[PASS] test_aWhaleCanStillPleadTheMaximum() (gas: 5272082)\n[PASS] test_amountLimitsFailBeforeChargingAndOnePercentIsTheMinimum() (gas: 5021582)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 8311831)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 8813634)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 7991537)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 5022662)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 4918709)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 7768194)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 7961424)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 88179)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 4908400)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 958197)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 5023481)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 5440164)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 6094692)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 596.12ms (635.39ms CPU time)\n\nRan 5 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 13197128, ~: 13226780)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizes() (gas: 1072776)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 1026255)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 1026949)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 1033296)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 252.18ms (253.34ms CPU time)\n\nRan 12 tests for test/HookRevision.t.sol:HookRevisionTest\n[PASS] testFuzz_aGreedyStackerCannotReachTheWallReserve(uint256,uint256) (runs: 64, μ: 1314335, ~: 1314393)\n[PASS] testFuzz_aLimitAnywhereInTheLiquidityFreeRegionNeverMovesTheGuard(uint256,uint256) (runs: 64, μ: 2453611, ~: 2364316)\n[PASS] testFuzz_aLimitInsideTheLiquidMarketBandMovesTheGuardToTheStopTick(uint256) (runs: 64, μ: 5203693, ~: 5203741)\n[PASS] testFuzz_aSameHourPumpCannotMoveAPleasFactScore(uint256) (runs: 64, μ: 2705799, ~: 2708267)\n[PASS] testFuzz_repeatedDrainsToTheExtremeNeverMoveTheGuard(uint8) (runs: 64, μ: 4056926, ~: 3662061)\n[PASS] testFuzz_successfulCreditsNeverAccumulateAllowance(uint256,uint256,uint256) (runs: 64, μ: 2145564, ~: 2133443)\n[PASS] testFuzz_theGuardClimbsAtMost400TicksADay(uint256,uint256,uint8) (runs: 64, μ: 2680565, ~: 2676108)\n[PASS] testFuzz_theHoursFirstTradeRecordsThePriceItFoundWhateverItsSize(uint256,uint256) (runs: 64, μ: 2240946, ~: 2236156)\n[PASS] test_aCreditThatBurnsAllItsGasLeavesNoAllowance() (gas: 1593887)\n[PASS] test_anHourOpeningSellRecordsThePriceItFound() (gas: 1848091)\n[PASS] test_emptyRegionBitmapBoundaryStopsAtTheExactPriceLimit() (gas: 2289181)\n[PASS] test_wallGuardFollowsASellThatStopsWhereTheMarketHasLiquidity() (gas: 6114626)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 566.87ms (1.26s CPU time)\n\nRan 11 tests for test/BonusInvariant.t.sol:BonusEdgeTest\n[PASS] testFuzz_anyRankingPaysPlusBurnsExactlyTheBonus(uint256) (runs: 512, μ: 4500787, ~: 4287521)\n[PASS] test_bonusPaidAfterDeathIsFreelyTransferable() (gas: 866391)\n[PASS] test_closeWithinTheGraceHourIsRefused() (gas: 825201)\n[PASS] test_closingTwiceCannotPayASeasonsBonusTwice() (gas: 816904)\n[PASS] test_deathBeforeTradingSeasonZeroEndsBurnsEverythingButSeasonZero() (gas: 999895)\n[PASS] test_eleventhWalletRanksAfterTheTenAndIsPaidEleventh() (gas: 5890616)\n[PASS] test_gateAsSellerForfeitsWhileWatchedButIsPaidAfterDeath() (gas: 1520300)\n[PASS] test_lateApprovalListedAtCloseStillEarnsTheBonus() (gas: 720584)\n[PASS] test_onlyTheBestThreePleasCount() (gas: 1819213)\n[PASS] test_sixtyPointsQualifiesFiftyNineDoesNot() (gas: 1664786)\n[PASS] test_tenQualifiersReceiveTheirTenSharesAndTheRestBurns() (gas: 5669606)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 608.59ms (618.84ms CPU time)\n\nRan 5 tests for test/GasPass.t.sol:GasPassTest\n[PASS] testFuzz_bodyEqualsEscapingTheWholeQuestion(uint256) (runs: 500, μ: 5657219, ~: 5618232)\n[PASS] testFuzz_textCheckMatchesTheReferenceRules(uint256) (runs: 5000, μ: 1016499, ~: 85070)\n[PASS] test_bodyEqualsEscapingTheWholeQuestion() (gas: 13043358)\n[PASS] test_priceViewsMatchAFullScan() (gas: 128850699)\n[PASS] test_textCheckEdgeCases() (gas: 54380836)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 608.63ms (1.09s CPU time)\n\nRan 10 tests for test/TraderFallbackAdversarial.t.sol:TraderFallbackAdversarialPleaZeroTest\n[PASS] testFuzz_dirtyRouterReturnCannotBeTruncatedIntoATrader(uint96,bool) (runs: 128, μ: 441762, ~: 291653)\n[PASS] testFuzz_nonAddressLengthHookDataFallsBackToRouter(uint8) (runs: 128, μ: 791209, ~: 791122)\n[PASS] testFuzz_nonAddressLengthResponsesDoNotResolve(uint8,bool) (runs: 128, μ: 424418, ~: 301254)\n[PASS] test_everyExcludedRouterResponseHasNoRecipientFallbackToOrigin() (gas: 4998919)\n[PASS] test_gateSaleAlwaysNamesSellerEvenWhenRelayedByLetterboxRunner() (gas: 6763279)\n[PASS] test_hookDataTakesPriorityEvenWhenRouterCannotAnswer() (gas: 2652131)\n[PASS] test_msgSenderReceivesExactlyTheThirtyThousandGasBudget() (gas: 804139)\n[PASS] test_partialBuyWithoutTraderKeepsBothCashbackAndImdFeeSurplusForPool() (gas: 1272021)\n[PASS] test_revertingOutOfGasAndStateWritingRoutersCannotBlockDeadCabalBuys() (gas: 2066965)\n[PASS] test_successThenUnresolvedThenNewTraderDoesNotLeakTransientIdentity() (gas: 1621330)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 612.56ms (163.12ms CPU time)\n\nRan 7 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 1957221, ~: 1956406)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5441562, ~: 5450594)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1153411)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 779268)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 605232)\n[PASS] test_prizesRequireSixtyPoints() (gas: 1392343)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 934773)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 417.55ms (682.46ms CPU time)\n\nRan 11 tests for test/TribunalAdversarial.t.sol:TribunalAdversarialTest\n[PASS] testFuzz_stakeAccountingHolds(uint8[6],uint8) (runs: 32, μ: 53333251, ~: 53322022)\n[PASS] test_aFailureAfterARulingChangesNothing() (gas: 9347710)\n[PASS] test_aLateRulingIsRefused() (gas: 9353175)\n[PASS] test_aReplayedAttestationIsRefused() (gas: 16823902)\n[PASS] test_agreedNumbers() (gas: 16099)\n[PASS] test_objectingNeedsTheStakeAndTheFee() (gas: 4916306)\n[PASS] test_onlyTheIntakeMayDeliverARuling() (gas: 9226511)\n[PASS] test_theGatesSignatureIsWorthlessHereAndTheReverse() (gas: 12255558)\n[PASS] test_theStakeCannotBeDrainedByTheGateOrByDoubleSettling() (gas: 17118041)\n[PASS] test_unknownRequestsAreRefused() (gas: 9211924)\n[PASS] test_wrongPanelsAndScoresAreRefused() (gas: 9496856)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 414.53ms (407.22ms CPU time)\n\nRan 3 tests for test/GateFailureInvariant.t.sol:GateFailureInvariantTest\n[PASS]\nGateFailureInvariantTest invariants:\n[PASS] invariant_gateHoldsNothing\n[PASS] invariant_onlyVerdictsMoveTheClock\n[PASS] invariant_pendingBookkeepingIsConsistent\n GateFailureInvariantTest invariants (runs: 64, calls: 4096, reverts: 0)\n\n╭--------------------+---------------+-------+---------+----------╮\n| Contract           | Selector      | Calls | Reverts | Discards |\n+=================================================================+\n| GateFailureHandler | advance       | 435   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | answer        | 454   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | appeal        | 451   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | directFailure | 442   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | execute       | 458   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | expire        | 483   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | fail          | 440   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | plead         | 489   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | strangerFails | 444   | 0       | 0        |\n╰--------------------+---------------+-------+---------+----------╯\n\n[PASS] test_failureAfterDeathDoesNotReviveTheCabal() (gas: 4808014)\n[PASS] test_handlerReachesFailuresVerdictsAndAppeals() (gas: 18852923)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.03s (1.01s CPU time)\n\nRan 2 tests for test/BonusInvariant.t.sol:BonusInvariantTest\n[PASS]\nBonusInvariantTest invariants:\n[PASS] invariant_bonusIsHeldPaidOrBurned\n[PASS] invariant_flushedSeasonsStayFinished\n[PASS] invariant_openBonusSeasonsStayFunded\n[PASS] invariant_supplyFallsOnlyByTheBurnedBonus\n BonusInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+----------+-------+---------+----------╮\n| Contract     | Selector | Calls | Reverts | Discards |\n+======================================================+\n| BonusHandler | advance  | 1117  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | approve  | 1164  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | close    | 1178  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | die      | 1187  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | donate   | 1199  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | flush    | 1163  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | pull     | 1184  | 0       | 0        |\n╰--------------+----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesPaidClosesDeathAndFlush() (gas: 2525744)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.50s (1.50s CPU time)\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 1032  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 1042  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 1057  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 1046  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 1024  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 968   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 989   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 1034  | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.91s (1.91s CPU time)\n\nRan 2 tests for test/LetterboxInvariant.t.sol:LetterboxInvariantTest\n[PASS]\nLetterboxInvariantTest invariants:\n[PASS] invariant_escrowsMatchTheirPleas\n[PASS] invariant_everyWritersPleaIsAccountedFor\n[PASS] invariant_holdsExactlyTheOpenEscrowsAndTips\n[PASS] invariant_noStepBrokeAnExpectation\n LetterboxInvariantTest invariants (runs: 64, calls: 5120, reverts: 0)\n\n╭------------------+----------+-------+---------+----------╮\n| Contract         | Selector | Calls | Reverts | Discards |\n+==========================================================+\n| LetterboxHandler | advance  | 537   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | answer   | 575   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | appeal   | 573   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | deliver  | 591   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | fail     | 533   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | poke     | 560   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | sell     | 570   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | settle   | 586   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | write    | 595   | 0       | 0        |\n╰------------------+----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesEveryPath() (gas: 26600694)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.44s (2.42s CPU time)\n\nRan 2 tests for test/LetterboxInvariant.t.sol:LetterboxMainnetInvariantTest\n[PASS]\nLetterboxMainnetInvariantTest invariants:\n[PASS] invariant_escrowsMatchTheirPleas\n[PASS] invariant_everyWritersPleaIsAccountedFor\n[PASS] invariant_holdsExactlyTheOpenEscrowsAndTips\n[PASS] invariant_noStepBrokeAnExpectation\n LetterboxMainnetInvariantTest invariants (runs: 64, calls: 5120, reverts: 0)\n\n╭------------------+----------+-------+---------+----------╮\n| Contract         | Selector | Calls | Reverts | Discards |\n+==========================================================+\n| LetterboxHandler | advance  | 537   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | answer   | 575   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | appeal   | 573   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | deliver  | 591   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | fail     | 533   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | poke     | 560   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | sell     | 570   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | settle   | 586   | 0       | 0        |\n|------------------+----------+-------+---------+----------|\n| LetterboxHandler | write    | 595   | 0       | 0        |\n╰------------------+----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesEveryPath() (gas: 26501897)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.58s (2.55s CPU time)\n\nRan 2 tests for test/TraderAttributionInvariant.t.sol:TraderAttributionInvariantPleaZeroTest\n[PASS]\nTraderAttributionInvariantPleaZeroTest invariants:\n[PASS] invariant_infrastructureNeverReceivesTraderCredit\n[PASS] invariant_supplyAndPoolReserveRemainBacked\n[PASS] invariant_tokensAndBuyRecordsFollowTheirIndependentRecipients\n TraderAttributionInvariantPleaZeroTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------------------+------------+-------+---------+----------╮\n| Contract                 | Selector   | Calls | Reverts | Discards |\n+====================================================================+\n| TraderAttributionHandler | advance    | 2668  | 0       | 0        |\n|--------------------------+------------+-------+---------+----------|\n| TraderAttributionHandler | buy        | 2729  | 0       | 0        |\n|--------------------------+------------+-------+---------+----------|\n| TraderAttributionHandler | pauseVault | 2795  | 0       | 0        |\n╰--------------------------+------------+-------+---------+----------╯\n\n[PASS] test_handlerExercisesFallbacksDeathAndPlainCashback() (gas: 4082613)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.63s (2.61s CPU time)\n\nRan 4 tests for test/OwnershipTransitionInvariant.t.sol:OwnershipTransitionInvariantTest\n[PASS]\nOwnershipTransitionInvariantTest invariants:\n[PASS] invariant_onlyAcceptedTransfersChangeOwnerOrAllowlistAuthority\n[PASS] invariant_ownershipChangesCannotMoveOrDuplicateCustodiedPrizes\n OwnershipTransitionInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------------------------+-------------+-------+---------+----------╮\n| Contract                   | Selector    | Calls | Reverts | Discards |\n+=======================================================================+\n| OwnershipTransitionHandler | accept      | 4148  | 0       | 0        |\n|----------------------------+-------------+-------+---------+----------|\n| OwnershipTransitionHandler | allow       | 4109  | 0       | 0        |\n|----------------------------+-------------+-------+---------+----------|\n| OwnershipTransitionHandler | closePrizes | 4010  | 0       | 0        |\n|----------------------------+-------------+-------+---------+----------|\n| OwnershipTransitionHandler | nominate    | 4117  | 0       | 0        |\n╰----------------------------+-------------+-------+---------+----------╯\n\n[PASS] test_cancelledNomineeCannotAcceptAndBothLeadersKeepTheirPrizes() (gas: 923061)\n[PASS] test_renounceClearsNominationAndDoesNotLetFormerNomineeClaimAuthority() (gas: 1148987)\n[PASS] test_replacedNomineeCannotAcceptAndNewOwnerAloneLosesTheirPrize() (gas: 1186736)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.46s (2.45s CPU time)\n\nRan 2 tests for test/TraderAttributionInvariant.t.sol:TraderAttributionInvariantTest\n[PASS]\nTraderAttributionInvariantTest invariants:\n[PASS] invariant_infrastructureNeverReceivesTraderCredit\n[PASS] invariant_supplyAndPoolReserveRemainBacked\n[PASS] invariant_tokensAndBuyRecordsFollowTheirIndependentRecipients\n TraderAttributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------------------+------------+-------+---------+----------╮\n| Contract                 | Selector   | Calls | Reverts | Discards |\n+====================================================================+\n| TraderAttributionHandler | advance    | 2668  | 0       | 0        |\n|--------------------------+------------+-------+---------+----------|\n| TraderAttributionHandler | buy        | 2729  | 0       | 0        |\n|--------------------------+------------+-------+---------+----------|\n| TraderAttributionHandler | pauseVault | 2795  | 0       | 0        |\n╰--------------------------+------------+-------+---------+----------╯\n\n[PASS] test_handlerExercisesFallbacksDeathAndPlainCashback() (gas: 4084653)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.83s (2.80s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[PASS]\nTradingPleaZeroInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_stackerHoldsNoStandingAllowanceOnTheHooksImd\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingPleaZeroInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 759   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 768   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 777   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 743   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 703   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 782   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 695   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 738   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 729   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2945928, ~: 2955041)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 9232754)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.71s (3.75s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_stackerHoldsNoStandingAllowanceOnTheHooksImd\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 759   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 768   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 777   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 743   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 703   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 782   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 695   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 738   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 729   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2946744, ~: 2955857)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 9227904)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.88s (3.94s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 831   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 819   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 810   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 814   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 877   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 786   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 773   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 867   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 857   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 758   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 3935480)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 4849403)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.31s (9.31s CPU time)\n\nRan 66 test suites in 9.63s (43.50s CPU time): 550 tests passed, 0 failed, 2 skipped (552 total tests)\n","passed":true},{"durationMs":188,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.appealFor(address,uint256,uint256,uint256,string,uint8,uint256,uint256)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.executeSellFor(uint256,uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitFor(address,uint256,uint256,string,uint8,uint256,uint256)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Letterbox.appealAuto(uint256,string)\",\"Letterbox.deliver(uint256)\",\"Letterbox.fallback()\",\"Letterbox.letter(string)\",\"Letterbox.plead(uint256,string)\",\"Letterbox.setName(string)\",\"Letterbox.settle(uint256)\",\"PLEA.acceptOwnership()\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.courtTake(address,uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address)\",\"PLEA.setLetterbox(address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.deployLetterbox(bytes)\",\"PleaLaunch.deployTribunal(bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.checkpointObjection(uint256,uint256)\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\",\"Tribunal.expire(uint256)\",\"Tribunal.object(uint256,string)\",\"Tribunal.onObjectionFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Tribunal.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Tribunal.settle(uint256)\"],\"files\":{\".gitignore\":4,\"ADAPTATION.md\":50,\"OBJECTIONS.md\":339,\"README.md\":295,\"foundry.toml\":25,\"launch.json\":57,\"remappings.txt\":4,\"script/Deploy.s.sol\":79,\"script/DeployLetterbox.s.sol\":22,\"script/DeployTribunal.s.sol\":22,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":829,\"src/Letterbox.sol\":697,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":151,\"src/PleaDistributor.sol\":49,\"src/PleaHook.sol\":1062,\"src/PleaLaunch.sol\":186,\"src/Seasons.sol\":432,\"src/Tribunal.sol\":527,\"src/interfaces/IPleaParts.sol\":75,\"src/interfaces/IStacker.sol\":12,\"test/AppealRounding.t.sol\":140,\"test/ArtifactDeployment.t.sol\":59,\"test/AuditImported.t.sol\":142,\"test/AuditRevision.t.sol\":277,\"test/AuditRun3.t.sol\":393,\"test/AuditRun5.t.sol\":186,\"test/BonusInvariant.t.sol\":539,\"test/DistributorAdversarial.t.sol\":340,\"test/GasPass.t.sol\":341,\"test/Gate.t.sol\":409,\"test/GateAdversarial.t.sol\":400,\"test/GateFailureInvariant.t.sol\":330,\"test/Hook.t.sol\":357,\"test/HookAdversarial.t.sol\":256,\"test/HookRevision.t.sol\":392,\"test/JudgeFindings.t.sol\":217,\"test/Launch.t.sol\":173,\"test/LaunchManifest.t.sol\":367,\"test/Letterbox.t.sol\":818,\"test/LetterboxInvariant.t.sol\":441,\"test/OracleConformance.t.sol\":116,\"test/OracleReplay.t.sol\":60,\"test/Orientation.t.sol\":58,\"test/OwnershipTransitionInvariant.t.sol\":238,\"test/SeasonAdversarial.t.sol\":211,\"test/SeasonFunds.t.sol\":349,\"test/SeasonInvariant.t.sol\":346,\"test/SeasonRanking.t.sol\":174,\"test/Seasons.t.sol\":287,\"test/Token.t.sol\":80,\"test/TraderAttributionInvariant.t.sol\":287,\"test/TraderFallbackAdversarial.t.sol\":307,\"test/TraderResolution.t.sol\":223,\"test/TraderResolverBoundary.t.sol\":126,\"test/TradingInvariant.t.sol\":493,\"test/Tribunal.t.sol\":484,\"test/TribunalAdversarial.t.sol\":225,\"test/TribunalSeasons.t.sol\":300,\"test/TribunalStanding.t.sol\":217,\"test/fork/ForkMainnet.t.sol\":390,\"test/fork/ForkTestnet.t.sol\":867,\"test/utils/AdversarialTraderRouter.sol\":38,\"test/utils/ArtifactDeployment.sol\":23,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":318,\"test/utils/Mocks.sol\":324,\"test/utils/SeasonModel.sol\":117,\"test/utils/SepoliaFixture.sol\":36},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed; 1 finding(s) for the step that wrote the contracts","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"9b704bf3cd7a185213153d686fcba02fe47d6899f3fbc09c272ed60cf6d76a76","verifiedTreeHash":"18740997c7b4c940a8a7866436ce756456e5a774","verifierVersion":"0.1.0+67c588fa"}]}