019bb004-d430-731f-a526-9f72bf0d193b
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 |
|---|---|---|---|---|
| 39470 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 39471 | proxy.resolve | complete | 1 / 3 | 3 months ago |
| 39472 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 39473 | analysis.bundle | complete | 1 / 3 | 3 months ago |
| 39474 | capability.graph | complete | 1 / 3 | 3 months ago |
| 39475 | detector.run | complete | 1 / 3 | 3 months ago |
| 39476 | validation.fork | complete | 1 / 3 | 3 months ago |
| 39526 | report.consolidate | complete | 1 / 6 | 3 months ago |
| 39527 | tool.slither | complete | 1 / 2 | 3 months ago |
{
"status": "not_proxy"
}
'forge clean' running (wd: /tmp/slither-x7whbd40)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-x7whbd40)
Reentrancy in Buyout.counterOffer(uint256) (contracts/Buyout.sol#103-118):
External calls:
- fundingToken.safeTransferFrom(msg.sender,address(this),amount) (contracts/Buyout.sol#115)
Event emitted after the call(s):
- CounterOffer(msg.sender,amount) (contracts/Buyout.sol#117)
Reentrancy in Buyout.surrenderTokens(uint256) (contracts/Buyout.sol#165-176):
External calls:
- listingToken.safeTransferFrom(msg.sender,address(this),amount) (contracts/Buyout.sol#172)
- fundingToken.safeTransfer(msg.sender,funds) (contracts/Buyout.sol#173)
Event emitted after the call(s):
- Surrender(amount,funds) (contracts/Buyout.sol#175)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3
Buyout.status() (contracts/Buyout.sol#59-69) uses timestamp for comparisons
Dangerous comparisons:
- block.timestamp < end (contracts/Buyout.sol#64)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp
AddressUpgradeable.isContract(address) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#26-36) uses assembly
- INLINE ASM (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#32-34)
AddressUpgradeable.verifyCallResult(bool,bytes,string) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#168-188) uses assembly
- INLINE ASM (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#180-183)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage
Buyout.withdrawFunds() (contracts/Buyout.sol#139-147) compares to a boolean constant:
-require(bool,string)(_offererRefundedAndPaid == false,ALREADY_WITHDRAWN) (contracts/Buyout.sol#140)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#boolean-equality
Version constraint ^0.8.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
- FullInlinerNonExpressionSplitArgumentEvaluationOrder
- MissingSideEffectsOnSelectorAccess
- AbiReencodingHeadOverflowWithStaticArrayCleanup
- DirtyBytesArrayToStorage
- DataLocationChangeInInternalOverride
- NestedCalldataArrayAbiReencodingSizeValidation
- SignedImmutables
- ABIDecodeTwoDimensionalArrayMemory
- KeccakCaching.
It is used by:
- ^0.8.0 (@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol#3)
- ^0.8.0 (@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol#3)
- ^0.8.0 (@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol#3)
- ^0.8.0 (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#3)
- ^0.8.0 (contracts/Buyout.sol#2)
- ^0.8.0 (contracts/interfaces/IBuyout.sol#2)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity
Low level call in AddressUpgradeable.sendValue(address,uint256) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#54-59):
- (success,None) = recipient.call{value: amount}() (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#57)
Low level call in AddressUpgradeable.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#122-133):
- (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#131)
Low level call in AddressUpgradeable.functionStaticCall(address,bytes,string) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#151-160):
- (success,returndata) = target.staticcall(data) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#158)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls
Parameter Buyout.initialize(IERC20Upgradeable,IERC20Upgradeable)._listingToken (contracts/Buyout.sol#52) is not in mixedCase
Parameter Buyout.initialize(IERC20Upgradeable,IERC20Upgradeable)._fundingToken (contracts/Buyout.sol#53) is not in mixedCase
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions
. analyzed (6 contracts with 100 detectors), 12 result(s) found
{
"solc": {
"status": "ok",
"use_rc": 0,
"version": "0.8.0",
"strategy": "solc-select",
"solc_path": "/var/www/tripwire/.venv/bin/solc",
"install_rc": 0,
"use_stderr": null,
"use_stdout": "Switched global version to 0.8.0",
"install_stderr": null,
"install_stdout": "Version '0.8.0' is already installed, skipping..."
},
"solc_args": "--base-path /tmp/slither-x7whbd40 --include-path /tmp/slither-x7whbd40/lib --include-path /tmp/slither-x7whbd40/lib/openzeppelin-contracts --allow-paths /tmp/slither-x7whbd40,/tmp/slither-x7whbd40/lib,/tmp/slither-x7whbd40/lib/openzeppelin-contracts,/tmp/slither-x7whbd40/src",
"remappings": [
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"source_files": [
"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol",
"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol",
"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
"contracts/Buyout.sol",
"contracts/interfaces/IBuyout.sol"
],
"contract_count": 0,
"contract_names": [],
"detector_count": 12,
"workspace_hash": "439b9c643026214c3afa0c4b6ba78ce79ad3f3257fd6496d830308f151cd9334",
"duration_seconds": 0.6055448055267334,
"solc_version_requested": "0.8.4"
}
{"no_findings":false,"summary":"Two issues found: buyout success never delivers listing tokens to the offerer (tokens remain stuck in the contract), and the upgradeable initializer is publicly callable without access control, enabling front‑running on uninitialized deployments.","findings":[{"severity":"high","category":"other","title":"Buyout success never transfers listing tokens to offerer (tokens locked permanently)","exploit_scenario":"After a successful buyout, holders call `surrenderTokens` and receive funding tokens. Their listing tokens (and the offerer’s original deposit) are transferred into the Buyout contract, but there is no path for the offerer to claim them. The offerer pays out funding tokens yet never receives ownership of the listing tokens, leaving all listing tokens stuck in the contract and defeating the buyout’s purpose.","recommendation":"Add a `claimListingTokens()` function for the offerer in `Status.SUCCESS` that transfers all listing tokens held by the contract to the offerer, or automatically transfer the listing tokens to the offerer during `surrenderTokens`. Consider burning tokens if the intended end‑state is removal from circulation.","evidence":"`offer()` and `surrenderTokens()` both transfer listing tokens into the contract, while the only listing-token withdrawal path is `withdrawTokens()` which is restricted to `Status.COUNTERED`. There is no function to release listing tokens to the offerer on `Status.SUCCESS`.","locations":["contracts/Buyout.sol:71","contracts/Buyout.sol:98","contracts/Buyout.sol:122","contracts/Buyout.sol:165","contracts/Buyout.sol:172"]},{"severity":"medium","category":"upgradeability","title":"Public initializer can be front‑run on uninitialized deployments","exploit_scenario":"If a proxy or clone is deployed without an atomic initialization, any external account can call `initialize()` first and set `listingToken`/`fundingToken` to attacker‑chosen addresses. This can brick the instance for intended users or cause users to interact with malicious tokens.","recommendation":"Ensure initialization happens atomically at deployment (e.g., via factory) and restrict `initialize()` to a trusted deployer/factory. Also consider disabling initializers in the implementation constructor to prevent accidental misuse.","evidence":"`initialize()` is `public` and lacks access control; it can be called by anyone before the first initialization.","locations":["contracts/Buyout.sol:51","contracts/Buyout.sol:54"]}]}
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-4y0olrb9
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019bb044-4e59-7222-8b1c-9066fddc815f
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.
Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers
thinking
**Reading AUDIT_BUNDLE file**
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-4y0olrb9 succeeded in 8ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.
================================================================================
FILE: contracts/Buyout.sol
================================================================================
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
import "./interfaces/IBuyout.sol";
/// Buyout is a shotgun clause / buy-sell agreement to allow holders to acquire
/// all other outstanding tokens.
///
/// @dev totalSupply() is currently frozen at start of offer
contract Buyout is IBuyout, Initializable {
thinking
**Analyzing buyout contract for vulnerabilities**
I’m carefully auditing the buyout contract’s logic, focusing on reentrancy, arithmetic issues, access control, and token interactions. There’s no reentrancy guard, but state updates happen before token transfers, which helps. However, malicious ERC20 tokens could exploit external calls, especially in surrenderTokens. The initialize function lacks access control, which could allow initialization attacks if misused. Some edge cases around division by zero, rounding in counters, and locked listing tokens appear more like design quirks than security flaws but warrant caution. Fee-on-transfer tokens might cause accounting mismatches. Overall, I’m scrutinizing the contract’s assumptions about token behavior and initialization safety to flag risks.
thinking
**Evaluating upgradeability and token supply assumptions**
I’m reviewing upgradeability risks related to uninitialized proxies and how mintable listing tokens can affect payout fairness. The possibility of minting new tokens after offer increases could allow more tokens to be surrendered for funding, potentially exceeding intended allocations. I’m also noting how leftover listing tokens and stuck states from rounding or unclaimed withdrawals might cause economic issues but not direct vulnerabilities. The interplay of token supply changes and contract logic deserves close attention to ensure expected behavior.
thinking
**Identifying critical token handling issues**
I’m uncovering a major functional flaw where surrendered listing tokens accumulate in the contract without any method for the offerer to claim or burn them after a successful buyout, effectively locking tokens forever. This breaks the core buyout logic since the offerer never receives ownership despite funding payouts. Additionally, leftover or unclaimed tokens by counterOfferers in other states contribute to stuck assets. These token-accounting gaps are significant and could lead to serious user losses or failed buyouts.
exec
/bin/bash -lc 'nl -ba contracts/Buyout.sol' in /tmp/codex-4y0olrb9 succeeded in 6ms:
1 // SPDX-License-Identifier: UNLICENSED
2 pragma solidity ^0.8.0;
3
4 import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5 import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
6 import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
7
8 import "./interfaces/IBuyout.sol";
9
10 /// Buyout is a shotgun clause / buy-sell agreement to allow holders to acquire
11 /// all other outstanding tokens.
12 ///
13 /// @dev totalSupply() is currently frozen at start of offer
14 contract Buyout is IBuyout, Initializable {
15 using SafeERC20Upgradeable for IERC20Upgradeable;
16
17 event CounterOffer(address indexed wallet, uint256 amount);
18 event Surrender(uint256 tokens, uint256 funds);
19
20 address public override offerer; // Wallet proposing to buy out
thinking
**Composing detailed vulnerability findings**
I'm carefully drafting two JSON-formatted findings: one high-severity design bug locking offerer tokens in the contract after SUCCESS without a withdrawal path, supported by specific line evidence; and one medium-severity upgradeability issue due to an unprotected initializer allowing attacker token configuration if proxy initialization is missed. I'll include exploit scenarios, recommendations, line locations, and a concise summary for clarity.
codex
{"no_findings":false,"summary":"Two issues found: buyout success never delivers listing tokens to the offerer (tokens remain stuck in the contract), and the upgradeable initializer is publicly callable without access control, enabling front‑running on uninitialized deployments.","findings":[{"severity":"high","category":"other","title":"Buyout success never transfers listing tokens to offerer (tokens locked permanently)","exploit_scenario":"After a successful buyout, holders call `surrenderTokens` and receive funding tokens. Their listing tokens (and the offerer’s original deposit) are transferred into the Buyout contract, but there is no path for the offerer to claim them. The offerer pays out funding tokens yet never receives ownership of the listing tokens, leaving all listing tokens stuck in the contract and defeating the buyout’s purpose.","recommendation":"Add a `claimListingTokens()` function for the offerer in `Status.SUCCESS` that transfers all listing tokens held by the contract to the offerer, or automatically transfer the listing tokens to the offerer during `surrenderTokens`. Consider burning tokens if the intended end‑state is removal from circulation.","evidence":"`offer()` and `surrenderTokens()` both transfer listing tokens into the contract, while the only listing-token withdrawal path is `withdrawTokens()` which is restricted to `Status.COUNTERED`. There is no function to release listing tokens to the offerer on `Status.SUCCESS`.","locations":["contracts/Buyout.sol:71","contracts/Buyout.sol:98","contracts/Buyout.sol:122","contracts/Buyout.sol:165","contracts/Buyout.sol:172"]},{"severity":"medium","category":"upgradeability","title":"Public initializer can be front‑run on uninitialized deployments","exploit_scenario":"If a proxy or clone is deployed without an atomic initialization, any external account can call `initialize()` first and set `listingToken`/`fundingToken` to attacker‑chosen addresses. This can brick the instance for intended users or cause users to interact with malicious tokens.","recommendation":"Ensure initialization happens atomically at deployment (e.g., via factory) and restrict `initialize()` to a trusted deployer/factory. Also consider disabling initializers in the implementation constructor to prevent accidental misuse.","evidence":"`initialize()` is `public` and lacks access control; it can be called by anyone before the first initialization.","locations":["contracts/Buyout.sol:51","contracts/Buyout.sol:54"]}]}
tokens used
36,383
{
"codex": {
"ran_at": "2026-01-12T03:37:33.982598+00:00",
"returncode": 0
},
"project": {
"mode": "source",
"file_count": 6,
"import_count": 6,
"first_party_contracts_count": 2
},
"summary": "Two issues found: buyout success never delivers listing tokens to the offerer (tokens remain stuck in the contract), and the upgradeable initializer is publicly callable without access control, enabling front\u2011running on uninitialized deployments.",
"raw_final": {
"summary": "Two issues found: buyout success never delivers listing tokens to the offerer (tokens remain stuck in the contract), and the upgradeable initializer is publicly callable without access control, enabling front\u2011running on uninitialized deployments.",
"findings": [
{
"title": "Buyout success never transfers listing tokens to offerer (tokens locked permanently)",
"category": "other",
"evidence": "`offer()` and `surrenderTokens()` both transfer listing tokens into the contract, while the only listing-token withdrawal path is `withdrawTokens()` which is restricted to `Status.COUNTERED`. There is no function to release listing tokens to the offerer on `Status.SUCCESS`.",
"severity": "high",
"locations": [
"contracts/Buyout.sol:71",
"contracts/Buyout.sol:98",
"contracts/Buyout.sol:122",
"contracts/Buyout.sol:165",
"contracts/Buyout.sol:172"
],
"recommendation": "Add a `claimListingTokens()` function for the offerer in `Status.SUCCESS` that transfers all listing tokens held by the contract to the offerer, or automatically transfer the listing tokens to the offerer during `surrenderTokens`. Consider burning tokens if the intended end\u2011state is removal from circulation.",
"exploit_scenario": "After a successful buyout, holders call `surrenderTokens` and receive funding tokens. Their listing tokens (and the offerer\u2019s original deposit) are transferred into the Buyout contract, but there is no path for the offerer to claim them. The offerer pays out funding tokens yet never receives ownership of the listing tokens, leaving all listing tokens stuck in the contract and defeating the buyout\u2019s purpose."
},
{
"title": "Public initializer can be front\u2011run on uninitialized deployments",
"category": "upgradeability",
"evidence": "`initialize()` is `public` and lacks access control; it can be called by anyone before the first initialization.",
"severity": "medium",
"locations": [
"contracts/Buyout.sol:51",
"contracts/Buyout.sol:54"
],
"recommendation": "Ensure initialization happens atomically at deployment (e.g., via factory) and restrict `initialize()` to a trusted deployer/factory. Also consider disabling initializers in the implementation constructor to prevent accidental misuse.",
"exploit_scenario": "If a proxy or clone is deployed without an atomic initialization, any external account can call `initialize()` first and set `listingToken`/`fundingToken` to attacker\u2011chosen addresses. This can brick the instance for intended users or cause users to interact with malicious tokens."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLVALUE 00000006: DUP1 00000007: ISZERO 00000008: PUSH2 0x0010 0000000b: JUMPI 0000000c: PUSH1 0x00 0000000e: DUP1 0000000f: REVERT 00000010: JUMPDEST 00000011: POP 00000012: PUSH1 0x04 00000014: CALLDATASIZE 00000015: LT 00000016: PUSH2 0x00db 00000019: JUMPI 0000001a: PUSH1 0x00 0000001c: CALLDATALOAD 0000001d: PUSH1 0xe0 0000001f: SHR 00000020: DUP1 00000021: PUSH4 0x200d2ed2 00000026: EQ 00000027: PUSH2 0x00e0 0000002a: JUMPI 0000002b: DUP1 0000002c: PUSH4 0x24600fc3 00000031: EQ 00000032: PUSH2 0x00fe 00000035: JUMPI 00000036: DUP1 00000037: PUSH4 0x485cc955 0000003c: EQ 0000003d: PUSH2 0x0108 00000040: JUMPI 00000041: DUP1 00000042: PUSH4 0x78065f27 00000047: EQ 00000048: PUSH2 0x011b 0000004b: JUMPI 0000004c: DUP1 0000004d: PUSH4 0x89a4157e 00000052: EQ 00000053: PUSH2 0x0146 00000056: JUMPI 00000057: DUP1 00000058: PUSH4 0x8d8f2adb 0000005d: EQ 0000005e: PUSH2 0x014e 00000061: JUMPI 00000062: DUP1 00000063: PUSH4 0x965fbde5 00000068: EQ 00000069: PUSH2 0x0156 0000006c: JUMPI 0000006d: DUP1 0000006e: PUSH4 0xa1920586 00000073: EQ 00000074: PUSH2 0x016d 00000077: JUMPI 00000078: DUP1 00000079: PUSH4 0xaa1a3c5c 0000007e: EQ 0000007f: PUSH2 0x0180 00000082: JUMPI 00000083: DUP1 00000084: PUSH4 0xc782ff1f 00000089: EQ 0000008a: PUSH2 0x0189 0000008d: JUMPI 0000008e: DUP1 0000008f: PUSH4 0xc7d4da0c 00000094: EQ 00000095: PUSH2 0x01a2 00000098: JUMPI 00000099: DUP1 0000009a: PUSH4 0xcdaf64f4 0000009f: EQ 000000a0: PUSH2 0x01ab 000000a3: JUMPI 000000a4: DUP1 000000a5: PUSH4 0xd6f3800d 000000aa: EQ 000000ab: PUSH2 0x01be 000000ae: JUMPI 000000af: DUP1 000000b0: PUSH4 0xe18bb5dd 000000b5: EQ 000000b6: PUSH2 0x01c6 000000b9: JUMPI 000000ba: DUP1 000000bb: PUSH4 0xe47e5527 000000c0: EQ 000000c1: PUSH2 0x01d0 000000c4: JUMPI 000000c5: DUP1 000000c6: PUSH4 0xe53546b4 000000cb: EQ 000000cc: PUSH2 0x01e3 000000cf: JUMPI 000000d0: DUP1 000000d1: PUSH4 0xefbe1c1c 000000d6: EQ 000000d7: PUSH2 0x01f6 000000da: JUMPI 000000db: JUMPDEST 000000dc: PUSH1 0x00 000000de: DUP1 000000df: REVERT 000000e0: JUMPDEST 000000e1: PUSH2 0x00e8 000000e4: PUSH2 0x01ff 000000e7: JUMP 000000e8: JUMPDEST 000000e9: PUSH1 0x40 000000eb: MLOAD 000000ec: PUSH2 0x00f5 000000ef: SWAP2 000000f0: SWAP1 000000f1: PUSH2 0x0e3d 000000f4: JUMP 000000f5: JUMPDEST 000000f6: PUSH1 0x40 000000f8: MLOAD 000000f9: DUP1 000000fa: SWAP2 000000fb: SUB 000000fc: SWAP1 000000fd: RETURN 000000fe: JUMPDEST 000000ff: PUSH2 0x0106 00000102: PUSH2 0x0243 00000105: JUMP 00000106: JUMPDEST 00000107: STOP 00000108: JUMPDEST 00000109: PUSH2 0x0106 0000010c: PUSH2 0x0116 0000010f: CALLDATASIZE 00000110: PUSH1 0x04 00000112: PUSH2 0x0d9e 00000115: JUMP 00000116: JUMPDEST 00000117: PUSH2 0x037d 0000011a: JUMP 0000011b: JUMPDEST 0000011c: PUSH1 0x02 0000011e: SLOAD 0000011f: PUSH2 0x012e 00000122: SWAP1 00000123: PUSH1 0x01 00000125: PUSH1 0x01 00000127: PUSH1 0xa0 00000129: SHL 0000012a: SUB 0000012b: AND 0000012c: DUP2 0000012d: JUMP 0000012e: JUMPDEST 0000012f: PUSH1 0x40 00000131: MLOAD 00000132: PUSH1 0x01 00000134: PUSH1 0x01 00000136: PUSH1 0xa0 00000138: SHL 00000139: SUB 0000013a: SWAP1 0000013b: SWAP2 0000013c: AND 0000013d: DUP2 0000013e: MSTORE 0000013f: PUSH1 0x20 00000141: ADD 00000142: PUSH2 0x00f5 00000145: JUMP 00000146: JUMPDEST 00000147: PUSH2 0x0106 0000014a: PUSH2 0x0462 0000014d: JUMP 0000014e: JUMPDEST 0000014f: PUSH2 0x0106 00000152: PUSH2 0x0532 00000155: JUMP 00000156: JUMPDEST 00000157: PUSH2 0x015f 0000015a: PUSH1 0x08 0000015c: SLOAD 0000015d: DUP2 0000015e: JUMP 0000015f: JUMPDEST 00000160: PUSH1 0x40 00000162: MLOAD 00000163: SWAP1 00000164: DUP2 00000165: MSTORE 00000166: PUSH1 0x20 00000168: ADD 00000169: PUSH2 0x00f5 0000016c: JUMP 0000016d: JUMPDEST 0000016e: PUSH2 0x0106 00000171: PUSH2 0x017b 00000174: CALLDATASIZE 00000175: PUSH1 0x04 00000177: PUSH2 0x0e00 0000017a: JUMP 0000017b: JUMPDEST 0000017c: PUSH2 0x062b 0000017f: JUMP 00000180: JUMPDEST 00000181: PUSH2 0x015f 00000184: PUSH1 0x07 00000186: SLOAD 00000187: DUP2 00000188: JUMP 00000189: JUMPDEST 0000018a: PUSH1 0x00 0000018c: SLOAD 0000018d: PUSH2 0x012e 00000190: SWAP1 00000191: PUSH3 0x010000 00000195: SWAP1 00000196: DIV 00000197: PUSH1 0x01 00000199: PUSH1 0x01 0000019b: PUSH1 0xa0 0000019d: SHL 0000019e: SUB 0000019f: AND 000001a0: DUP2 000001a1: JUMP 000001a2: JUMPDEST 000001a3: PUSH2 0x015f 000001a6: PUSH2 0x0bb8 000001a9: DUP2 000001aa: JUMP 000001ab: JUMPDEST 000001ac: PUSH1 0x01 000001ae: SLOAD 000001af: PUSH2 0x012e 000001b2: SWAP1 000001b3: PUSH1 0x01 000001b5: PUSH1 0x01 000001b7: PUSH1 0xa0 000001b9: SHL 000001ba: SUB 000001bb: AND 000001bc: DUP2 000001bd: JUMP 000001be: JUMPDEST 000001bf: PUSH2 0x015f 000001c2: PUSH1 0x64 000001c4: DUP2 000001c5: JUMP 000001c6: JUMPDEST 000001c7: PUSH2 0x015f 000001ca: PUSH3 0x24ea00 000001ce: DUP2 000001cf: JUMP 000001d0: JUMPDEST 000001d1: PUSH2 0x0106 000001d4: PUSH2 0x01de 000001d7: CALLDATASIZE 000001d8: PUSH1 0x04 000001da: PUSH2 0x0dd0 000001dd: JUMP 000001de: JUMPDEST 000001df: PUSH2 0x0829 000001e2: JUMP 000001e3: JUMPDEST 000001e4: PUSH2 0x0106 000001e7: PUSH2 0x01f1 000001ea: CALLDATASIZE 000001eb: PUSH1 0x04 000001ed: PUSH2 0x0dd0 000001f0: JUMP 000001f1: JUMPDEST 000001f2: PUSH2 0x0964 000001f5: JUMP 000001f6: JUMPDEST 000001f7: PUSH2 0x015f 000001fa: PUSH1 0x06 000001fc: SLOAD 000001fd: DUP2 000001fe: JUMP 000001ff: JUMPDEST 00000200: PUSH1 0x00 00000202: DUP1 00000203: SLOAD 00000204: PUSH3 0x010000 00000208: SWAP1 00000209: DIV 0000020a: PUSH1 0x01 0000020c: PUSH1 0x01 0000020e: PUSH1 0xa0 00000210: SHL 00000211: SUB 00000212: AND 00000213: PUSH2 0x021c 00000216: JUMPI 00000217: POP 00000218: PUSH1 0x00 0000021a: SWAP1 0000021b: JUMP 0000021c: JUMPDEST 0000021d: PUSH1 0x07 0000021f: SLOAD 00000220: PUSH1 0x08 00000222: SLOAD 00000223: LT 00000224: PUSH2 0x022d 00000227: JUMPI 00000228: POP 00000229: PUSH1 0x02 0000022b: SWAP1 0000022c: JUMP 0000022d: JUMPDEST 0000022e: PUSH1 0x06 00000230: SLOAD 00000231: TIMESTAMP 00000232: LT 00000233: ISZERO 00000234: PUSH2 0x023d 00000237: JUMPI 00000238: POP 00000239: PUSH1 0x01 0000023b: SWAP1 0000023c: JUMP 0000023d: JUMPDEST 0000023e: POP 0000023f: PUSH1 0x03 00000241: SWAP1 00000242: JUMP 00000243: JUMPDEST 00000244: PUSH1 0x02 00000246: DUP1 00000247: PUSH2 0x024e 0000024a: PUSH2 0x01ff 0000024d: JUMP 0000024e: JUMPDEST 0000024f: PUSH1 0x03 00000251: DUP2 00000252: GT 00000253: ISZERO 00000254: PUSH2 0x026d 00000257: JUMPI 00000258: PUSH4 0x4e487b71 0000025d: PUSH1 0xe0 0000025f: SHL 00000260: PUSH1 0x00 00000262: MSTORE 00000263: PUSH1 0x21 00000265: PUSH1 0x04 00000267: MSTORE 00000268: PUSH1 0x24 0000026a: PUSH1 0x00 0000026c: REVERT 0000026d: JUMPDEST 0000026e: EQ 0000026f: PUSH2 0x0293 00000272: JUMPI 00000273: PUSH1 0x40 00000275: MLOAD 00000276: PUSH3 0x461bcd 0000027a: PUSH1 0xe5 0000027c: SHL 0000027d: DUP2 0000027e: MSTORE 0000027f: PUSH1 0x04 00000281: ADD 00000282: PUSH2 0x028a 00000285: SWAP1 00000286: PUSH2 0x0e98 00000289: JUMP 0000028a: JUMPDEST 0000028b: PUSH1 0x40 0000028d: MLOAD 0000028e: DUP1 0000028f: SWAP2 00000290: SUB 00000291: SWAP1 00000292: REVERT 00000293: JUMPDEST 00000294: PUSH1 0x00 00000296: SLOAD 00000297: PUSH3 0x010000 0000029b: SWAP1 0000029c: DIV 0000029d: PUSH1 0x01 0000029f: PUSH1 0x01 000002a1: PUSH1 0xa0 000002a3: SHL 000002a4: SUB 000002a5: AND 000002a6: CALLER 000002a7: EQ 000002a8: PUSH2 0x02e2 000002ab: JUMPI 000002ac: PUSH1 0x40 000002ae: MLOAD 000002af: PUSH3 0x461bcd 000002b3: PUSH1 0xe5 000002b5: SHL 000002b6: DUP2 000002b7: MSTORE 000002b8: PUSH1 0x20 000002ba: PUSH1 0x04 000002bc: DUP3 000002bd: ADD 000002be: MSTORE 000002bf: PUSH1 0x0c 000002c1: PUSH1 0x24 000002c3: DUP3 000002c4: ADD 000002c5: MSTORE 000002c6: PUSH12 0x4f4646455245525f4f4e4c59 000002d3: PUSH1 0xa0 000002d5: SHL 000002d6: PUSH1 0x44 000002d8: DUP3 000002d9: ADD 000002da: MSTORE 000002db: PUSH1 0x64 000002dd: ADD 000002de: PUSH2 0x028a 000002e1: JUMP 000002e2: JUMPDEST 000002e3: PUSH1 0x00 000002e5: SLOAD 000002e6: PUSH1 0x01 000002e8: PUSH1 0xb0 000002ea: SHL 000002eb: SWAP1 000002ec: DIV 000002ed: PUSH1 0xff 000002ef: AND 000002f0: ISZERO 000002f1: PUSH2 0x0330 000002f4: JUMPI 000002f5: PUSH1 0x40 000002f7: MLOAD 000002f8: PUSH3 0x461bcd 000002fc: PUSH1 0xe5 000002fe: SHL 000002ff: DUP2 00000300: MSTORE 00000301: PUSH1 0x20 00000303: PUSH1 0x04 00000305: DUP3 00000306: ADD 00000307: MSTORE 00000308: PUSH1 0x11 0000030a: PUSH1 0x24 0000030c: DUP3 0000030d: ADD 0000030e: MSTORE 0000030f: PUSH17 0x20a62922a0a22cafaba4aa24222920aba7 00000321: PUSH1 0x79 00000323: SHL 00000324: PUSH1 0x44 00000326: DUP3 00000327: ADD 00000328: MSTORE 00000329: PUSH1 0x64 0000032b: ADD 0000032c: PUSH2 0x028a 0000032f: JUMP 00000330: JUMPDEST 00000331: PUSH1 0x00 00000333: DUP1 00000334: SLOAD 00000335: PUSH1 0xff 00000337: PUSH1 0xb0 00000339: SHL 0000033a: NOT 0000033b: AND 0000033c: PUSH1 0x01 0000033e: PUSH1 0xb0 00000340: SHL 00000341: OR 00000342: DUP2 00000343: SSTORE 00000344: PUSH1 0x08 00000346: SLOAD 00000347: PUSH1 0x04 00000349: SLOAD 0000034a: PUSH2 0x0353 0000034d: SWAP2 0000034e: SWAP1 0000034f: PUSH2 0x0ebc 00000352: JUMP 00000353: JUMPDEST 00000354: PUSH1 0x00 00000356: SLOAD 00000357: PUSH1 0x02 00000359: SLOAD 0000035a: SWAP2 0000035b: SWAP3 0000035c: POP 0000035d: PUSH2 0x0379 00000360: SWAP2 00000361: PUSH1 0x01 00000363: PUSH1 0x01 00000365: PUSH1 0xa0 00000367: SHL 00000368: SUB 00000369: SWAP1 0000036a: DUP2 0000036b: AND 0000036c: SWAP2 0000036d: PUSH3 0x010000 00000371: SWAP1 00000372: DIV 00000373: AND 00000374: DUP4 00000375: PUSH2 0x0a75 00000378: JUMP 00000379: JUMPDEST 0000037a: POP 0000037b: POP 0000037c: JUMP 0000037d: JUMPDEST 0000037e: PUSH1 0x00 00000380: SLOAD 00000381: PUSH2 0x0100 00000384: SWAP1 00000385: DIV 00000386: PUSH1 0xff 00000388: AND 00000389: DUP1 0000038a: PUSH2 0x0396 0000038d: JUMPI 0000038e: POP 0000038f: PUSH1 0x00 00000391: SLOAD 00000392: PUSH1 0xff 00000394: AND 00000395: ISZERO 00000396: JUMPDEST 00000397: PUSH2 0x03f9 0000039a: JUMPI 0000039b: PUSH1 0x40 0000039d: MLOAD 0000039e: PUSH3 0x461bcd 000003a2: PUSH1 0xe5 000003a4: SHL 000003a5: DUP2 000003a6: MSTORE 000003a7: PUSH1 0x20 000003a9: PUSH1 0x04 000003ab: DUP3 000003ac: ADD 000003ad: MSTORE 000003ae: PUSH1 0x2e 000003b0: PUSH1 0x24 000003b2: DUP3 000003b3: ADD 000003b4: MSTORE 000003b5: PUSH32 0x496e697469616c697a61626c653a20636f6e747261637420697320616c726561 000003d6: PUSH1 0x44 000003d8: DUP3 000003d9: ADD 000003da: MSTORE 000003db: PUSH14 0x191e481a5b9a5d1a585b1a5e9959 000003ea: PUSH1 0x92 000003ec: SHL 000003ed: PUSH1 0x64 000003ef: DUP3 000003f0: ADD 000003f1: MSTORE 000003f2: PUSH1 0x84 000003f4: ADD 000003f5: PUSH2 0x028a 000003f8: JUMP 000003f9: JUMPDEST 000003fa: PUSH1 0x00 000003fc: SLOAD 000003fd: PUSH2 0x0100 00000400: SWAP1 00000401: DIV 00000402: PUSH1 0xff 00000404: AND 00000405: ISZERO 00000406: DUP1 00000407: ISZERO 00000408: PUSH2 0x041b 0000040b: JUMPI 0000040c: PUSH1 0x00 0000040e: DUP1 0000040f: SLOAD 00000410: PUSH2 0xffff 00000413: NOT 00000414: AND 00000415: PUSH2 0x0101 00000418: OR 00000419: SWAP1 0000041a: SSTORE 0000041b: JUMPDEST 0000041c: PUSH1 0x01 0000041e: DUP1 0000041f: SLOAD 00000420: PUSH1 0x01 00000422: PUSH1 0x01 00000424: PUSH1 0xa0 00000426: SHL 00000427: SUB 00000428: DUP1 00000429: DUP7 0000042a: AND 0000042b: PUSH1 0x01 0000042d: PUSH1 0x01 0000042f: PUSH1 0xa0 00000431: SHL 00000432: SUB 00000433: NOT 00000434: SWAP3 00000435: DUP4 00000436: AND 00000437: OR 00000438: SWAP1 00000439: SWAP3 0000043a: SSTORE 0000043b: PUSH1 0x02 0000043d: DUP1 0000043e: SLOAD 0000043f: SWAP3 00000440: DUP6 00000441: AND 00000442: SWAP3 00000443: SWAP1 00000444: SWAP2 00000445: AND 00000446: SWAP2 00000447: SWAP1 00000448: SWAP2 00000449: OR 0000044a: SWAP1 0000044b: SSTORE 0000044c: DUP1 0000044d: ISZERO 0000044e: PUSH2 0x045d 00000451: JUMPI 00000452: PUSH1 0x00 00000454: DUP1 00000455: SLOAD 00000456: PUSH2 0xff00 00000459: NOT 0000045a: AND 0000045b: SWAP1 0000045c: SSTORE 0000045d: JUMPDEST 0000045e: POP 0000045f: POP 00000460: POP 00000461: JUMP 00000462: JUMPDEST 00000463: PUSH1 0x03 00000465: DUP1 00000466: PUSH2 0x046d 00000469: PUSH2 0x01ff 0000046c: JUMP 0000046d: JUMPDEST 0000046e: PUSH1 0x03 00000470: DUP2 00000471: GT 00000472: ISZERO 00000473: PUSH2 0x048c 00000476: JUMPI 00000477: PUSH4 0x4e487b71 0000047c: PUSH1 0xe0 0000047e: SHL 0000047f: PUSH1 0x00 00000481: MSTORE 00000482: PUSH1 0x21 00000484: PUSH1 0x04 00000486: MSTORE 00000487: PUSH1 0x24 00000489: PUSH1 0x00 0000048b: REVERT 0000048c: JUMPDEST 0000048d: EQ 0000048e: PUSH2 0x04a9 00000491: JUMPI 00000492: PUSH1 0x40 00000494: MLOAD 00000495: PUSH3 0x461bcd 00000499: PUSH1 0xe5 0000049b: SHL 0000049c: DUP2 0000049d: MSTORE 0000049e: PUSH1 0x04 000004a0: ADD 000004a1: PUSH2 0x028a 000004a4: SWAP1 000004a5: PUSH2 0x0e98 000004a8: JUMP 000004a9: JUMPDEST 000004aa: CALLER 000004ab: PUSH1 0x00 000004ad: SWAP1 000004ae: DUP2 000004af: MSTORE 000004b0: PUSH1 0x09 000004b2: PUSH1 0x20 000004b4: MSTORE 000004b5: PUSH1 0x40 000004b7: SWAP1 000004b8: KECCAK256 000004b9: SLOAD 000004ba: PUSH2 0x0505 000004bd: JUMPI 000004be: PUSH1 0x40 000004c0: MLOAD 000004c1: PUSH3 0x461bcd 000004c5: PUSH1 0xe5 000004c7: SHL 000004c8: DUP2 000004c9: MSTORE 000004ca: PUSH1 0x20 000004cc: PUSH1 0x04 000004ce: DUP3 000004cf: ADD 000004d0: MSTORE 000004d1: PUSH1 0x1e 000004d3: PUSH1 0x24 000004d5: DUP3 000004d6: ADD 000004d7: MSTORE 000004d8: PUSH32 0x4e4f545f434f554e5445524f4646455245525f4f525f524546554e4445440000 000004f9: PUSH1 0x44 000004fb: DUP3 000004fc: ADD 000004fd: MSTORE 000004fe: PUSH1 0x64 00000500: ADD 00000501: PUSH2 0x028a 00000504: JUMP 00000505: JUMPDEST 00000506: CALLER 00000507: PUSH1 0x00 00000509: DUP2 0000050a: DUP2 0000050b: MSTORE 0000050c: PUSH1 0x09 0000050e: PUSH1 0x20 00000510: MSTORE 00000511: PUSH1 0x40 00000513: DUP2 00000514: KECCAK256 00000515: DUP1 00000516: SLOAD 00000517: SWAP2 00000518: SWAP1 00000519: SSTORE 0000051a: PUSH1 0x02 0000051c: SLOAD 0000051d: SWAP1 0000051e: SWAP2 0000051f: PUSH2 0x0379 00000522: SWAP2 00000523: PUSH1 0x01 00000525: PUSH1 0x01 00000527: PUSH1 0xa0 00000529: SHL 0000052a: SUB 0000052b: AND 0000052c: SWAP1 0000052d: DUP4 0000052e: PUSH2 0x0a75 00000531: JUMP 00000532: JUMPDEST 00000533: PUSH1 0x02 00000535: DUP1 00000536: PUSH2 0x053d 00000539: PUSH2 0x01ff 0000053c: JUMP 0000053d: JUMPDEST 0000053e: PUSH1 0x03 00000540: DUP2 00000541: GT 00000542: ISZERO 00000543: PUSH2 0x055c 00000546: JUMPI 00000547: PUSH4 0x4e487b71 0000054c: PUSH1 0xe0 0000054e: SHL 0000054f: PUSH1 0x00 00000551: MSTORE 00000552: PUSH1 0x21 00000554: PUSH1 0x04 00000556: MSTORE 00000557: PUSH1 0x24 00000559: PUSH1 0x00 0000055b: REVERT 0000055c: JUMPDEST 0000055d: EQ 0000055e: PUSH2 0x0579 00000561: JUMPI 00000562: PUSH1 0x40 00000564: MLOAD 00000565: PUSH3 0x461bcd 00000569: PUSH1 0xe5 0000056b: SHL 0000056c: DUP2 0000056d: MSTORE 0000056e: PUSH1 0x04 00000570: ADD 00000571: PUSH2 0x028a 00000574: SWAP1 00000575: PUSH2 0x0e98 00000578: JUMP 00000579: JUMPDEST 0000057a: CALLER 0000057b: PUSH1 0x00 0000057d: SWAP1 0000057e: DUP2 0000057f: MSTORE 00000580: PUSH1 0x09 00000582: PUSH1 0x20 00000584: MSTORE 00000585: PUSH1 0x40 00000587: SWAP1 00000588: KECCAK256 00000589: SLOAD 0000058a: PUSH2 0x05d5 0000058d: JUMPI 0000058e: PUSH1 0x40 00000590: MLOAD 00000591: PUSH3 0x461bcd 00000595: PUSH1 0xe5 00000597: SHL 00000598: DUP2 00000599: MSTORE 0000059a: PUSH1 0x20 0000059c: PUSH1 0x04 0000059e: DUP3 0000059f: ADD 000005a0: MSTORE 000005a1: PUSH1 0x1f 000005a3: PUSH1 0x24 000005a5: DUP3 000005a6: ADD 000005a7: MSTORE 000005a8: PUSH32 0x4e4f545f434f554e5445524f4646455245525f4f525f57495448445241574e00 000005c9: PUSH1 0x44 000005cb: DUP3 000005cc: ADD 000005cd: MSTORE 000005ce: PUSH1 0x64 000005d0: ADD 000005d1: PUSH2 0x028a 000005d4: JUMP 000005d5: JUMPDEST 000005d6: PUSH1 0x08 000005d8: SLOAD 000005d9: PUSH1 0x03 000005db: SLOAD 000005dc: CALLER 000005dd: PUSH1 0x00 000005df: SWAP1 000005e0: DUP2 000005e1: MSTORE 000005e2: PUSH1 0x09 000005e4: PUSH1 0x20 000005e6: MSTORE 000005e7: PUSH1 0x40 000005e9: DUP2 000005ea: KECCAK256 000005eb: SLOAD 000005ec: SWAP1 000005ed: SWAP3 000005ee: SWAP2 000005ef: PUSH2 0x05f7 000005f2: SWAP2 000005f3: PUSH2 0x0ef4 000005f6: JUMP 000005f7: JUMPDEST 000005f8: PUSH2 0x0601 000005fb: SWAP2 000005fc: SWAP1 000005fd: PUSH2 0x0ed4 00000600: JUMP 00000601: JUMPDEST 00000602: CALLER 00000603: PUSH1 0x00 00000605: DUP2 00000606: DUP2 00000607: MSTORE 00000608: PUSH1 0x09 0000060a: PUSH1 0x20 0000060c: MSTORE 0000060d: PUSH1 0x40 0000060f: DUP2 00000610: KECCAK256 00000611: SSTORE 00000612: PUSH1 0x01 00000614: SLOAD 00000615: SWAP2 00000616: SWAP3 00000617: POP 00000618: PUSH2 0x0379 0000061b: SWAP2 0000061c: PUSH1 0x01 0000061e: PUSH1 0x01 00000620: PUSH1 0xa0 00000622: SHL 00000623: SUB 00000624: AND 00000625: SWAP1 00000626: DUP4 00000627: PUSH2 0x0a75 0000062a: JUMP 0000062b: JUMPDEST 0000062c: PUSH1 0x00 0000062e: DUP1 0000062f: PUSH2 0x0636 00000632: PUSH2 0x01ff 00000635: JUMP 00000636: JUMPDEST 00000637: PUSH1 0x03 00000639: DUP2 0000063a: GT 0000063b: ISZERO 0000063c: PUSH2 0x0655 0000063f: JUMPI 00000640: PUSH4 0x4e487b71 00000645: PUSH1 0xe0 00000647: SHL 00000648: PUSH1 0x00 0000064a: MSTORE 0000064b: PUSH1 0x21 0000064d: PUSH1 0x04 0000064f: MSTORE 00000650: PUSH1 0x24 00000652: PUSH1 0x00 00000654: REVERT 00000655: JUMPDEST 00000656: EQ 00000657: PUSH2 0x0672 0000065a: JUMPI 0000065b: PUSH1 0x40 0000065d: MLOAD 0000065e: PUSH3 0x461bcd 00000662: PUSH1 0xe5 00000664: SHL 00000665: DUP2 00000666: MSTORE 00000667: PUSH1 0x04 00000669: ADD 0000066a: PUSH2 0x028a 0000066d: SWAP1 0000066e: PUSH2 0x0e98 00000671: JUMP 00000672: JUMPDEST 00000673: PUSH1 0x01 00000675: SLOAD 00000676: PUSH1 0x40 00000678: DUP1 00000679: MLOAD 0000067a: PUSH4 0x18160ddd 0000067f: PUSH1 0xe0 00000681: SHL 00000682: DUP2 00000683: MSTORE 00000684: SWAP1 00000685: MLOAD 00000686: PUSH1 0x00 00000688: SWAP3 00000689: PUSH1 0x01 0000068b: PUSH1 0x01 0000068d: PUSH1 0xa0 0000068f: SHL 00000690: SUB 00000691: AND 00000692: SWAP2 00000693: PUSH4 0x18160ddd 00000698: SWAP2 00000699: PUSH1 0x04 0000069b: DUP1 0000069c: DUP4 0000069d: ADD 0000069e: SWAP3 0000069f: PUSH1 0x20 000006a1: SWAP3 000006a2: SWAP2 000006a3: SWAP1 000006a4: DUP3 000006a5: SWAP1 000006a6: SUB 000006a7: ADD 000006a8: DUP2 000006a9: DUP7 000006aa: DUP1 000006ab: EXTCODESIZE 000006ac: ISZERO 000006ad: DUP1 000006ae: ISZERO 000006af: PUSH2 0x06b7 000006b2: JUMPI 000006b3: PUSH1 0x00 000006b5: DUP1 000006b6: REVERT 000006b7: JUMPDEST 000006b8: POP 000006b9: GAS 000006ba: STATICCALL 000006bb: ISZERO 000006bc: DUP1 000006bd: ISZERO 000006be: PUSH2 0x06cb 000006c1: JUMPI 000006c2: RETURNDATASIZE 000006c3: PUSH1 0x00 000006c5: DUP1 000006c6: RETURNDATACOPY 000006c7: RETURNDATASIZE 000006c8: PUSH1 0x00 000006ca: REVERT 000006cb: JUMPDEST 000006cc: POP 000006cd: POP 000006ce: POP 000006cf: POP 000006d0: PUSH1 0x40 000006d2: MLOAD 000006d3: RETURNDATASIZE 000006d4: PUSH1 0x1f 000006d6: NOT 000006d7: PUSH1 0x1f 000006d9: DUP3 000006da: ADD 000006db: AND 000006dc: DUP3 000006dd: ADD 000006de: DUP1 000006df: PUSH1 0x40 000006e1: MSTORE 000006e2: POP 000006e3: DUP2 000006e4: ADD 000006e5: SWAP1 000006e6: PUSH2 0x06ef 000006e9: SWAP2 000006ea: SWAP1 000006eb: PUSH2 0x0de8 000006ee: JUMP 000006ef: JUMPDEST 000006f0: PUSH1 0x00 000006f2: DUP1 000006f3: SLOAD 000006f4: PUSH3 0x010000 000006f8: PUSH1 0x01 000006fa: PUSH1 0xb0 000006fc: SHL 000006fd: SUB 000006fe: NOT 000006ff: AND 00000700: CALLER 00000701: PUSH3 0x010000 00000705: MUL 00000706: OR 00000707: DUP2 00000708: SSTORE 00000709: SWAP1 0000070a: SWAP2 0000070b: POP 0000070c: PUSH2 0x2710 0000070f: PUSH2 0x071a 00000712: DUP4 00000713: PUSH2 0x0bb8 00000716: PUSH2 0x0ef4 00000719: JUMP 0000071a: JUMPDEST 0000071b: PUSH2 0x0724 0000071e: SWAP2 0000071f: SWAP1 00000720: PUSH2 0x0ed4 00000723: JUMP 00000724: JUMPDEST 00000725: SWAP1 00000726: POP 00000727: DUP1 00000728: DUP6 00000729: LT 0000072a: ISZERO 0000072b: PUSH2 0x0768 0000072e: JUMPI 0000072f: PUSH1 0x40 00000731: MLOAD 00000732: PUSH3 0x461bcd 00000736: PUSH1 0xe5 00000738: SHL 00000739: DUP2 0000073a: MSTORE 0000073b: PUSH1 0x20 0000073d: PUSH1 0x04 0000073f: DUP3 00000740: ADD 00000741: MSTORE 00000742: PUSH1 0x0f 00000744: PUSH1 0x24 00000746: DUP3 00000747: ADD 00000748: MSTORE 00000749: PUSH15 0x544f4b454e5f4f464645525f4c4f57 00000759: PUSH1 0x88 0000075b: SHL 0000075c: PUSH1 0x44 0000075e: DUP3 0000075f: ADD 00000760: MSTORE 00000761: PUSH1 0x64 00000763: ADD 00000764: PUSH2 0x028a 00000767: JUMP 00000768: JUMPDEST 00000769: PUSH1 0x64 0000076b: DUP5 0000076c: GT 0000076d: PUSH2 0x07ac 00000770: JUMPI 00000771: PUSH1 0x40 00000773: MLOAD 00000774: PUSH3 0x461bcd 00000778: PUSH1 0xe5 0000077a: SHL 0000077b: DUP2 0000077c: MSTORE 0000077d: PUSH1 0x20 0000077f: PUSH1 0x04 00000781: DUP3 00000782: ADD 00000783: MSTORE 00000784: PUSH1 0x11 00000786: PUSH1 0x24 00000788: DUP3 00000789: ADD 0000078a: MSTORE 0000078b: PUSH17 0x46554e44494e475f4f464645525f4c4f57 0000079d: PUSH1 0x78 0000079f: SHL 000007a0: PUSH1 0x44 000007a2: DUP3 000007a3: ADD 000007a4: MSTORE 000007a5: PUSH1 0x64 000007a7: ADD 000007a8: PUSH2 0x028a 000007ab: JUMP 000007ac: JUMPDEST 000007ad: PUSH1 0x03 000007af: DUP6 000007b0: SWAP1 000007b1: SSTORE 000007b2: PUSH1 0x04 000007b4: DUP5 000007b5: SWAP1 000007b6: SSTORE 000007b7: PUSH2 0x07c0 000007ba: DUP6 000007bb: DUP4 000007bc: PUSH2 0x0f13 000007bf: JUMP 000007c0: JUMPDEST 000007c1: PUSH1 0x05 000007c3: DUP2 000007c4: SWAP1 000007c5: SSTORE 000007c6: PUSH1 0x03 000007c8: SLOAD 000007c9: PUSH1 0x04 000007cb: SLOAD 000007cc: PUSH2 0x07d5 000007cf: SWAP2 000007d0: SWAP1 000007d1: PUSH2 0x0ef4 000007d4: JUMP 000007d5: JUMPDEST 000007d6: PUSH2 0x07df 000007d9: SWAP2 000007da: SWAP1 000007db: PUSH2 0x0ed4 000007de: JUMP 000007df: JUMPDEST 000007e0: PUSH1 0x07 000007e2: SSTORE 000007e3: PUSH2 0x07ef 000007e6: PUSH3 0x24ea00 000007ea: TIMESTAMP 000007eb: PUSH2 0x0ebc 000007ee: JUMP 000007ef: JUMPDEST 000007f0: PUSH1 0x06 000007f2: SSTORE 000007f3: PUSH1 0x01 000007f5: SLOAD 000007f6: PUSH2 0x080a 000007f9: SWAP1 000007fa: PUSH1 0x01 000007fc: PUSH1 0x01 000007fe: PUSH1 0xa0 00000800: SHL 00000801: SUB 00000802: AND 00000803: CALLER 00000804: ADDRESS 00000805: DUP9 00000806: PUSH2 0x0ad8 00000809: JUMP 0000080a: JUMPDEST 0000080b: PUSH1 0x02 0000080d: SLOAD 0000080e: PUSH2 0x0822 00000811: SWAP1 00000812: PUSH1 0x01 00000814: PUSH1 0x01 00000816: PUSH1 0xa0 00000818: SHL 00000819: SUB 0000081a: AND 0000081b: CALLER 0000081c: ADDRESS 0000081d: DUP8 0000081e: PUSH2 0x0ad8 00000821: JUMP 00000822: JUMPDEST 00000823: POP 00000824: POP 00000825: POP 00000826: POP 00000827: POP 00000828: JUMP 00000829: JUMPDEST 0000082a: PUSH1 0x01 0000082c: DUP1 0000082d: PUSH2 0x0834 00000830: PUSH2 0x01ff 00000833: JUMP 00000834: JUMPDEST 00000835: PUSH1 0x03 00000837: DUP2 00000838: GT 00000839: ISZERO 0000083a: PUSH2 0x0853 0000083d: JUMPI 0000083e: PUSH4 0x4e487b71 00000843: PUSH1 0xe0 00000845: SHL 00000846: PUSH1 0x00 00000848: MSTORE 00000849: PUSH1 0x21 0000084b: PUSH1 0x04 0000084d: MSTORE 0000084e: PUSH1 0x24 00000850: PUSH1 0x00 00000852: REVERT 00000853: JUMPDEST 00000854: EQ 00000855: PUSH2 0x0870 00000858: JUMPI 00000859: PUSH1 0x40 0000085b: MLOAD 0000085c: PUSH3 0x461bcd 00000860: PUSH1 0xe5 00000862: SHL 00000863: DUP2 00000864: MSTORE 00000865: PUSH1 0x04 00000867: ADD 00000868: PUSH2 0x028a 0000086b: SWAP1 0000086c: PUSH2 0x0e98 0000086f: JUMP 00000870: JUMPDEST 00000871: PUSH1 0x00 00000873: DUP3 00000874: GT 00000875: PUSH2 0x08b7 00000878: JUMPI 00000879: PUSH1 0x40 0000087b: MLOAD 0000087c: PUSH3 0x461bcd 00000880: PUSH1 0xe5 00000882: SHL 00000883: DUP2 00000884: MSTORE 00000885: PUSH1 0x20 00000887: PUSH1 0x04 00000889: DUP3 0000088a: ADD 0000088b: MSTORE 0000088c: PUSH1 0x14 0000088e: PUSH1 0x24 00000890: DUP3 00000891: ADD 00000892: MSTORE 00000893: PUSH20 0x434f554e5445524f464645525f544f4f5f4c4f57 000008a8: PUSH1 0x60 000008aa: SHL 000008ab: PUSH1 0x44 000008ad: DUP3 000008ae: ADD 000008af: MSTORE 000008b0: PUSH1 0x64 000008b2: ADD 000008b3: PUSH2 0x028a 000008b6: JUMP 000008b7: JUMPDEST 000008b8: PUSH1 0x00 000008ba: PUSH1 0x08 000008bc: SLOAD 000008bd: PUSH1 0x07 000008bf: SLOAD 000008c0: PUSH2 0x08c9 000008c3: SWAP2 000008c4: SWAP1 000008c5: PUSH2 0x0f13 000008c8: JUMP 000008c9: JUMPDEST 000008ca: SWAP1 000008cb: POP 000008cc: DUP1 000008cd: DUP4 000008ce: GT 000008cf: ISZERO 000008d0: PUSH2 0x08d7 000008d3: JUMPI 000008d4: DUP1 000008d5: SWAP3 000008d6: POP 000008d7: JUMPDEST 000008d8: DUP3 000008d9: PUSH1 0x08 000008db: PUSH1 0x00 000008dd: DUP3 000008de: DUP3 000008df: SLOAD 000008e0: PUSH2 0x08e9 000008e3: SWAP2 000008e4: SWAP1 000008e5: PUSH2 0x0ebc 000008e8: JUMP 000008e9: JUMPDEST 000008ea: SWAP1 000008eb: SWAP2 000008ec: SSTORE 000008ed: POP 000008ee: POP 000008ef: CALLER 000008f0: PUSH1 0x00 000008f2: SWAP1 000008f3: DUP2 000008f4: MSTORE 000008f5: PUSH1 0x09 000008f7: PUSH1 0x20 000008f9: MSTORE 000008fa: PUSH1 0x40 000008fc: DUP2 000008fd: KECCAK256 000008fe: DUP1 000008ff: SLOAD 00000900: DUP6 00000901: SWAP3 00000902: SWAP1 00000903: PUSH2 0x090d 00000906: SWAP1 00000907: DUP5 00000908: SWAP1 00000909: PUSH2 0x0ebc 0000090c: JUMP 0000090d: JUMPDEST 0000090e: SWAP1 0000090f: SWAP2 00000910: SSTORE 00000911: POP 00000912: POP 00000913: PUSH1 0x02 00000915: SLOAD 00000916: PUSH2 0x092a 00000919: SWAP1 0000091a: PUSH1 0x01 0000091c: PUSH1 0x01 0000091e: PUSH1 0xa0 00000920: SHL 00000921: SUB 00000922: AND 00000923: CALLER 00000924: ADDRESS 00000925: DUP7 00000926: PUSH2 0x0ad8 00000929: JUMP 0000092a: JUMPDEST 0000092b: PUSH1 0x40 0000092d: MLOAD 0000092e: DUP4 0000092f: DUP2 00000930: MSTORE 00000931: CALLER 00000932: SWAP1 00000933: PUSH32 0xe4a537463f3d8138c281ade192f2f55198939ca995b611b8d9ef6ebe29f36057 00000954: SWAP1 00000955: PUSH1 0x20 00000957: ADD 00000958: PUSH1 0x40 0000095a: MLOAD 0000095b: DUP1 0000095c: SWAP2 0000095d: SUB 0000095e: SWAP1 0000095f: LOG2 00000960: POP 00000961: POP 00000962: POP 00000963: JUMP 00000964: JUMPDEST 00000965: PUSH1 0x03 00000967: DUP1 00000968: PUSH2 0x096f 0000096b: PUSH2 0x01ff 0000096e: JUMP 0000096f: JUMPDEST 00000970: PUSH1 0x03 00000972: DUP2 00000973: GT 00000974: ISZERO 00000975: PUSH2 0x098e 00000978: JUMPI 00000979: PUSH4 0x4e487b71 0000097e: PUSH1 0xe0 00000980: SHL 00000981: PUSH1 0x00 00000983: MSTORE 00000984: PUSH1 0x21 00000986: PUSH1 0x04 00000988: MSTORE 00000989: PUSH1 0x24 0000098b: PUSH1 0x00 0000098d: REVERT 0000098e: JUMPDEST 0000098f: EQ 00000990: PUSH2 0x09ab 00000993: JUMPI 00000994: PUSH1 0x40 00000996: MLOAD 00000997: PUSH3 0x461bcd 0000099b: PUSH1 0xe5 0000099d: SHL 0000099e: DUP2 0000099f: MSTORE 000009a0: PUSH1 0x04 000009a2: ADD 000009a3: PUSH2 0x028a 000009a6: SWAP1 000009a7: PUSH2 0x0e98 000009aa: JUMP 000009ab: JUMPDEST 000009ac: PUSH1 0x00 000009ae: DUP3 000009af: GT 000009b0: PUSH2 0x09e8 000009b3: JUMPI 000009b4: PUSH1 0x40 000009b6: MLOAD 000009b7: PUSH3 0x461bcd 000009bb: PUSH1 0xe5 000009bd: SHL 000009be: DUP2 000009bf: MSTORE 000009c0: PUSH1 0x20 000009c2: PUSH1 0x04 000009c4: DUP3 000009c5: ADD 000009c6: MSTORE 000009c7: PUSH1 0x0a 000009c9: PUSH1 0x24 000009cb: DUP3 000009cc: ADD 000009cd: MSTORE 000009ce: PUSH10 0x544f4b454e535f4c4f57 000009d9: PUSH1 0xb0 000009db: SHL 000009dc: PUSH1 0x44 000009de: DUP3 000009df: ADD 000009e0: MSTORE 000009e1: PUSH1 0x64 000009e3: ADD 000009e4: PUSH2 0x028a 000009e7: JUMP 000009e8: JUMPDEST 000009e9: PUSH1 0x00 000009eb: PUSH1 0x05 000009ed: SLOAD 000009ee: PUSH1 0x04 000009f0: SLOAD 000009f1: DUP5 000009f2: PUSH2 0x09fb 000009f5: SWAP2 000009f6: SWAP1 000009f7: PUSH2 0x0ef4 000009fa: JUMP 000009fb: JUMPDEST 000009fc: PUSH2 0x0a05 000009ff: SWAP2 00000a00: SWAP1 00000a01: PUSH2 0x0ed4 00000a04: JUMP 00000a05: JUMPDEST 00000a06: PUSH1 0x01 00000a08: SLOAD 00000a09: SWAP1 00000a0a: SWAP2 00000a0b: POP 00000a0c: PUSH2 0x0a20 00000a0f: SWAP1 00000a10: PUSH1 0x01 00000a12: PUSH1 0x01 00000a14: PUSH1 0xa0 00000a16: SHL 00000a17: SUB 00000a18: AND 00000a19: CALLER 00000a1a: ADDRESS 00000a1b: DUP7 00000a1c: PUSH2 0x0ad8 00000a1f: JUMP 00000a20: JUMPDEST 00000a21: PUSH1 0x02 00000a23: SLOAD 00000a24: PUSH2 0x0a37 00000a27: SWAP1 00000a28: PUSH1 0x01 00000a2a: PUSH1 0x01 00000a2c: PUSH1 0xa0 00000a2e: SHL 00000a2f: SUB 00000a30: AND 00000a31: CALLER 00000a32: DUP4 00000a33: PUSH2 0x0a75 00000a36: JUMP 00000a37: JUMPDEST 00000a38: PUSH1 0x40 00000a3a: DUP1 00000a3b: MLOAD 00000a3c: DUP5 00000a3d: DUP2 00000a3e: MSTORE 00000a3f: PUSH1 0x20 00000a41: DUP2 00000a42: ADD 00000a43: DUP4 00000a44: SWAP1 00000a45: MSTORE 00000a46: PUSH32 0x8ba0b35745118c74013821d55ed1f27f5328705c838c8a27ec3e0d72dc57ace2 00000a67: SWAP2 00000a68: ADD 00000a69: PUSH1 0x40 00000a6b: MLOAD 00000a6c: DUP1 00000a6d: SWAP2 00000a6e: SUB 00000a6f: SWAP1 00000a70: LOG1 00000a71: POP 00000a72: POP 00000a73: POP 00000a74: JUMP 00000a75: JUMPDEST 00000a76: PUSH1 0x40 00000a78: MLOAD 00000a79: PUSH1 0x01 00000a7b: PUSH1 0x01 00000a7d: PUSH1 0xa0 00000a7f: SHL 00000a80: SUB 00000a81: DUP4 00000a82: AND 00000a83: PUSH1 0x24 00000a85: DUP3 00000a86: ADD 00000a87: MSTORE 00000a88: PUSH1 0x44 00000a8a: DUP2 00000a8b: ADD 00000a8c: DUP3 00000a8d: SWAP1 00000a8e: MSTORE 00000a8f: PUSH2 0x045d 00000a92: SWAP1 00000a93: DUP5 00000a94: SWAP1 00000a95: PUSH4 0xa9059cbb 00000a9a: PUSH1 0xe0 00000a9c: SHL 00000a9d: SWAP1 00000a9e: PUSH1 0x64 00000aa0: ADD 00000aa1: JUMPDEST 00000aa2: PUSH1 0x40 00000aa4: DUP1 00000aa5: MLOAD 00000aa6: PUSH1 0x1f 00000aa8: NOT 00000aa9: DUP2 00000aaa: DUP5 00000aab: SUB 00000aac: ADD 00000aad: DUP2 00000aae: MSTORE 00000aaf: SWAP2 00000ab0: SWAP1 00000ab1: MSTORE 00000ab2: PUSH1 0x20 00000ab4: DUP2 00000ab5: ADD 00000ab6: DUP1 00000ab7: MLOAD 00000ab8: PUSH1 0x01 00000aba: PUSH1 0x01 00000abc: PUSH1 0xe0 00000abe: SHL 00000abf: SUB 00000ac0: AND 00000ac1: PUSH1 0x01 00000ac3: PUSH1 0x01 00000ac5: PUSH1 0xe0 00000ac7: SHL 00000ac8: SUB 00000ac9: NOT 00000aca: SWAP1 00000acb: SWAP4 00000acc: AND 00000acd: SWAP3 00000ace: SWAP1 00000acf: SWAP3 00000ad0: OR 00000ad1: SWAP1 00000ad2: SWAP2 00000ad3: MSTORE 00000ad4: PUSH2 0x0b16 00000ad7: JUMP 00000ad8: JUMPDEST 00000ad9: PUSH1 0x40 00000adb: MLOAD 00000adc: PUSH1 0x01 00000ade: PUSH1 0x01 00000ae0: PUSH1 0xa0 00000ae2: SHL 00000ae3: SUB 00000ae4: DUP1 00000ae5: DUP6 00000ae6: AND 00000ae7: PUSH1 0x24 00000ae9: DUP4 00000aea: ADD 00000aeb: MSTORE 00000aec: DUP4 00000aed: AND 00000aee: PUSH1 0x44 00000af0: DUP3 00000af1: ADD 00000af2: MSTORE 00000af3: PUSH1 0x64 00000af5: DUP2 00000af6: ADD 00000af7: DUP3 00000af8: SWAP1 00000af9: MSTORE 00000afa: PUSH2 0x0b10 00000afd: SWAP1 00000afe: DUP6 00000aff: SWAP1 00000b00: PUSH4 0x23b872dd 00000b05: PUSH1 0xe0 00000b07: SHL 00000b08: SWAP1 00000b09: PUSH1 0x84 00000b0b: ADD 00000b0c: PUSH2 0x0aa1 00000b0f: JUMP 00000b10: JUMPDEST 00000b11: POP 00000b12: POP 00000b13: POP 00000b14: POP 00000b15: JUMP 00000b16: JUMPDEST 00000b17: PUSH1 0x00 00000b19: PUSH2 0x0b6b 00000b1c: DUP3 00000b1d: PUSH1 0x40 00000b1f: MLOAD 00000b20: DUP1 00000b21: PUSH1 0x40 00000b23: ADD 00000b24: PUSH1 0x40 00000b26: MSTORE 00000b27: DUP1 00000b28: PUSH1 0x20 00000b2a: DUP2 00000b2b: MSTORE 00000b2c: PUSH1 0x20 00000b2e: ADD 00000b2f: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564 00000b50: DUP2 00000b51: MSTORE 00000b52: POP 00000b53: DUP6 00000b54: PUSH1 0x01 00000b56: PUSH1 0x01 00000b58: PUSH1 0xa0 00000b5a: SHL 00000b5b: SUB 00000b5c: AND 00000b5d: PUSH2 0x0be8 00000b60: SWAP1 00000b61: SWAP3 00000b62: SWAP2 00000b63: SWAP1 00000b64: PUSH4 0xffffffff 00000b69: AND 00000b6a: JUMP 00000b6b: JUMPDEST 00000b6c: DUP1 00000b6d: MLOAD 00000b6e: SWAP1 00000b6f: SWAP2 00000b70: POP 00000b71: ISZERO 00000b72: PUSH2 0x045d 00000b75: JUMPI 00000b76: DUP1 00000b77: DUP1 00000b78: PUSH1 0x20 00000b7a: ADD 00000b7b: SWAP1 00000b7c: MLOAD 00000b7d: DUP2 00000b7e: ADD 00000b7f: SWAP1 00000b80: PUSH2 0x0b89 00000b83: SWAP2 00000b84: SWAP1 00000b85: PUSH2 0x0d7e 00000b88: JUMP 00000b89: JUMPDEST 00000b8a: PUSH2 0x045d 00000b8d: JUMPI 00000b8e: PUSH1 0x40 00000b90: MLOAD 00000b91: PUSH3 0x461bcd 00000b95: PUSH1 0xe5 00000b97: SHL 00000b98: DUP2 00000b99: MSTORE 00000b9a: PUSH1 0x20 00000b9c: PUSH1 0x04 00000b9e: DUP3 00000b9f: ADD 00000ba0: MSTORE 00000ba1: PUSH1 0x2a 00000ba3: PUSH1 0x24 00000ba5: DUP3 00000ba6: ADD 00000ba7: MSTORE 00000ba8: PUSH32 0x5361666545524332303a204552433230206f7065726174696f6e20646964206e 00000bc9: PUSH1 0x44 00000bcb: DUP3 00000bcc: ADD 00000bcd: MSTORE 00000bce: PUSH10 0x1bdd081cdd58d8d95959 00000bd9: PUSH1 0xb2 00000bdb: SHL 00000bdc: PUSH1 0x64 00000bde: DUP3 00000bdf: ADD 00000be0: MSTORE 00000be1: PUSH1 0x84 00000be3: ADD 00000be4: PUSH2 0x028a 00000be7: JUMP 00000be8: JUMPDEST 00000be9: PUSH1 0x60 00000beb: PUSH2 0x0bf7 00000bee: DUP5 00000bef: DUP5 00000bf0: PUSH1 0x00 00000bf2: DUP6 00000bf3: PUSH2 0x0c01 00000bf6: JUMP 00000bf7: JUMPDEST 00000bf8: SWAP1 00000bf9: POP 00000bfa: JUMPDEST 00000bfb: SWAP4 00000bfc: SWAP3 00000bfd: POP 00000bfe: POP 00000bff: POP 00000c00: JUMP 00000c01: JUMPDEST 00000c02: PUSH1 0x60 00000c04: DUP3 00000c05: SELFBALANCE 00000c06: LT 00000c07: ISZERO 00000c08: PUSH2 0x0c62 00000c0b: JUMPI 00000c0c: PUSH1 0x40 00000c0e: MLOAD 00000c0f: PUSH3 0x461bcd 00000c13: PUSH1 0xe5 00000c15: SHL 00000c16: DUP2 00000c17: MSTORE 00000c18: PUSH1 0x20 00000c1a: PUSH1 0x04 00000c1c: DUP3 00000c1d: ADD 00000c1e: MSTORE 00000c1f: PUSH1 0x26 00000c21: PUSH1 0x24 00000c23: DUP3 00000c24: ADD 00000c25: MSTORE 00000c26: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e636520666f 00000c47: PUSH1 0x44 00000c49: DUP3 00000c4a: ADD 00000c4b: MSTORE 00000c4c: PUSH6 0x1c8818d85b1b 00000c53: PUSH1 0xd2 00000c55: SHL 00000c56: PUSH1 0x64 00000c58: DUP3 00000c59: ADD 00000c5a: MSTORE 00000c5b: PUSH1 0x84 00000c5d: ADD 00000c5e: PUSH2 0x028a 00000c61: JUMP 00000c62: JUMPDEST 00000c63: DUP5 00000c64: EXTCODESIZE 00000c65: PUSH2 0x0cb0 00000c68: JUMPI 00000c69: PUSH1 0x40 00000c6b: MLOAD 00000c6c: PUSH3 0x461bcd 00000c70: PUSH1 0xe5 00000c72: SHL 00000c73: DUP2 00000c74: MSTORE 00000c75: PUSH1 0x20 00000c77: PUSH1 0x04 00000c79: DUP3 00000c7a: ADD 00000c7b: MSTORE 00000c7c: PUSH1 0x1d 00000c7e: PUSH1 0x24 00000c80: DUP3 00000c81: ADD 00000c82: MSTORE 00000c83: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000 00000ca4: PUSH1 0x44 00000ca6: DUP3 00000ca7: ADD 00000ca8: MSTORE 00000ca9: PUSH1 0x64 00000cab: ADD 00000cac: PUSH2 0x028a 00000caf: JUMP 00000cb0: JUMPDEST 00000cb1: PUSH1 0x00 00000cb3: DUP1 00000cb4: DUP7 00000cb5: PUSH1 0x01 00000cb7: PUSH1 0x01 00000cb9: PUSH1 0xa0 00000cbb: SHL 00000cbc: SUB 00000cbd: AND 00000cbe: DUP6 00000cbf: DUP8 00000cc0: PUSH1 0x40 00000cc2: MLOAD 00000cc3: PUSH2 0x0ccc 00000cc6: SWAP2 00000cc7: SWAP1 00000cc8: PUSH2 0x0e21 00000ccb: JUMP 00000ccc: JUMPDEST 00000ccd: PUSH1 0x00 00000ccf: PUSH1 0x40 00000cd1: MLOAD 00000cd2: DUP1 00000cd3: DUP4 00000cd4: SUB 00000cd5: DUP2 00000cd6: DUP6 00000cd7: DUP8 00000cd8: GAS 00000cd9: CALL 00000cda: SWAP3 00000cdb: POP 00000cdc: POP 00000cdd: POP 00000cde: RETURNDATASIZE 00000cdf: DUP1 00000ce0: PUSH1 0x00 00000ce2: DUP2 00000ce3: EQ 00000ce4: PUSH2 0x0d09 00000ce7: JUMPI 00000ce8: PUSH1 0x40 00000cea: MLOAD 00000ceb: SWAP2 00000cec: POP 00000ced: PUSH1 0x1f 00000cef: NOT 00000cf0: PUSH1 0x3f 00000cf2: RETURNDATASIZE 00000cf3: ADD 00000cf4: AND 00000cf5: DUP3 00000cf6: ADD 00000cf7: PUSH1 0x40 00000cf9: MSTORE 00000cfa: RETURNDATASIZE 00000cfb: DUP3 00000cfc: MSTORE 00000cfd: RETURNDATASIZE 00000cfe: PUSH1 0x00 00000d00: PUSH1 0x20 00000d02: DUP5 00000d03: ADD 00000d04: RETURNDATACOPY 00000d05: PUSH2 0x0d0e 00000d08: JUMP 00000d09: JUMPDEST 00000d0a: PUSH1 0x60 00000d0c: SWAP2 00000d0d: POP 00000d0e: JUMPDEST 00000d0f: POP 00000d10: SWAP2 00000d11: POP 00000d12: SWAP2 00000d13: POP 00000d14: PUSH2 0x0d1e 00000d17: DUP3 00000d18: DUP3 00000d19: DUP7 00000d1a: PUSH2 0x0d29 00000d1d: JUMP 00000d1e: JUMPDEST 00000d1f: SWAP8 00000d20: SWAP7 00000d21: POP 00000d22: POP 00000d23: POP 00000d24: POP 00000d25: POP 00000d26: POP 00000d27: POP 00000d28: JUMP 00000d29: JUMPDEST 00000d2a: PUSH1 0x60 00000d2c: DUP4 00000d2d: ISZERO 00000d2e: PUSH2 0x0d38 00000d31: JUMPI 00000d32: POP 00000d33: DUP2 00000d34: PUSH2 0x0bfa 00000d37: JUMP 00000d38: JUMPDEST 00000d39: DUP3 00000d3a: MLOAD 00000d3b: ISZERO 00000d3c: PUSH2 0x0d48 00000d3f: JUMPI 00000d40: DUP3 00000d41: MLOAD 00000d42: DUP1 00000d43: DUP5 00000d44: PUSH1 0x20 00000d46: ADD 00000d47: REVERT 00000d48: JUMPDEST 00000d49: DUP2 00000d4a: PUSH1 0x40 00000d4c: MLOAD 00000d4d: PUSH3 0x461bcd 00000d51: PUSH1 0xe5 00000d53: SHL 00000d54: DUP2 00000d55: MSTORE 00000d56: PUSH1 0x04 00000d58: ADD 00000d59: PUSH2 0x028a 00000d5c: SWAP2 00000d5d: SWAP1 00000d5e: PUSH2 0x0e65 00000d61: JUMP 00000d62: JUMPDEST 00000d63: DUP1 00000d64: CALLDATALOAD 00000d65: PUSH1 0x01 00000d67: PUSH1 0x01 00000d69: PUSH1 0xa0 00000d6b: SHL 00000d6c: SUB 00000d6d: DUP2 00000d6e: AND 00000d6f: DUP2 00000d70: EQ 00000d71: PUSH2 0x0d79 00000d74: JUMPI 00000d75: PUSH1 0x00 00000d77: DUP1 00000d78: REVERT 00000d79: JUMPDEST 00000d7a: SWAP2 00000d7b: SWAP1 00000d7c: POP 00000d7d: JUMP 00000d7e: JUMPDEST 00000d7f: PUSH1 0x00 00000d81: PUSH1 0x20 00000d83: DUP3 00000d84: DUP5 00000d85: SUB 00000d86: SLT 00000d87: ISZERO 00000d88: PUSH2 0x0d8f 00000d8b: JUMPI 00000d8c: DUP1 00000d8d: DUP2 00000d8e: REVERT 00000d8f: JUMPDEST 00000d90: DUP2 00000d91: MLOAD 00000d92: DUP1 00000d93: ISZERO 00000d94: ISZERO 00000d95: DUP2 00000d96: EQ 00000d97: PUSH2 0x0bfa 00000d9a: JUMPI 00000d9b: DUP2 00000d9c: DUP3 00000d9d: REVERT 00000d9e: JUMPDEST 00000d9f: PUSH1 0x00 00000da1: DUP1 00000da2: PUSH1 0x40 00000da4: DUP4 00000da5: DUP6 00000da6: SUB 00000da7: SLT 00000da8: ISZERO 00000da9: PUSH2 0x0db0 00000dac: JUMPI 00000dad: DUP1 00000dae: DUP2 00000daf: REVERT 00000db0: JUMPDEST 00000db1: PUSH2 0x0db9 00000db4: DUP4 00000db5: PUSH2 0x0d62 00000db8: JUMP 00000db9: JUMPDEST 00000dba: SWAP2 00000dbb: POP 00000dbc: PUSH2 0x0dc7 00000dbf: PUSH1 0x20 00000dc1: DUP5 00000dc2: ADD 00000dc3: PUSH2 0x0d62 00000dc6: JUMP 00000dc7: JUMPDEST 00000dc8: SWAP1 00000dc9: POP 00000dca: SWAP3 00000dcb: POP 00000dcc: SWAP3 00000dcd: SWAP1 00000dce: POP 00000dcf: JUMP 00000dd0: JUMPDEST 00000dd1: PUSH1 0x00 00000dd3: PUSH1 0x20 00000dd5: DUP3 00000dd6: DUP5 00000dd7: SUB 00000dd8: SLT 00000dd9: ISZERO 00000dda: PUSH2 0x0de1 00000ddd: JUMPI 00000dde: DUP1 00000ddf: DUP2 00000de0: REVERT 00000de1: JUMPDEST 00000de2: POP 00000de3: CALLDATALOAD 00000de4: SWAP2 00000de5: SWAP1 00000de6: POP 00000de7: JUMP 00000de8: JUMPDEST 00000de9: PUSH1 0x00 00000deb: PUSH1 0x20 00000ded: DUP3 00000dee: DUP5 00000def: SUB 00000df0: SLT 00000df1: ISZERO 00000df2: PUSH2 0x0df9 00000df5: JUMPI 00000df6: DUP1 00000df7: DUP2 00000df8: REVERT 00000df9: JUMPDEST 00000dfa: POP 00000dfb: MLOAD 00000dfc: SWAP2 00000dfd: SWAP1 00000dfe: POP 00000dff: JUMP 00000e00: JUMPDEST 00000e01: PUSH1 0x00 00000e03: DUP1 00000e04: PUSH1 0x40 00000e06: DUP4 00000e07: DUP6 00000e08: SUB 00000e09: SLT 00000e0a: ISZERO 00000e0b: PUSH2 0x0e12 00000e0e: JUMPI 00000e0f: DUP2 00000e10: DUP3 00000e11: REVERT 00000e12: JUMPDEST 00000e13: POP 00000e14: POP 00000e15: DUP1 00000e16: CALLDATALOAD 00000e17: SWAP3 00000e18: PUSH1 0x20 00000e1a: SWAP1 00000e1b: SWAP2 00000e1c: ADD 00000e1d: CALLDATALOAD 00000e1e: SWAP2 00000e1f: POP 00000e20: JUMP 00000e21: JUMPDEST 00000e22: PUSH1 0x00 00000e24: DUP3 00000e25: MLOAD 00000e26: PUSH2 0x0e33 00000e29: DUP2 00000e2a: DUP5 00000e2b: PUSH1 0x20 00000e2d: DUP8 00000e2e: ADD 00000e2f: PUSH2 0x0f2a 00000e32: JUMP 00000e33: JUMPDEST 00000e34: SWAP2 00000e35: SWAP1 00000e36: SWAP2 00000e37: ADD 00000e38: SWAP3 00000e39: SWAP2 00000e3a: POP 00000e3b: POP 00000e3c: JUMP 00000e3d: JUMPDEST 00000e3e: PUSH1 0x20 00000e40: DUP2 00000e41: ADD 00000e42: PUSH1 0x04 00000e44: DUP4 00000e45: LT 00000e46: PUSH2 0x0e5f 00000e49: JUMPI 00000e4a: PUSH4 0x4e487b71 00000e4f: PUSH1 0xe0 00000e51: SHL 00000e52: PUSH1 0x00 00000e54: MSTORE 00000e55: PUSH1 0x21 00000e57: PUSH1 0x04 00000e59: MSTORE 00000e5a: PUSH1 0x24 00000e5c: PUSH1 0x00 00000e5e: REVERT 00000e5f: JUMPDEST 00000e60: SWAP2 00000e61: SWAP1 00000e62: MSTORE 00000e63: SWAP1 00000e64: JUMP 00000e65: JUMPDEST 00000e66: PUSH1 0x20 00000e68: DUP2 00000e69: MSTORE 00000e6a: PUSH1 0x00 00000e6c: DUP3 00000e6d: MLOAD 00000e6e: DUP1 00000e6f: PUSH1 0x20 00000e71: DUP5 00000e72: ADD 00000e73: MSTORE 00000e74: PUSH2 0x0e84 00000e77: DUP2 00000e78: PUSH1 0x40 00000e7a: DUP6 00000e7b: ADD 00000e7c: PUSH1 0x20 00000e7e: DUP8 00000e7f: ADD 00000e80: PUSH2 0x0f2a 00000e83: JUMP 00000e84: JUMPDEST 00000e85: PUSH1 0x1f 00000e87: ADD 00000e88: PUSH1 0x1f 00000e8a: NOT 00000e8b: AND 00000e8c: SWAP2 00000e8d: SWAP1 00000e8e: SWAP2 00000e8f: ADD 00000e90: PUSH1 0x40 00000e92: ADD 00000e93: SWAP3 00000e94: SWAP2 00000e95: POP 00000e96: POP 00000e97: JUMP 00000e98: JUMPDEST 00000e99: PUSH1 0x20 00000e9b: DUP1 00000e9c: DUP3 00000e9d: MSTORE 00000e9e: PUSH1 0x0a 00000ea0: SWAP1 00000ea1: DUP3 00000ea2: ADD 00000ea3: MSTORE 00000ea4: PUSH10 0x4241445f535441545553 00000eaf: PUSH1 0xb0 00000eb1: SHL 00000eb2: PUSH1 0x40 00000eb4: DUP3 00000eb5: ADD 00000eb6: MSTORE 00000eb7: PUSH1 0x60 00000eb9: ADD 00000eba: SWAP1 00000ebb: JUMP 00000ebc: JUMPDEST 00000ebd: PUSH1 0x00 00000ebf: DUP3 00000ec0: NOT 00000ec1: DUP3 00000ec2: GT 00000ec3: ISZERO 00000ec4: PUSH2 0x0ecf 00000ec7: JUMPI 00000ec8: PUSH2 0x0ecf 00000ecb: PUSH2 0x0f56 00000ece: JUMP 00000ecf: JUMPDEST 00000ed0: POP 00000ed1: ADD 00000ed2: SWAP1 00000ed3: JUMP 00000ed4: JUMPDEST 00000ed5: PUSH1 0x00 00000ed7: DUP3 00000ed8: PUSH2 0x0eef 00000edb: JUMPI 00000edc: PUSH4 0x4e487b71 00000ee1: PUSH1 0xe0 00000ee3: SHL 00000ee4: DUP2 00000ee5: MSTORE 00000ee6: PUSH1 0x12 00000ee8: PUSH1 0x04 00000eea: MSTORE 00000eeb: PUSH1 0x24 00000eed: DUP2 00000eee: REVERT 00000eef: JUMPDEST 00000ef0: POP 00000ef1: DIV 00000ef2: SWAP1 00000ef3: JUMP 00000ef4: JUMPDEST 00000ef5: PUSH1 0x00 00000ef7: DUP2 00000ef8: PUSH1 0x00 00000efa: NOT 00000efb: DIV 00000efc: DUP4 00000efd: GT 00000efe: DUP3 00000eff: ISZERO 00000f00: ISZERO 00000f01: AND 00000f02: ISZERO 00000f03: PUSH2 0x0f0e 00000f06: JUMPI 00000f07: PUSH2 0x0f0e 00000f0a: PUSH2 0x0f56 00000f0d: JUMP 00000f0e: JUMPDEST 00000f0f: POP 00000f10: MUL 00000f11: SWAP1 00000f12: JUMP 00000f13: JUMPDEST 00000f14: PUSH1 0x00 00000f16: DUP3 00000f17: DUP3 00000f18: LT 00000f19: ISZERO 00000f1a: PUSH2 0x0f25 00000f1d: JUMPI 00000f1e: PUSH2 0x0f25 00000f21: PUSH2 0x0f56 00000f24: JUMP 00000f25: JUMPDEST 00000f26: POP 00000f27: SUB 00000f28: SWAP1 00000f29: JUMP 00000f2a: JUMPDEST 00000f2b: PUSH1 0x00 00000f2d: JUMPDEST 00000f2e: DUP4 00000f2f: DUP2 00000f30: LT 00000f31: ISZERO 00000f32: PUSH2 0x0f45 00000f35: JUMPI 00000f36: DUP2 00000f37: DUP2 00000f38: ADD 00000f39: MLOAD 00000f3a: DUP4 00000f3b: DUP3 00000f3c: ADD 00000f3d: MSTORE 00000f3e: PUSH1 0x20 00000f40: ADD 00000f41: PUSH2 0x0f2d 00000f44: JUMP 00000f45: JUMPDEST 00000f46: DUP4 00000f47: DUP2 00000f48: GT 00000f49: ISZERO 00000f4a: PUSH2 0x0b10 00000f4d: JUMPI 00000f4e: POP 00000f4f: POP 00000f50: PUSH1 0x00 00000f52: SWAP2 00000f53: ADD 00000f54: MSTORE 00000f55: JUMP 00000f56: JUMPDEST 00000f57: PUSH4 0x4e487b71 00000f5c: PUSH1 0xe0 00000f5e: SHL 00000f5f: PUSH1 0x00 00000f61: MSTORE 00000f62: PUSH1 0x11 00000f64: PUSH1 0x04 00000f66: MSTORE 00000f67: PUSH1 0x24 00000f69: PUSH1 0x00 00000f6b: REVERT 00000f6c: INVALID 00000f6d: LOG2 00000f6e: PUSH5 0x6970667358 00000f74: UNKNOWN(0x22) 00000f75: SLT 00000f76: KECCAK256 00000f77: BLOBBASEFEE 00000f78: UNKNOWN(0xE0) 00000f79: UNKNOWN(0xAE) 00000f7a: BYTE 00000f7b: BALANCE 00000f7c: SWAP14 00000f7d: CLZ 00000f7e: SDIV 00000f7f: PUSH10 0xb575e1df6e92a400aaa9 00000f8a: UNKNOWN(0xCF) 00000f8b: PUSH16 0xdf5de40107baa93ab405a764736f6c63 00000f9c: NUMBER 00000f9d: STOP 00000f9e: ADDMOD 00000f9f: DIV 00000fa0: STOP 00000fa1: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | codex | Buyout success never transfers listing tokens to offerer (tokens locked permanently) | 85 | no | — |
viewevidence_json{
"evidence": "`offer()` and `surrenderTokens()` both transfer listing tokens into the contract, while the only listing-token withdrawal path is `withdrawTokens()` which is restricted to `Status.COUNTERED`. There is no function to release listing tokens to the offerer on `Status.SUCCESS`.",
"locations": [
"contracts/Buyout.sol:71",
"contracts/Buyout.sol:98",
"contracts/Buyout.sol:122",
"contracts/Buyout.sol:165",
"contracts/Buyout.sol:172"
],
"recommendation": "Add a `claimListingTokens()` function for the offerer in `Status.SUCCESS` that transfers all listing tokens held by the contract to the offerer, or automatically transfer the listing tokens to the offerer during `surrenderTokens`. Consider burning tokens if the intended end\u2011state is removal from circulation.",
"exploit_scenario": "After a successful buyout, holders call `surrenderTokens` and receive funding tokens. Their listing tokens (and the offerer\u2019s original deposit) are transferred into the Buyout contract, but there is no path for the offerer to claim them. The offerer pays out funding tokens yet never receives ownership of the listing tokens, leaving all listing tokens stuck in the contract and defeating the buyout\u2019s purpose."
}
|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x2b4545e5633aab500786220449b9327c956af09cbe2e18d4f97409cecd29c72f
call_targets:
0x90b6047da43a370a402fb1f88f4313faa34a923b
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x2b4545e5633aab500786220449b9327c956af09cbe2e18d4f97409cecd29c72f",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x90b6047da43a370a402fb1f88f4313faa34a923b"
],
"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": "0x200d2ed2",
"selector": "0x200d2ed2",
"calldata_variants": [
"0x200d2ed2",
"0x200d2ed20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x24600fc3",
"selector": "0x24600fc3",
"calldata_variants": [
"0x24600fc3",
"0x24600fc30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x485cc955",
"selector": "0x485cc955",
"calldata_variants": [
"0x485cc955",
"0x485cc9550000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x78065f27",
"selector": "0x78065f27",
"calldata_variants": [
"0x78065f27",
"0x78065f270000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x89a4157e",
"selector": "0x89a4157e",
"calldata_variants": [
"0x89a4157e",
"0x89a4157e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8d8f2adb",
"selector": "0x8d8f2adb",
"calldata_variants": [
"0x8d8f2adb",
"0x8d8f2adb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x965fbde5",
"selector": "0x965fbde5",
"calldata_variants": [
"0x965fbde5",
"0x965fbde50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa1920586",
"selector": "0xa1920586",
"calldata_variants": [
"0xa1920586",
"0xa19205860000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3289,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 1,
"guards_detected": [],
"untrusted_call_count": 1
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x2b4545e5633aab500786220449b9327c956af09cbe2e18d4f97409cecd29c72f
call_targets:
0x90b6047da43a370a402fb1f88f4313faa34a923b
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x2b4545e5633aab500786220449b9327c956af09cbe2e18d4f97409cecd29c72f",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x90b6047da43a370a402fb1f88f4313faa34a923b"
],
"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": "0x200d2ed2",
"selector": "0x200d2ed2",
"calldata_variants": [
"0x200d2ed2",
"0x200d2ed20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x24600fc3",
"selector": "0x24600fc3",
"calldata_variants": [
"0x24600fc3",
"0x24600fc30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x485cc955",
"selector": "0x485cc955",
"calldata_variants": [
"0x485cc955",
"0x485cc9550000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x78065f27",
"selector": "0x78065f27",
"calldata_variants": [
"0x78065f27",
"0x78065f270000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x89a4157e",
"selector": "0x89a4157e",
"calldata_variants": [
"0x89a4157e",
"0x89a4157e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8d8f2adb",
"selector": "0x8d8f2adb",
"calldata_variants": [
"0x8d8f2adb",
"0x8d8f2adb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x965fbde5",
"selector": "0x965fbde5",
"calldata_variants": [
"0x965fbde5",
"0x965fbde50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa1920586",
"selector": "0xa1920586",
"calldata_variants": [
"0xa1920586",
"0xa19205860000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3289,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 1,
"guards_detected": []
}
|
| medium | upgradeability | codex | Public initializer can be front‑run on uninitialized deployments | 75 | no | — |
viewevidence_json{
"evidence": "`initialize()` is `public` and lacks access control; it can be called by anyone before the first initialization.",
"locations": [
"contracts/Buyout.sol:51",
"contracts/Buyout.sol:54"
],
"recommendation": "Ensure initialization happens atomically at deployment (e.g., via factory) and restrict `initialize()` to a trusted deployer/factory. Also consider disabling initializers in the implementation constructor to prevent accidental misuse.",
"exploit_scenario": "If a proxy or clone is deployed without an atomic initialization, any external account can call `initialize()` first and set `listingToken`/`fundingToken` to attacker\u2011chosen addresses. This can brick the instance for intended users or cause users to interact with malicious tokens."
}
|