// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.19; import {Optimizer} from "./Optimizer.sol"; import {OptimizerInput} from "./IOptimizer.sol"; /** * @title OptimizerV3 * @notice UUPS-upgradeable Optimizer whose calculateParams is overridden by * the Push3 transpiler output. The body below is a verbatim copy of * OptimizerV3Push3.calculateParams — kept in sync by the deploy pipeline * (transpile → overwrite this file → compile → upgrade). * * @dev No new storage slots. Only overrides the pure calculateParams function. * Register-to-output mapping must match OptimizerV3Push3 exactly: * r40 → ci, r39 → anchorShare, r38 → anchorWidth, r37 → discoveryDepth */ contract OptimizerV3 is Optimizer { function calculateParams(OptimizerInput[8] memory inputs) public pure override returns (uint256 ci, uint256 anchorShare, uint24 anchorWidth, uint256 discoveryDepth) { // ── BEGIN TRANSPILER OUTPUT (optimizer_v3.push3) ── // Do NOT edit by hand — regenerate via: npx tsx tools/push3-transpiler/transpile-cli.ts uint256 percentagestaked = uint256(uint256(inputs[0].mantissa)); uint256 taxrate = uint256(uint256(inputs[1].mantissa)); uint256 staked = uint256(((percentagestaked * 100) / 1000000000000000000)); uint256 r37; uint256 r38; uint256 r39; uint256 r40; if ((staked > 91)) { uint256 deltas = uint256((100 - staked)); uint256 r0; if ((taxrate <= 206185567010309)) { r0 = 0; } else { uint256 r1; if ((taxrate <= 412371134020618)) { r1 = 1; } else { uint256 r2; if ((taxrate <= 618556701030927)) { r2 = 2; } else { uint256 r3; if ((taxrate <= 1030927835051546)) { r3 = 3; } else { uint256 r4; if ((taxrate <= 1546391752577319)) { r4 = 4; } else { uint256 r5; if ((taxrate <= 2164948453608247)) { r5 = 5; } else { uint256 r6; if ((taxrate <= 2783505154639175)) { r6 = 6; } else { uint256 r7; if ((taxrate <= 3608247422680412)) { r7 = 7; } else { uint256 r8; if ((taxrate <= 4639175257731958)) { r8 = 8; } else { uint256 r9; if ((taxrate <= 5670103092783505)) { r9 = 9; } else { uint256 r10; if ((taxrate <= 7216494845360824)) { r10 = 10; } else { uint256 r11; if ((taxrate <= 9278350515463917)) { r11 = 11; } else { uint256 r12; if ((taxrate <= 11855670103092783)) { r12 = 12; } else { uint256 r13; if ((taxrate <= 15979381443298969)) { r13 = 13; } else { uint256 r14; if ((taxrate <= 22164948453608247)) { r14 = 14; } else { uint256 r15; if ((taxrate <= 29381443298969072)) { r15 = 15; } else { uint256 r16; if ((taxrate <= 38144329896907216)) { r16 = 16; } else { uint256 r17; if ((taxrate <= 49484536082474226)) { r17 = 17; } else { uint256 r18; if ((taxrate <= 63917525773195876)) { r18 = 18; } else { uint256 r19; if ( ( taxrate <= 83505154639175257 ) ) { r19 = 19; } else { uint256 r20; if ( ( taxrate <= 109278350515463917 ) ) { r20 = 20; } else { uint256 r21; if ( ( taxrate <= 144329896907216494 ) ) { r21 = 21; } else { uint256 r22; if ( ( taxrate <= 185567010309278350 ) ) { r22 = 22; } else { uint256 r23; if ( ( taxrate <= 237113402061855670 ) ) { r23 = 23; } else { uint256 r24; if ( ( taxrate <= 309278350515463917 ) ) { r24 = 24; } else { uint256 r25; if ( ( taxrate <= 402061855670103092 ) ) { r25 = 25; } else { uint256 r26; if ( ( taxrate <= 520618556701030927 ) ) { r26 = 26; } else { uint256 r27; if ( ( taxrate <= 680412371134020618 ) ) { r27 = 27; } else { uint256 r28; if ( ( taxrate <= 886597938144329896 ) ) { r28 = 28; } else { r28 = 29; } r27 = r28; } r26 = r27; } r25 = r26; } r24 = r25; } r23 = r24; } r22 = r23; } r21 = r22; } r20 = r21; } r19 = r20; } r18 = r19; } r17 = r18; } r16 = r17; } r15 = r16; } r14 = r15; } r13 = r14; } r12 = r13; } r11 = r12; } r10 = r11; } r9 = r10; } r8 = r9; } r7 = r8; } r6 = r7; } r5 = r6; } r4 = r5; } r3 = r4; } r2 = r3; } r1 = r2; } r0 = r1; } uint256 dup29 = r0; uint256 r32; if ((dup29 >= 14)) { uint256 dup30 = uint256((dup29 + 1)); if ((dup30 > 29)) { r32 = 29; } else { r32 = dup30; } } else { r32 = dup29; } uint256 effidx = r32; if ((((((deltas * deltas) * deltas) * effidx) / 20) < 50)) { r37 = uint256(1000000000000000000); r38 = uint256(20); r39 = uint256(1000000000000000000); r40 = uint256(0); } else { r37 = uint256(300000000000000000); r38 = uint256(100); r39 = uint256(300000000000000000); r40 = uint256(0); } } else { r37 = uint256(300000000000000000); r38 = uint256(100); r39 = uint256(300000000000000000); r40 = uint256(0); } // Register-to-output mapping (matches OptimizerV3Push3 exactly) ci = uint256(r40); anchorShare = uint256(r39); anchorWidth = uint24(r38); discoveryDepth = uint256(r37); // ── END TRANSPILER OUTPUT ── } }