7274b3df-d91b-4045-b726-0de8607e38de
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 30748 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 75484 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 75485 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 75486 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 75487 | capability.graph | complete | 1 / 3 | 1 week ago |
| 75488 | detector.run | complete | 1 / 3 | 1 week ago |
| 75489 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1072658] OpenAI Codex v0.77.0 (research preview)
[codex:1072658] --------
[codex:1072658] workdir: /tmp/codex-multi-p4zzvhn5
[codex:1072658] model: gpt-5.2-codex
[codex:1072658] provider: openai
[codex:1072658] approval: never
[codex:1072658] sandbox: read-only
[codex:1072658] reasoning effort: xhigh
[codex:1072658] reasoning summaries: auto
[codex:1072658] session id: 019b70d0-11d5-7340-8a58-4ea49ead78a1
[codex:1072658] --------
[codex:1072658] user
[codex:1072658] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1072658] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1072658] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1072658]
[codex:1072658] Scope rules:
[codex:1072658] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1072658] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1072658]
[codex:1072658] Output MUST be valid JSON matching the provided schema.
[codex:1072658] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1072658] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1072658]
[codex:1072658] Output constraints (IMPORTANT):
[codex:1072658] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1072658] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1072658] mcp startup: no servers
[codex:1072658]
[codex:1072658] thinking
[codex:1072658] **Preparing to read skill instructions**
[codex:1072658] exec
[codex:1072658] /bin/bash -lc ls in /tmp/codex-multi-p4zzvhn5 succeeded in 5ms:
[codex:1072658] AUDIT_BUNDLE.txt
[codex:1072658] codex-output-schema.json
[codex:1072658] contracts
[codex:1072658]
[codex:1072658] thinking
[codex:1072658] **Reading AUDIT_BUNDLE.txt contents**
[codex:1072658] exec
[codex:1072658] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-p4zzvhn5 succeeded in 6ms:
[codex:1072658] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1072658]
[codex:1072658] ================================================================================
[codex:1072658] FILE: contracts/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol
[codex:1072658] ================================================================================
[codex:1072658] // SPDX-License-Identifier: MIT
[codex:1072658] // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
[codex:1072658]
[codex:1072658] pragma solidity ^0.8.0;
[codex:1072658]
[codex:1072658] /**
[codex:1072658] * @dev Interface of the ERC20 standard as defined in the EIP.
[codex:1072658] */
[codex:1072658] interface IERC20 {
[codex:1072658] /**
[codex:1072658] * @dev Emitted when `value` tokens are moved from one account (`from`) to
[codex:1072658] * another (`to`).
[codex:1072658] *
[codex:1072658] * Note that `value` may be zero.
[codex:1072658] */
[codex:1072658]
[codex:1072658] thinking
[codex:1072658] **Planning first-party contract analysis**
[codex:1072658] exec
[codex:1072658] /bin/bash -lc 'rg -n "''^FILE: contracts/src" AUDIT_BUNDLE.txt' in /tmp/codex-multi-p4zzvhn5 succeeded in 7ms:
[codex:1072658] 5462:FILE: contracts/src/SablierV2MerkleStreamerLL.sol
[codex:1072658] 5570:FILE: contracts/src/abstracts/SablierV2MerkleStreamer.sol
[codex:1072658] 5722:FILE: contracts/src/interfaces/ISablierV2MerkleStreamer.sol
[codex:1072658] 5805:FILE: contracts/src/interfaces/ISablierV2MerkleStreamerLL.sol
[codex:1072658] 5857:FILE: contracts/src/libraries/Errors.sol
[codex:1072658]
[codex:1072658] thinking
[codex:1072658] **Analyzing first-party files for vulnerabilities**
[codex:1072658] exec
[codex:1072658] /bin/bash -lc "sed -n '5460,5625p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-p4zzvhn5 succeeded in 6ms:
[codex:1072658]
[codex:1072658] ================================================================================
[codex:1072658] FILE: contracts/src/SablierV2MerkleStreamerLL.sol
[codex:1072658] ================================================================================
[codex:1072658] // SPDX-License-Identifier: GPL-3.0-or-later
[codex:1072658] pragma solidity >=0.8.19;
[codex:1072658]
[codex:1072658] import { BitMaps } from "@openzeppelin/contracts/utils/structs/BitMaps.sol";
[codex:1072658] import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:1072658] import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:1072658] import { ISablierV2LockupLinear } from "@sablier/v2-core/src/interfaces/ISablierV2LockupLinear.sol";
[codex:1072658] import { Broker, LockupLinear } from "@sablier/v2-core/src/types/DataTypes.sol";
[codex:1072658] import { ud } from "@prb/math/src/UD60x18.sol";
[codex:1072658]
[codex:1072658] import { SablierV2MerkleStreamer } from "./abstracts/SablierV2MerkleStreamer.sol";
[codex:1072658] import { ISablierV2MerkleStreamerLL } from "./interfaces/ISablierV2MerkleStreamerLL.sol";
[codex:1072658]
[codex:1072658] /// @title SablierV2MerkleStreamerLL
[codex:1072658] /// @notice See the documentation in {ISablierV2MerkleStreamerLL}.
[codex:1072658] contract SablierV2MerkleStreamerLL is
[codex:1072658] exec
[codex:1072658] /bin/bash -lc "sed -n '5625,5795p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-p4zzvhn5 succeeded in 6ms:
[codex:1072658] CONSTRUCTOR
[codex:1072658] //////////////////////////////////////////////////////////////////////////*/
[codex:1072658]
[codex:1072658] /// @dev Constructs the contract by initializing the immutable state variables.
[codex:1072658] constructor(
[codex:1072658] address initialAdmin,
[codex:1072658] IERC20 asset,
[codex:1072658] ISablierV2Lockup lockup,
[codex:1072658] bytes32 merkleRoot,
[codex:1072658] uint40 expiration,
[codex:1072658] bool cancelable,
[codex:1072658] bool transferable
[codex:1072658] ) {
[codex:1072658] admin = initialAdmin;
[codex:1072658] ASSET = asset;
[codex:1072658] LOCKUP = lockup;
[codex:1072658] MERKLE_ROOT = merkleRoot;
[codex:1072658] EXPIRATION = expiration;
[codex:1072658] CANCELABLE = cancelable;
[codex:1072658] TRANSFERABLE = transferable;
[codex:1072658] exec
[codex:1072658] /bin/bash -lc "sed -n '5795,5895p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-p4zzvhn5 succeeded in 5ms:
[codex:1072658] /// Requirements:
[codex:1072658] /// - The caller must be the admin.
[codex:1072658] /// - The campaign must either be expired or not have an expiration.
[codex:1072658] ///
[codex:1072658] /// @param to The address to receive the tokens.
[codex:1072658] /// @param amount The amount of tokens to claw back.
[codex:1072658] function clawback(address to, uint128 amount) external;
[codex:1072658] }
[codex:1072658]
[codex:1072658] ================================================================================
[codex:1072658] FILE: contracts/src/interfaces/ISablierV2MerkleStreamerLL.sol
[codex:1072658] ================================================================================
[codex:1072658] // SPDX-License-Identifier: GPL-3.0-or-later
[codex:1072658] pragma solidity >=0.8.19;
[codex:1072658]
[codex:1072658] import { ISablierV2LockupLinear } from "@sablier/v2-core/src/interfaces/ISablierV2LockupLinear.sol";
[codex:1072658]
[codex:1072658] import { ISablierV2MerkleStreamer } from "./ISablierV2MerkleStreamer.sol";
[codex:1072658]
[codex:1072658] /// @title ISablierV2MerkleStreamerLL
[codex:1072658]
[codex:1072658] thinking
[codex:1072658] **Analyzing contract vulnerabilities and risks**
[codex:1072658]
[codex:1072658] I’m carefully examining key concerns like reentrancy, access control, and external calls in the SablierV2MerkleStreamerLL contract, focusing on claim and clawback functions, admin roles, and token approvals. I'm noting that the claim function marks state before external calls to mitigate reentrancy, but lack of restrictions on callers could have implications. Also, the clawback logic has a subtle bug that might lock funds if expiration is zero and protocol fees are zero, representing an accounting/invariant risk rather than a direct exploit. The unlimited token approval to a third-party lockup contract presents a risk if that contract is compromised or upgradeable. Overall, I’m assessing each potential vulnerability against expected behavior and external dependencies to flag real risks and potential misconfigurations.
[codex:1072658] exec
[codex:1072658] /bin/bash -lc "nl -ba contracts/src/abstracts/SablierV2MerkleStreamer.sol | sed -n '40,140p'" in /tmp/codex-multi-p4zzvhn5 succeeded in 7ms:
[codex:1072658] 40 /// @inheritdoc ISablierV2MerkleStreamer
[codex:1072658] 41 bytes32 public immutable override MERKLE_ROOT;
[codex:1072658] 42
[codex:1072658] 43 /// @inheritdoc ISablierV2MerkleStreamer
[codex:1072658] 44 bool public immutable override TRANSFERABLE;
[codex:1072658] 45
[codex:1072658] 46 /*//////////////////////////////////////////////////////////////////////////
[codex:1072658] 47 INTERNAL STORAGE
[codex:1072658] 48 //////////////////////////////////////////////////////////////////////////*/
[codex:1072658] 49
[codex:1072658] 50 /// @dev Packed booleans that record the history of claims.
[codex:1072658] 51 BitMaps.BitMap internal _claimedBitMap;
[codex:1072658] 52
[codex:1072658] 53 /*//////////////////////////////////////////////////////////////////////////
[codex:1072658] 54 CONSTRUCTOR
[codex:1072658] 55 //////////////////////////////////////////////////////////////////////////*/
[codex:1072658] 56
[codex:1072658] 57 /// @dev Constructs the contract by initializing the immutable state variables.
[codex:1072658] 58 constructor(
[codex:1072658] 59 address initialAdmin,
[codex:1072658]
[codex:1072658] thinking
[codex:1072658] **Checking for line numbers in key functions**
[codex:1072658] exec
[codex:1072658] /bin/bash -lc "nl -ba contracts/src/SablierV2MerkleStreamerLL.sol | sed -n '60,180p'" in /tmp/codex-multi-p4zzvhn5 succeeded in 6ms:
[codex:1072658] 60 }
[codex:1072658] 61
[codex:1072658] 62 /*//////////////////////////////////////////////////////////////////////////
[codex:1072658] 63 USER-FACING NON-CONSTANT FUNCTIONS
[codex:1072658] 64 //////////////////////////////////////////////////////////////////////////*/
[codex:1072658] 65
[codex:1072658] 66 /// @inheritdoc ISablierV2MerkleStreamerLL
[codex:1072658] 67 function claim(
[codex:1072658] 68 uint256 index,
[codex:1072658] 69 address recipient,
[codex:1072658] 70 uint128 amount,
[codex:1072658] 71 bytes32[] calldata merkleProof
[codex:1072658] 72 )
[codex:1072658] 73 external
[codex:1072658] 74 override
[codex:1072658] 75 returns (uint256 streamId)
[codex:1072658] 76 {
[codex:1072658] 77 // Generate the Merkle tree leaf by hashing the corresponding parameters. Hashing twice prevents second
[codex:1072658] 78 // preimage attacks.
[codex:1072658] 79 bytes32 leaf = keccak256(bytes.concat(keccak256(abi.encode(index, recipient, amount))));
[codex:1072658]
[codex:1072658] thinking
[codex:1072658] **Evaluating potential contract logic issues**
[codex:1072658] exec
[codex:1072658] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-p4zzvhn5 succeeded in 5ms:
[codex:1072658] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:1072658]
[codex:1072658] thinking
[codex:1072658] **Constructing detailed JSON findings**
[codex:1072658] codex
[codex:1072658] {"no_findings":false,"summary":"Found 1 low-severity logic issue: clawback cannot execute for non-expiring campaigns when protocol fee is zero, potentially locking unclaimed funds.","findings":[{"severity":"low","category":"other","title":"Non-expiring campaigns cannot be clawed back when protocol fee is zero","exploit_scenario":"If the contract is deployed with EXPIRATION = 0 (intended “no expiration”) and the protocol fee remains zero, the admin’s clawback will always revert. Any unclaimed tokens become permanently stuck in the Merkle streamer unless the protocol fee later becomes non-zero.","recommendation":"Allow clawback when EXPIRATION == 0 (no expiration), or change the condition to only require expiry when EXPIRATION != 0. For example: `if (EXPIRATION != 0 && !hasExpired() && !protocolFee.gt(ud(0))) revert`.","evidence":"`hasExpired()` returns false when EXPIRATION == 0, and `clawback` reverts whenever `!hasExpired()` and protocolFee is zero, blocking the no-expiration case.","locations":["contracts/src/abstracts/SablierV2MerkleStreamer.sol:86","contracts/src/abstracts/SablierV2MerkleStreamer.sol:95"]}]}
[codex:1072658] tokens used
[codex:1072658] 63,687
[codex:1072658] {"no_findings":false,"summary":"Found 1 low-severity logic issue: clawback cannot execute for non-expiring campaigns when protocol fee is zero, potentially locking unclaimed funds.","findings":[{"severity":"low","category":"other","title":"Non-expiring campaigns cannot be clawed back when protocol fee is zero","exploit_scenario":"If the contract is deployed with EXPIRATION = 0 (intended “no expiration”) and the protocol fee remains zero, the admin’s clawback will always revert. Any unclaimed tokens become permanently stuck in the Merkle streamer unless the protocol fee later becomes non-zero.","recommendation":"Allow clawback when EXPIRATION == 0 (no expiration), or change the condition to only require expiry when EXPIRATION != 0. For example: `if (EXPIRATION != 0 && !hasExpired() && !protocolFee.gt(ud(0))) revert`.","evidence":"`hasExpired()` returns false when EXPIRATION == 0, and `clawback` reverts whenever `!hasExpired()` and protocolFee is zero, blocking the no-expiration case.","locations":["contracts/src/abstracts/SablierV2MerkleStreamer.sol:86","contracts/src/abstracts/SablierV2MerkleStreamer.sol:95"]}]}
{
"codex": {
"ran_at": "2025-12-30T19:53:27.517882+00:00",
"returncode": 0
},
"summary": "Found 1 low-severity logic issue: clawback cannot execute for non-expiring campaigns when protocol fee is zero, potentially locking unclaimed funds.",
"raw_final": {
"summary": "Found 1 low-severity logic issue: clawback cannot execute for non-expiring campaigns when protocol fee is zero, potentially locking unclaimed funds.",
"findings": [
{
"title": "Non-expiring campaigns cannot be clawed back when protocol fee is zero",
"category": "other",
"evidence": "`hasExpired()` returns false when EXPIRATION == 0, and `clawback` reverts whenever `!hasExpired()` and protocolFee is zero, blocking the no-expiration case.",
"severity": "low",
"locations": [
"contracts/src/abstracts/SablierV2MerkleStreamer.sol:86",
"contracts/src/abstracts/SablierV2MerkleStreamer.sol:95"
],
"recommendation": "Allow clawback when EXPIRATION == 0 (no expiration), or change the condition to only require expiry when EXPIRATION != 0. For example: `if (EXPIRATION != 0 && !hasExpired() && !protocolFee.gt(ud(0))) revert`.",
"exploit_scenario": "If the contract is deployed with EXPIRATION = 0 (intended \u201cno expiration\u201d) and the protocol fee remains zero, the admin\u2019s clawback will always revert. Any unclaimed tokens become permanently stuck in the Merkle streamer unless the protocol fee later becomes non-zero."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: DUP2 00000005: DUP2 00000006: MSTORE 00000007: PUSH1 0x04 00000009: CALLDATASIZE 0000000a: LT 0000000b: ISZERO 0000000c: PUSH2 0x0014 0000000f: JUMPI 00000010: PUSH1 0x00 00000012: DUP1 00000013: REVERT 00000014: JUMPDEST 00000015: PUSH1 0x00 00000017: SWAP2 00000018: DUP3 00000019: CALLDATALOAD 0000001a: PUSH1 0xe0 0000001c: SHR 0000001d: SWAP1 0000001e: DUP2 0000001f: PUSH4 0x1686c909 00000024: EQ 00000025: PUSH2 0x0ba1 00000028: JUMPI 00000029: POP 0000002a: DUP1 0000002b: PUSH4 0x16c3549d 00000030: EQ 00000031: PUSH2 0x0b65 00000034: JUMPI 00000035: DUP1 00000036: PUSH4 0x1bfd6814 0000003b: EQ 0000003c: PUSH2 0x0b29 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x3bfe03a8 00000046: EQ 00000047: PUSH2 0x0afa 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x3f31ae3f 00000051: EQ 00000052: PUSH2 0x039e 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0x4800d97f 0000005c: EQ 0000005d: PUSH2 0x034e 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0x51e75e8b 00000067: EQ 00000068: PUSH2 0x0314 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0x75829def 00000072: EQ 00000073: PUSH2 0x0230 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0x845aef4b 0000007d: EQ 0000007e: PUSH2 0x01e0 00000081: JUMPI 00000082: DUP1 00000083: PUSH4 0x90e64d13 00000088: EQ 00000089: PUSH2 0x01c4 0000008c: JUMPI 0000008d: DUP1 0000008e: PUSH4 0x9e93e577 00000093: EQ 00000094: PUSH2 0x0174 00000097: JUMPI 00000098: DUP1 00000099: PUSH4 0xbb4b5734 0000009e: EQ 0000009f: PUSH2 0x0133 000000a2: JUMPI 000000a3: DUP1 000000a4: PUSH4 0xce516507 000000a9: EQ 000000aa: PUSH2 0x00f1 000000ad: JUMPI 000000ae: PUSH4 0xf851a440 000000b3: EQ 000000b4: PUSH2 0x00bc 000000b7: JUMPI 000000b8: PUSH1 0x00 000000ba: DUP1 000000bb: REVERT 000000bc: JUMPDEST 000000bd: CALLVALUE 000000be: PUSH2 0x00ed 000000c1: JUMPI 000000c2: DUP2 000000c3: PUSH1 0x03 000000c5: NOT 000000c6: CALLDATASIZE 000000c7: ADD 000000c8: SLT 000000c9: PUSH2 0x00ed 000000cc: JUMPI 000000cd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000000e2: PUSH1 0x20 000000e4: SWAP3 000000e5: SLOAD 000000e6: AND 000000e7: SWAP1 000000e8: MLOAD 000000e9: SWAP1 000000ea: DUP2 000000eb: MSTORE 000000ec: RETURN 000000ed: JUMPDEST 000000ee: POP 000000ef: DUP1 000000f0: REVERT 000000f1: JUMPDEST 000000f2: POP 000000f3: CALLVALUE 000000f4: PUSH2 0x00ed 000000f7: JUMPI 000000f8: PUSH1 0x20 000000fa: PUSH1 0x03 000000fc: NOT 000000fd: CALLDATASIZE 000000fe: ADD 000000ff: SLT 00000100: PUSH2 0x00ed 00000103: JUMPI 00000104: PUSH1 0x20 00000106: SWAP1 00000107: PUSH2 0x012a 0000010a: PUSH1 0x04 0000010c: CALLDATALOAD 0000010d: PUSH1 0xff 0000010f: PUSH1 0x01 00000111: SWAP2 00000112: DUP1 00000113: PUSH1 0x08 00000115: SHR 00000116: PUSH1 0x00 00000118: MSTORE 00000119: DUP3 0000011a: PUSH1 0x20 0000011c: MSTORE 0000011d: AND 0000011e: SHL 0000011f: PUSH1 0x40 00000121: PUSH1 0x00 00000123: KECCAK256 00000124: SLOAD 00000125: AND 00000126: ISZERO 00000127: ISZERO 00000128: SWAP1 00000129: JUMP 0000012a: JUMPDEST 0000012b: SWAP1 0000012c: MLOAD 0000012d: SWAP1 0000012e: ISZERO 0000012f: ISZERO 00000130: DUP2 00000131: MSTORE 00000132: RETURN 00000133: JUMPDEST 00000134: POP 00000135: CALLVALUE 00000136: PUSH2 0x00ed 00000139: JUMPI 0000013a: DUP2 0000013b: PUSH1 0x03 0000013d: NOT 0000013e: CALLDATASIZE 0000013f: ADD 00000140: SLT 00000141: PUSH2 0x00ed 00000144: JUMPI 00000145: PUSH1 0x20 00000147: SWAP1 00000148: MLOAD 00000149: PUSH5 0xffffffffff 0000014f: PUSH32 0x0000000000000000000000000000000000000000000000000000000066623070 00000170: AND 00000171: DUP2 00000172: MSTORE 00000173: RETURN 00000174: JUMPDEST 00000175: POP 00000176: CALLVALUE 00000177: PUSH2 0x00ed 0000017a: JUMPI 0000017b: DUP2 0000017c: PUSH1 0x03 0000017e: NOT 0000017f: CALLDATASIZE 00000180: ADD 00000181: SLT 00000182: PUSH2 0x00ed 00000185: JUMPI 00000186: PUSH1 0x20 00000188: SWAP1 00000189: MLOAD 0000018a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000019f: PUSH32 0x000000000000000000000000afb979d9afad1ad27c5eff4e27226e3ab9e5dcc9 000001c0: AND 000001c1: DUP2 000001c2: MSTORE 000001c3: RETURN 000001c4: JUMPDEST 000001c5: POP 000001c6: CALLVALUE 000001c7: PUSH2 0x00ed 000001ca: JUMPI 000001cb: DUP2 000001cc: PUSH1 0x03 000001ce: NOT 000001cf: CALLDATASIZE 000001d0: ADD 000001d1: SLT 000001d2: PUSH2 0x00ed 000001d5: JUMPI 000001d6: PUSH1 0x20 000001d8: SWAP1 000001d9: PUSH2 0x012a 000001dc: PUSH2 0x10c5 000001df: JUMP 000001e0: JUMPDEST 000001e1: POP 000001e2: CALLVALUE 000001e3: PUSH2 0x00ed 000001e6: JUMPI 000001e7: DUP2 000001e8: PUSH1 0x03 000001ea: NOT 000001eb: CALLDATASIZE 000001ec: ADD 000001ed: SLT 000001ee: PUSH2 0x00ed 000001f1: JUMPI 000001f2: PUSH1 0x20 000001f4: SWAP1 000001f5: MLOAD 000001f6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000020b: PUSH32 0x000000000000000000000000afb979d9afad1ad27c5eff4e27226e3ab9e5dcc9 0000022c: AND 0000022d: DUP2 0000022e: MSTORE 0000022f: RETURN 00000230: JUMPDEST 00000231: POP 00000232: SWAP1 00000233: CALLVALUE 00000234: PUSH2 0x0311 00000237: JUMPI 00000238: PUSH1 0x20 0000023a: PUSH1 0x03 0000023c: NOT 0000023d: CALLDATASIZE 0000023e: ADD 0000023f: SLT 00000240: PUSH2 0x0311 00000243: JUMPI 00000244: PUSH2 0x024b 00000247: PUSH2 0x0ff5 0000024a: JUMP 0000024b: JUMPDEST 0000024c: DUP2 0000024d: SLOAD 0000024e: SWAP1 0000024f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000264: SWAP1 00000265: DUP2 00000266: DUP4 00000267: AND 00000268: CALLER 00000269: DUP2 0000026a: SUB 0000026b: PUSH2 0x02c3 0000026e: JUMPI 0000026f: POP 00000270: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000291: SWAP4 00000292: SWAP5 00000293: POP 00000294: AND 00000295: SWAP2 00000296: DUP3 00000297: SWAP2 00000298: AND 00000299: OR 0000029a: DUP3 0000029b: SSTORE 0000029c: CALLER 0000029d: PUSH32 0xbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf80 000002be: DUP4 000002bf: DUP1 000002c0: LOG3 000002c1: DUP1 000002c2: RETURN 000002c3: JUMPDEST 000002c4: DUP6 000002c5: MLOAD 000002c6: PUSH32 0xc6cce6a400000000000000000000000000000000000000000000000000000000 000002e7: DUP2 000002e8: MSTORE 000002e9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002fe: SWAP2 000002ff: SWAP1 00000300: SWAP2 00000301: AND 00000302: PUSH1 0x04 00000304: DUP3 00000305: ADD 00000306: MSTORE 00000307: CALLER 00000308: PUSH1 0x24 0000030a: DUP3 0000030b: ADD 0000030c: MSTORE 0000030d: PUSH1 0x44 0000030f: SWAP1 00000310: REVERT 00000311: JUMPDEST 00000312: DUP1 00000313: REVERT 00000314: JUMPDEST 00000315: POP 00000316: CALLVALUE 00000317: PUSH2 0x00ed 0000031a: JUMPI 0000031b: DUP2 0000031c: PUSH1 0x03 0000031e: NOT 0000031f: CALLDATASIZE 00000320: ADD 00000321: SLT 00000322: PUSH2 0x00ed 00000325: JUMPI 00000326: PUSH1 0x20 00000328: SWAP1 00000329: MLOAD 0000032a: PUSH32 0xd04e8fbdf6a46893f163f06dcbc1f919b2cd906ef4ee25002d11f7932410f3b7 0000034b: DUP2 0000034c: MSTORE 0000034d: RETURN 0000034e: JUMPDEST 0000034f: POP 00000350: CALLVALUE 00000351: PUSH2 0x00ed 00000354: JUMPI 00000355: DUP2 00000356: PUSH1 0x03 00000358: NOT 00000359: CALLDATASIZE 0000035a: ADD 0000035b: SLT 0000035c: PUSH2 0x00ed 0000035f: JUMPI 00000360: PUSH1 0x20 00000362: SWAP1 00000363: MLOAD 00000364: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000379: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 0000039a: AND 0000039b: DUP2 0000039c: MSTORE 0000039d: RETURN 0000039e: JUMPDEST 0000039f: POP 000003a0: SWAP1 000003a1: CALLVALUE 000003a2: PUSH2 0x0311 000003a5: JUMPI 000003a6: PUSH1 0x80 000003a8: PUSH1 0x03 000003aa: NOT 000003ab: CALLDATASIZE 000003ac: ADD 000003ad: SLT 000003ae: PUSH2 0x0311 000003b1: JUMPI 000003b2: PUSH1 0x04 000003b4: CALLDATALOAD 000003b5: SWAP2 000003b6: PUSH1 0x24 000003b8: CALLDATALOAD 000003b9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003ce: DUP2 000003cf: AND 000003d0: DUP1 000003d1: SWAP2 000003d2: SUB 000003d3: PUSH2 0x0af6 000003d6: JUMPI 000003d7: PUSH1 0x44 000003d9: CALLDATALOAD 000003da: SWAP1 000003db: PUSH16 0xffffffffffffffffffffffffffffffff 000003ec: DUP3 000003ed: AND 000003ee: DUP1 000003ef: SWAP3 000003f0: SUB 000003f1: PUSH2 0x0af2 000003f4: JUMPI 000003f5: PUSH1 0x64 000003f7: CALLDATALOAD 000003f8: SWAP1 000003f9: PUSH8 0xffffffffffffffff 00000402: SWAP6 00000403: DUP7 00000404: DUP4 00000405: GT 00000406: PUSH2 0x0aee 00000409: JUMPI 0000040a: CALLDATASIZE 0000040b: PUSH1 0x23 0000040d: DUP5 0000040e: ADD 0000040f: SLT 00000410: ISZERO 00000411: PUSH2 0x0aee 00000414: JUMPI 00000415: DUP3 00000416: PUSH1 0x04 00000418: ADD 00000419: CALLDATALOAD 0000041a: DUP8 0000041b: DUP2 0000041c: GT 0000041d: PUSH2 0x09d5 00000420: JUMPI 00000421: DUP1 00000422: PUSH1 0x05 00000424: SHL 00000425: SWAP4 00000426: PUSH1 0x24 00000428: DUP6 00000429: DUP3 0000042a: ADD 0000042b: ADD 0000042c: SWAP1 0000042d: CALLDATASIZE 0000042e: DUP3 0000042f: GT 00000430: PUSH2 0x0aea 00000433: JUMPI 00000434: DUP8 00000435: MLOAD 00000436: PUSH1 0x20 00000438: DUP2 00000439: ADD 0000043a: SWAP1 0000043b: DUP6 0000043c: DUP3 0000043d: MSTORE 0000043e: DUP7 0000043f: DUP11 00000440: DUP3 00000441: ADD 00000442: MSTORE 00000443: DUP9 00000444: PUSH1 0x60 00000446: DUP3 00000447: ADD 00000448: MSTORE 00000449: PUSH1 0x60 0000044b: DUP2 0000044c: MSTORE 0000044d: PUSH2 0x0455 00000450: DUP2 00000451: PUSH2 0x1068 00000454: JUMP 00000455: JUMPDEST 00000456: MLOAD 00000457: SWAP1 00000458: KECCAK256 00000459: DUP9 0000045a: MLOAD 0000045b: PUSH1 0x20 0000045d: DUP2 0000045e: ADD 0000045f: SWAP2 00000460: DUP3 00000461: MSTORE 00000462: PUSH1 0x20 00000464: DUP2 00000465: MSTORE 00000466: PUSH2 0x046e 00000469: DUP2 0000046a: PUSH2 0x101d 0000046d: JUMP 0000046e: JUMPDEST 0000046f: MLOAD 00000470: SWAP1 00000471: KECCAK256 00000472: SWAP3 00000473: PUSH2 0x047a 00000476: PUSH2 0x10c5 00000479: JUMP 0000047a: JUMPDEST 0000047b: PUSH2 0x0a8d 0000047e: JUMPI 0000047f: PUSH2 0x04a0 00000482: DUP6 00000483: PUSH1 0xff 00000485: PUSH1 0x01 00000487: SWAP2 00000488: DUP1 00000489: PUSH1 0x08 0000048b: SHR 0000048c: PUSH1 0x00 0000048e: MSTORE 0000048f: DUP3 00000490: PUSH1 0x20 00000492: MSTORE 00000493: AND 00000494: SHL 00000495: PUSH1 0x40 00000497: PUSH1 0x00 00000499: KECCAK256 0000049a: SLOAD 0000049b: AND 0000049c: ISZERO 0000049d: ISZERO 0000049e: SWAP1 0000049f: JUMP 000004a0: JUMPDEST 000004a1: PUSH2 0x0a5d 000004a4: JUMPI 000004a5: PUSH2 0x04b3 000004a8: PUSH1 0x20 000004aa: DUP11 000004ab: MLOAD 000004ac: SWAP9 000004ad: ADD 000004ae: DUP9 000004af: PUSH2 0x1084 000004b2: JUMP 000004b3: JUMPDEST 000004b4: DUP7 000004b5: MSTORE 000004b6: PUSH1 0x24 000004b8: ADD 000004b9: PUSH1 0x20 000004bb: DUP7 000004bc: ADD 000004bd: JUMPDEST 000004be: DUP3 000004bf: DUP3 000004c0: LT 000004c1: PUSH2 0x0a4d 000004c4: JUMPI 000004c5: POP 000004c6: POP 000004c7: POP 000004c8: SWAP4 000004c9: DUP7 000004ca: SWAP5 000004cb: JUMPDEST 000004cc: DUP5 000004cd: MLOAD 000004ce: DUP7 000004cf: LT 000004d0: ISZERO 000004d1: PUSH2 0x055e 000004d4: JUMPI 000004d5: PUSH1 0x20 000004d7: DUP7 000004d8: PUSH1 0x05 000004da: SHL 000004db: DUP7 000004dc: ADD 000004dd: ADD 000004de: MLOAD 000004df: SWAP1 000004e0: DUP2 000004e1: DUP2 000004e2: LT 000004e3: PUSH1 0x00 000004e5: EQ 000004e6: PUSH2 0x0550 000004e9: JUMPI 000004ea: DUP9 000004eb: MSTORE 000004ec: PUSH1 0x20 000004ee: MSTORE 000004ef: DUP6 000004f0: DUP8 000004f1: KECCAK256 000004f2: JUMPDEST 000004f3: SWAP5 000004f4: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00000515: DUP2 00000516: EQ 00000517: PUSH2 0x0523 0000051a: JUMPI 0000051b: PUSH1 0x01 0000051d: ADD 0000051e: SWAP5 0000051f: PUSH2 0x04cb 00000522: JUMP 00000523: JUMPDEST 00000524: PUSH1 0x24 00000526: DUP9 00000527: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00000548: DUP2 00000549: MSTORE 0000054a: PUSH1 0x11 0000054c: PUSH1 0x04 0000054e: MSTORE 0000054f: REVERT 00000550: JUMPDEST 00000551: SWAP1 00000552: DUP9 00000553: MSTORE 00000554: PUSH1 0x20 00000556: MSTORE 00000557: DUP6 00000558: DUP8 00000559: KECCAK256 0000055a: PUSH2 0x04f2 0000055d: JUMP 0000055e: JUMPDEST 0000055f: SWAP2 00000560: DUP7 00000561: SWAP2 00000562: DUP10 00000563: DUP10 00000564: SWAP5 00000565: PUSH32 0xd04e8fbdf6a46893f163f06dcbc1f919b2cd906ef4ee25002d11f7932410f3b7 00000586: SUB 00000587: PUSH2 0x0a24 0000058a: JUMPI 0000058b: DUP4 0000058c: MLOAD 0000058d: PUSH32 0x5fe3b56700000000000000000000000000000000000000000000000000000000 000005ae: DUP2 000005af: MSTORE 000005b0: PUSH1 0x20 000005b2: DUP2 000005b3: PUSH1 0x04 000005b5: DUP2 000005b6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000005cb: PUSH32 0x000000000000000000000000afb979d9afad1ad27c5eff4e27226e3ab9e5dcc9 000005ec: AND 000005ed: GAS 000005ee: STATICCALL 000005ef: SWAP1 000005f0: DUP2 000005f1: ISZERO 000005f2: PUSH2 0x0a1a 000005f5: JUMPI 000005f6: DUP7 000005f7: SWAP2 000005f8: PUSH2 0x09eb 000005fb: JUMPI 000005fc: JUMPDEST 000005fd: POP 000005fe: DUP5 000005ff: MLOAD 00000600: PUSH32 0xdcf844a700000000000000000000000000000000000000000000000000000000 00000621: DUP2 00000622: MSTORE 00000623: PUSH1 0x20 00000625: DUP2 00000626: PUSH1 0x24 00000628: DUP2 00000629: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000063e: DUP1 0000063f: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000660: AND 00000661: SWAP7 00000662: DUP8 00000663: PUSH1 0x04 00000665: DUP5 00000666: ADD 00000667: MSTORE 00000668: AND 00000669: GAS 0000066a: STATICCALL 0000066b: SWAP1 0000066c: DUP2 0000066d: ISZERO 0000066e: PUSH2 0x09e1 00000671: JUMPI 00000672: DUP8 00000673: SWAP2 00000674: PUSH2 0x09ab 00000677: JUMPI 00000678: JUMPDEST 00000679: POP 0000067a: PUSH2 0x0982 0000067d: JUMPI 0000067e: DUP4 0000067f: PUSH1 0x08 00000681: SHR 00000682: DUP7 00000683: MSTORE 00000684: PUSH1 0x01 00000686: PUSH1 0x20 00000688: MSTORE 00000689: DUP5 0000068a: DUP7 0000068b: KECCAK256 0000068c: PUSH1 0x01 0000068e: PUSH1 0xff 00000690: DUP7 00000691: AND 00000692: SHL 00000693: DUP2 00000694: SLOAD 00000695: OR 00000696: SWAP1 00000697: SSTORE 00000698: DUP5 00000699: MLOAD 0000069a: SWAP1 0000069b: PUSH2 0x06a3 0000069e: DUP3 0000069f: PUSH2 0x101d 000006a2: JUMP 000006a3: JUMPDEST 000006a4: DUP7 000006a5: DUP3 000006a6: MSTORE 000006a7: DUP7 000006a8: PUSH1 0x20 000006aa: DUP4 000006ab: ADD 000006ac: MSTORE 000006ad: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006c2: DUP8 000006c3: SLOAD 000006c4: AND 000006c5: DUP7 000006c6: MLOAD 000006c7: SWAP4 000006c8: PUSH2 0x0100 000006cb: DUP6 000006cc: ADD 000006cd: SWAP1 000006ce: DUP6 000006cf: DUP3 000006d0: LT 000006d1: SWAP1 000006d2: DUP3 000006d3: GT 000006d4: OR 000006d5: PUSH2 0x0955 000006d8: JUMPI 000006d9: DUP8 000006da: MSTORE 000006db: DUP4 000006dc: MSTORE 000006dd: DUP8 000006de: PUSH1 0x20 000006e0: DUP5 000006e1: ADD 000006e2: MSTORE 000006e3: DUP4 000006e4: DUP7 000006e5: DUP5 000006e6: ADD 000006e7: MSTORE 000006e8: PUSH1 0x60 000006ea: DUP4 000006eb: ADD 000006ec: MSTORE 000006ed: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 0000070e: ISZERO 0000070f: ISZERO 00000710: PUSH1 0x80 00000712: DUP4 00000713: ADD 00000714: MSTORE 00000715: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001 00000736: ISZERO 00000737: ISZERO 00000738: PUSH1 0xa0 0000073a: DUP4 0000073b: ADD 0000073c: MSTORE 0000073d: DUP5 0000073e: MLOAD 0000073f: PUSH2 0x0747 00000742: DUP2 00000743: PUSH2 0x101d 00000746: JUMP 00000747: JUMPDEST 00000748: PUSH5 0xffffffffff 0000074e: PUSH1 0x02 00000750: SLOAD 00000751: DUP2 00000752: DUP2 00000753: AND 00000754: DUP4 00000755: MSTORE 00000756: PUSH1 0x28 00000758: SHR 00000759: AND 0000075a: PUSH1 0x20 0000075c: DUP3 0000075d: ADD 0000075e: MSTORE 0000075f: PUSH1 0xc0 00000761: DUP4 00000762: ADD 00000763: MSTORE 00000764: PUSH1 0xe0 00000766: DUP3 00000767: ADD 00000768: MSTORE 00000769: PUSH1 0x20 0000076b: PUSH1 0xe0 0000076d: DUP6 0000076e: MLOAD 0000076f: SWAP3 00000770: PUSH32 0xab167ccc00000000000000000000000000000000000000000000000000000000 00000791: DUP5 00000792: MSTORE 00000793: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007a8: DUP2 000007a9: MLOAD 000007aa: AND 000007ab: PUSH1 0x04 000007ad: DUP6 000007ae: ADD 000007af: MSTORE 000007b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007c5: DUP4 000007c6: DUP3 000007c7: ADD 000007c8: MLOAD 000007c9: AND 000007ca: PUSH1 0x24 000007cc: DUP6 000007cd: ADD 000007ce: MSTORE 000007cf: PUSH16 0xffffffffffffffffffffffffffffffff 000007e0: DUP8 000007e1: DUP3 000007e2: ADD 000007e3: MLOAD 000007e4: AND 000007e5: PUSH1 0x44 000007e7: DUP6 000007e8: ADD 000007e9: MSTORE 000007ea: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007ff: PUSH1 0x60 00000801: DUP3 00000802: ADD 00000803: MLOAD 00000804: AND 00000805: PUSH1 0x64 00000807: DUP6 00000808: ADD 00000809: MSTORE 0000080a: PUSH1 0x80 0000080c: DUP2 0000080d: ADD 0000080e: MLOAD 0000080f: ISZERO 00000810: ISZERO 00000811: PUSH1 0x84 00000813: DUP6 00000814: ADD 00000815: MSTORE 00000816: PUSH1 0xa0 00000818: DUP2 00000819: ADD 0000081a: MLOAD 0000081b: ISZERO 0000081c: ISZERO 0000081d: PUSH1 0xa4 0000081f: DUP6 00000820: ADD 00000821: MSTORE 00000822: PUSH5 0xffffffffff 00000828: DUP4 00000829: PUSH1 0xc0 0000082b: DUP4 0000082c: ADD 0000082d: MLOAD 0000082e: DUP3 0000082f: DUP2 00000830: MLOAD 00000831: AND 00000832: PUSH1 0xc4 00000834: DUP9 00000835: ADD 00000836: MSTORE 00000837: ADD 00000838: MLOAD 00000839: AND 0000083a: PUSH1 0xe4 0000083c: DUP6 0000083d: ADD 0000083e: MSTORE 0000083f: ADD 00000840: MLOAD 00000841: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000856: DUP2 00000857: MLOAD 00000858: AND 00000859: PUSH2 0x0104 0000085c: DUP5 0000085d: ADD 0000085e: MSTORE 0000085f: ADD 00000860: MLOAD 00000861: PUSH2 0x0124 00000864: DUP3 00000865: ADD 00000866: MSTORE 00000867: PUSH1 0x20 00000869: DUP2 0000086a: PUSH2 0x0144 0000086d: DUP2 0000086e: DUP9 0000086f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000884: PUSH32 0x000000000000000000000000afb979d9afad1ad27c5eff4e27226e3ab9e5dcc9 000008a5: AND 000008a6: GAS 000008a7: CALL 000008a8: SWAP5 000008a9: DUP6 000008aa: ISZERO 000008ab: PUSH2 0x094a 000008ae: JUMPI 000008af: DUP1 000008b0: SWAP6 000008b1: PUSH2 0x08ef 000008b4: JUMPI 000008b5: JUMPDEST 000008b6: POP 000008b7: POP 000008b8: SWAP4 000008b9: PUSH32 0x28b58397e03322f670d6b223cc863f8c148e368b8b615412e6798a641a22842d 000008da: DUP4 000008db: DUP6 000008dc: SWAP4 000008dd: PUSH1 0x20 000008df: SWAP8 000008e0: DUP3 000008e1: MLOAD 000008e2: SWAP2 000008e3: DUP3 000008e4: MSTORE 000008e5: DUP9 000008e6: DUP3 000008e7: ADD 000008e8: MSTORE 000008e9: LOG3 000008ea: MLOAD 000008eb: SWAP1 000008ec: DUP2 000008ed: MSTORE 000008ee: RETURN 000008ef: JUMPDEST 000008f0: SWAP1 000008f1: SWAP6 000008f2: SWAP2 000008f3: SWAP3 000008f4: SWAP5 000008f5: POP 000008f6: PUSH1 0x20 000008f8: DUP7 000008f9: RETURNDATASIZE 000008fa: PUSH1 0x20 000008fc: GT 000008fd: PUSH2 0x0942 00000900: JUMPI 00000901: JUMPDEST 00000902: DUP2 00000903: PUSH2 0x090e 00000906: PUSH1 0x20 00000908: SWAP4 00000909: DUP4 0000090a: PUSH2 0x1084 0000090d: JUMP 0000090e: JUMPDEST 0000090f: DUP2 00000910: ADD 00000911: SUB 00000912: SLT 00000913: PUSH2 0x0311 00000916: JUMPI 00000917: POP 00000918: SWAP4 00000919: MLOAD 0000091a: SWAP3 0000091b: SWAP1 0000091c: PUSH32 0x28b58397e03322f670d6b223cc863f8c148e368b8b615412e6798a641a22842d 0000093d: DUP4 0000093e: PUSH2 0x08b5 00000941: JUMP 00000942: JUMPDEST 00000943: RETURNDATASIZE 00000944: SWAP2 00000945: POP 00000946: PUSH2 0x0901 00000949: JUMP 0000094a: JUMPDEST 0000094b: DUP5 0000094c: MLOAD 0000094d: SWAP1 0000094e: RETURNDATASIZE 0000094f: SWAP1 00000950: DUP3 00000951: RETURNDATACOPY 00000952: RETURNDATASIZE 00000953: SWAP1 00000954: REVERT 00000955: JUMPDEST 00000956: PUSH1 0x24 00000958: DUP10 00000959: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 0000097a: DUP2 0000097b: MSTORE 0000097c: PUSH1 0x41 0000097e: PUSH1 0x04 00000980: MSTORE 00000981: REVERT 00000982: JUMPDEST 00000983: PUSH1 0x04 00000985: DUP6 00000986: MLOAD 00000987: PUSH32 0xa4432b5100000000000000000000000000000000000000000000000000000000 000009a8: DUP2 000009a9: MSTORE 000009aa: REVERT 000009ab: JUMPDEST 000009ac: SWAP1 000009ad: POP 000009ae: PUSH1 0x20 000009b0: DUP2 000009b1: RETURNDATASIZE 000009b2: PUSH1 0x20 000009b4: GT 000009b5: PUSH2 0x09d9 000009b8: JUMPI 000009b9: JUMPDEST 000009ba: DUP2 000009bb: PUSH2 0x09c6 000009be: PUSH1 0x20 000009c0: SWAP4 000009c1: DUP4 000009c2: PUSH2 0x1084 000009c5: JUMP 000009c6: JUMPDEST 000009c7: DUP2 000009c8: ADD 000009c9: SUB 000009ca: SLT 000009cb: PUSH2 0x09d5 000009ce: JUMPI 000009cf: MLOAD 000009d0: DUP9 000009d1: PUSH2 0x0678 000009d4: JUMP 000009d5: JUMPDEST 000009d6: DUP7 000009d7: DUP1 000009d8: REVERT 000009d9: JUMPDEST 000009da: RETURNDATASIZE 000009db: SWAP2 000009dc: POP 000009dd: PUSH2 0x09b9 000009e0: JUMP 000009e1: JUMPDEST 000009e2: DUP7 000009e3: MLOAD 000009e4: RETURNDATASIZE 000009e5: DUP10 000009e6: DUP3 000009e7: RETURNDATACOPY 000009e8: RETURNDATASIZE 000009e9: SWAP1 000009ea: REVERT 000009eb: JUMPDEST 000009ec: PUSH2 0x0a0d 000009ef: SWAP2 000009f0: POP 000009f1: PUSH1 0x20 000009f3: RETURNDATASIZE 000009f4: PUSH1 0x20 000009f6: GT 000009f7: PUSH2 0x0a13 000009fa: JUMPI 000009fb: JUMPDEST 000009fc: PUSH2 0x0a05 000009ff: DUP2 00000a00: DUP4 00000a01: PUSH2 0x1084 00000a04: JUMP 00000a05: JUMPDEST 00000a06: DUP2 00000a07: ADD 00000a08: SWAP1 00000a09: PUSH2 0x1102 00000a0c: JUMP 00000a0d: JUMPDEST 00000a0e: DUP8 00000a0f: PUSH2 0x05fc 00000a12: JUMP 00000a13: JUMPDEST 00000a14: POP 00000a15: RETURNDATASIZE 00000a16: PUSH2 0x09fb 00000a19: JUMP 00000a1a: JUMPDEST 00000a1b: DUP6 00000a1c: MLOAD 00000a1d: RETURNDATASIZE 00000a1e: DUP9 00000a1f: DUP3 00000a20: RETURNDATACOPY 00000a21: RETURNDATASIZE 00000a22: SWAP1 00000a23: REVERT 00000a24: JUMPDEST 00000a25: PUSH1 0x04 00000a27: DUP5 00000a28: MLOAD 00000a29: PUSH32 0xb3f3b2a600000000000000000000000000000000000000000000000000000000 00000a4a: DUP2 00000a4b: MSTORE 00000a4c: REVERT 00000a4d: JUMPDEST 00000a4e: DUP2 00000a4f: CALLDATALOAD 00000a50: DUP2 00000a51: MSTORE 00000a52: PUSH1 0x20 00000a54: SWAP2 00000a55: DUP3 00000a56: ADD 00000a57: SWAP2 00000a58: ADD 00000a59: PUSH2 0x04bd 00000a5c: JUMP 00000a5d: JUMPDEST 00000a5e: PUSH1 0x24 00000a60: DUP6 00000a61: DUP11 00000a62: MLOAD 00000a63: SWAP1 00000a64: PUSH32 0x3548783b00000000000000000000000000000000000000000000000000000000 00000a85: DUP3 00000a86: MSTORE 00000a87: PUSH1 0x04 00000a89: DUP3 00000a8a: ADD 00000a8b: MSTORE 00000a8c: REVERT 00000a8d: JUMPDEST 00000a8e: DUP9 00000a8f: MLOAD 00000a90: PUSH32 0x74b43bd000000000000000000000000000000000000000000000000000000000 00000ab1: DUP2 00000ab2: MSTORE 00000ab3: TIMESTAMP 00000ab4: PUSH1 0x04 00000ab6: DUP3 00000ab7: ADD 00000ab8: MSTORE 00000ab9: PUSH32 0x0000000000000000000000000000000000000000000000000000000066623070 00000ada: PUSH5 0xffffffffff 00000ae0: AND 00000ae1: PUSH1 0x24 00000ae3: DUP3 00000ae4: ADD 00000ae5: MSTORE 00000ae6: PUSH1 0x44 00000ae8: SWAP1 00000ae9: REVERT 00000aea: JUMPDEST 00000aeb: DUP9 00000aec: DUP1 00000aed: REVERT 00000aee: JUMPDEST 00000aef: DUP6 00000af0: DUP1 00000af1: REVERT 00000af2: JUMPDEST 00000af3: DUP4 00000af4: DUP1 00000af5: REVERT 00000af6: JUMPDEST 00000af7: DUP3 00000af8: DUP1 00000af9: REVERT 00000afa: JUMPDEST 00000afb: POP 00000afc: SWAP1 00000afd: CALLVALUE 00000afe: PUSH2 0x0311 00000b01: JUMPI 00000b02: DUP1 00000b03: PUSH1 0x03 00000b05: NOT 00000b06: CALLDATASIZE 00000b07: ADD 00000b08: SLT 00000b09: PUSH2 0x0311 00000b0c: JUMPI 00000b0d: POP 00000b0e: PUSH1 0x02 00000b10: SLOAD 00000b11: PUSH5 0xffffffffff 00000b17: DUP3 00000b18: MLOAD 00000b19: SWAP2 00000b1a: DUP2 00000b1b: DUP2 00000b1c: AND 00000b1d: DUP4 00000b1e: MSTORE 00000b1f: PUSH1 0x28 00000b21: SHR 00000b22: AND 00000b23: PUSH1 0x20 00000b25: DUP3 00000b26: ADD 00000b27: MSTORE 00000b28: RETURN 00000b29: JUMPDEST 00000b2a: POP 00000b2b: CALLVALUE 00000b2c: PUSH2 0x00ed 00000b2f: JUMPI 00000b30: DUP2 00000b31: PUSH1 0x03 00000b33: NOT 00000b34: CALLDATASIZE 00000b35: ADD 00000b36: SLT 00000b37: PUSH2 0x00ed 00000b3a: JUMPI 00000b3b: PUSH1 0x20 00000b3d: SWAP1 00000b3e: MLOAD 00000b3f: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001 00000b60: ISZERO 00000b61: ISZERO 00000b62: DUP2 00000b63: MSTORE 00000b64: RETURN 00000b65: JUMPDEST 00000b66: POP 00000b67: CALLVALUE 00000b68: PUSH2 0x00ed 00000b6b: JUMPI 00000b6c: DUP2 00000b6d: PUSH1 0x03 00000b6f: NOT 00000b70: CALLDATASIZE 00000b71: ADD 00000b72: SLT 00000b73: PUSH2 0x00ed 00000b76: JUMPI 00000b77: PUSH1 0x20 00000b79: SWAP1 00000b7a: MLOAD 00000b7b: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 00000b9c: ISZERO 00000b9d: ISZERO 00000b9e: DUP2 00000b9f: MSTORE 00000ba0: RETURN 00000ba1: JUMPDEST 00000ba2: SWAP2 00000ba3: SWAP1 00000ba4: POP 00000ba5: CALLVALUE 00000ba6: PUSH2 0x0af6 00000ba9: JUMPI 00000baa: DUP1 00000bab: PUSH1 0x03 00000bad: NOT 00000bae: CALLDATASIZE 00000baf: ADD 00000bb0: SLT 00000bb1: PUSH2 0x0af6 00000bb4: JUMPI 00000bb5: PUSH2 0x0bbc 00000bb8: PUSH2 0x0ff5 00000bbb: JUMP 00000bbc: JUMPDEST 00000bbd: SWAP2 00000bbe: PUSH1 0x24 00000bc0: CALLDATALOAD 00000bc1: PUSH16 0xffffffffffffffffffffffffffffffff 00000bd2: DUP2 00000bd3: AND 00000bd4: DUP1 00000bd5: SWAP2 00000bd6: SUB 00000bd7: PUSH2 0x0ff1 00000bda: JUMPI 00000bdb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bf0: SWAP2 00000bf1: DUP3 00000bf2: DUP7 00000bf3: SLOAD 00000bf4: AND 00000bf5: CALLER 00000bf6: DUP2 00000bf7: SUB 00000bf8: PUSH2 0x0fa8 00000bfb: JUMPI 00000bfc: POP 00000bfd: POP 00000bfe: DUP3 00000bff: MLOAD 00000c00: SWAP2 00000c01: PUSH32 0x5fe3b56700000000000000000000000000000000000000000000000000000000 00000c22: DUP4 00000c23: MSTORE 00000c24: PUSH1 0x20 00000c26: SWAP3 00000c27: DUP4 00000c28: DUP2 00000c29: PUSH1 0x04 00000c2b: DUP2 00000c2c: DUP6 00000c2d: PUSH32 0x000000000000000000000000afb979d9afad1ad27c5eff4e27226e3ab9e5dcc9 00000c4e: AND 00000c4f: GAS 00000c50: STATICCALL 00000c51: SWAP1 00000c52: DUP2 00000c53: ISZERO 00000c54: PUSH2 0x0f9e 00000c57: JUMPI 00000c58: DUP8 00000c59: SWAP2 00000c5a: PUSH2 0x0f81 00000c5d: JUMPI 00000c5e: JUMPDEST 00000c5f: POP 00000c60: DUP5 00000c61: MLOAD 00000c62: PUSH32 0xdcf844a700000000000000000000000000000000000000000000000000000000 00000c83: DUP2 00000c84: MSTORE 00000c85: DUP5 00000c86: DUP2 00000c87: PUSH1 0x24 00000c89: DUP2 00000c8a: DUP7 00000c8b: DUP1 00000c8c: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000cad: AND 00000cae: SWAP7 00000caf: DUP8 00000cb0: PUSH1 0x04 00000cb2: DUP5 00000cb3: ADD 00000cb4: MSTORE 00000cb5: AND 00000cb6: GAS 00000cb7: STATICCALL 00000cb8: SWAP1 00000cb9: DUP2 00000cba: ISZERO 00000cbb: PUSH2 0x0f77 00000cbe: JUMPI 00000cbf: DUP9 00000cc0: SWAP2 00000cc1: PUSH2 0x0f46 00000cc4: JUMPI 00000cc5: JUMPDEST 00000cc6: POP 00000cc7: PUSH2 0x0cce 00000cca: PUSH2 0x10c5 00000ccd: JUMP 00000cce: JUMPDEST 00000ccf: ISZERO 00000cd0: SWAP1 00000cd1: DUP2 00000cd2: PUSH2 0x0f3d 00000cd5: JUMPI 00000cd6: JUMPDEST 00000cd7: POP 00000cd8: PUSH2 0x0ee0 00000cdb: JUMPI 00000cdc: DUP5 00000cdd: MLOAD 00000cde: SWAP1 00000cdf: DUP8 00000ce0: DUP1 00000ce1: DUP5 00000ce2: DUP8 00000ce3: DUP6 00000ce4: ADD 00000ce5: SWAP10 00000ce6: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 00000d07: DUP12 00000d08: MSTORE 00000d09: AND 00000d0a: SWAP9 00000d0b: DUP10 00000d0c: PUSH1 0x24 00000d0e: DUP7 00000d0f: ADD 00000d10: MSTORE 00000d11: DUP7 00000d12: PUSH1 0x44 00000d14: DUP7 00000d15: ADD 00000d16: MSTORE 00000d17: PUSH1 0x44 00000d19: DUP6 00000d1a: MSTORE 00000d1b: PUSH2 0x0d23 00000d1e: DUP6 00000d1f: PUSH2 0x1068 00000d22: JUMP 00000d23: JUMPDEST 00000d24: DUP9 00000d25: MLOAD 00000d26: SWAP5 00000d27: PUSH2 0x0d2f 00000d2a: DUP7 00000d2b: PUSH2 0x101d 00000d2e: JUMP 00000d2f: JUMPDEST 00000d30: DUP9 00000d31: DUP7 00000d32: MSTORE 00000d33: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564 00000d54: DUP10 00000d55: DUP8 00000d56: ADD 00000d57: MSTORE 00000d58: MLOAD 00000d59: SWAP1 00000d5a: DUP3 00000d5b: DUP6 00000d5c: GAS 00000d5d: CALL 00000d5e: RETURNDATASIZE 00000d5f: ISZERO 00000d60: PUSH2 0x0ed2 00000d63: JUMPI 00000d64: RETURNDATASIZE 00000d65: SWAP2 00000d66: PUSH8 0xffffffffffffffff 00000d6f: DUP4 00000d70: GT 00000d71: PUSH2 0x0ea5 00000d74: JUMPI 00000d75: SWAP1 00000d76: PUSH2 0x0dbc 00000d79: SWAP4 00000d7a: SWAP3 00000d7b: SWAP2 00000d7c: DUP9 00000d7d: MLOAD 00000d7e: SWAP3 00000d7f: PUSH2 0x0daf 00000d82: DUP10 00000d83: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00000da4: PUSH1 0x1f 00000da6: DUP5 00000da7: ADD 00000da8: AND 00000da9: ADD 00000daa: DUP6 00000dab: PUSH2 0x1084 00000dae: JUMP 00000daf: JUMPDEST 00000db0: DUP4 00000db1: MSTORE 00000db2: RETURNDATASIZE 00000db3: DUP12 00000db4: DUP10 00000db5: DUP6 00000db6: ADD 00000db7: RETURNDATACOPY 00000db8: PUSH2 0x112e 00000dbb: JUMP 00000dbc: JUMPDEST 00000dbd: DUP1 00000dbe: MLOAD 00000dbf: DUP5 00000dc0: DUP2 00000dc1: ISZERO 00000dc2: SWAP2 00000dc3: DUP3 00000dc4: ISZERO 00000dc5: PUSH2 0x0e85 00000dc8: JUMPI 00000dc9: JUMPDEST 00000dca: POP 00000dcb: POP 00000dcc: SWAP1 00000dcd: POP 00000dce: ISZERO 00000dcf: PUSH2 0x0e02 00000dd2: JUMPI 00000dd3: SWAP1 00000dd4: PUSH32 0x2e9d425ba8b27655048400b366d7b6a1f7180ebdb088e06bb7389704860ffe1f 00000df5: SWAP3 00000df6: SWAP2 00000df7: DUP7 00000df8: SLOAD 00000df9: AND 00000dfa: SWAP4 00000dfb: MLOAD 00000dfc: SWAP1 00000dfd: DUP2 00000dfe: MSTORE 00000dff: LOG3 00000e00: DUP1 00000e01: RETURN 00000e02: JUMPDEST 00000e03: PUSH1 0x84 00000e05: DUP4 00000e06: DUP6 00000e07: MLOAD 00000e08: SWAP1 00000e09: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000e2a: DUP3 00000e2b: MSTORE 00000e2c: PUSH1 0x04 00000e2e: DUP3 00000e2f: ADD 00000e30: MSTORE 00000e31: PUSH1 0x2a 00000e33: PUSH1 0x24 00000e35: DUP3 00000e36: ADD 00000e37: MSTORE 00000e38: PUSH32 0x5361666545524332303a204552433230206f7065726174696f6e20646964206e 00000e59: PUSH1 0x44 00000e5b: DUP3 00000e5c: ADD 00000e5d: MSTORE 00000e5e: PUSH32 0x6f74207375636365656400000000000000000000000000000000000000000000 00000e7f: PUSH1 0x64 00000e81: DUP3 00000e82: ADD 00000e83: MSTORE 00000e84: REVERT 00000e85: JUMPDEST 00000e86: DUP4 00000e87: DUP1 00000e88: SWAP3 00000e89: SWAP4 00000e8a: POP 00000e8b: ADD 00000e8c: SUB 00000e8d: SLT 00000e8e: PUSH2 0x09d5 00000e91: JUMPI 00000e92: DUP4 00000e93: ADD 00000e94: MLOAD 00000e95: DUP1 00000e96: ISZERO 00000e97: ISZERO 00000e98: DUP2 00000e99: SUB 00000e9a: PUSH2 0x09d5 00000e9d: JUMPI 00000e9e: DUP1 00000e9f: DUP5 00000ea0: CODESIZE 00000ea1: PUSH2 0x0dc9 00000ea4: JUMP 00000ea5: JUMPDEST 00000ea6: PUSH1 0x24 00000ea8: DUP11 00000ea9: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00000eca: DUP2 00000ecb: MSTORE 00000ecc: PUSH1 0x41 00000ece: PUSH1 0x04 00000ed0: MSTORE 00000ed1: REVERT 00000ed2: JUMPDEST 00000ed3: SWAP1 00000ed4: PUSH2 0x0dbc 00000ed7: SWAP3 00000ed8: SWAP2 00000ed9: PUSH1 0x60 00000edb: SWAP2 00000edc: PUSH2 0x112e 00000edf: JUMP 00000ee0: JUMPDEST 00000ee1: DUP5 00000ee2: MLOAD 00000ee3: PUSH32 0x1351f21d00000000000000000000000000000000000000000000000000000000 00000f04: DUP2 00000f05: MSTORE 00000f06: TIMESTAMP 00000f07: PUSH1 0x04 00000f09: DUP3 00000f0a: ADD 00000f0b: MSTORE 00000f0c: PUSH32 0x0000000000000000000000000000000000000000000000000000000066623070 00000f2d: PUSH5 0xffffffffff 00000f33: AND 00000f34: PUSH1 0x24 00000f36: DUP3 00000f37: ADD 00000f38: MSTORE 00000f39: PUSH1 0x44 00000f3b: SWAP1 00000f3c: REVERT 00000f3d: JUMPDEST 00000f3e: SWAP1 00000f3f: POP 00000f40: ISZERO 00000f41: CODESIZE 00000f42: PUSH2 0x0cd6 00000f45: JUMP 00000f46: JUMPDEST 00000f47: SWAP1 00000f48: POP 00000f49: DUP5 00000f4a: DUP2 00000f4b: DUP2 00000f4c: RETURNDATASIZE 00000f4d: DUP4 00000f4e: GT 00000f4f: PUSH2 0x0f70 00000f52: JUMPI 00000f53: JUMPDEST 00000f54: PUSH2 0x0f5d 00000f57: DUP2 00000f58: DUP4 00000f59: PUSH2 0x1084 00000f5c: JUMP 00000f5d: JUMPDEST 00000f5e: DUP2 00000f5f: ADD 00000f60: SUB 00000f61: SLT 00000f62: PUSH2 0x0f6c 00000f65: JUMPI 00000f66: MLOAD 00000f67: CODESIZE 00000f68: PUSH2 0x0cc5 00000f6b: JUMP 00000f6c: JUMPDEST 00000f6d: DUP8 00000f6e: DUP1 00000f6f: REVERT 00000f70: JUMPDEST 00000f71: POP 00000f72: RETURNDATASIZE 00000f73: PUSH2 0x0f53 00000f76: JUMP 00000f77: JUMPDEST 00000f78: DUP7 00000f79: MLOAD 00000f7a: RETURNDATASIZE 00000f7b: DUP11 00000f7c: DUP3 00000f7d: RETURNDATACOPY 00000f7e: RETURNDATASIZE 00000f7f: SWAP1 00000f80: REVERT 00000f81: JUMPDEST 00000f82: PUSH2 0x0f98 00000f85: SWAP2 00000f86: POP 00000f87: DUP5 00000f88: RETURNDATASIZE 00000f89: DUP7 00000f8a: GT 00000f8b: PUSH2 0x0a13 00000f8e: JUMPI 00000f8f: PUSH2 0x0a05 00000f92: DUP2 00000f93: DUP4 00000f94: PUSH2 0x1084 00000f97: JUMP 00000f98: JUMPDEST 00000f99: CODESIZE 00000f9a: PUSH2 0x0c5e 00000f9d: JUMP 00000f9e: JUMPDEST 00000f9f: DUP6 00000fa0: MLOAD 00000fa1: RETURNDATASIZE 00000fa2: DUP10 00000fa3: DUP3 00000fa4: RETURNDATACOPY 00000fa5: RETURNDATASIZE 00000fa6: SWAP1 00000fa7: REVERT 00000fa8: JUMPDEST 00000fa9: PUSH32 0xc6cce6a400000000000000000000000000000000000000000000000000000000 00000fca: DUP3 00000fcb: MSTORE 00000fcc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fe1: AND 00000fe2: PUSH1 0x04 00000fe4: DUP3 00000fe5: ADD 00000fe6: MSTORE 00000fe7: CALLER 00000fe8: PUSH1 0x24 00000fea: DUP3 00000feb: ADD 00000fec: MSTORE 00000fed: PUSH1 0x44 00000fef: SWAP1 00000ff0: REVERT 00000ff1: JUMPDEST 00000ff2: DUP5 00000ff3: DUP1 00000ff4: REVERT 00000ff5: JUMPDEST 00000ff6: PUSH1 0x04 00000ff8: CALLDATALOAD 00000ff9: SWAP1 00000ffa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000100f: DUP3 00001010: AND 00001011: DUP3 00001012: SUB 00001013: PUSH2 0x1018 00001016: JUMPI 00001017: JUMP 00001018: JUMPDEST 00001019: PUSH1 0x00 0000101b: DUP1 0000101c: REVERT 0000101d: JUMPDEST 0000101e: PUSH1 0x40 00001020: DUP2 00001021: ADD 00001022: SWAP1 00001023: DUP2 00001024: LT 00001025: PUSH8 0xffffffffffffffff 0000102e: DUP3 0000102f: GT 00001030: OR 00001031: PUSH2 0x1039 00001034: JUMPI 00001035: PUSH1 0x40 00001037: MSTORE 00001038: JUMP 00001039: JUMPDEST 0000103a: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 0000105b: PUSH1 0x00 0000105d: MSTORE 0000105e: PUSH1 0x41 00001060: PUSH1 0x04 00001062: MSTORE 00001063: PUSH1 0x24 00001065: PUSH1 0x00 00001067: REVERT 00001068: JUMPDEST 00001069: PUSH1 0x80 0000106b: DUP2 0000106c: ADD 0000106d: SWAP1 0000106e: DUP2 0000106f: LT 00001070: PUSH8 0xffffffffffffffff 00001079: DUP3 0000107a: GT 0000107b: OR 0000107c: PUSH2 0x1039 0000107f: JUMPI 00001080: PUSH1 0x40 00001082: MSTORE 00001083: JUMP 00001084: JUMPDEST 00001085: SWAP1 00001086: PUSH1 0x1f 00001088: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000010a9: SWAP2 000010aa: ADD 000010ab: AND 000010ac: DUP2 000010ad: ADD 000010ae: SWAP1 000010af: DUP2 000010b0: LT 000010b1: PUSH8 0xffffffffffffffff 000010ba: DUP3 000010bb: GT 000010bc: OR 000010bd: PUSH2 0x1039 000010c0: JUMPI 000010c1: PUSH1 0x40 000010c3: MSTORE 000010c4: JUMP 000010c5: JUMPDEST 000010c6: PUSH5 0xffffffffff 000010cc: PUSH32 0x0000000000000000000000000000000000000000000000000000000066623070 000010ed: AND 000010ee: DUP1 000010ef: ISZERO 000010f0: ISZERO 000010f1: SWAP1 000010f2: DUP2 000010f3: PUSH2 0x10fa 000010f6: JUMPI 000010f7: POP 000010f8: SWAP1 000010f9: JUMP 000010fa: JUMPDEST 000010fb: SWAP1 000010fc: POP 000010fd: TIMESTAMP 000010fe: LT 000010ff: ISZERO 00001100: SWAP1 00001101: JUMP 00001102: JUMPDEST 00001103: SWAP1 00001104: DUP2 00001105: PUSH1 0x20 00001107: SWAP2 00001108: SUB 00001109: SLT 0000110a: PUSH2 0x1018 0000110d: JUMPI 0000110e: MLOAD 0000110f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001124: DUP2 00001125: AND 00001126: DUP2 00001127: SUB 00001128: PUSH2 0x1018 0000112b: JUMPI 0000112c: SWAP1 0000112d: JUMP 0000112e: JUMPDEST 0000112f: SWAP2 00001130: SWAP3 00001131: SWAP1 00001132: ISZERO 00001133: PUSH2 0x11a9 00001136: JUMPI 00001137: POP 00001138: DUP2 00001139: MLOAD 0000113a: ISZERO 0000113b: PUSH2 0x1142 0000113e: JUMPI 0000113f: POP 00001140: SWAP1 00001141: JUMP 00001142: JUMPDEST 00001143: EXTCODESIZE 00001144: ISZERO 00001145: PUSH2 0x114b 00001148: JUMPI 00001149: SWAP1 0000114a: JUMP 0000114b: JUMPDEST 0000114c: PUSH1 0x64 0000114e: PUSH1 0x40 00001150: MLOAD 00001151: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001172: DUP2 00001173: MSTORE 00001174: PUSH1 0x20 00001176: PUSH1 0x04 00001178: DUP3 00001179: ADD 0000117a: MSTORE 0000117b: PUSH1 0x1d 0000117d: PUSH1 0x24 0000117f: DUP3 00001180: ADD 00001181: MSTORE 00001182: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000 000011a3: PUSH1 0x44 000011a5: DUP3 000011a6: ADD 000011a7: MSTORE 000011a8: REVERT 000011a9: JUMPDEST 000011aa: DUP3 000011ab: MLOAD 000011ac: SWAP1 000011ad: SWAP2 000011ae: POP 000011af: ISZERO 000011b0: PUSH2 0x11bc 000011b3: JUMPI 000011b4: POP 000011b5: DUP1 000011b6: MLOAD 000011b7: SWAP1 000011b8: PUSH1 0x20 000011ba: ADD 000011bb: REVERT 000011bc: JUMPDEST 000011bd: PUSH1 0x40 000011bf: MLOAD 000011c0: SWAP1 000011c1: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000011e2: DUP3 000011e3: MSTORE 000011e4: DUP2 000011e5: PUSH1 0x20 000011e7: DUP1 000011e8: PUSH1 0x04 000011ea: DUP4 000011eb: ADD 000011ec: MSTORE 000011ed: DUP3 000011ee: MLOAD 000011ef: SWAP3 000011f0: DUP4 000011f1: PUSH1 0x24 000011f3: DUP5 000011f4: ADD 000011f5: MSTORE 000011f6: PUSH1 0x00 000011f8: JUMPDEST 000011f9: DUP5 000011fa: DUP2 000011fb: LT 000011fc: PUSH2 0x1239 000011ff: JUMPI 00001200: POP 00001201: POP 00001202: POP 00001203: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001224: PUSH1 0x1f 00001226: DUP4 00001227: PUSH1 0x00 00001229: PUSH1 0x44 0000122b: DUP1 0000122c: SWAP7 0000122d: DUP7 0000122e: ADD 0000122f: ADD 00001230: MSTORE 00001231: ADD 00001232: AND 00001233: DUP2 00001234: ADD 00001235: SUB 00001236: ADD 00001237: SWAP1 00001238: REVERT 00001239: JUMPDEST 0000123a: DUP2 0000123b: DUP2 0000123c: ADD 0000123d: DUP4 0000123e: ADD 0000123f: MLOAD 00001240: DUP7 00001241: DUP3 00001242: ADD 00001243: PUSH1 0x44 00001245: ADD 00001246: MSTORE 00001247: DUP6 00001248: SWAP4 00001249: POP 0000124a: DUP3 0000124b: ADD 0000124c: PUSH2 0x11f8 0000124f: JUMP 00001250: INVALID 00001251: LOG1 00001252: PUSH5 0x736f6c6343 00001258: STOP 00001259: ADDMOD 0000125a: ISZERO 0000125b: STOP 0000125c: EXP
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x1e8fb8c8f4db1bab1233efcd26860b8c2cab1de3ce315726ed086ae35cddf563
call_targets:
0xac48cfe22c21d85b488dfbfbc4e94279b7c84a37
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x1e8fb8c8f4db1bab1233efcd26860b8c2cab1de3ce315726ed086ae35cddf563",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xac48cfe22c21d85b488dfbfbc4e94279b7c84a37"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x1686c909",
"selector": "0x1686c909",
"calldata_variants": [
"0x1686c909",
"0x1686c9090000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x16c3549d",
"selector": "0x16c3549d",
"calldata_variants": [
"0x16c3549d",
"0x16c3549d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1bfd6814",
"selector": "0x1bfd6814",
"calldata_variants": [
"0x1bfd6814",
"0x1bfd68140000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3bfe03a8",
"selector": "0x3bfe03a8",
"calldata_variants": [
"0x3bfe03a8",
"0x3bfe03a80000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3f31ae3f",
"selector": "0x3f31ae3f",
"calldata_variants": [
"0x3f31ae3f",
"0x3f31ae3f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4800d97f",
"selector": "0x4800d97f",
"calldata_variants": [
"0x4800d97f",
"0x4800d97f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x51e75e8b",
"selector": "0x51e75e8b",
"calldata_variants": [
"0x51e75e8b",
"0x51e75e8b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x75829def",
"selector": "0x75829def",
"calldata_variants": [
"0x75829def",
"0x75829def0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2215,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3421,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 2,
"guards_detected": [],
"untrusted_call_count": 2
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x1e8fb8c8f4db1bab1233efcd26860b8c2cab1de3ce315726ed086ae35cddf563
call_targets:
0xac48cfe22c21d85b488dfbfbc4e94279b7c84a37
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x1e8fb8c8f4db1bab1233efcd26860b8c2cab1de3ce315726ed086ae35cddf563",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xac48cfe22c21d85b488dfbfbc4e94279b7c84a37"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x1686c909",
"selector": "0x1686c909",
"calldata_variants": [
"0x1686c909",
"0x1686c9090000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x16c3549d",
"selector": "0x16c3549d",
"calldata_variants": [
"0x16c3549d",
"0x16c3549d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1bfd6814",
"selector": "0x1bfd6814",
"calldata_variants": [
"0x1bfd6814",
"0x1bfd68140000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3bfe03a8",
"selector": "0x3bfe03a8",
"calldata_variants": [
"0x3bfe03a8",
"0x3bfe03a80000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3f31ae3f",
"selector": "0x3f31ae3f",
"calldata_variants": [
"0x3f31ae3f",
"0x3f31ae3f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4800d97f",
"selector": "0x4800d97f",
"calldata_variants": [
"0x4800d97f",
"0x4800d97f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x51e75e8b",
"selector": "0x51e75e8b",
"calldata_variants": [
"0x51e75e8b",
"0x51e75e8b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x75829def",
"selector": "0x75829def",
"calldata_variants": [
"0x75829def",
"0x75829def0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2215,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3421,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 2,
"guards_detected": []
}
|
| low | other | codex | Non-expiring campaigns cannot be clawed back when protocol fee is zero | 65 | no | — |
viewevidence_json{
"evidence": "`hasExpired()` returns false when EXPIRATION == 0, and `clawback` reverts whenever `!hasExpired()` and protocolFee is zero, blocking the no-expiration case.",
"locations": [
"contracts/src/abstracts/SablierV2MerkleStreamer.sol:86",
"contracts/src/abstracts/SablierV2MerkleStreamer.sol:95"
],
"recommendation": "Allow clawback when EXPIRATION == 0 (no expiration), or change the condition to only require expiry when EXPIRATION != 0. For example: `if (EXPIRATION != 0 && !hasExpired() && !protocolFee.gt(ud(0))) revert`.",
"exploit_scenario": "If the contract is deployed with EXPIRATION = 0 (intended \u201cno expiration\u201d) and the protocol fee remains zero, the admin\u2019s clawback will always revert. Any unclaimed tokens become permanently stuck in the Merkle streamer unless the protocol fee later becomes non-zero."
}
|