019ba8f8-3f3e-728e-8b88-d1ef3d328f79
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 |
|---|---|---|---|---|
| 33704 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 33705 | proxy.resolve | complete | 1 / 3 | 3 months ago |
| 33706 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 33707 | analysis.bundle | complete | 1 / 3 | 3 months ago |
| 33708 | capability.graph | complete | 1 / 3 | 3 months ago |
| 33709 | detector.run | complete | 1 / 3 | 3 months ago |
| 33710 | validation.fork | complete | 1 / 3 | 3 months ago |
| 33817 | report.consolidate | complete | 1 / 6 | 3 months ago |
{
"status": "not_proxy"
}
No slither job recorded yet.
{"no_findings":false,"summary":"Found three exploitable issues: ownership math truncates to zero for multi‑investor scenarios, payouts ignore failed sends and can strand funds, and unbounded loops allow gas‑limit DoS of deposits/dividends.","findings":[{"severity":"high","category":"math","title":"Integer division order zeroes ownership for most investors, breaking dividends","exploit_scenario":"After a second investor deposits, each investor’s `percentage_ownership` becomes 0 because `amount / totaldeposited` truncates to 0 for any `amount < totaldeposited`. Subsequent dividends compute `PRE_amount * 0 / 1e10`, so payouts are 0 and dividend funds remain stuck in the contract with no withdrawal path.","recommendation":"Compute ownership as `amount * 1e10 / totaldeposited` (or use a fixed‑point library) and recalculate all investors’ percentages consistently after any deposit; add invariant tests to ensure the sum is ~1e10 and non‑zero for holders.","evidence":"`percentage_ownership = amount / totaldeposited * 10000000000` (division before scaling)","locations":["contracts/Contract.sol:127","contracts/Contract.sol:131","contracts/Contract.sol:137","contracts/Contract.sol:184"]},{"severity":"medium","category":"other","title":"Unchecked `send` return values lead to silent payout failures and stuck funds","exploit_scenario":"If an investor is a contract that rejects ETH (or owner is a contract with reverting fallback), `send` returns false. The code still updates `totalpaidout/totaldividends` and never retries, leaving ETH trapped in the contract while accounting reports it paid. Those stuck funds are also not recoverable via `Emergency`, which relies on the internal `balance` tracker.","recommendation":"Check `send` return values and either revert on failure or record owed balances for later withdrawal (pull‑payments). Consider using `call{value:...}` with success checks and update accounting only after successful transfers. For emergency recovery, prefer `address(this).balance` or explicitly track all sources of funds.","evidence":"External payouts use `send` without checking the return value and accounting is updated regardless of success.","locations":["contracts/Contract.sol:82","contracts/Contract.sol:91","contracts/Contract.sol:142","contracts/Contract.sol:162"]},{"severity":"medium","category":"other","title":"Unbounded investor loops allow gas‑limit DoS of deposits and dividends","exploit_scenario":"An attacker can create many investor entries (multiple addresses with ≥2 ETH). Any dividend (<2 ETH) triggers a loop over all investors and external sends; new investor deposits also recompute percentages for all investors. Once the list grows large, these operations exceed block gas limits, preventing deposits and dividend distribution.","recommendation":"Avoid iterating over all investors in a single transaction. Switch to a pull‑payment model or batched payouts with pagination, and remove full‑array recalculation on every deposit.","evidence":"Loops over `investors` on every dividend distribution and new investor entry without bounds.","locations":["contracts/Contract.sol:88","contracts/Contract.sol:130","contracts/Contract.sol:111"]}]}
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-ssqy0kjy
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: xhigh
reasoning summaries: auto
session id: 019ba8fc-7268-7e81-99f3-6d15f48e3efc
--------
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 ls in /tmp/codex-ssqy0kjy succeeded in 7ms:
AUDIT_BUNDLE.txt
codex-output-schema.json
contracts
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-ssqy0kjy succeeded in 9ms:
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/Contract.sol
================================================================================
//***********************************EthVentures v4****************************************************************************
//
// TIRED OF POINTLESS PONZI SCHEMES? Then join EthVentures the first decentralized company!
//
//
// EthVentures is the first decentralized ethereum based company, with shareholder function, dividends, and more...!
//
//
// How it works: You deposit minimum 2 Ether and no maximum deposit, and you will become a shareholder, proportional to how much you deposited. You will own a % of the income of this dapp proportional to how much you deposited.
// Ex: There is 98 Eth deposited, you deposit 2 Eth, new balance becomes 100 Eth, then you will own 2% of the profits!
//
//
//
// Dividends: Every deposit under 2 Eth is considered a dividend and is distributed between shareholders automatically. Even if the profit is bigger than 2 Eth, it will be distributed in 1-2 Ether packages, automatically.
thinking
**Reviewing vulnerabilities and accounting issues**
I'm analyzing various vulnerabilities like dividend calculation bugs due to integer division, unchecked send return values causing silent failures, unbounded loops leading to potential DoS, and inconsistent internal accounting with stuck funds. These issues mainly cause severe accounting mismatches and some medium-level denial of service risks. I'm also considering access controls, arithmetic safety, and overall contract logic to prepare a detailed vulnerability summary with severity, categories, and recommendations.
exec
/bin/bash -lc 'nl -ba contracts/Contract.sol' in /tmp/codex-ssqy0kjy succeeded in 29ms:
1 //***********************************EthVentures v4****************************************************************************
2 //
3 // TIRED OF POINTLESS PONZI SCHEMES? Then join EthVentures the first decentralized company!
4 //
5 //
6 // EthVentures is the first decentralized ethereum based company, with shareholder function, dividends, and more...!
7 //
8 //
9 // How it works: You deposit minimum 2 Ether and no maximum deposit, and you will become a shareholder, proportional to how much you deposited. You will own a % of the income of this dapp proportional to how much you deposited.
10 // Ex: There is 98 Eth deposited, you deposit 2 Eth, new balance becomes 100 Eth, then you will own 2% of the profits!
11 //
12 //
13 //
14 // Dividends: Every deposit under 2 Eth is considered a dividend and is distributed between shareholders automatically. Even if the profit is bigger than 2 Eth, it will be distributed in 1-2 Ether packages, automatically.
15 // Ex: We generate 100 Eth profit daily, then it will be distributed in 50 times in 2 ether packages, then those packages get shared between shareholders. With the example above if you hold 2%, then you will earn 50 times 0.04 Eth, which is 2 Eth profit in total.
16 //
17 //
18 // Profit: This contract itself is not generating any profit, it's just a ledger to keep record of investors, and pays out dividends automatically.There will be other contracts linked to this, that will send the profits here. EthVentures is just the core of this business, there will be other contracts built on it.
19 // Ex: A dice game built on this contract that generates say 10 Eth daily, will send the fees directly here
20 // Ex: A doubler game built on this contract that generates 50 Eth daily, that will send all fees here
thinking
**Summarizing audit findings and crafting JSON**
I'll organize the findings into three main issues: integer division zeroing ownership shares that locks dividends, unchecked send calls causing silent failures and stuck funds, and unbounded loops leading to gas-limit denial of service. I’ll carefully assign severities, categories, evidence lines, exploit scenarios, and recommendations, then format everything into the required JSON structure for the user.
codex
{"no_findings":false,"summary":"Found three exploitable issues: ownership math truncates to zero for multi‑investor scenarios, payouts ignore failed sends and can strand funds, and unbounded loops allow gas‑limit DoS of deposits/dividends.","findings":[{"severity":"high","category":"math","title":"Integer division order zeroes ownership for most investors, breaking dividends","exploit_scenario":"After a second investor deposits, each investor’s `percentage_ownership` becomes 0 because `amount / totaldeposited` truncates to 0 for any `amount < totaldeposited`. Subsequent dividends compute `PRE_amount * 0 / 1e10`, so payouts are 0 and dividend funds remain stuck in the contract with no withdrawal path.","recommendation":"Compute ownership as `amount * 1e10 / totaldeposited` (or use a fixed‑point library) and recalculate all investors’ percentages consistently after any deposit; add invariant tests to ensure the sum is ~1e10 and non‑zero for holders.","evidence":"`percentage_ownership = amount / totaldeposited * 10000000000` (division before scaling)","locations":["contracts/Contract.sol:127","contracts/Contract.sol:131","contracts/Contract.sol:137","contracts/Contract.sol:184"]},{"severity":"medium","category":"other","title":"Unchecked `send` return values lead to silent payout failures and stuck funds","exploit_scenario":"If an investor is a contract that rejects ETH (or owner is a contract with reverting fallback), `send` returns false. The code still updates `totalpaidout/totaldividends` and never retries, leaving ETH trapped in the contract while accounting reports it paid. Those stuck funds are also not recoverable via `Emergency`, which relies on the internal `balance` tracker.","recommendation":"Check `send` return values and either revert on failure or record owed balances for later withdrawal (pull‑payments). Consider using `call{value:...}` with success checks and update accounting only after successful transfers. For emergency recovery, prefer `address(this).balance` or explicitly track all sources of funds.","evidence":"External payouts use `send` without checking the return value and accounting is updated regardless of success.","locations":["contracts/Contract.sol:82","contracts/Contract.sol:91","contracts/Contract.sol:142","contracts/Contract.sol:162"]},{"severity":"medium","category":"other","title":"Unbounded investor loops allow gas‑limit DoS of deposits and dividends","exploit_scenario":"An attacker can create many investor entries (multiple addresses with ≥2 ETH). Any dividend (<2 ETH) triggers a loop over all investors and external sends; new investor deposits also recompute percentages for all investors. Once the list grows large, these operations exceed block gas limits, preventing deposits and dividend distribution.","recommendation":"Avoid iterating over all investors in a single transaction. Switch to a pull‑payment model or batched payouts with pagination, and remove full‑array recalculation on every deposit.","evidence":"Loops over `investors` on every dividend distribution and new investor entry without bounds.","locations":["contracts/Contract.sol:88","contracts/Contract.sol:130","contracts/Contract.sol:111"]}]}
tokens used
20,222
{
"codex": {
"ran_at": "2026-01-10T17:39:54.742100+00:00",
"returncode": 0
},
"project": {
"mode": "source",
"file_count": 1,
"import_count": 0,
"first_party_contracts_count": 1
},
"summary": "Found three exploitable issues: ownership math truncates to zero for multi\u2011investor scenarios, payouts ignore failed sends and can strand funds, and unbounded loops allow gas\u2011limit DoS of deposits/dividends.",
"raw_final": {
"summary": "Found three exploitable issues: ownership math truncates to zero for multi\u2011investor scenarios, payouts ignore failed sends and can strand funds, and unbounded loops allow gas\u2011limit DoS of deposits/dividends.",
"findings": [
{
"title": "Integer division order zeroes ownership for most investors, breaking dividends",
"category": "math",
"evidence": "`percentage_ownership = amount / totaldeposited * 10000000000` (division before scaling)",
"severity": "high",
"locations": [
"contracts/Contract.sol:127",
"contracts/Contract.sol:131",
"contracts/Contract.sol:137",
"contracts/Contract.sol:184"
],
"recommendation": "Compute ownership as `amount * 1e10 / totaldeposited` (or use a fixed\u2011point library) and recalculate all investors\u2019 percentages consistently after any deposit; add invariant tests to ensure the sum is ~1e10 and non\u2011zero for holders.",
"exploit_scenario": "After a second investor deposits, each investor\u2019s `percentage_ownership` becomes 0 because `amount / totaldeposited` truncates to 0 for any `amount < totaldeposited`. Subsequent dividends compute `PRE_amount * 0 / 1e10`, so payouts are 0 and dividend funds remain stuck in the contract with no withdrawal path."
},
{
"title": "Unchecked `send` return values lead to silent payout failures and stuck funds",
"category": "other",
"evidence": "External payouts use `send` without checking the return value and accounting is updated regardless of success.",
"severity": "medium",
"locations": [
"contracts/Contract.sol:82",
"contracts/Contract.sol:91",
"contracts/Contract.sol:142",
"contracts/Contract.sol:162"
],
"recommendation": "Check `send` return values and either revert on failure or record owed balances for later withdrawal (pull\u2011payments). Consider using `call{value:...}` with success checks and update accounting only after successful transfers. For emergency recovery, prefer `address(this).balance` or explicitly track all sources of funds.",
"exploit_scenario": "If an investor is a contract that rejects ETH (or owner is a contract with reverting fallback), `send` returns false. The code still updates `totalpaidout/totaldividends` and never retries, leaving ETH trapped in the contract while accounting reports it paid. Those stuck funds are also not recoverable via `Emergency`, which relies on the internal `balance` tracker."
},
{
"title": "Unbounded investor loops allow gas\u2011limit DoS of deposits and dividends",
"category": "other",
"evidence": "Loops over `investors` on every dividend distribution and new investor entry without bounds.",
"severity": "medium",
"locations": [
"contracts/Contract.sol:88",
"contracts/Contract.sol:130",
"contracts/Contract.sol:111"
],
"recommendation": "Avoid iterating over all investors in a single transaction. Switch to a pull\u2011payment model or batched payouts with pagination, and remove full\u2011array recalculation on every deposit.",
"exploit_scenario": "An attacker can create many investor entries (multiple addresses with \u22652 ETH). Any dividend (<2 ETH) triggers a loop over all investors and external sends; new investor deposits also recompute percentages for all investors. Once the list grows large, these operations exceed block gas limits, preventing deposits and dividend distribution."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x00b9 0000000a: JUMPI 0000000b: PUSH1 0xe0 0000000d: PUSH1 0x02 0000000f: EXP 00000010: PUSH1 0x00 00000012: CALLDATALOAD 00000013: DIV 00000014: PUSH4 0x1097e579 00000019: DUP2 0000001a: EQ 0000001b: PUSH2 0x00c4 0000001e: JUMPI 0000001f: DUP1 00000020: PUSH4 0x112c7075 00000025: EQ 00000026: PUSH2 0x01d4 00000029: JUMPI 0000002a: DUP1 0000002b: PUSH4 0x3edd90e7 00000030: EQ 00000031: PUSH2 0x02b9 00000034: JUMPI 00000035: DUP1 00000036: PUSH4 0x3feb5f2b 0000003b: EQ 0000003c: PUSH2 0x0372 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x476e04c7 00000046: EQ 00000047: PUSH2 0x03d4 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x4cd11943 00000051: EQ 00000052: PUSH2 0x0480 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0x6b1781b6 0000005c: EQ 0000005d: PUSH2 0x04e5 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0x6c3772fd 00000067: EQ 00000068: PUSH2 0x05d1 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0x8da5cb5b 00000072: EQ 00000073: PUSH2 0x05da 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0x9522ca89 0000007d: EQ 0000007e: PUSH2 0x05ec 00000081: JUMPI 00000082: DUP1 00000083: PUSH4 0x9af1d35a 00000088: EQ 00000089: PUSH2 0x064a 0000008c: JUMPI 0000008d: DUP1 0000008e: PUSH4 0xa6b165ee 00000093: EQ 00000094: PUSH2 0x0653 00000097: JUMPI 00000098: DUP1 00000099: PUSH4 0xb69ef8a8 0000009e: EQ 0000009f: PUSH2 0x065c 000000a2: JUMPI 000000a3: DUP1 000000a4: PUSH4 0xbda393d3 000000a9: EQ 000000aa: PUSH2 0x0665 000000ad: JUMPI 000000ae: DUP1 000000af: PUSH4 0xd7315d60 000000b4: EQ 000000b5: PUSH2 0x066e 000000b8: JUMPI 000000b9: JUMPDEST 000000ba: PUSH2 0x0677 000000bd: PUSH2 0x0679 000000c0: PUSH2 0x00c8 000000c3: JUMP 000000c4: JUMPDEST 000000c5: PUSH2 0x0677 000000c8: JUMPDEST 000000c9: PUSH1 0x00 000000cb: PUSH1 0x00 000000cd: PUSH1 0x00 000000cf: PUSH1 0x00 000000d1: PUSH1 0x00 000000d3: PUSH1 0x00 000000d5: PUSH1 0x00 000000d7: PUSH1 0x00 000000d9: PUSH8 0x1bc16d674ec80000 000000e2: CALLVALUE 000000e3: LT 000000e4: ISZERO 000000e5: PUSH2 0x0774 000000e8: JUMPI 000000e9: PUSH1 0x08 000000eb: SLOAD 000000ec: PUSH1 0x40 000000ee: MLOAD 000000ef: CALLVALUE 000000f0: SWAP9 000000f1: POP 000000f2: PUSH1 0x01 000000f4: PUSH1 0xa0 000000f6: PUSH1 0x02 000000f8: EXP 000000f9: SUB 000000fa: SWAP1 000000fb: SWAP2 000000fc: AND 000000fd: SWAP1 000000fe: DUP3 000000ff: SWAP1 00000100: PUSH1 0x64 00000102: DUP11 00000103: DIV 00000104: SWAP1 00000105: DUP3 00000106: DUP2 00000107: DUP2 00000108: DUP2 00000109: DUP6 0000010a: DUP9 0000010b: DUP4 0000010c: CALL 0000010d: POP 0000010e: POP 0000010f: PUSH1 0x05 00000111: DUP1 00000112: SLOAD 00000113: DUP3 00000114: ADD 00000115: SWAP1 00000116: SSTORE 00000117: SWAP1 00000118: SLOAD 00000119: SWAP9 0000011a: SUB 0000011b: SWAP8 0000011c: DUP3 0000011d: EQ 0000011e: DUP1 0000011f: ISZERO 00000120: SWAP2 00000121: POP 00000122: PUSH2 0x012c 00000125: JUMPI 00000126: POP 00000127: DUP7 00000128: PUSH1 0x00 0000012a: EQ 0000012b: ISZERO 0000012c: JUMPDEST 0000012d: ISZERO 0000012e: PUSH2 0x0863 00000131: JUMPI 00000132: PUSH1 0x00 00000134: SWAP6 00000135: POP 00000136: JUMPDEST 00000137: PUSH1 0x00 00000139: SLOAD 0000013a: DUP7 0000013b: LT 0000013c: ISZERO 0000013d: PUSH2 0x0868 00000140: JUMPI 00000141: PUSH5 0x02540be400 00000147: PUSH1 0x00 00000149: PUSH1 0x00 0000014b: POP 0000014c: DUP8 0000014d: DUP2 0000014e: SLOAD 0000014f: DUP2 00000150: LT 00000151: ISZERO 00000152: PUSH2 0x0002 00000155: JUMPI 00000156: DUP2 00000157: DUP1 00000158: MSTORE 00000159: DUP2 0000015a: SLOAD 0000015b: PUSH1 0x03 0000015d: SWAP2 0000015e: SWAP1 0000015f: SWAP2 00000160: MUL 00000161: PUSH1 0x00 00000163: DUP1 00000164: MLOAD 00000165: PUSH1 0x20 00000167: PUSH2 0x0d74 0000016a: DUP4 0000016b: CODECOPY 0000016c: DUP2 0000016d: MLOAD 0000016e: SWAP2 0000016f: MSTORE 00000170: ADD 00000171: SLOAD 00000172: DUP11 00000173: MUL 00000174: SWAP3 00000175: SWAP1 00000176: SWAP3 00000177: DIV 00000178: SWAP10 00000179: POP 0000017a: SWAP1 0000017b: DUP8 0000017c: SWAP1 0000017d: DUP2 0000017e: LT 0000017f: ISZERO 00000180: PUSH2 0x0002 00000183: JUMPI 00000184: PUSH1 0x40 00000186: MLOAD 00000187: PUSH1 0x03 00000189: SWAP2 0000018a: SWAP1 0000018b: SWAP2 0000018c: MUL 0000018d: PUSH1 0x00 0000018f: DUP1 00000190: MLOAD 00000191: PUSH1 0x20 00000193: PUSH2 0x0d34 00000196: DUP4 00000197: CODECOPY 00000198: DUP2 00000199: MLOAD 0000019a: SWAP2 0000019b: MSTORE 0000019c: ADD 0000019d: SLOAD 0000019e: PUSH1 0x01 000001a0: PUSH1 0xa0 000001a2: PUSH1 0x02 000001a4: EXP 000001a5: SUB 000001a6: AND 000001a7: SWAP2 000001a8: SWAP1 000001a9: DUP11 000001aa: SWAP1 000001ab: DUP3 000001ac: DUP2 000001ad: DUP2 000001ae: DUP2 000001af: DUP6 000001b0: DUP9 000001b1: DUP4 000001b2: CALL 000001b3: POP 000001b4: POP 000001b5: PUSH1 0x05 000001b7: DUP1 000001b8: SLOAD 000001b9: SWAP2 000001ba: SWAP1 000001bb: SWAP2 000001bc: ADD 000001bd: SWAP1 000001be: SSTORE 000001bf: POP 000001c0: POP 000001c1: PUSH1 0x06 000001c3: DUP1 000001c4: SLOAD 000001c5: DUP10 000001c6: ADD 000001c7: SWAP1 000001c8: SSTORE 000001c9: PUSH1 0x01 000001cb: SWAP6 000001cc: SWAP1 000001cd: SWAP6 000001ce: ADD 000001cf: SWAP5 000001d0: PUSH2 0x0136 000001d3: JUMP 000001d4: JUMPDEST 000001d5: PUSH2 0x0677 000001d8: PUSH1 0x08 000001da: SLOAD 000001db: PUSH1 0x01 000001dd: PUSH1 0xa0 000001df: PUSH1 0x02 000001e1: EXP 000001e2: SUB 000001e3: SWAP1 000001e4: DUP2 000001e5: AND 000001e6: CALLER 000001e7: SWAP1 000001e8: SWAP2 000001e9: AND 000001ea: EQ 000001eb: ISZERO 000001ec: PUSH2 0x0679 000001ef: JUMPI 000001f0: PUSH1 0x40 000001f2: DUP1 000001f3: MLOAD 000001f4: PUSH1 0x60 000001f6: DUP2 000001f7: ADD 000001f8: DUP3 000001f9: MSTORE 000001fa: PUSH1 0x28 000001fc: DUP1 000001fd: DUP3 000001fe: MSTORE 000001ff: PUSH32 0x4d616e75616c204465706f7369742072656365697665642066726f6d20746865 00000220: PUSH1 0x20 00000222: DUP4 00000223: DUP2 00000224: ADD 00000225: SWAP2 00000226: DUP3 00000227: MSTORE 00000228: PUSH32 0x204d616e61676572000000000000000000000000000000000000000000000000 00000249: SWAP4 0000024a: SWAP1 0000024b: SWAP5 0000024c: ADD 0000024d: SWAP3 0000024e: SWAP1 0000024f: SWAP3 00000250: MSTORE 00000251: PUSH1 0x07 00000253: DUP1 00000254: SLOAD 00000255: PUSH1 0x00 00000257: DUP3 00000258: SWAP1 00000259: MSTORE 0000025a: SWAP1 0000025b: SWAP4 0000025c: PUSH1 0x02 0000025e: PUSH1 0x01 00000260: DUP4 00000261: AND 00000262: ISZERO 00000263: PUSH2 0x0100 00000266: MUL 00000267: PUSH1 0x00 00000269: NOT 0000026a: ADD 0000026b: SWAP1 0000026c: SWAP3 0000026d: AND 0000026e: SWAP2 0000026f: SWAP1 00000270: SWAP2 00000271: DIV 00000272: PUSH1 0x1f 00000274: ADD 00000275: DIV 00000276: PUSH1 0x00 00000278: DUP1 00000279: MLOAD 0000027a: PUSH1 0x20 0000027c: PUSH2 0x0d54 0000027f: DUP4 00000280: CODECOPY 00000281: DUP2 00000282: MLOAD 00000283: SWAP2 00000284: MSTORE 00000285: SWAP1 00000286: DUP2 00000287: ADD 00000288: SWAP3 00000289: JUMPDEST 0000028a: DUP3 0000028b: DUP1 0000028c: ADD 0000028d: PUSH1 0x01 0000028f: ADD 00000290: DUP6 00000291: SSTORE 00000292: DUP3 00000293: ISZERO 00000294: PUSH2 0x0bb1 00000297: JUMPI 00000298: SWAP2 00000299: DUP3 0000029a: ADD 0000029b: JUMPDEST 0000029c: DUP3 0000029d: DUP2 0000029e: GT 0000029f: ISZERO 000002a0: PUSH2 0x0bb1 000002a3: JUMPI 000002a4: DUP3 000002a5: MLOAD 000002a6: DUP3 000002a7: PUSH1 0x00 000002a9: POP 000002aa: SSTORE 000002ab: SWAP2 000002ac: PUSH1 0x20 000002ae: ADD 000002af: SWAP2 000002b0: SWAP1 000002b1: PUSH1 0x01 000002b3: ADD 000002b4: SWAP1 000002b5: PUSH2 0x029b 000002b8: JUMP 000002b9: JUMPDEST 000002ba: PUSH2 0x0677 000002bd: PUSH1 0x04 000002bf: CALLDATALOAD 000002c0: PUSH1 0x08 000002c2: SLOAD 000002c3: PUSH1 0x01 000002c5: PUSH1 0xa0 000002c7: PUSH1 0x02 000002c9: EXP 000002ca: SUB 000002cb: SWAP1 000002cc: DUP2 000002cd: AND 000002ce: CALLER 000002cf: SWAP1 000002d0: SWAP2 000002d1: AND 000002d2: EQ 000002d3: ISZERO 000002d4: PUSH2 0x0b7e 000002d7: JUMPI 000002d8: PUSH1 0x08 000002da: DUP1 000002db: SLOAD 000002dc: PUSH1 0x01 000002de: PUSH1 0xa0 000002e0: PUSH1 0x02 000002e2: EXP 000002e3: SUB 000002e4: NOT 000002e5: AND 000002e6: DUP3 000002e7: OR 000002e8: SWAP1 000002e9: SSTORE 000002ea: PUSH1 0x40 000002ec: DUP1 000002ed: MLOAD 000002ee: DUP1 000002ef: DUP3 000002f0: ADD 000002f1: SWAP1 000002f2: SWAP2 000002f3: MSTORE 000002f4: PUSH1 0x1f 000002f6: DUP1 000002f7: DUP3 000002f8: MSTORE 000002f9: PUSH32 0x54686520636f6e7472616374206861732061206e6577206d616e616765722100 0000031a: PUSH1 0x20 0000031c: SWAP3 0000031d: DUP4 0000031e: ADD 0000031f: SWAP1 00000320: DUP2 00000321: MSTORE 00000322: PUSH1 0x07 00000324: DUP1 00000325: SLOAD 00000326: PUSH1 0x00 00000328: DUP3 00000329: SWAP1 0000032a: MSTORE 0000032b: SWAP1 0000032c: SWAP4 0000032d: PUSH1 0x02 0000032f: PUSH1 0x01 00000331: DUP4 00000332: AND 00000333: ISZERO 00000334: PUSH2 0x0100 00000337: MUL 00000338: PUSH1 0x00 0000033a: NOT 0000033b: ADD 0000033c: SWAP1 0000033d: SWAP3 0000033e: AND 0000033f: SWAP2 00000340: SWAP1 00000341: SWAP2 00000342: DIV 00000343: DUP4 00000344: ADD 00000345: DIV 00000346: PUSH1 0x00 00000348: DUP1 00000349: MLOAD 0000034a: PUSH1 0x20 0000034c: PUSH2 0x0d54 0000034f: DUP4 00000350: CODECOPY 00000351: DUP2 00000352: MLOAD 00000353: SWAP2 00000354: MSTORE 00000355: SWAP1 00000356: DUP2 00000357: ADD 00000358: SWAP3 00000359: SWAP2 0000035a: DUP1 0000035b: MLOAD 0000035c: PUSH1 0xff 0000035e: NOT 0000035f: AND 00000360: DUP4 00000361: DUP1 00000362: ADD 00000363: OR 00000364: DUP6 00000365: SSTORE 00000366: JUMPDEST 00000367: POP 00000368: PUSH2 0x0b7b 0000036b: SWAP3 0000036c: SWAP2 0000036d: POP 0000036e: PUSH2 0x08ec 00000371: JUMP 00000372: JUMPDEST 00000373: PUSH2 0x067b 00000376: PUSH1 0x04 00000378: CALLDATALOAD 00000379: PUSH1 0x00 0000037b: DUP1 0000037c: SLOAD 0000037d: DUP3 0000037e: SWAP1 0000037f: DUP2 00000380: LT 00000381: ISZERO 00000382: PUSH2 0x0002 00000385: JUMPI 00000386: POP 00000387: DUP1 00000388: MSTORE 00000389: PUSH1 0x03 0000038b: MUL 0000038c: PUSH1 0x00 0000038e: DUP1 0000038f: MLOAD 00000390: PUSH1 0x20 00000392: PUSH2 0x0d34 00000395: DUP4 00000396: CODECOPY 00000397: DUP2 00000398: MLOAD 00000399: SWAP2 0000039a: MSTORE 0000039b: DUP2 0000039c: ADD 0000039d: SLOAD 0000039e: PUSH1 0x00 000003a0: DUP1 000003a1: MLOAD 000003a2: PUSH1 0x20 000003a4: PUSH2 0x0d94 000003a7: DUP4 000003a8: CODECOPY 000003a9: DUP2 000003aa: MLOAD 000003ab: SWAP2 000003ac: MSTORE 000003ad: DUP3 000003ae: ADD 000003af: SLOAD 000003b0: PUSH1 0x00 000003b2: DUP1 000003b3: MLOAD 000003b4: PUSH1 0x20 000003b6: PUSH2 0x0d74 000003b9: DUP4 000003ba: CODECOPY 000003bb: DUP2 000003bc: MLOAD 000003bd: SWAP2 000003be: MSTORE 000003bf: SWAP3 000003c0: SWAP1 000003c1: SWAP3 000003c2: ADD 000003c3: SLOAD 000003c4: PUSH1 0x01 000003c6: PUSH1 0xa0 000003c8: PUSH1 0x02 000003ca: EXP 000003cb: SUB 000003cc: SWAP2 000003cd: SWAP1 000003ce: SWAP2 000003cf: AND 000003d0: SWAP2 000003d1: SWAP1 000003d2: DUP4 000003d3: JUMP 000003d4: JUMPDEST 000003d5: PUSH1 0x40 000003d7: DUP1 000003d8: MLOAD 000003d9: PUSH1 0x20 000003db: PUSH1 0x04 000003dd: DUP1 000003de: CALLDATALOAD 000003df: DUP1 000003e0: DUP3 000003e1: ADD 000003e2: CALLDATALOAD 000003e3: PUSH1 0x1f 000003e5: DUP2 000003e6: ADD 000003e7: DUP5 000003e8: SWAP1 000003e9: DIV 000003ea: DUP5 000003eb: MUL 000003ec: DUP6 000003ed: ADD 000003ee: DUP5 000003ef: ADD 000003f0: SWAP1 000003f1: SWAP6 000003f2: MSTORE 000003f3: DUP5 000003f4: DUP5 000003f5: MSTORE 000003f6: PUSH2 0x0677 000003f9: SWAP5 000003fa: SWAP2 000003fb: SWAP4 000003fc: PUSH1 0x24 000003fe: SWAP4 000003ff: SWAP1 00000400: SWAP3 00000401: SWAP2 00000402: DUP5 00000403: ADD 00000404: SWAP2 00000405: SWAP1 00000406: DUP2 00000407: SWAP1 00000408: DUP5 00000409: ADD 0000040a: DUP4 0000040b: DUP3 0000040c: DUP1 0000040d: DUP3 0000040e: DUP5 0000040f: CALLDATACOPY 00000410: POP 00000411: SWAP5 00000412: SWAP7 00000413: POP 00000414: POP 00000415: POP 00000416: POP 00000417: POP 00000418: POP 00000419: POP 0000041a: PUSH1 0x08 0000041c: SLOAD 0000041d: PUSH1 0x01 0000041f: PUSH1 0xa0 00000421: PUSH1 0x02 00000423: EXP 00000424: SUB 00000425: SWAP1 00000426: DUP2 00000427: AND 00000428: CALLER 00000429: SWAP1 0000042a: SWAP2 0000042b: AND 0000042c: EQ 0000042d: ISZERO 0000042e: PUSH2 0x0b7e 00000431: JUMPI 00000432: DUP1 00000433: PUSH1 0x07 00000435: PUSH1 0x00 00000437: POP 00000438: SWAP1 00000439: DUP1 0000043a: MLOAD 0000043b: SWAP1 0000043c: PUSH1 0x20 0000043e: ADD 0000043f: SWAP1 00000440: DUP3 00000441: DUP1 00000442: SLOAD 00000443: PUSH1 0x01 00000445: DUP2 00000446: PUSH1 0x01 00000448: AND 00000449: ISZERO 0000044a: PUSH2 0x0100 0000044d: MUL 0000044e: SUB 0000044f: AND 00000450: PUSH1 0x02 00000452: SWAP1 00000453: DIV 00000454: SWAP1 00000455: PUSH1 0x00 00000457: MSTORE 00000458: PUSH1 0x20 0000045a: PUSH1 0x00 0000045c: KECCAK256 0000045d: SWAP1 0000045e: PUSH1 0x1f 00000460: ADD 00000461: PUSH1 0x20 00000463: SWAP1 00000464: DIV 00000465: DUP2 00000466: ADD 00000467: SWAP3 00000468: DUP3 00000469: PUSH1 0x1f 0000046b: LT 0000046c: PUSH2 0x0b81 0000046f: JUMPI 00000470: DUP1 00000471: MLOAD 00000472: PUSH1 0xff 00000474: NOT 00000475: AND 00000476: DUP4 00000477: DUP1 00000478: ADD 00000479: OR 0000047a: DUP6 0000047b: SSTORE 0000047c: PUSH2 0x0366 0000047f: JUMP 00000480: JUMPDEST 00000481: PUSH2 0x0677 00000484: PUSH1 0x04 00000486: CALLDATALOAD 00000487: PUSH1 0x24 00000489: CALLDATALOAD 0000048a: PUSH1 0x08 0000048c: SLOAD 0000048d: PUSH1 0x01 0000048f: PUSH1 0xa0 00000491: PUSH1 0x02 00000493: EXP 00000494: SUB 00000495: SWAP1 00000496: DUP2 00000497: AND 00000498: CALLER 00000499: SWAP1 0000049a: SWAP2 0000049b: AND 0000049c: EQ 0000049d: ISZERO 0000049e: PUSH2 0x0bbd 000004a1: JUMPI 000004a2: PUSH1 0x04 000004a4: DUP1 000004a5: SLOAD 000004a6: DUP3 000004a7: ADD 000004a8: SWAP1 000004a9: SSTORE 000004aa: PUSH1 0x00 000004ac: DUP1 000004ad: SLOAD 000004ae: PUSH1 0x01 000004b0: DUP2 000004b1: DUP2 000004b2: ADD 000004b3: SWAP1 000004b4: DUP2 000004b5: SWAP1 000004b6: SSTORE 000004b7: DUP1 000004b8: DUP4 000004b9: SSTORE 000004ba: SWAP2 000004bb: SWAP1 000004bc: DUP3 000004bd: SWAP1 000004be: DUP1 000004bf: ISZERO 000004c0: DUP3 000004c1: SWAP1 000004c2: GT 000004c3: PUSH2 0x0bc1 000004c6: JUMPI 000004c7: PUSH1 0x03 000004c9: MUL 000004ca: DUP2 000004cb: PUSH1 0x03 000004cd: MUL 000004ce: DUP4 000004cf: PUSH1 0x00 000004d1: MSTORE 000004d2: PUSH1 0x20 000004d4: PUSH1 0x00 000004d6: KECCAK256 000004d7: SWAP2 000004d8: DUP3 000004d9: ADD 000004da: SWAP2 000004db: ADD 000004dc: PUSH2 0x0bc1 000004df: SWAP2 000004e0: SWAP1 000004e1: PUSH2 0x0835 000004e4: JUMP 000004e5: JUMPDEST 000004e6: PUSH2 0x0677 000004e9: PUSH1 0x08 000004eb: SLOAD 000004ec: PUSH1 0x01 000004ee: PUSH1 0xa0 000004f0: PUSH1 0x02 000004f2: EXP 000004f3: SUB 000004f4: SWAP1 000004f5: DUP2 000004f6: AND 000004f7: CALLER 000004f8: SWAP1 000004f9: SWAP2 000004fa: AND 000004fb: EQ 000004fc: ISZERO 000004fd: PUSH2 0x0679 00000500: JUMPI 00000501: PUSH1 0x03 00000503: SLOAD 00000504: PUSH1 0x00 00000506: EQ 00000507: PUSH2 0x0679 0000050a: JUMPI 0000050b: PUSH1 0x03 0000050d: SLOAD 0000050e: PUSH1 0x40 00000510: MLOAD 00000511: PUSH1 0x08 00000513: SLOAD 00000514: PUSH1 0x01 00000516: PUSH1 0xa0 00000518: PUSH1 0x02 0000051a: EXP 0000051b: SUB 0000051c: AND 0000051d: SWAP2 0000051e: PUSH1 0x00 00000520: SWAP2 00000521: DUP3 00000522: DUP2 00000523: DUP2 00000524: DUP2 00000525: DUP6 00000526: DUP9 00000527: DUP4 00000528: CALL 00000529: POP 0000052a: POP 0000052b: POP 0000052c: PUSH1 0x03 0000052e: DUP2 0000052f: SWAP1 00000530: SSTORE 00000531: PUSH1 0x40 00000533: DUP1 00000534: MLOAD 00000535: PUSH1 0x60 00000537: DUP2 00000538: ADD 00000539: DUP3 0000053a: MSTORE 0000053b: PUSH1 0x23 0000053d: DUP1 0000053e: DUP3 0000053f: MSTORE 00000540: PUSH32 0x456d657267656e637920576974686472617720686173206265656e2069737375 00000561: PUSH1 0x20 00000563: DUP4 00000564: DUP2 00000565: ADD 00000566: SWAP2 00000567: DUP3 00000568: MSTORE 00000569: PUSH32 0x6564210000000000000000000000000000000000000000000000000000000000 0000058a: SWAP4 0000058b: SWAP1 0000058c: SWAP5 0000058d: ADD 0000058e: SWAP3 0000058f: SWAP1 00000590: SWAP3 00000591: MSTORE 00000592: PUSH1 0x07 00000594: DUP1 00000595: SLOAD 00000596: SWAP5 00000597: DUP2 00000598: SWAP1 00000599: MSTORE 0000059a: SWAP5 0000059b: POP 0000059c: PUSH1 0x02 0000059e: PUSH1 0x01 000005a0: DUP6 000005a1: AND 000005a2: ISZERO 000005a3: PUSH2 0x0100 000005a6: MUL 000005a7: PUSH1 0x00 000005a9: NOT 000005aa: ADD 000005ab: SWAP1 000005ac: SWAP5 000005ad: AND 000005ae: SWAP4 000005af: SWAP1 000005b0: SWAP4 000005b1: DIV 000005b2: PUSH1 0x1f 000005b4: ADD 000005b5: SWAP2 000005b6: SWAP1 000005b7: SWAP2 000005b8: DIV 000005b9: PUSH1 0x00 000005bb: DUP1 000005bc: MLOAD 000005bd: PUSH1 0x20 000005bf: PUSH2 0x0d54 000005c2: DUP4 000005c3: CODECOPY 000005c4: DUP2 000005c5: MLOAD 000005c6: SWAP2 000005c7: MSTORE 000005c8: SWAP1 000005c9: DUP2 000005ca: ADD 000005cb: SWAP3 000005cc: SWAP2 000005cd: PUSH2 0x0289 000005d0: JUMP 000005d1: JUMPDEST 000005d2: PUSH2 0x06a4 000005d5: PUSH1 0x05 000005d7: SLOAD 000005d8: DUP2 000005d9: JUMP 000005da: JUMPDEST 000005db: PUSH2 0x06b6 000005de: PUSH1 0x08 000005e0: SLOAD 000005e1: PUSH1 0x01 000005e3: PUSH1 0xa0 000005e5: PUSH1 0x02 000005e7: EXP 000005e8: SUB 000005e9: AND 000005ea: DUP2 000005eb: JUMP 000005ec: JUMPDEST 000005ed: PUSH1 0x40 000005ef: DUP1 000005f0: MLOAD 000005f1: PUSH1 0x07 000005f3: DUP1 000005f4: SLOAD 000005f5: PUSH1 0x20 000005f7: PUSH1 0x02 000005f9: PUSH1 0x01 000005fb: DUP4 000005fc: AND 000005fd: ISZERO 000005fe: PUSH2 0x0100 00000601: MUL 00000602: PUSH1 0x00 00000604: NOT 00000605: ADD 00000606: SWAP1 00000607: SWAP3 00000608: AND 00000609: SWAP2 0000060a: SWAP1 0000060b: SWAP2 0000060c: DIV 0000060d: PUSH1 0x1f 0000060f: DUP2 00000610: ADD 00000611: DUP3 00000612: SWAP1 00000613: DIV 00000614: DUP3 00000615: MUL 00000616: DUP5 00000617: ADD 00000618: DUP3 00000619: ADD 0000061a: SWAP1 0000061b: SWAP5 0000061c: MSTORE 0000061d: DUP4 0000061e: DUP4 0000061f: MSTORE 00000620: PUSH2 0x06d3 00000623: SWAP4 00000624: SWAP1 00000625: DUP4 00000626: ADD 00000627: DUP3 00000628: DUP3 00000629: DUP1 0000062a: ISZERO 0000062b: PUSH2 0x076c 0000062e: JUMPI 0000062f: DUP1 00000630: PUSH1 0x1f 00000632: LT 00000633: PUSH2 0x0741 00000636: JUMPI 00000637: PUSH2 0x0100 0000063a: DUP1 0000063b: DUP4 0000063c: SLOAD 0000063d: DIV 0000063e: MUL 0000063f: DUP4 00000640: MSTORE 00000641: SWAP2 00000642: PUSH1 0x20 00000644: ADD 00000645: SWAP2 00000646: PUSH2 0x076c 00000649: JUMP 0000064a: JUMPDEST 0000064b: PUSH2 0x06a4 0000064e: PUSH1 0x02 00000650: SLOAD 00000651: DUP2 00000652: JUMP 00000653: JUMPDEST 00000654: PUSH2 0x06a4 00000657: PUSH1 0x01 00000659: SLOAD 0000065a: DUP2 0000065b: JUMP 0000065c: JUMPDEST 0000065d: PUSH2 0x06a4 00000660: PUSH1 0x03 00000662: SLOAD 00000663: DUP2 00000664: JUMP 00000665: JUMPDEST 00000666: PUSH2 0x06a4 00000669: PUSH1 0x06 0000066b: SLOAD 0000066c: DUP2 0000066d: JUMP 0000066e: JUMPDEST 0000066f: PUSH2 0x06a4 00000672: PUSH1 0x04 00000674: SLOAD 00000675: DUP2 00000676: JUMP 00000677: JUMPDEST 00000678: STOP 00000679: JUMPDEST 0000067a: JUMP 0000067b: JUMPDEST 0000067c: PUSH1 0x40 0000067e: DUP1 0000067f: MLOAD 00000680: PUSH1 0x01 00000682: PUSH1 0xa0 00000684: PUSH1 0x02 00000686: EXP 00000687: SUB 00000688: SWAP5 00000689: SWAP1 0000068a: SWAP5 0000068b: AND 0000068c: DUP5 0000068d: MSTORE 0000068e: PUSH1 0x20 00000690: DUP5 00000691: ADD 00000692: SWAP3 00000693: SWAP1 00000694: SWAP3 00000695: MSTORE 00000696: DUP3 00000697: DUP3 00000698: ADD 00000699: MSTORE 0000069a: MLOAD 0000069b: SWAP1 0000069c: DUP2 0000069d: SWAP1 0000069e: SUB 0000069f: PUSH1 0x60 000006a1: ADD 000006a2: SWAP1 000006a3: RETURN 000006a4: JUMPDEST 000006a5: PUSH1 0x40 000006a7: DUP1 000006a8: MLOAD 000006a9: SWAP2 000006aa: DUP3 000006ab: MSTORE 000006ac: MLOAD 000006ad: SWAP1 000006ae: DUP2 000006af: SWAP1 000006b0: SUB 000006b1: PUSH1 0x20 000006b3: ADD 000006b4: SWAP1 000006b5: RETURN 000006b6: JUMPDEST 000006b7: PUSH1 0x40 000006b9: DUP1 000006ba: MLOAD 000006bb: PUSH1 0x01 000006bd: PUSH1 0xa0 000006bf: PUSH1 0x02 000006c1: EXP 000006c2: SUB 000006c3: SWAP3 000006c4: SWAP1 000006c5: SWAP3 000006c6: AND 000006c7: DUP3 000006c8: MSTORE 000006c9: MLOAD 000006ca: SWAP1 000006cb: DUP2 000006cc: SWAP1 000006cd: SUB 000006ce: PUSH1 0x20 000006d0: ADD 000006d1: SWAP1 000006d2: RETURN 000006d3: JUMPDEST 000006d4: PUSH1 0x40 000006d6: MLOAD 000006d7: DUP1 000006d8: DUP1 000006d9: PUSH1 0x20 000006db: ADD 000006dc: DUP3 000006dd: DUP2 000006de: SUB 000006df: DUP3 000006e0: MSTORE 000006e1: DUP4 000006e2: DUP2 000006e3: DUP2 000006e4: MLOAD 000006e5: DUP2 000006e6: MSTORE 000006e7: PUSH1 0x20 000006e9: ADD 000006ea: SWAP2 000006eb: POP 000006ec: DUP1 000006ed: MLOAD 000006ee: SWAP1 000006ef: PUSH1 0x20 000006f1: ADD 000006f2: SWAP1 000006f3: DUP1 000006f4: DUP4 000006f5: DUP4 000006f6: DUP3 000006f7: SWAP1 000006f8: PUSH1 0x00 000006fa: PUSH1 0x04 000006fc: PUSH1 0x20 000006fe: DUP5 000006ff: PUSH1 0x1f 00000701: ADD 00000702: DIV 00000703: PUSH1 0x0f 00000705: MUL 00000706: PUSH1 0x03 00000708: ADD 00000709: CALL 0000070a: POP 0000070b: SWAP1 0000070c: POP 0000070d: SWAP1 0000070e: DUP2 0000070f: ADD 00000710: SWAP1 00000711: PUSH1 0x1f 00000713: AND 00000714: DUP1 00000715: ISZERO 00000716: PUSH2 0x0733 00000719: JUMPI 0000071a: DUP1 0000071b: DUP3 0000071c: SUB 0000071d: DUP1 0000071e: MLOAD 0000071f: PUSH1 0x01 00000721: DUP4 00000722: PUSH1 0x20 00000724: SUB 00000725: PUSH2 0x0100 00000728: EXP 00000729: SUB 0000072a: NOT 0000072b: AND 0000072c: DUP2 0000072d: MSTORE 0000072e: PUSH1 0x20 00000730: ADD 00000731: SWAP2 00000732: POP 00000733: JUMPDEST 00000734: POP 00000735: SWAP3 00000736: POP 00000737: POP 00000738: POP 00000739: PUSH1 0x40 0000073b: MLOAD 0000073c: DUP1 0000073d: SWAP2 0000073e: SUB 0000073f: SWAP1 00000740: RETURN 00000741: JUMPDEST 00000742: DUP3 00000743: ADD 00000744: SWAP2 00000745: SWAP1 00000746: PUSH1 0x00 00000748: MSTORE 00000749: PUSH1 0x20 0000074b: PUSH1 0x00 0000074d: KECCAK256 0000074e: SWAP1 0000074f: JUMPDEST 00000750: DUP2 00000751: SLOAD 00000752: DUP2 00000753: MSTORE 00000754: SWAP1 00000755: PUSH1 0x01 00000757: ADD 00000758: SWAP1 00000759: PUSH1 0x20 0000075b: ADD 0000075c: DUP1 0000075d: DUP4 0000075e: GT 0000075f: PUSH2 0x074f 00000762: JUMPI 00000763: DUP3 00000764: SWAP1 00000765: SUB 00000766: PUSH1 0x1f 00000768: AND 00000769: DUP3 0000076a: ADD 0000076b: SWAP2 0000076c: JUMPDEST 0000076d: POP 0000076e: POP 0000076f: POP 00000770: POP 00000771: POP 00000772: DUP2 00000773: JUMP 00000774: JUMPDEST 00000775: PUSH1 0x64 00000777: CALLVALUE 00000778: SWAP1 00000779: DUP2 0000077a: DIV 0000077b: PUSH1 0x02 0000077d: DUP2 0000077e: SWAP1 0000077f: SSTORE 00000780: PUSH1 0x04 00000782: DUP1 00000783: SLOAD 00000784: DUP4 00000785: ADD 00000786: SWAP1 00000787: SSTORE 00000788: PUSH1 0x03 0000078a: DUP1 0000078b: SLOAD 0000078c: SWAP2 0000078d: SWAP1 0000078e: SWAP3 0000078f: SUB 00000790: SWAP1 00000791: DUP2 00000792: ADD 00000793: SWAP1 00000794: SWAP2 00000795: SSTORE 00000796: SWAP5 00000797: POP 00000798: PUSH1 0x00 0000079a: SWAP4 0000079b: POP 0000079c: DUP4 0000079d: SWAP2 0000079e: POP 0000079f: JUMPDEST 000007a0: PUSH1 0x00 000007a2: SLOAD 000007a3: DUP3 000007a4: LT 000007a5: ISZERO 000007a6: PUSH2 0x07ec 000007a9: JUMPI 000007aa: PUSH1 0x00 000007ac: DUP1 000007ad: SLOAD 000007ae: DUP4 000007af: SWAP1 000007b0: DUP2 000007b1: LT 000007b2: ISZERO 000007b3: PUSH2 0x0002 000007b6: JUMPI 000007b7: SWAP1 000007b8: DUP1 000007b9: MSTORE 000007ba: PUSH1 0x03 000007bc: MUL 000007bd: PUSH1 0x00 000007bf: DUP1 000007c0: MLOAD 000007c1: PUSH1 0x20 000007c3: PUSH2 0x0d34 000007c6: DUP4 000007c7: CODECOPY 000007c8: DUP2 000007c9: MLOAD 000007ca: SWAP2 000007cb: MSTORE 000007cc: ADD 000007cd: SLOAD 000007ce: PUSH1 0x01 000007d0: PUSH1 0xa0 000007d2: PUSH1 0x02 000007d4: EXP 000007d5: SUB 000007d6: SWAP1 000007d7: DUP2 000007d8: AND 000007d9: CALLER 000007da: SWAP1 000007db: SWAP2 000007dc: AND 000007dd: EQ 000007de: ISZERO 000007df: PUSH2 0x0904 000007e2: JUMPI 000007e3: PUSH1 0x01 000007e5: SWAP4 000007e6: POP 000007e7: SWAP1 000007e8: SWAP2 000007e9: POP 000007ea: DUP2 000007eb: SWAP1 000007ec: JUMPDEST 000007ed: DUP4 000007ee: PUSH1 0x00 000007f0: EQ 000007f1: ISZERO 000007f2: PUSH2 0x0910 000007f5: JUMPI 000007f6: PUSH1 0x00 000007f8: DUP1 000007f9: SLOAD 000007fa: PUSH1 0x01 000007fc: DUP2 000007fd: DUP2 000007fe: ADD 000007ff: SWAP1 00000800: DUP2 00000801: SWAP1 00000802: SSTORE 00000803: DUP1 00000804: DUP4 00000805: SSTORE 00000806: SWAP2 00000807: SWAP1 00000808: DUP3 00000809: SWAP1 0000080a: DUP1 0000080b: ISZERO 0000080c: DUP3 0000080d: SWAP1 0000080e: GT 0000080f: PUSH2 0x09e2 00000812: JUMPI 00000813: DUP3 00000814: DUP1 00000815: MSTORE 00000816: PUSH2 0x09e2 00000819: SWAP1 0000081a: PUSH1 0x03 0000081c: SWAP1 0000081d: DUP2 0000081e: MUL 0000081f: PUSH1 0x00 00000821: DUP1 00000822: MLOAD 00000823: PUSH1 0x20 00000825: PUSH2 0x0d34 00000828: DUP4 00000829: CODECOPY 0000082a: DUP2 0000082b: MLOAD 0000082c: SWAP2 0000082d: MSTORE 0000082e: SWAP1 0000082f: DUP2 00000830: ADD 00000831: SWAP2 00000832: DUP5 00000833: MUL 00000834: ADD 00000835: JUMPDEST 00000836: DUP1 00000837: DUP3 00000838: GT 00000839: ISZERO 0000083a: PUSH2 0x0900 0000083d: JUMPI 0000083e: DUP1 0000083f: SLOAD 00000840: PUSH1 0x01 00000842: PUSH1 0xa0 00000844: PUSH1 0x02 00000846: EXP 00000847: SUB 00000848: NOT 00000849: AND 0000084a: DUP2 0000084b: SSTORE 0000084c: PUSH1 0x00 0000084e: PUSH1 0x01 00000850: DUP3 00000851: ADD 00000852: DUP2 00000853: DUP2 00000854: SSTORE 00000855: PUSH1 0x02 00000857: SWAP3 00000858: SWAP1 00000859: SWAP3 0000085a: ADD 0000085b: SSTORE 0000085c: PUSH2 0x0835 0000085f: JUMP 00000860: JUMPDEST 00000861: POP 00000862: POP 00000863: JUMPDEST 00000864: PUSH2 0x09d8 00000867: JUMP 00000868: JUMPDEST 00000869: PUSH1 0x40 0000086b: DUP1 0000086c: MLOAD 0000086d: DUP1 0000086e: DUP3 0000086f: ADD 00000870: SWAP1 00000871: SWAP2 00000872: MSTORE 00000873: PUSH1 0x1d 00000875: DUP1 00000876: DUP3 00000877: MSTORE 00000878: PUSH32 0x4469766964656e64732068617665206265656e2070616964206f757421000000 00000899: PUSH1 0x20 0000089b: SWAP3 0000089c: DUP4 0000089d: ADD 0000089e: SWAP1 0000089f: DUP2 000008a0: MSTORE 000008a1: PUSH1 0x07 000008a3: DUP1 000008a4: SLOAD 000008a5: PUSH1 0x00 000008a7: DUP3 000008a8: SWAP1 000008a9: MSTORE 000008aa: SWAP1 000008ab: SWAP4 000008ac: PUSH1 0x02 000008ae: PUSH1 0x01 000008b0: DUP4 000008b1: AND 000008b2: ISZERO 000008b3: PUSH2 0x0100 000008b6: MUL 000008b7: PUSH1 0x00 000008b9: NOT 000008ba: ADD 000008bb: SWAP1 000008bc: SWAP3 000008bd: AND 000008be: SWAP2 000008bf: SWAP1 000008c0: SWAP2 000008c1: DIV 000008c2: PUSH1 0x1f 000008c4: ADD 000008c5: DIV 000008c6: PUSH1 0x00 000008c8: DUP1 000008c9: MLOAD 000008ca: PUSH1 0x20 000008cc: PUSH2 0x0d54 000008cf: DUP4 000008d0: CODECOPY 000008d1: DUP2 000008d2: MLOAD 000008d3: SWAP2 000008d4: MSTORE 000008d5: SWAP1 000008d6: DUP2 000008d7: ADD 000008d8: SWAP3 000008d9: SWAP2 000008da: DUP1 000008db: MLOAD 000008dc: PUSH1 0xff 000008de: NOT 000008df: AND 000008e0: PUSH1 0x3a 000008e2: OR 000008e3: DUP6 000008e4: SSTORE 000008e5: POP 000008e6: PUSH2 0x0860 000008e9: SWAP3 000008ea: SWAP2 000008eb: POP 000008ec: JUMPDEST 000008ed: DUP1 000008ee: DUP3 000008ef: GT 000008f0: ISZERO 000008f1: PUSH2 0x0900 000008f4: JUMPI 000008f5: PUSH1 0x00 000008f7: DUP2 000008f8: SSTORE 000008f9: PUSH1 0x01 000008fb: ADD 000008fc: PUSH2 0x08ec 000008ff: JUMP 00000900: JUMPDEST 00000901: POP 00000902: SWAP1 00000903: JUMP 00000904: JUMPDEST 00000905: PUSH1 0x01 00000907: SWAP2 00000908: SWAP1 00000909: SWAP2 0000090a: ADD 0000090b: SWAP1 0000090c: PUSH2 0x079f 0000090f: JUMP 00000910: JUMPDEST 00000911: DUP5 00000912: PUSH1 0x00 00000914: PUSH1 0x00 00000916: POP 00000917: DUP5 00000918: DUP2 00000919: SLOAD 0000091a: DUP2 0000091b: LT 0000091c: ISZERO 0000091d: PUSH2 0x0002 00000920: JUMPI 00000921: DUP2 00000922: DUP1 00000923: MSTORE 00000924: PUSH1 0x03 00000926: DUP2 00000927: MUL 00000928: PUSH1 0x00 0000092a: DUP1 0000092b: MLOAD 0000092c: PUSH1 0x20 0000092e: PUSH2 0x0d94 00000931: DUP4 00000932: CODECOPY 00000933: DUP2 00000934: MLOAD 00000935: SWAP2 00000936: MSTORE 00000937: ADD 00000938: DUP1 00000939: SLOAD 0000093a: SWAP1 0000093b: SWAP4 0000093c: ADD 0000093d: SWAP1 0000093e: SWAP3 0000093f: SSTORE 00000940: DUP1 00000941: SLOAD 00000942: PUSH1 0x04 00000944: SLOAD 00000945: SWAP3 00000946: POP 00000947: DUP6 00000948: SWAP1 00000949: DUP2 0000094a: LT 0000094b: ISZERO 0000094c: PUSH2 0x0002 0000094f: JUMPI 00000950: POP 00000951: DUP1 00000952: DUP1 00000953: MSTORE 00000954: PUSH1 0x03 00000956: DUP6 00000957: MUL 00000958: PUSH1 0x00 0000095a: DUP1 0000095b: MLOAD 0000095c: PUSH1 0x20 0000095e: PUSH2 0x0d34 00000961: DUP4 00000962: CODECOPY 00000963: DUP2 00000964: MLOAD 00000965: SWAP2 00000966: MSTORE 00000967: ADD 00000968: SWAP1 00000969: POP 0000096a: PUSH1 0x01 0000096c: ADD 0000096d: PUSH1 0x00 0000096f: POP 00000970: SLOAD 00000971: DIV 00000972: PUSH5 0x02540be400 00000978: MUL 00000979: PUSH1 0x00 0000097b: PUSH1 0x00 0000097d: POP 0000097e: DUP5 0000097f: DUP2 00000980: SLOAD 00000981: DUP2 00000982: LT 00000983: ISZERO 00000984: PUSH2 0x0002 00000987: JUMPI 00000988: POP 00000989: POP 0000098a: PUSH1 0x03 0000098c: DUP5 0000098d: MUL 0000098e: PUSH1 0x00 00000990: DUP1 00000991: MLOAD 00000992: PUSH1 0x20 00000994: PUSH2 0x0d74 00000997: DUP4 00000998: CODECOPY 00000999: DUP2 0000099a: MLOAD 0000099b: SWAP2 0000099c: MSTORE 0000099d: ADD 0000099e: SSTORE 0000099f: JUMPDEST 000009a0: PUSH1 0x02 000009a2: SLOAD 000009a3: PUSH1 0x00 000009a5: EQ 000009a6: PUSH2 0x09d8 000009a9: JUMPI 000009aa: PUSH1 0x02 000009ac: SLOAD 000009ad: PUSH1 0x08 000009af: SLOAD 000009b0: PUSH1 0x40 000009b2: MLOAD 000009b3: PUSH1 0x01 000009b5: PUSH1 0xa0 000009b7: PUSH1 0x02 000009b9: EXP 000009ba: SUB 000009bb: SWAP2 000009bc: SWAP1 000009bd: SWAP2 000009be: AND 000009bf: SWAP2 000009c0: PUSH1 0x00 000009c2: SWAP2 000009c3: DUP3 000009c4: DUP2 000009c5: DUP2 000009c6: DUP2 000009c7: DUP6 000009c8: DUP9 000009c9: DUP4 000009ca: CALL 000009cb: POP 000009cc: POP 000009cd: PUSH1 0x05 000009cf: DUP1 000009d0: SLOAD 000009d1: SWAP1 000009d2: SWAP2 000009d3: ADD 000009d4: SWAP1 000009d5: SSTORE 000009d6: POP 000009d7: POP 000009d8: JUMPDEST 000009d9: POP 000009da: POP 000009db: POP 000009dc: POP 000009dd: POP 000009de: POP 000009df: POP 000009e0: POP 000009e1: JUMP 000009e2: JUMPDEST 000009e3: POP 000009e4: POP 000009e5: PUSH1 0x00 000009e7: DUP1 000009e8: SLOAD 000009e9: CALLER 000009ea: SWAP4 000009eb: POP 000009ec: SWAP1 000009ed: SWAP2 000009ee: POP 000009ef: PUSH1 0x00 000009f1: NOT 000009f2: DUP2 000009f3: ADD 000009f4: SWAP1 000009f5: DUP2 000009f6: LT 000009f7: ISZERO 000009f8: PUSH2 0x0002 000009fb: JUMPI 000009fc: DUP2 000009fd: DUP1 000009fe: MSTORE 000009ff: PUSH1 0x03 00000a01: MUL 00000a02: PUSH1 0x00 00000a04: DUP1 00000a05: MLOAD 00000a06: PUSH1 0x20 00000a08: PUSH2 0x0d34 00000a0b: DUP4 00000a0c: CODECOPY 00000a0d: DUP2 00000a0e: MLOAD 00000a0f: SWAP2 00000a10: MSTORE 00000a11: ADD 00000a12: DUP1 00000a13: SLOAD 00000a14: PUSH1 0x01 00000a16: PUSH1 0xa0 00000a18: PUSH1 0x02 00000a1a: EXP 00000a1b: SUB 00000a1c: NOT 00000a1d: AND 00000a1e: SWAP1 00000a1f: SWAP3 00000a20: OR 00000a21: SWAP1 00000a22: SWAP2 00000a23: SSTORE 00000a24: DUP1 00000a25: SLOAD 00000a26: DUP7 00000a27: SWAP2 00000a28: SWAP1 00000a29: PUSH1 0x00 00000a2b: NOT 00000a2c: DUP2 00000a2d: ADD 00000a2e: SWAP1 00000a2f: DUP2 00000a30: LT 00000a31: ISZERO 00000a32: PUSH2 0x0002 00000a35: JUMPI 00000a36: PUSH1 0x03 00000a38: MUL 00000a39: PUSH1 0x00 00000a3b: DUP1 00000a3c: MLOAD 00000a3d: PUSH1 0x20 00000a3f: PUSH2 0x0d94 00000a42: DUP4 00000a43: CODECOPY 00000a44: DUP2 00000a45: MLOAD 00000a46: SWAP2 00000a47: MSTORE 00000a48: ADD 00000a49: SWAP2 00000a4a: SWAP1 00000a4b: SWAP2 00000a4c: SSTORE 00000a4d: PUSH1 0x04 00000a4f: SLOAD 00000a50: DUP2 00000a51: SLOAD 00000a52: SWAP1 00000a53: DUP8 00000a54: DIV 00000a55: PUSH5 0x02540be400 00000a5b: MUL 00000a5c: SWAP2 00000a5d: SWAP1 00000a5e: PUSH1 0x00 00000a60: NOT 00000a61: DUP2 00000a62: ADD 00000a63: SWAP1 00000a64: DUP2 00000a65: LT 00000a66: ISZERO 00000a67: PUSH2 0x0002 00000a6a: JUMPI 00000a6b: PUSH1 0x03 00000a6d: MUL 00000a6e: PUSH1 0x00 00000a70: DUP1 00000a71: MLOAD 00000a72: PUSH1 0x20 00000a74: PUSH2 0x0d74 00000a77: DUP4 00000a78: CODECOPY 00000a79: DUP2 00000a7a: MLOAD 00000a7b: SWAP2 00000a7c: MSTORE 00000a7d: ADD 00000a7e: SWAP2 00000a7f: SWAP1 00000a80: SWAP2 00000a81: SSTORE 00000a82: PUSH1 0x40 00000a84: DUP1 00000a85: MLOAD 00000a86: DUP1 00000a87: DUP3 00000a88: ADD 00000a89: SWAP1 00000a8a: SWAP2 00000a8b: MSTORE 00000a8c: PUSH1 0x1b 00000a8e: DUP2 00000a8f: MSTORE 00000a90: PUSH32 0x4e657720496e766573746f7220686173206a6f696e6564207573210000000000 00000ab1: PUSH1 0x20 00000ab3: SWAP2 00000ab4: DUP3 00000ab5: ADD 00000ab6: SWAP1 00000ab7: DUP2 00000ab8: MSTORE 00000ab9: PUSH1 0x07 00000abb: DUP1 00000abc: SLOAD 00000abd: SWAP4 00000abe: DUP2 00000abf: SWAP1 00000ac0: MSTORE 00000ac1: SWAP1 00000ac2: MLOAD 00000ac3: PUSH1 0xff 00000ac5: NOT 00000ac6: AND 00000ac7: PUSH1 0x36 00000ac9: OR 00000aca: DUP2 00000acb: SSTORE 00000acc: SWAP2 00000acd: PUSH2 0x0b02 00000ad0: SWAP2 00000ad1: PUSH1 0x02 00000ad3: PUSH1 0x01 00000ad5: DUP4 00000ad6: AND 00000ad7: ISZERO 00000ad8: PUSH2 0x0100 00000adb: MUL 00000adc: PUSH1 0x00 00000ade: NOT 00000adf: ADD 00000ae0: SWAP1 00000ae1: SWAP3 00000ae2: AND 00000ae3: SWAP2 00000ae4: SWAP1 00000ae5: SWAP2 00000ae6: DIV 00000ae7: PUSH1 0x1f 00000ae9: ADD 00000aea: DIV 00000aeb: PUSH1 0x00 00000aed: DUP1 00000aee: MLOAD 00000aef: PUSH1 0x20 00000af1: PUSH2 0x0d54 00000af4: DUP4 00000af5: CODECOPY 00000af6: DUP2 00000af7: MLOAD 00000af8: SWAP2 00000af9: MSTORE 00000afa: SWAP1 00000afb: DUP2 00000afc: ADD 00000afd: SWAP1 00000afe: PUSH2 0x08ec 00000b01: JUMP 00000b02: JUMPDEST 00000b03: POP 00000b04: POP 00000b05: PUSH1 0x00 00000b07: SWAP1 00000b08: POP 00000b09: JUMPDEST 00000b0a: PUSH1 0x00 00000b0c: SLOAD 00000b0d: DUP2 00000b0e: LT 00000b0f: ISZERO 00000b10: PUSH2 0x0b76 00000b13: JUMPI 00000b14: PUSH1 0x00 00000b16: DUP1 00000b17: SLOAD 00000b18: PUSH1 0x04 00000b1a: SLOAD 00000b1b: SWAP2 00000b1c: SWAP1 00000b1d: DUP4 00000b1e: SWAP1 00000b1f: DUP2 00000b20: LT 00000b21: ISZERO 00000b22: PUSH2 0x0002 00000b25: JUMPI 00000b26: DUP2 00000b27: DUP1 00000b28: MSTORE 00000b29: DUP2 00000b2a: SLOAD 00000b2b: PUSH1 0x03 00000b2d: SWAP2 00000b2e: SWAP1 00000b2f: SWAP2 00000b30: MUL 00000b31: PUSH1 0x00 00000b33: DUP1 00000b34: MLOAD 00000b35: PUSH1 0x20 00000b37: PUSH2 0x0d94 00000b3a: DUP4 00000b3b: CODECOPY 00000b3c: DUP2 00000b3d: MLOAD 00000b3e: SWAP2 00000b3f: MSTORE 00000b40: ADD 00000b41: SLOAD 00000b42: SWAP3 00000b43: SWAP1 00000b44: SWAP3 00000b45: DIV 00000b46: PUSH5 0x02540be400 00000b4c: MUL 00000b4d: SWAP2 00000b4e: DUP4 00000b4f: SWAP1 00000b50: DUP2 00000b51: LT 00000b52: ISZERO 00000b53: PUSH2 0x0002 00000b56: JUMPI 00000b57: PUSH1 0x03 00000b59: MUL 00000b5a: PUSH1 0x00 00000b5c: DUP1 00000b5d: MLOAD 00000b5e: PUSH1 0x20 00000b60: PUSH2 0x0d74 00000b63: DUP4 00000b64: CODECOPY 00000b65: DUP2 00000b66: MLOAD 00000b67: SWAP2 00000b68: MSTORE 00000b69: ADD 00000b6a: SWAP2 00000b6b: SWAP1 00000b6c: SWAP2 00000b6d: SSTORE 00000b6e: POP 00000b6f: PUSH1 0x01 00000b71: ADD 00000b72: PUSH2 0x0b09 00000b75: JUMP 00000b76: JUMPDEST 00000b77: PUSH2 0x099f 00000b7a: JUMP 00000b7b: JUMPDEST 00000b7c: POP 00000b7d: POP 00000b7e: JUMPDEST 00000b7f: POP 00000b80: JUMP 00000b81: JUMPDEST 00000b82: DUP3 00000b83: DUP1 00000b84: ADD 00000b85: PUSH1 0x01 00000b87: ADD 00000b88: DUP6 00000b89: SSTORE 00000b8a: DUP3 00000b8b: ISZERO 00000b8c: PUSH2 0x0366 00000b8f: JUMPI 00000b90: SWAP2 00000b91: DUP3 00000b92: ADD 00000b93: JUMPDEST 00000b94: DUP3 00000b95: DUP2 00000b96: GT 00000b97: ISZERO 00000b98: PUSH2 0x0366 00000b9b: JUMPI 00000b9c: DUP3 00000b9d: MLOAD 00000b9e: DUP3 00000b9f: PUSH1 0x00 00000ba1: POP 00000ba2: SSTORE 00000ba3: SWAP2 00000ba4: PUSH1 0x20 00000ba6: ADD 00000ba7: SWAP2 00000ba8: SWAP1 00000ba9: PUSH1 0x01 00000bab: ADD 00000bac: SWAP1 00000bad: PUSH2 0x0b93 00000bb0: JUMP 00000bb1: JUMPDEST 00000bb2: POP 00000bb3: PUSH2 0x0bbd 00000bb6: SWAP3 00000bb7: SWAP2 00000bb8: POP 00000bb9: PUSH2 0x08ec 00000bbc: JUMP 00000bbd: JUMPDEST 00000bbe: POP 00000bbf: POP 00000bc0: JUMP 00000bc1: JUMPDEST 00000bc2: POP 00000bc3: POP 00000bc4: PUSH1 0x00 00000bc6: DUP1 00000bc7: SLOAD 00000bc8: DUP6 00000bc9: SWAP4 00000bca: POP 00000bcb: SWAP1 00000bcc: SWAP2 00000bcd: POP 00000bce: PUSH1 0x00 00000bd0: NOT 00000bd1: DUP2 00000bd2: ADD 00000bd3: SWAP1 00000bd4: DUP2 00000bd5: LT 00000bd6: ISZERO 00000bd7: PUSH2 0x0002 00000bda: JUMPI 00000bdb: DUP2 00000bdc: DUP1 00000bdd: MSTORE 00000bde: PUSH1 0x03 00000be0: MUL 00000be1: PUSH1 0x00 00000be3: DUP1 00000be4: MLOAD 00000be5: PUSH1 0x20 00000be7: PUSH2 0x0d34 00000bea: DUP4 00000beb: CODECOPY 00000bec: DUP2 00000bed: MLOAD 00000bee: SWAP2 00000bef: MSTORE 00000bf0: ADD 00000bf1: DUP1 00000bf2: SLOAD 00000bf3: PUSH1 0x01 00000bf5: PUSH1 0xa0 00000bf7: PUSH1 0x02 00000bf9: EXP 00000bfa: SUB 00000bfb: NOT 00000bfc: AND 00000bfd: SWAP1 00000bfe: SWAP3 00000bff: OR 00000c00: SWAP1 00000c01: SWAP2 00000c02: SSTORE 00000c03: DUP1 00000c04: SLOAD 00000c05: DUP3 00000c06: SWAP2 00000c07: SWAP1 00000c08: PUSH1 0x00 00000c0a: NOT 00000c0b: DUP2 00000c0c: ADD 00000c0d: SWAP1 00000c0e: DUP2 00000c0f: LT 00000c10: ISZERO 00000c11: PUSH2 0x0002 00000c14: JUMPI 00000c15: PUSH1 0x03 00000c17: MUL 00000c18: PUSH1 0x00 00000c1a: DUP1 00000c1b: MLOAD 00000c1c: PUSH1 0x20 00000c1e: PUSH2 0x0d94 00000c21: DUP4 00000c22: CODECOPY 00000c23: DUP2 00000c24: MLOAD 00000c25: SWAP2 00000c26: MSTORE 00000c27: ADD 00000c28: SWAP2 00000c29: SWAP1 00000c2a: SWAP2 00000c2b: SSTORE 00000c2c: PUSH1 0x04 00000c2e: SLOAD 00000c2f: DUP2 00000c30: SLOAD 00000c31: SWAP1 00000c32: DUP4 00000c33: DIV 00000c34: PUSH5 0x02540be400 00000c3a: MUL 00000c3b: SWAP2 00000c3c: SWAP1 00000c3d: PUSH1 0x00 00000c3f: NOT 00000c40: DUP2 00000c41: ADD 00000c42: SWAP1 00000c43: DUP2 00000c44: LT 00000c45: ISZERO 00000c46: PUSH2 0x0002 00000c49: JUMPI 00000c4a: PUSH1 0x03 00000c4c: MUL 00000c4d: PUSH1 0x00 00000c4f: DUP1 00000c50: MLOAD 00000c51: PUSH1 0x20 00000c53: PUSH2 0x0d74 00000c56: DUP4 00000c57: CODECOPY 00000c58: DUP2 00000c59: MLOAD 00000c5a: SWAP2 00000c5b: MSTORE 00000c5c: ADD 00000c5d: SWAP2 00000c5e: SWAP1 00000c5f: SWAP2 00000c60: SSTORE 00000c61: PUSH1 0x40 00000c63: DUP1 00000c64: MLOAD 00000c65: PUSH1 0x60 00000c67: DUP2 00000c68: ADD 00000c69: DUP3 00000c6a: MSTORE 00000c6b: PUSH1 0x32 00000c6d: DUP2 00000c6e: MSTORE 00000c6f: PUSH32 0x4e6577206d616e75616c20496e766573746f7220686173206265656e20616464 00000c90: PUSH1 0x20 00000c92: DUP3 00000c93: DUP2 00000c94: ADD 00000c95: SWAP2 00000c96: DUP3 00000c97: MSTORE 00000c98: PUSH32 0x656420627920746865204d616e61676572210000000000000000000000000000 00000cb9: SWAP4 00000cba: DUP4 00000cbb: ADD 00000cbc: SWAP4 00000cbd: SWAP1 00000cbe: SWAP4 00000cbf: MSTORE 00000cc0: PUSH1 0x07 00000cc2: DUP1 00000cc3: SLOAD 00000cc4: SWAP5 00000cc5: DUP2 00000cc6: SWAP1 00000cc7: MSTORE 00000cc8: PUSH1 0x65 00000cca: DUP2 00000ccb: SSTORE 00000ccc: SWAP4 00000ccd: PUSH1 0x00 00000ccf: DUP1 00000cd0: MLOAD 00000cd1: PUSH1 0x20 00000cd3: PUSH2 0x0d54 00000cd6: DUP4 00000cd7: CODECOPY 00000cd8: DUP2 00000cd9: MLOAD 00000cda: SWAP2 00000cdb: MSTORE 00000cdc: PUSH1 0x1f 00000cde: PUSH1 0x02 00000ce0: PUSH2 0x0100 00000ce3: PUSH1 0x01 00000ce5: DUP6 00000ce6: AND 00000ce7: ISZERO 00000ce8: MUL 00000ce9: PUSH1 0x00 00000ceb: NOT 00000cec: ADD 00000ced: SWAP1 00000cee: SWAP4 00000cef: AND 00000cf0: SWAP3 00000cf1: SWAP1 00000cf2: SWAP3 00000cf3: DIV 00000cf4: SWAP2 00000cf5: SWAP1 00000cf6: SWAP2 00000cf7: ADD 00000cf8: SWAP4 00000cf9: SWAP1 00000cfa: SWAP4 00000cfb: DIV 00000cfc: DUP4 00000cfd: ADD 00000cfe: SWAP3 00000cff: SWAP1 00000d00: SWAP2 00000d01: PUSH1 0x52 00000d03: ADD 00000d04: JUMPDEST 00000d05: DUP3 00000d06: DUP2 00000d07: GT 00000d08: ISZERO 00000d09: PUSH2 0x0d22 00000d0c: JUMPI 00000d0d: DUP3 00000d0e: MLOAD 00000d0f: DUP3 00000d10: PUSH1 0x00 00000d12: POP 00000d13: SSTORE 00000d14: SWAP2 00000d15: PUSH1 0x20 00000d17: ADD 00000d18: SWAP2 00000d19: SWAP1 00000d1a: PUSH1 0x01 00000d1c: ADD 00000d1d: SWAP1 00000d1e: PUSH2 0x0d04 00000d21: JUMP 00000d22: JUMPDEST 00000d23: POP 00000d24: PUSH2 0x0d2e 00000d27: SWAP3 00000d28: SWAP2 00000d29: POP 00000d2a: PUSH2 0x08ec 00000d2d: JUMP 00000d2e: JUMPDEST 00000d2f: POP 00000d30: POP 00000d31: POP 00000d32: POP 00000d33: JUMP 00000d34: UNKNOWN(0x29) 00000d35: UNKNOWN(0x0D) 00000d36: UNKNOWN(0xEC) 00000d37: UNKNOWN(0xD9) 00000d38: SLOAD 00000d39: DUP12 00000d3a: PUSH3 0xa8d603 00000d3e: GASLIMIT 00000d3f: UNKNOWN(0xA9) 00000d40: DUP9 00000d41: CODESIZE 00000d42: PUSH16 0xc84ba6bc95484008f6362f93160ef3e5 00000d53: PUSH4 0xa66cc928 00000d58: UNKNOWN(0xB5) 00000d59: UNKNOWN(0xED) 00000d5a: UNKNOWN(0xB8) 00000d5b: UNKNOWN(0x2A) 00000d5c: UNKNOWN(0xF9) 00000d5d: UNKNOWN(0xBD) 00000d5e: BLOBHASH 00000d5f: SWAP3 00000d60: UNKNOWN(0x29) 00000d61: SLOAD 00000d62: ISZERO 00000d63: GAS 00000d64: UNKNOWN(0xB7) 00000d65: UNKNOWN(0xB0) 00000d66: SWAP5 00000d67: UNKNOWN(0x26) 00000d68: SWAP5 00000d69: UNKNOWN(0xBE) 00000d6a: LOG4 00000d6b: UNKNOWN(0xCE) 00000d6c: DIFFICULTY 00000d6d: PUSH7 0x1d9a8736c68829 00000d75: UNKNOWN(0x0D) 00000d76: UNKNOWN(0xEC) 00000d77: UNKNOWN(0xD9) 00000d78: SLOAD 00000d79: DUP12 00000d7a: PUSH3 0xa8d603 00000d7e: GASLIMIT 00000d7f: UNKNOWN(0xA9) 00000d80: DUP9 00000d81: CODESIZE 00000d82: PUSH16 0xc84ba6bc95484008f6362f93160ef3e5 00000d93: PUSH6 0x290decd9548b 00000d9a: PUSH3 0xa8d603 00000d9e: GASLIMIT 00000d9f: UNKNOWN(0xA9) 00000da0: DUP9 00000da1: CODESIZE 00000da2: PUSH16 0xc84ba6bc95484008f6362f93160ef3e5 00000db3: PUSH5
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | yes | yes |
viewtrace_id: 0xf7a9df4fb012bd4cacb56d1ec6a9c2abfce0898aa27d822c0f09827fcfe53f97
call_targets:
0x007d42b9192b8c087b0d3e6ef73aae48e74b41c1, 0x7e6f7232ddddc7d5a075150db12e5235455d9432
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0xf7a9df4fb012bd4cacb56d1ec6a9c2abfce0898aa27d822c0f09827fcfe53f97",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x007d42b9192b8c087b0d3e6ef73aae48e74b41c1",
"0x7e6f7232ddddc7d5a075150db12e5235455d9432"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x1097e579",
"selector": "0x1097e579",
"calldata_variants": [
"0x1097e579",
"0x1097e5790000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x112c7075",
"selector": "0x112c7075",
"calldata_variants": [
"0x112c7075",
"0x112c70750000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3edd90e7",
"selector": "0x3edd90e7",
"calldata_variants": [
"0x3edd90e7",
"0x3edd90e70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3feb5f2b",
"selector": "0x3feb5f2b",
"calldata_variants": [
"0x3feb5f2b",
"0x3feb5f2b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x476e04c7",
"selector": "0x476e04c7",
"calldata_variants": [
"0x476e04c7",
"0x476e04c70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4cd11943",
"selector": "0x4cd11943",
"calldata_variants": [
"0x4cd11943",
"0x4cd119430000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x6b1781b6",
"selector": "0x6b1781b6",
"calldata_variants": [
"0x6b1781b6",
"0x6b1781b60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x6c3772fd",
"selector": "0x6c3772fd",
"calldata_variants": [
"0x6c3772fd",
"0x6c3772fd0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 268,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 434,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1320,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 5,
"guards_detected": [],
"untrusted_call_count": 5
}
|
| high | other | detector | ETH value transfer possible | 55 | yes | yes |
viewtrace_id: 0xf7a9df4fb012bd4cacb56d1ec6a9c2abfce0898aa27d822c0f09827fcfe53f97
call_targets:
0x007d42b9192b8c087b0d3e6ef73aae48e74b41c1, 0x7e6f7232ddddc7d5a075150db12e5235455d9432
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0xf7a9df4fb012bd4cacb56d1ec6a9c2abfce0898aa27d822c0f09827fcfe53f97",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x007d42b9192b8c087b0d3e6ef73aae48e74b41c1",
"0x7e6f7232ddddc7d5a075150db12e5235455d9432"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x1097e579",
"selector": "0x1097e579",
"calldata_variants": [
"0x1097e579",
"0x1097e5790000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x112c7075",
"selector": "0x112c7075",
"calldata_variants": [
"0x112c7075",
"0x112c70750000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3edd90e7",
"selector": "0x3edd90e7",
"calldata_variants": [
"0x3edd90e7",
"0x3edd90e70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3feb5f2b",
"selector": "0x3feb5f2b",
"calldata_variants": [
"0x3feb5f2b",
"0x3feb5f2b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x476e04c7",
"selector": "0x476e04c7",
"calldata_variants": [
"0x476e04c7",
"0x476e04c70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4cd11943",
"selector": "0x4cd11943",
"calldata_variants": [
"0x4cd11943",
"0x4cd119430000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x6b1781b6",
"selector": "0x6b1781b6",
"calldata_variants": [
"0x6b1781b6",
"0x6b1781b60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x6c3772fd",
"selector": "0x6c3772fd",
"calldata_variants": [
"0x6c3772fd",
"0x6c3772fd0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 268,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 434,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1320,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 5,
"guards_detected": []
}
|
| high | math | codex | Integer division order zeroes ownership for most investors, breaking dividends | 85 | no | — |
viewevidence_json{
"evidence": "`percentage_ownership = amount / totaldeposited * 10000000000` (division before scaling)",
"locations": [
"contracts/Contract.sol:127",
"contracts/Contract.sol:131",
"contracts/Contract.sol:137",
"contracts/Contract.sol:184"
],
"recommendation": "Compute ownership as `amount * 1e10 / totaldeposited` (or use a fixed\u2011point library) and recalculate all investors\u2019 percentages consistently after any deposit; add invariant tests to ensure the sum is ~1e10 and non\u2011zero for holders.",
"exploit_scenario": "After a second investor deposits, each investor\u2019s `percentage_ownership` becomes 0 because `amount / totaldeposited` truncates to 0 for any `amount < totaldeposited`. Subsequent dividends compute `PRE_amount * 0 / 1e10`, so payouts are 0 and dividend funds remain stuck in the contract with no withdrawal path."
}
|
| medium | other | codex | Unchecked `send` return values lead to silent payout failures and stuck funds | 75 | no | — |
viewevidence_json{
"evidence": "External payouts use `send` without checking the return value and accounting is updated regardless of success.",
"locations": [
"contracts/Contract.sol:82",
"contracts/Contract.sol:91",
"contracts/Contract.sol:142",
"contracts/Contract.sol:162"
],
"recommendation": "Check `send` return values and either revert on failure or record owed balances for later withdrawal (pull\u2011payments). Consider using `call{value:...}` with success checks and update accounting only after successful transfers. For emergency recovery, prefer `address(this).balance` or explicitly track all sources of funds.",
"exploit_scenario": "If an investor is a contract that rejects ETH (or owner is a contract with reverting fallback), `send` returns false. The code still updates `totalpaidout/totaldividends` and never retries, leaving ETH trapped in the contract while accounting reports it paid. Those stuck funds are also not recoverable via `Emergency`, which relies on the internal `balance` tracker."
}
|
| medium | other | codex | Unbounded investor loops allow gas‑limit DoS of deposits and dividends | 75 | no | — |
viewevidence_json{
"evidence": "Loops over `investors` on every dividend distribution and new investor entry without bounds.",
"locations": [
"contracts/Contract.sol:88",
"contracts/Contract.sol:130",
"contracts/Contract.sol:111"
],
"recommendation": "Avoid iterating over all investors in a single transaction. Switch to a pull\u2011payment model or batched payouts with pagination, and remove full\u2011array recalculation on every deposit.",
"exploit_scenario": "An attacker can create many investor entries (multiple addresses with \u22652 ETH). Any dividend (<2 ETH) triggers a loop over all investors and external sends; new investor deposits also recompute percentages for all investors. Once the list grows large, these operations exceed block gas limits, preventing deposits and dividend distribution."
}
|