019be3d6-81eb-73d7-8def-05c4bf0dd337
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 |
|---|---|---|---|---|
| 40554 | artifact.fetch | complete | 1 / 3 | 2 months ago |
| 40555 | proxy.resolve | complete | 1 / 3 | 2 months ago |
| 40556 | tool.cast_disasm | complete | 1 / 3 | 2 months ago |
| 40557 | analysis.bundle | complete | 1 / 3 | 2 months ago |
| 40558 | capability.graph | complete | 1 / 3 | 2 months ago |
| 40559 | detector.run | complete | 1 / 3 | 2 months ago |
| 40560 | validation.fork | complete | 1 / 3 | 2 months ago |
| 41230 | report.consolidate | complete | 1 / 6 | 2 months ago |
| 41231 | tool.slither | complete | 1 / 2 | 2 months ago |
{
"status": "not_proxy"
}
'forge clean' running (wd: /tmp/slither-o29aulba)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-o29aulba)
WOREPrivateSale.withdraw() (contracts/Contract.sol#435-456) sends eth to arbitrary user
Dangerous calls:
- (art,None) = address(ARTaddress).call{value: ARTamount}() (contracts/Contract.sol#452)
- (project,None) = address(projectAddress).call{value: (PRICE * paymentStage * 100) - (ARTamount + QDamount)}() (contracts/Contract.sol#454-455)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#functions-that-send-ether-to-arbitrary-destinations
Reentrancy in WOREPrivateSale.withdraw() (contracts/Contract.sol#435-456):
External calls:
- (qd,None) = address(QDaddress).call{value: QDamount}() (contracts/Contract.sol#446-450)
- (art,None) = address(ARTaddress).call{value: ARTamount}() (contracts/Contract.sol#452)
- (project,None) = address(projectAddress).call{value: (PRICE * paymentStage * 100) - (ARTamount + QDamount)}() (contracts/Contract.sol#454-455)
State variables written after the call(s):
- LAST_SUPPLY = paymentStage * 100 (contracts/Contract.sol#456)
WOREPrivateSale.LAST_SUPPLY (contracts/Contract.sol#316) can be used in cross function reentrancies:
- WOREPrivateSale.LAST_SUPPLY (contracts/Contract.sol#316)
- WOREPrivateSale.withdraw() (contracts/Contract.sol#435-456)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities
WOREPrivateSale.constructor(address,address,address,address,address[])._signer (contracts/Contract.sol#336) lacks a zero-check on :
- SIGNER = _signer (contracts/Contract.sol#340)
WOREPrivateSale.constructor(address,address,address,address,address[])._QDaddress (contracts/Contract.sol#336-337) lacks a zero-check on :
- QDaddress = _QDaddress (contracts/Contract.sol#340-341)
WOREPrivateSale.constructor(address,address,address,address,address[])._ARTaddress (contracts/Contract.sol#338-339) lacks a zero-check on :
- ARTaddress = _ARTaddress (contracts/Contract.sol#341-343)
WOREPrivateSale.constructor(address,address,address,address,address[])._projectAddress (contracts/Contract.sol#337) lacks a zero-check on :
- projectAddress = _projectAddress (contracts/Contract.sol#343-344)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation
ECDSA.tryRecover(bytes32,bytes) (contracts/Contract.sol#136-164) uses assembly
- INLINE ASM (contracts/Contract.sol#148-152)
- INLINE ASM (contracts/Contract.sol#159-161)
ECDSA.tryRecover(bytes32,bytes32,bytes32) (contracts/Contract.sol#193-206) uses assembly
- INLINE ASM (contracts/Contract.sol#197-203)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage
2 different versions of Solidity are used:
- Version constraint ^0.8.0 is used by:
-^0.8.0 (contracts/Contract.sol#17-19)
-^0.8.0 (contracts/Contract.sol#84-87)
- Version constraint ^0.8.7 is used by:
-^0.8.7 (contracts/Contract.sol#311)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used
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 (contracts/Contract.sol#17-19)
- ^0.8.0 (contracts/Contract.sol#84-87)
Version constraint ^0.8.7 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
- VerbatimInvalidDeduplication
- FullInlinerNonExpressionSplitArgumentEvaluationOrder
- MissingSideEffectsOnSelectorAccess
- AbiReencodingHeadOverflowWithStaticArrayCleanup
- DirtyBytesArrayToStorage
- DataLocationChangeInInternalOverride
- NestedCalldataArrayAbiReencodingSizeValidation
- SignedImmutables.
It is used by:
- ^0.8.7 (contracts/Contract.sol#311)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity
Low level call in WOREPrivateSale.withdraw() (contracts/Contract.sol#435-456):
- (qd,None) = address(QDaddress).call{value: QDamount}() (contracts/Contract.sol#446-450)
- (art,None) = address(ARTaddress).call{value: ARTamount}() (contracts/Contract.sol#452)
- (project,None) = address(projectAddress).call{value: (PRICE * paymentStage * 100) - (ARTamount + QDamount)}() (contracts/Contract.sol#454-455)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls
Parameter WOREPrivateSale.buy(uint256,bytes32,bytes)._purchaseAmount (contracts/Contract.sol#411) is not in mixedCase
Parameter WOREPrivateSale.buy(uint256,bytes32,bytes)._hash (contracts/Contract.sol#411-412) is not in mixedCase
Parameter WOREPrivateSale.buy(uint256,bytes32,bytes)._signature (contracts/Contract.sol#412) is not in mixedCase
Variable WOREPrivateSale.PRICE (contracts/Contract.sol#315) is not in mixedCase
Variable WOREPrivateSale.QDpayment (contracts/Contract.sol#315) is not in mixedCase
Variable WOREPrivateSale.ARTpayment (contracts/Contract.sol#315-316) is not in mixedCase
Variable WOREPrivateSale.LAST_SUPPLY (contracts/Contract.sol#316) is not in mixedCase
Variable WOREPrivateSale.MAX_SUPPLY (contracts/Contract.sol#316) is not in mixedCase
Variable WOREPrivateSale.SUPPLY (contracts/Contract.sol#316-320) is not in mixedCase
Variable WOREPrivateSale.MAX_PURCHASE (contracts/Contract.sol#320-323) is not in mixedCase
Variable WOREPrivateSale.PURCHASED (contracts/Contract.sol#323-327) is not in mixedCase
Variable WOREPrivateSale.OWNERS (contracts/Contract.sol#327-329) is not in mixedCase
Variable WOREPrivateSale.SIGNER (contracts/Contract.sol#329) is not in mixedCase
Variable WOREPrivateSale.QDaddress (contracts/Contract.sol#329-331) is not in mixedCase
Variable WOREPrivateSale.ARTaddress (contracts/Contract.sol#331-332) is not in mixedCase
Variable WOREPrivateSale.ADMINS (contracts/Contract.sol#332-334) is not in mixedCase
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions
Loop condition i < ADMINS.length (contracts/Contract.sol#354) should use cached array length instead of referencing `length` member of the storage array.
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#cache-array-length
WOREPrivateSale.ARTpayment (contracts/Contract.sol#315-316) should be constant
WOREPrivateSale.MAX_PURCHASE (contracts/Contract.sol#320-323) should be constant
WOREPrivateSale.MAX_SUPPLY (contracts/Contract.sol#316) should be constant
WOREPrivateSale.PRICE (contracts/Contract.sol#315) should be constant
WOREPrivateSale.QDpayment (contracts/Contract.sol#315) should be constant
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant
WOREPrivateSale.ARTaddress (contracts/Contract.sol#331-332) should be immutable
WOREPrivateSale.QDaddress (contracts/Contract.sol#329-331) should be immutable
WOREPrivateSale.SIGNER (contracts/Contract.sol#329) should be immutable
WOREPrivateSale.projectAddress (contracts/Contract.sol#332) should be immutable
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-immutable
. analyzed (3 contracts with 100 detectors), 38 result(s) found
{
"solc": {
"status": "ok",
"use_rc": 0,
"version": "0.8.7",
"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.7",
"install_stderr": null,
"install_stdout": "Version '0.8.7' is already installed, skipping..."
},
"solc_args": "--base-path /tmp/slither-o29aulba --allow-paths /tmp/slither-o29aulba,/tmp/slither-o29aulba/lib,/tmp/slither-o29aulba/src",
"remappings": [],
"source_files": [
"contracts/Contract.sol"
],
"contract_count": 0,
"contract_names": [],
"detector_count": 38,
"workspace_hash": "9c6afe62010ff38a2a98791ae03152ef8b8e57a48f3055b62e3d669919e59b4d",
"duration_seconds": 0.5471093654632568,
"solc_version_requested": "0.8.7"
}
{"no_findings":false,"summary":"Found a withdrawal accounting bug that allows repeated payout of the same tranche, enabling draining of contract funds.","findings":[{"severity":"high","category":"math","title":"LAST_SUPPLY is reset instead of incremented, enabling repeated withdrawals of the same tranche","exploit_scenario":"After some sales, an admin calls withdraw(). If SUPPLY=150 and LAST_SUPPLY=0, paymentStage=1 and 100 tokens worth of proceeds are paid out, then LAST_SUPPLY is set to 100. A subsequent withdraw() with SUPPLY still 150 yields paymentStage=0 and resets LAST_SUPPLY to 0; the next call again computes paymentStage=1, paying out the same tranche repeatedly. This allows draining contract ETH to the configured payout addresses without additional sales.","recommendation":"Track cumulative withdrawals by incrementing LAST_SUPPLY (e.g., LAST_SUPPLY += paymentStage * 100) and require paymentStage > 0. Update LAST_SUPPLY before external calls and consider a reentrancy guard to prevent reentry during payouts.","evidence":"`uint paymentStage = uint ((SUPPLY - LAST_SUPPLY)/ 100);` followed by `LAST_SUPPLY = paymentStage * 100;` resets the counter instead of advancing it.","locations":["contracts/WORE.sol:461","contracts/WORE.sol:471"]}]}
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-z8g42qlj
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019be3de-8653-7260-9f16-04a31930e43d
--------
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
**Preparing to read audit bundle**
I'm planning to read the AUDIT_BUNDLE file with sandbox read-only access using a simple file read.
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-z8g42qlj 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/Contract.sol
================================================================================
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol
//------------------------------------------------------------------------------
/*
░██████╗░██╗░░░██╗░█████╗░██╗░░░░░██╗███████╗██╗███████╗██████╗░ ██████╗░███████╗██╗░░░██╗░██████╗
██╔═══██╗██║░░░██║██╔══██╗██║░░░░░██║██╔════╝██║██╔════╝██╔══██╗ ██╔══██╗██╔════╝██║░░░██║██╔════╝
██║██╗██║██║░░░██║███████║██║░░░░░██║█████╗░░██║█████╗░░██║░░██║ ██║░░██║█████╗░░╚██╗░██╔╝╚█████╗░
╚██████╔╝██║░░░██║██╔══██║██║░░░░░██║██╔══╝░░██║██╔══╝░░██║░░██║ ██║░░██║██╔══╝░░░╚████╔╝░░╚═══██╗
░╚═██╔═╝░╚██████╔╝██║░░██║███████╗██║██║░░░░░██║███████╗██████╔╝ ██████╔╝███████╗░░╚██╔╝░░██████╔╝
░░░╚═╝░░░░╚═════╝░╚═╝░░╚═╝╚══════╝╚═╝╚═╝░░░░░╚═╝╚══════╝╚═════╝░ ╚═════╝░╚══════╝░░░╚═╝░░░╚═════╝░
*/
//------------------------------------------------------------------------------
// Author: orion (@OrionDevStar)
thinking
**Identifying critical withdraw accounting bug**
The withdraw logic wrongly resets LAST_SUPPLY to paymentStage * 100 instead of incrementing it, allowing repeated withdrawals from the same supply range and enabling over-withdrawal, posing a serious vulnerability.
thinking
**Confirming high-severity withdraw logic flaw**
The withdraw function resets LAST_SUPPLY incorrectly on zero or partial payment stages, enabling repeated fund withdrawals to designated addresses by the admin, creating a serious double-withdrawal vulnerability through flawed accounting.
exec
/bin/bash -lc "nl -ba AUDIT_BUNDLE.txt | sed -n '200,360p'" in /tmp/codex-z8g42qlj succeeded in 16ms:
200 *
201 * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
202 *
203 * _Available since v4.3._
204 */
205 function tryRecover(
206 bytes32 hash,
207 bytes32 r,
208 bytes32 vs
209 ) internal pure returns (address, RecoverError) {
210 bytes32 s;
211 uint8 v;
212 assembly {
213 s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
214 v := add(shr(255, vs), 27)
215 }
216 return tryRecover(hash, v, r, s);
217 }
218
219 /**
thinking
**Planning withdrawal handling**
I'm preparing to add or verify a code line related to withdrawal functionality before moving forward.
exec
/bin/bash -lc "nl -ba AUDIT_BUNDLE.txt | sed -n '360,520p'" in /tmp/codex-z8g42qlj succeeded in 6ms:
360 ADMINS = _ADMINS;
361 SUPPLY = 0;
362 }
363
364 //modifier
365 /**
366 * @dev Cheks if the msg.sender that have ADMIN permition.
367 */
368 modifier onlyAdmin() {
369 _checkAdmin();
370 _;
371 }
372
373 //internal
374 /**
375 * @dev Cheks if the msg.sender that have ADMIN permition.
376 */
377 function _checkAdmin()internal view {
378 bool isAdmin = false;
379 for (uint i = 0; i < ADMINS.length; i++){
thinking
**Crafting JSON schema for findings**
I'm defining a concise JSON schema to report a major high-severity accounting bug allowing repeated withdrawals, categorizing it as math, and including an exploit scenario, recommendation, and code evidence with locations.
thinking
**Finalizing exploit scenario and recommendation in JSON**
I'm detailing the exploit scenario involving repeated withdrawals due to resetting LAST_SUPPLY and recommending cumulative updates plus reentrancy guards, citing specific lines in `contracts/WORE.sol` within the audit bundle for evidence.
codex
{"no_findings":false,"summary":"Found a withdrawal accounting bug that allows repeated payout of the same tranche, enabling draining of contract funds.","findings":[{"severity":"high","category":"math","title":"LAST_SUPPLY is reset instead of incremented, enabling repeated withdrawals of the same tranche","exploit_scenario":"After some sales, an admin calls withdraw(). If SUPPLY=150 and LAST_SUPPLY=0, paymentStage=1 and 100 tokens worth of proceeds are paid out, then LAST_SUPPLY is set to 100. A subsequent withdraw() with SUPPLY still 150 yields paymentStage=0 and resets LAST_SUPPLY to 0; the next call again computes paymentStage=1, paying out the same tranche repeatedly. This allows draining contract ETH to the configured payout addresses without additional sales.","recommendation":"Track cumulative withdrawals by incrementing LAST_SUPPLY (e.g., LAST_SUPPLY += paymentStage * 100) and require paymentStage > 0. Update LAST_SUPPLY before external calls and consider a reentrancy guard to prevent reentry during payouts.","evidence":"`uint paymentStage = uint ((SUPPLY - LAST_SUPPLY)/ 100);` followed by `LAST_SUPPLY = paymentStage * 100;` resets the counter instead of advancing it.","locations":["contracts/WORE.sol:461","contracts/WORE.sol:471"]}]}
tokens used
15,791
{
"codex": {
"ran_at": "2026-01-22T04:03:48.016672+00:00",
"returncode": 0
},
"project": {
"mode": "source",
"file_count": 1,
"import_count": 0,
"first_party_contracts_count": 1
},
"summary": "Found a withdrawal accounting bug that allows repeated payout of the same tranche, enabling draining of contract funds.",
"raw_final": {
"summary": "Found a withdrawal accounting bug that allows repeated payout of the same tranche, enabling draining of contract funds.",
"findings": [
{
"title": "LAST_SUPPLY is reset instead of incremented, enabling repeated withdrawals of the same tranche",
"category": "math",
"evidence": "`uint paymentStage = uint ((SUPPLY - LAST_SUPPLY)/ 100);` followed by `LAST_SUPPLY = paymentStage * 100;` resets the counter instead of advancing it.",
"severity": "high",
"locations": [
"contracts/WORE.sol:461",
"contracts/WORE.sol:471"
],
"recommendation": "Track cumulative withdrawals by incrementing LAST_SUPPLY (e.g., LAST_SUPPLY += paymentStage * 100) and require paymentStage > 0. Update LAST_SUPPLY before external calls and consider a reentrancy guard to prevent reentry during payouts.",
"exploit_scenario": "After some sales, an admin calls withdraw(). If SUPPLY=150 and LAST_SUPPLY=0, paymentStage=1 and 100 tokens worth of proceeds are paid out, then LAST_SUPPLY is set to 100. A subsequent withdraw() with SUPPLY still 150 yields paymentStage=0 and resets LAST_SUPPLY to 0; the next call again computes paymentStage=1, paying out the same tranche repeatedly. This allows draining contract ETH to the configured payout addresses without additional sales."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x009c 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x81282a36 00000019: GT 0000001a: PUSH2 0x0064 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0x81282a36 00000024: EQ 00000025: PUSH2 0x0111 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0x8d859f3e 0000002f: EQ 00000030: PUSH2 0x013e 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0x97e1b4ee 0000003a: EQ 0000003b: PUSH2 0x0154 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xaffe39c1 00000045: EQ 00000046: PUSH2 0x016a 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xe00cd493 00000050: EQ 00000051: PUSH2 0x018c 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xfa4bd2c7 0000005b: EQ 0000005c: PUSH2 0x019f 0000005f: JUMPI 00000060: PUSH1 0x00 00000062: DUP1 00000063: REVERT 00000064: JUMPDEST 00000065: DUP1 00000066: PUSH4 0x18160ddd 0000006b: EQ 0000006c: PUSH2 0x00a1 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0x32cb6b0c 00000076: EQ 00000077: PUSH2 0x00c5 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0x34f30cd1 00000081: EQ 00000082: PUSH2 0x00db 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0x3ccfd60b 0000008c: EQ 0000008d: PUSH2 0x00f1 00000090: JUMPI 00000091: DUP1 00000092: PUSH4 0x7146bd08 00000097: EQ 00000098: PUSH2 0x00fb 0000009b: JUMPI 0000009c: JUMPDEST 0000009d: PUSH1 0x00 0000009f: DUP1 000000a0: REVERT 000000a1: JUMPDEST 000000a2: CALLVALUE 000000a3: DUP1 000000a4: ISZERO 000000a5: PUSH2 0x00ad 000000a8: JUMPI 000000a9: PUSH1 0x00 000000ab: DUP1 000000ac: REVERT 000000ad: JUMPDEST 000000ae: POP 000000af: PUSH1 0x05 000000b1: SLOAD 000000b2: JUMPDEST 000000b3: PUSH1 0x40 000000b5: MLOAD 000000b6: SWAP1 000000b7: DUP2 000000b8: MSTORE 000000b9: PUSH1 0x20 000000bb: ADD 000000bc: JUMPDEST 000000bd: PUSH1 0x40 000000bf: MLOAD 000000c0: DUP1 000000c1: SWAP2 000000c2: SUB 000000c3: SWAP1 000000c4: RETURN 000000c5: JUMPDEST 000000c6: CALLVALUE 000000c7: DUP1 000000c8: ISZERO 000000c9: PUSH2 0x00d1 000000cc: JUMPI 000000cd: PUSH1 0x00 000000cf: DUP1 000000d0: REVERT 000000d1: JUMPDEST 000000d2: POP 000000d3: PUSH2 0x00b2 000000d6: PUSH1 0x04 000000d8: SLOAD 000000d9: DUP2 000000da: JUMP 000000db: JUMPDEST 000000dc: CALLVALUE 000000dd: DUP1 000000de: ISZERO 000000df: PUSH2 0x00e7 000000e2: JUMPI 000000e3: PUSH1 0x00 000000e5: DUP1 000000e6: REVERT 000000e7: JUMPDEST 000000e8: POP 000000e9: PUSH2 0x00b2 000000ec: PUSH1 0x01 000000ee: SLOAD 000000ef: DUP2 000000f0: JUMP 000000f1: JUMPDEST 000000f2: PUSH2 0x00f9 000000f5: PUSH2 0x01b5 000000f8: JUMP 000000f9: JUMPDEST 000000fa: STOP 000000fb: JUMPDEST 000000fc: CALLVALUE 000000fd: DUP1 000000fe: ISZERO 000000ff: PUSH2 0x0107 00000102: JUMPI 00000103: PUSH1 0x00 00000105: DUP1 00000106: REVERT 00000107: JUMPDEST 00000108: POP 00000109: PUSH2 0x00b2 0000010c: PUSH1 0x06 0000010e: SLOAD 0000010f: DUP2 00000110: JUMP 00000111: JUMPDEST 00000112: CALLVALUE 00000113: DUP1 00000114: ISZERO 00000115: PUSH2 0x011d 00000118: JUMPI 00000119: PUSH1 0x00 0000011b: DUP1 0000011c: REVERT 0000011d: JUMPDEST 0000011e: POP 0000011f: PUSH2 0x00b2 00000122: PUSH2 0x012c 00000125: CALLDATASIZE 00000126: PUSH1 0x04 00000128: PUSH2 0x0b8e 0000012b: JUMP 0000012c: JUMPDEST 0000012d: PUSH1 0x07 0000012f: PUSH1 0x20 00000131: MSTORE 00000132: PUSH1 0x00 00000134: SWAP1 00000135: DUP2 00000136: MSTORE 00000137: PUSH1 0x40 00000139: SWAP1 0000013a: KECCAK256 0000013b: SLOAD 0000013c: DUP2 0000013d: JUMP 0000013e: JUMPDEST 0000013f: CALLVALUE 00000140: DUP1 00000141: ISZERO 00000142: PUSH2 0x014a 00000145: JUMPI 00000146: PUSH1 0x00 00000148: DUP1 00000149: REVERT 0000014a: JUMPDEST 0000014b: POP 0000014c: PUSH2 0x00b2 0000014f: PUSH1 0x00 00000151: SLOAD 00000152: DUP2 00000153: JUMP 00000154: JUMPDEST 00000155: CALLVALUE 00000156: DUP1 00000157: ISZERO 00000158: PUSH2 0x0160 0000015b: JUMPI 0000015c: PUSH1 0x00 0000015e: DUP1 0000015f: REVERT 00000160: JUMPDEST 00000161: POP 00000162: PUSH2 0x00b2 00000165: PUSH1 0x03 00000167: SLOAD 00000168: DUP2 00000169: JUMP 0000016a: JUMPDEST 0000016b: CALLVALUE 0000016c: DUP1 0000016d: ISZERO 0000016e: PUSH2 0x0176 00000171: JUMPI 00000172: PUSH1 0x00 00000174: DUP1 00000175: REVERT 00000176: JUMPDEST 00000177: POP 00000178: PUSH2 0x017f 0000017b: PUSH2 0x03cc 0000017e: JUMP 0000017f: JUMPDEST 00000180: PUSH1 0x40 00000182: MLOAD 00000183: PUSH2 0x00bc 00000186: SWAP2 00000187: SWAP1 00000188: PUSH2 0x0c7b 0000018b: JUMP 0000018c: JUMPDEST 0000018d: PUSH2 0x00f9 00000190: PUSH2 0x019a 00000193: CALLDATASIZE 00000194: PUSH1 0x04 00000196: PUSH2 0x0bb7 00000199: JUMP 0000019a: JUMPDEST 0000019b: PUSH2 0x0432 0000019e: JUMP 0000019f: JUMPDEST 000001a0: CALLVALUE 000001a1: DUP1 000001a2: ISZERO 000001a3: PUSH2 0x01ab 000001a6: JUMPI 000001a7: PUSH1 0x00 000001a9: DUP1 000001aa: REVERT 000001ab: JUMPDEST 000001ac: POP 000001ad: PUSH2 0x00b2 000001b0: PUSH1 0x02 000001b2: SLOAD 000001b3: DUP2 000001b4: JUMP 000001b5: JUMPDEST 000001b6: PUSH2 0x01bd 000001b9: PUSH2 0x069e 000001bc: JUMP 000001bd: JUMPDEST 000001be: PUSH1 0x64 000001c0: PUSH1 0x05 000001c2: SLOAD 000001c3: LT 000001c4: ISZERO 000001c5: PUSH2 0x0224 000001c8: JUMPI 000001c9: PUSH1 0x40 000001cb: MLOAD 000001cc: PUSH3 0x461bcd 000001d0: PUSH1 0xe5 000001d2: SHL 000001d3: DUP2 000001d4: MSTORE 000001d5: PUSH1 0x20 000001d7: PUSH1 0x04 000001d9: DUP3 000001da: ADD 000001db: MSTORE 000001dc: PUSH1 0x26 000001de: PUSH1 0x24 000001e0: DUP3 000001e1: ADD 000001e2: MSTORE 000001e3: PUSH32 0x546865206d696e696d756d20737570706c7920746f2077697468647261772069 00000204: PUSH1 0x44 00000206: DUP3 00000207: ADD 00000208: MSTORE 00000209: PUSH6 0x399018981817 00000210: PUSH1 0xd1 00000212: SHL 00000213: PUSH1 0x64 00000215: DUP3 00000216: ADD 00000217: MSTORE 00000218: PUSH1 0x84 0000021a: ADD 0000021b: JUMPDEST 0000021c: PUSH1 0x40 0000021e: MLOAD 0000021f: DUP1 00000220: SWAP2 00000221: SUB 00000222: SWAP1 00000223: REVERT 00000224: JUMPDEST 00000225: PUSH1 0x00 00000227: PUSH1 0x64 00000229: PUSH1 0x03 0000022b: SLOAD 0000022c: PUSH1 0x05 0000022e: SLOAD 0000022f: PUSH2 0x0238 00000232: SWAP2 00000233: SWAP1 00000234: PUSH2 0x0d76 00000237: JUMP 00000238: JUMPDEST 00000239: PUSH2 0x0242 0000023c: SWAP2 0000023d: SWAP1 0000023e: PUSH2 0x0d35 00000241: JUMP 00000242: JUMPDEST 00000243: SWAP1 00000244: POP 00000245: PUSH1 0x00 00000247: DUP2 00000248: PUSH1 0x01 0000024a: SLOAD 0000024b: PUSH2 0x0254 0000024e: SWAP2 0000024f: SWAP1 00000250: PUSH2 0x0d57 00000253: JUMP 00000254: JUMPDEST 00000255: SWAP1 00000256: POP 00000257: PUSH1 0x00 00000259: DUP3 0000025a: PUSH1 0x02 0000025c: SLOAD 0000025d: PUSH2 0x0266 00000260: SWAP2 00000261: SWAP1 00000262: PUSH2 0x0d57 00000265: JUMP 00000266: JUMPDEST 00000267: PUSH1 0x0a 00000269: SLOAD 0000026a: PUSH1 0x40 0000026c: MLOAD 0000026d: SWAP2 0000026e: SWAP3 0000026f: POP 00000270: PUSH1 0x00 00000272: SWAP2 00000273: PUSH1 0x01 00000275: PUSH1 0x01 00000277: PUSH1 0xa0 00000279: SHL 0000027a: SUB 0000027b: SWAP1 0000027c: SWAP2 0000027d: AND 0000027e: SWAP1 0000027f: DUP5 00000280: SWAP1 00000281: DUP4 00000282: DUP2 00000283: DUP2 00000284: DUP2 00000285: DUP6 00000286: DUP8 00000287: GAS 00000288: CALL 00000289: SWAP3 0000028a: POP 0000028b: POP 0000028c: POP 0000028d: RETURNDATASIZE 0000028e: DUP1 0000028f: PUSH1 0x00 00000291: DUP2 00000292: EQ 00000293: PUSH2 0x02b8 00000296: JUMPI 00000297: PUSH1 0x40 00000299: MLOAD 0000029a: SWAP2 0000029b: POP 0000029c: PUSH1 0x1f 0000029e: NOT 0000029f: PUSH1 0x3f 000002a1: RETURNDATASIZE 000002a2: ADD 000002a3: AND 000002a4: DUP3 000002a5: ADD 000002a6: PUSH1 0x40 000002a8: MSTORE 000002a9: RETURNDATASIZE 000002aa: DUP3 000002ab: MSTORE 000002ac: RETURNDATASIZE 000002ad: PUSH1 0x00 000002af: PUSH1 0x20 000002b1: DUP5 000002b2: ADD 000002b3: RETURNDATACOPY 000002b4: PUSH2 0x02bd 000002b7: JUMP 000002b8: JUMPDEST 000002b9: PUSH1 0x60 000002bb: SWAP2 000002bc: POP 000002bd: JUMPDEST 000002be: POP 000002bf: POP 000002c0: SWAP1 000002c1: POP 000002c2: DUP1 000002c3: PUSH2 0x02cb 000002c6: JUMPI 000002c7: PUSH1 0x00 000002c9: DUP1 000002ca: REVERT 000002cb: JUMPDEST 000002cc: PUSH1 0x0b 000002ce: SLOAD 000002cf: PUSH1 0x40 000002d1: MLOAD 000002d2: PUSH1 0x00 000002d4: SWAP2 000002d5: PUSH1 0x01 000002d7: PUSH1 0x01 000002d9: PUSH1 0xa0 000002db: SHL 000002dc: SUB 000002dd: AND 000002de: SWAP1 000002df: DUP5 000002e0: SWAP1 000002e1: DUP4 000002e2: DUP2 000002e3: DUP2 000002e4: DUP2 000002e5: DUP6 000002e6: DUP8 000002e7: GAS 000002e8: CALL 000002e9: SWAP3 000002ea: POP 000002eb: POP 000002ec: POP 000002ed: RETURNDATASIZE 000002ee: DUP1 000002ef: PUSH1 0x00 000002f1: DUP2 000002f2: EQ 000002f3: PUSH2 0x0318 000002f6: JUMPI 000002f7: PUSH1 0x40 000002f9: MLOAD 000002fa: SWAP2 000002fb: POP 000002fc: PUSH1 0x1f 000002fe: NOT 000002ff: PUSH1 0x3f 00000301: RETURNDATASIZE 00000302: ADD 00000303: AND 00000304: DUP3 00000305: ADD 00000306: PUSH1 0x40 00000308: MSTORE 00000309: RETURNDATASIZE 0000030a: DUP3 0000030b: MSTORE 0000030c: RETURNDATASIZE 0000030d: PUSH1 0x00 0000030f: PUSH1 0x20 00000311: DUP5 00000312: ADD 00000313: RETURNDATACOPY 00000314: PUSH2 0x031d 00000317: JUMP 00000318: JUMPDEST 00000319: PUSH1 0x60 0000031b: SWAP2 0000031c: POP 0000031d: JUMPDEST 0000031e: POP 0000031f: POP 00000320: SWAP1 00000321: POP 00000322: DUP1 00000323: PUSH2 0x032b 00000326: JUMPI 00000327: PUSH1 0x00 00000329: DUP1 0000032a: REVERT 0000032b: JUMPDEST 0000032c: PUSH1 0x0c 0000032e: SLOAD 0000032f: PUSH1 0x00 00000331: SWAP1 00000332: PUSH1 0x01 00000334: PUSH1 0x01 00000336: PUSH1 0xa0 00000338: SHL 00000339: SUB 0000033a: AND 0000033b: PUSH2 0x0344 0000033e: DUP7 0000033f: DUP7 00000340: PUSH2 0x0d1d 00000343: JUMP 00000344: JUMPDEST 00000345: DUP8 00000346: PUSH1 0x00 00000348: SLOAD 00000349: PUSH2 0x0352 0000034c: SWAP2 0000034d: SWAP1 0000034e: PUSH2 0x0d57 00000351: JUMP 00000352: JUMPDEST 00000353: PUSH2 0x035d 00000356: SWAP1 00000357: PUSH1 0x64 00000359: PUSH2 0x0d57 0000035c: JUMP 0000035d: JUMPDEST 0000035e: PUSH2 0x0367 00000361: SWAP2 00000362: SWAP1 00000363: PUSH2 0x0d76 00000366: JUMP 00000367: JUMPDEST 00000368: PUSH1 0x40 0000036a: MLOAD 0000036b: PUSH1 0x00 0000036d: DUP2 0000036e: DUP2 0000036f: DUP2 00000370: DUP6 00000371: DUP8 00000372: GAS 00000373: CALL 00000374: SWAP3 00000375: POP 00000376: POP 00000377: POP 00000378: RETURNDATASIZE 00000379: DUP1 0000037a: PUSH1 0x00 0000037c: DUP2 0000037d: EQ 0000037e: PUSH2 0x03a3 00000381: JUMPI 00000382: PUSH1 0x40 00000384: MLOAD 00000385: SWAP2 00000386: POP 00000387: PUSH1 0x1f 00000389: NOT 0000038a: PUSH1 0x3f 0000038c: RETURNDATASIZE 0000038d: ADD 0000038e: AND 0000038f: DUP3 00000390: ADD 00000391: PUSH1 0x40 00000393: MSTORE 00000394: RETURNDATASIZE 00000395: DUP3 00000396: MSTORE 00000397: RETURNDATASIZE 00000398: PUSH1 0x00 0000039a: PUSH1 0x20 0000039c: DUP5 0000039d: ADD 0000039e: RETURNDATACOPY 0000039f: PUSH2 0x03a8 000003a2: JUMP 000003a3: JUMPDEST 000003a4: PUSH1 0x60 000003a6: SWAP2 000003a7: POP 000003a8: JUMPDEST 000003a9: POP 000003aa: POP 000003ab: SWAP1 000003ac: POP 000003ad: DUP1 000003ae: PUSH2 0x03b6 000003b1: JUMPI 000003b2: PUSH1 0x00 000003b4: DUP1 000003b5: REVERT 000003b6: JUMPDEST 000003b7: PUSH2 0x03c1 000003ba: DUP7 000003bb: PUSH1 0x64 000003bd: PUSH2 0x0d57 000003c0: JUMP 000003c1: JUMPDEST 000003c2: PUSH1 0x03 000003c4: SSTORE 000003c5: POP 000003c6: POP 000003c7: POP 000003c8: POP 000003c9: POP 000003ca: POP 000003cb: JUMP 000003cc: JUMPDEST 000003cd: PUSH1 0x60 000003cf: PUSH1 0x00 000003d1: PUSH1 0x08 000003d3: DUP1 000003d4: SLOAD 000003d5: DUP1 000003d6: PUSH1 0x20 000003d8: MUL 000003d9: PUSH1 0x20 000003db: ADD 000003dc: PUSH1 0x40 000003de: MLOAD 000003df: SWAP1 000003e0: DUP2 000003e1: ADD 000003e2: PUSH1 0x40 000003e4: MSTORE 000003e5: DUP1 000003e6: SWAP3 000003e7: SWAP2 000003e8: SWAP1 000003e9: DUP2 000003ea: DUP2 000003eb: MSTORE 000003ec: PUSH1 0x20 000003ee: ADD 000003ef: DUP3 000003f0: DUP1 000003f1: SLOAD 000003f2: DUP1 000003f3: ISZERO 000003f4: PUSH2 0x0426 000003f7: JUMPI 000003f8: PUSH1 0x20 000003fa: MUL 000003fb: DUP3 000003fc: ADD 000003fd: SWAP2 000003fe: SWAP1 000003ff: PUSH1 0x00 00000401: MSTORE 00000402: PUSH1 0x20 00000404: PUSH1 0x00 00000406: KECCAK256 00000407: SWAP1 00000408: JUMPDEST 00000409: DUP2 0000040a: SLOAD 0000040b: PUSH1 0x01 0000040d: PUSH1 0x01 0000040f: PUSH1 0xa0 00000411: SHL 00000412: SUB 00000413: AND 00000414: DUP2 00000415: MSTORE 00000416: PUSH1 0x01 00000418: SWAP1 00000419: SWAP2 0000041a: ADD 0000041b: SWAP1 0000041c: PUSH1 0x20 0000041e: ADD 0000041f: DUP1 00000420: DUP4 00000421: GT 00000422: PUSH2 0x0408 00000425: JUMPI 00000426: JUMPDEST 00000427: POP 00000428: SWAP4 00000429: SWAP7 0000042a: SWAP6 0000042b: POP 0000042c: POP 0000042d: POP 0000042e: POP 0000042f: POP 00000430: POP 00000431: JUMP 00000432: JUMPDEST 00000433: PUSH1 0x00 00000435: DUP4 00000436: GT 00000437: PUSH2 0x0482 0000043a: JUMPI 0000043b: PUSH1 0x40 0000043d: MLOAD 0000043e: PUSH3 0x461bcd 00000442: PUSH1 0xe5 00000444: SHL 00000445: DUP2 00000446: MSTORE 00000447: PUSH1 0x20 00000449: PUSH1 0x04 0000044b: DUP3 0000044c: ADD 0000044d: MSTORE 0000044e: PUSH1 0x1a 00000450: PUSH1 0x24 00000452: DUP3 00000453: ADD 00000454: MSTORE 00000455: PUSH32 0x596f752053686f756c6420427579206174206c6561737420312e000000000000 00000476: PUSH1 0x44 00000478: DUP3 00000479: ADD 0000047a: MSTORE 0000047b: PUSH1 0x64 0000047d: ADD 0000047e: PUSH2 0x021b 00000481: JUMP 00000482: JUMPDEST 00000483: PUSH1 0x06 00000485: SLOAD 00000486: CALLER 00000487: PUSH1 0x00 00000489: SWAP1 0000048a: DUP2 0000048b: MSTORE 0000048c: PUSH1 0x07 0000048e: PUSH1 0x20 00000490: MSTORE 00000491: PUSH1 0x40 00000493: SWAP1 00000494: KECCAK256 00000495: SLOAD 00000496: PUSH2 0x049f 00000499: SWAP1 0000049a: DUP6 0000049b: PUSH2 0x0d1d 0000049e: JUMP 0000049f: JUMPDEST 000004a0: GT 000004a1: ISZERO 000004a2: PUSH2 0x04f7 000004a5: JUMPI 000004a6: PUSH1 0x40 000004a8: MLOAD 000004a9: PUSH3 0x461bcd 000004ad: PUSH1 0xe5 000004af: SHL 000004b0: DUP2 000004b1: MSTORE 000004b2: PUSH1 0x20 000004b4: PUSH1 0x04 000004b6: DUP3 000004b7: ADD 000004b8: MSTORE 000004b9: PUSH1 0x21 000004bb: PUSH1 0x24 000004bd: DUP3 000004be: ADD 000004bf: MSTORE 000004c0: PUSH32 0x4d6178696d756d20616d6f756e742065786365646564207065722077616c6c65 000004e1: PUSH1 0x44 000004e3: DUP3 000004e4: ADD 000004e5: MSTORE 000004e6: PUSH1 0x1d 000004e8: PUSH1 0xfa 000004ea: SHL 000004eb: PUSH1 0x64 000004ed: DUP3 000004ee: ADD 000004ef: MSTORE 000004f0: PUSH1 0x84 000004f2: ADD 000004f3: PUSH2 0x021b 000004f6: JUMP 000004f7: JUMPDEST 000004f8: PUSH1 0x04 000004fa: SLOAD 000004fb: DUP4 000004fc: PUSH1 0x05 000004fe: SLOAD 000004ff: PUSH2 0x0508 00000502: SWAP2 00000503: SWAP1 00000504: PUSH2 0x0d1d 00000507: JUMP 00000508: JUMPDEST 00000509: GT 0000050a: ISZERO 0000050b: PUSH2 0x0545 0000050e: JUMPI 0000050f: PUSH1 0x40 00000511: MLOAD 00000512: PUSH3 0x461bcd 00000516: PUSH1 0xe5 00000518: SHL 00000519: DUP2 0000051a: MSTORE 0000051b: PUSH1 0x20 0000051d: PUSH1 0x04 0000051f: DUP3 00000520: ADD 00000521: MSTORE 00000522: PUSH1 0x0c 00000524: PUSH1 0x24 00000526: DUP3 00000527: ADD 00000528: MSTORE 00000529: PUSH12 0x1a18181036b0bc34b6bab697 00000536: PUSH1 0xa1 00000538: SHL 00000539: PUSH1 0x44 0000053b: DUP3 0000053c: ADD 0000053d: MSTORE 0000053e: PUSH1 0x64 00000540: ADD 00000541: PUSH2 0x021b 00000544: JUMP 00000545: JUMPDEST 00000546: DUP3 00000547: PUSH1 0x00 00000549: SLOAD 0000054a: PUSH2 0x0553 0000054d: SWAP2 0000054e: SWAP1 0000054f: PUSH2 0x0d57 00000552: JUMP 00000553: JUMPDEST 00000554: CALLVALUE 00000555: LT 00000556: ISZERO 00000557: PUSH2 0x0598 0000055a: JUMPI 0000055b: PUSH1 0x40 0000055d: MLOAD 0000055e: PUSH3 0x461bcd 00000562: PUSH1 0xe5 00000564: SHL 00000565: DUP2 00000566: MSTORE 00000567: PUSH1 0x20 00000569: PUSH1 0x04 0000056b: DUP3 0000056c: ADD 0000056d: MSTORE 0000056e: PUSH1 0x13 00000570: PUSH1 0x24 00000572: DUP3 00000573: ADD 00000574: MSTORE 00000575: PUSH19 0x24b739bab33334b1b4b2b73a103b30b63ab297 00000589: PUSH1 0x69 0000058b: SHL 0000058c: PUSH1 0x44 0000058e: DUP3 0000058f: ADD 00000590: MSTORE 00000591: PUSH1 0x64 00000593: ADD 00000594: PUSH2 0x021b 00000597: JUMP 00000598: JUMPDEST 00000599: PUSH1 0x09 0000059b: SLOAD 0000059c: PUSH2 0x05b1 0000059f: SWAP1 000005a0: DUP4 000005a1: SWAP1 000005a2: DUP4 000005a3: SWAP1 000005a4: PUSH1 0x01 000005a6: PUSH1 0x01 000005a8: PUSH1 0xa0 000005aa: SHL 000005ab: SUB 000005ac: AND 000005ad: PUSH2 0x0754 000005b0: JUMP 000005b1: JUMPDEST 000005b2: PUSH2 0x05fd 000005b5: JUMPI 000005b6: PUSH1 0x40 000005b8: MLOAD 000005b9: PUSH3 0x461bcd 000005bd: PUSH1 0xe5 000005bf: SHL 000005c0: DUP2 000005c1: MSTORE 000005c2: PUSH1 0x20 000005c4: PUSH1 0x04 000005c6: DUP3 000005c7: ADD 000005c8: MSTORE 000005c9: PUSH1 0x1e 000005cb: PUSH1 0x24 000005cd: DUP3 000005ce: ADD 000005cf: MSTORE 000005d0: PUSH32 0x41646472657373206973206e6f74206f6e2050726573616c65204c6973740000 000005f1: PUSH1 0x44 000005f3: DUP3 000005f4: ADD 000005f5: MSTORE 000005f6: PUSH1 0x64 000005f8: ADD 000005f9: PUSH2 0x021b 000005fc: JUMP 000005fd: JUMPDEST 000005fe: CALLER 000005ff: PUSH1 0x00 00000601: SWAP1 00000602: DUP2 00000603: MSTORE 00000604: PUSH1 0x07 00000606: PUSH1 0x20 00000608: MSTORE 00000609: PUSH1 0x40 0000060b: DUP2 0000060c: KECCAK256 0000060d: DUP1 0000060e: SLOAD 0000060f: DUP6 00000610: SWAP3 00000611: SWAP1 00000612: PUSH2 0x061c 00000615: SWAP1 00000616: DUP5 00000617: SWAP1 00000618: PUSH2 0x0d1d 0000061b: JUMP 0000061c: JUMPDEST 0000061d: SWAP1 0000061e: SWAP2 0000061f: SSTORE 00000620: POP 00000621: PUSH1 0x00 00000623: SWAP1 00000624: POP 00000625: JUMPDEST 00000626: DUP4 00000627: DUP2 00000628: LT 00000629: ISZERO 0000062a: PUSH2 0x0681 0000062d: JUMPI 0000062e: PUSH1 0x08 00000630: DUP1 00000631: SLOAD 00000632: PUSH1 0x01 00000634: DUP2 00000635: ADD 00000636: DUP3 00000637: SSTORE 00000638: PUSH1 0x00 0000063a: SWAP2 0000063b: SWAP1 0000063c: SWAP2 0000063d: MSTORE 0000063e: PUSH32 0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3 0000065f: ADD 00000660: DUP1 00000661: SLOAD 00000662: PUSH1 0x01 00000664: PUSH1 0x01 00000666: PUSH1 0xa0 00000668: SHL 00000669: SUB 0000066a: NOT 0000066b: AND 0000066c: CALLER 0000066d: OR 0000066e: SWAP1 0000066f: SSTORE 00000670: DUP1 00000671: PUSH2 0x0679 00000674: DUP2 00000675: PUSH2 0x0d8d 00000678: JUMP 00000679: JUMPDEST 0000067a: SWAP2 0000067b: POP 0000067c: POP 0000067d: PUSH2 0x0625 00000680: JUMP 00000681: JUMPDEST 00000682: POP 00000683: DUP3 00000684: PUSH1 0x05 00000686: PUSH1 0x00 00000688: DUP3 00000689: DUP3 0000068a: SLOAD 0000068b: PUSH2 0x0694 0000068e: SWAP2 0000068f: SWAP1 00000690: PUSH2 0x0d1d 00000693: JUMP 00000694: JUMPDEST 00000695: SWAP1 00000696: SWAP2 00000697: SSTORE 00000698: POP 00000699: POP 0000069a: POP 0000069b: POP 0000069c: POP 0000069d: JUMP 0000069e: JUMPDEST 0000069f: PUSH1 0x00 000006a1: DUP1 000006a2: JUMPDEST 000006a3: PUSH1 0x0d 000006a5: SLOAD 000006a6: DUP2 000006a7: LT 000006a8: ISZERO 000006a9: PUSH2 0x0702 000006ac: JUMPI 000006ad: DUP2 000006ae: PUSH2 0x06eb 000006b1: JUMPI 000006b2: CALLER 000006b3: PUSH1 0x01 000006b5: PUSH1 0x01 000006b7: PUSH1 0xa0 000006b9: SHL 000006ba: SUB 000006bb: AND 000006bc: PUSH1 0x0d 000006be: DUP3 000006bf: DUP2 000006c0: SLOAD 000006c1: DUP2 000006c2: LT 000006c3: PUSH2 0x06ce 000006c6: JUMPI 000006c7: PUSH2 0x06ce 000006ca: PUSH2 0x0dd4 000006cd: JUMP 000006ce: JUMPDEST 000006cf: PUSH1 0x00 000006d1: SWAP2 000006d2: DUP3 000006d3: MSTORE 000006d4: PUSH1 0x20 000006d6: SWAP1 000006d7: SWAP2 000006d8: KECCAK256 000006d9: ADD 000006da: SLOAD 000006db: PUSH1 0x01 000006dd: PUSH1 0x01 000006df: PUSH1 0xa0 000006e1: SHL 000006e2: SUB 000006e3: AND 000006e4: EQ 000006e5: SWAP2 000006e6: POP 000006e7: PUSH2 0x06f0 000006ea: JUMP 000006eb: JUMPDEST 000006ec: PUSH2 0x0702 000006ef: JUMP 000006f0: JUMPDEST 000006f1: DUP1 000006f2: PUSH2 0x06fa 000006f5: DUP2 000006f6: PUSH2 0x0d8d 000006f9: JUMP 000006fa: JUMPDEST 000006fb: SWAP2 000006fc: POP 000006fd: POP 000006fe: PUSH2 0x06a2 00000701: JUMP 00000702: JUMPDEST 00000703: POP 00000704: DUP1 00000705: PUSH2 0x0751 00000708: JUMPI 00000709: PUSH1 0x40 0000070b: MLOAD 0000070c: PUSH20 0x20b2323932b9b99034b9903737ba1030b236b4b7 00000721: PUSH1 0x61 00000723: SHL 00000724: PUSH1 0x20 00000726: DUP3 00000727: ADD 00000728: MSTORE 00000729: PUSH1 0x34 0000072b: ADD 0000072c: PUSH1 0x40 0000072e: DUP1 0000072f: MLOAD 00000730: PUSH1 0x1f 00000732: NOT 00000733: DUP2 00000734: DUP5 00000735: SUB 00000736: ADD 00000737: DUP2 00000738: MSTORE 00000739: SWAP1 0000073a: DUP3 0000073b: SWAP1 0000073c: MSTORE 0000073d: PUSH3 0x461bcd 00000741: PUSH1 0xe5 00000743: SHL 00000744: DUP3 00000745: MSTORE 00000746: PUSH2 0x021b 00000749: SWAP2 0000074a: PUSH1 0x04 0000074c: ADD 0000074d: PUSH2 0x0cc8 00000750: JUMP 00000751: JUMPDEST 00000752: POP 00000753: JUMP 00000754: JUMPDEST 00000755: PUSH1 0x00 00000757: DUP1 00000758: PUSH2 0x07e7 0000075b: PUSH1 0x40 0000075d: DUP1 0000075e: MLOAD 0000075f: ADDRESS 00000760: PUSH1 0x60 00000762: SWAP1 00000763: DUP2 00000764: SHL 00000765: PUSH12 0xffffffffffffffffffffffff 00000772: NOT 00000773: SWAP1 00000774: DUP2 00000775: AND 00000776: PUSH1 0x20 00000778: DUP1 00000779: DUP6 0000077a: ADD 0000077b: SWAP2 0000077c: SWAP1 0000077d: SWAP2 0000077e: MSTORE 0000077f: CALLER 00000780: SWAP1 00000781: SWAP3 00000782: SHL 00000783: AND 00000784: PUSH1 0x34 00000786: DUP4 00000787: ADD 00000788: MSTORE 00000789: DUP3 0000078a: MLOAD 0000078b: PUSH1 0x28 0000078d: DUP2 0000078e: DUP5 0000078f: SUB 00000790: ADD 00000791: DUP2 00000792: MSTORE 00000793: PUSH1 0x48 00000795: DUP4 00000796: ADD 00000797: DUP5 00000798: MSTORE 00000799: DUP1 0000079a: MLOAD 0000079b: SWAP1 0000079c: DUP3 0000079d: ADD 0000079e: KECCAK256 0000079f: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000 000007c0: PUSH1 0x68 000007c2: DUP5 000007c3: ADD 000007c4: MSTORE 000007c5: PUSH1 0x84 000007c7: DUP1 000007c8: DUP5 000007c9: ADD 000007ca: SWAP2 000007cb: SWAP1 000007cc: SWAP2 000007cd: MSTORE 000007ce: DUP4 000007cf: MLOAD 000007d0: DUP1 000007d1: DUP5 000007d2: SUB 000007d3: SWAP1 000007d4: SWAP2 000007d5: ADD 000007d6: DUP2 000007d7: MSTORE 000007d8: PUSH1 0xa4 000007da: SWAP1 000007db: SWAP3 000007dc: ADD 000007dd: SWAP1 000007de: SWAP3 000007df: MSTORE 000007e0: DUP1 000007e1: MLOAD 000007e2: SWAP2 000007e3: ADD 000007e4: KECCAK256 000007e5: SWAP1 000007e6: JUMP 000007e7: JUMPDEST 000007e8: SWAP1 000007e9: POP 000007ea: DUP5 000007eb: DUP2 000007ec: EQ 000007ed: PUSH2 0x07fa 000007f0: JUMPI 000007f1: PUSH1 0x00 000007f3: SWAP2 000007f4: POP 000007f5: POP 000007f6: PUSH2 0x081c 000007f9: JUMP 000007fa: JUMPDEST 000007fb: PUSH1 0x01 000007fd: PUSH1 0x01 000007ff: PUSH1 0xa0 00000801: SHL 00000802: SUB 00000803: DUP4 00000804: AND 00000805: PUSH2 0x080e 00000808: DUP7 00000809: DUP7 0000080a: PUSH2 0x0823 0000080d: JUMP 0000080e: JUMPDEST 0000080f: PUSH1 0x01 00000811: PUSH1 0x01 00000813: PUSH1 0xa0 00000815: SHL 00000816: SUB 00000817: AND 00000818: EQ 00000819: SWAP2 0000081a: POP 0000081b: POP 0000081c: JUMPDEST 0000081d: SWAP4 0000081e: SWAP3 0000081f: POP 00000820: POP 00000821: POP 00000822: JUMP 00000823: JUMPDEST 00000824: PUSH1 0x00 00000826: DUP1 00000827: PUSH1 0x00 00000829: PUSH2 0x0832 0000082c: DUP6 0000082d: DUP6 0000082e: PUSH2 0x0847 00000831: JUMP 00000832: JUMPDEST 00000833: SWAP2 00000834: POP 00000835: SWAP2 00000836: POP 00000837: PUSH2 0x083f 0000083a: DUP2 0000083b: PUSH2 0x08b7 0000083e: JUMP 0000083f: JUMPDEST 00000840: POP 00000841: SWAP4 00000842: SWAP3 00000843: POP 00000844: POP 00000845: POP 00000846: JUMP 00000847: JUMPDEST 00000848: PUSH1 0x00 0000084a: DUP1 0000084b: DUP3 0000084c: MLOAD 0000084d: PUSH1 0x41 0000084f: EQ 00000850: ISZERO 00000851: PUSH2 0x087e 00000854: JUMPI 00000855: PUSH1 0x20 00000857: DUP4 00000858: ADD 00000859: MLOAD 0000085a: PUSH1 0x40 0000085c: DUP5 0000085d: ADD 0000085e: MLOAD 0000085f: PUSH1 0x60 00000861: DUP6 00000862: ADD 00000863: MLOAD 00000864: PUSH1 0x00 00000866: BYTE 00000867: PUSH2 0x0872 0000086a: DUP8 0000086b: DUP3 0000086c: DUP6 0000086d: DUP6 0000086e: PUSH2 0x0a72 00000871: JUMP 00000872: JUMPDEST 00000873: SWAP5 00000874: POP 00000875: SWAP5 00000876: POP 00000877: POP 00000878: POP 00000879: POP 0000087a: PUSH2 0x08b0 0000087d: JUMP 0000087e: JUMPDEST 0000087f: DUP3 00000880: MLOAD 00000881: PUSH1 0x40 00000883: EQ 00000884: ISZERO 00000885: PUSH2 0x08a8 00000888: JUMPI 00000889: PUSH1 0x20 0000088b: DUP4 0000088c: ADD 0000088d: MLOAD 0000088e: PUSH1 0x40 00000890: DUP5 00000891: ADD 00000892: MLOAD 00000893: PUSH2 0x089d 00000896: DUP7 00000897: DUP4 00000898: DUP4 00000899: PUSH2 0x0b5f 0000089c: JUMP 0000089d: JUMPDEST 0000089e: SWAP4 0000089f: POP 000008a0: SWAP4 000008a1: POP 000008a2: POP 000008a3: POP 000008a4: PUSH2 0x08b0 000008a7: JUMP 000008a8: JUMPDEST 000008a9: POP 000008aa: PUSH1 0x00 000008ac: SWAP1 000008ad: POP 000008ae: PUSH1 0x02 000008b0: JUMPDEST 000008b1: SWAP3 000008b2: POP 000008b3: SWAP3 000008b4: SWAP1 000008b5: POP 000008b6: JUMP 000008b7: JUMPDEST 000008b8: PUSH1 0x00 000008ba: DUP2 000008bb: PUSH1 0x04 000008bd: DUP2 000008be: GT 000008bf: ISZERO 000008c0: PUSH2 0x08cb 000008c3: JUMPI 000008c4: PUSH2 0x08cb 000008c7: PUSH2 0x0dbe 000008ca: JUMP 000008cb: JUMPDEST 000008cc: EQ 000008cd: ISZERO 000008ce: PUSH2 0x08d4 000008d1: JUMPI 000008d2: POP 000008d3: JUMP 000008d4: JUMPDEST 000008d5: PUSH1 0x01 000008d7: DUP2 000008d8: PUSH1 0x04 000008da: DUP2 000008db: GT 000008dc: ISZERO 000008dd: PUSH2 0x08e8 000008e0: JUMPI 000008e1: PUSH2 0x08e8 000008e4: PUSH2 0x0dbe 000008e7: JUMP 000008e8: JUMPDEST 000008e9: EQ 000008ea: ISZERO 000008eb: PUSH2 0x0936 000008ee: JUMPI 000008ef: PUSH1 0x40 000008f1: MLOAD 000008f2: PUSH3 0x461bcd 000008f6: PUSH1 0xe5 000008f8: SHL 000008f9: DUP2 000008fa: MSTORE 000008fb: PUSH1 0x20 000008fd: PUSH1 0x04 000008ff: DUP3 00000900: ADD 00000901: MSTORE 00000902: PUSH1 0x18 00000904: PUSH1 0x24 00000906: DUP3 00000907: ADD 00000908: MSTORE 00000909: PUSH32 0x45434453413a20696e76616c6964207369676e61747572650000000000000000 0000092a: PUSH1 0x44 0000092c: DUP3 0000092d: ADD 0000092e: MSTORE 0000092f: PUSH1 0x64 00000931: ADD 00000932: PUSH2 0x021b 00000935: JUMP 00000936: JUMPDEST 00000937: PUSH1 0x02 00000939: DUP2 0000093a: PUSH1 0x04 0000093c: DUP2 0000093d: GT 0000093e: ISZERO 0000093f: PUSH2 0x094a 00000942: JUMPI 00000943: PUSH2 0x094a 00000946: PUSH2 0x0dbe 00000949: JUMP 0000094a: JUMPDEST 0000094b: EQ 0000094c: ISZERO 0000094d: PUSH2 0x0998 00000950: JUMPI 00000951: PUSH1 0x40 00000953: MLOAD 00000954: PUSH3 0x461bcd 00000958: PUSH1 0xe5 0000095a: SHL 0000095b: DUP2 0000095c: MSTORE 0000095d: PUSH1 0x20 0000095f: PUSH1 0x04 00000961: DUP3 00000962: ADD 00000963: MSTORE 00000964: PUSH1 0x1f 00000966: PUSH1 0x24 00000968: DUP3 00000969: ADD 0000096a: MSTORE 0000096b: PUSH32 0x45434453413a20696e76616c6964207369676e6174757265206c656e67746800 0000098c: PUSH1 0x44 0000098e: DUP3 0000098f: ADD 00000990: MSTORE 00000991: PUSH1 0x64 00000993: ADD 00000994: PUSH2 0x021b 00000997: JUMP 00000998: JUMPDEST 00000999: PUSH1 0x03 0000099b: DUP2 0000099c: PUSH1 0x04 0000099e: DUP2 0000099f: GT 000009a0: ISZERO 000009a1: PUSH2 0x09ac 000009a4: JUMPI 000009a5: PUSH2 0x09ac 000009a8: PUSH2 0x0dbe 000009ab: JUMP 000009ac: JUMPDEST 000009ad: EQ 000009ae: ISZERO 000009af: PUSH2 0x0a05 000009b2: JUMPI 000009b3: PUSH1 0x40 000009b5: MLOAD 000009b6: PUSH3 0x461bcd 000009ba: PUSH1 0xe5 000009bc: SHL 000009bd: DUP2 000009be: MSTORE 000009bf: PUSH1 0x20 000009c1: PUSH1 0x04 000009c3: DUP3 000009c4: ADD 000009c5: MSTORE 000009c6: PUSH1 0x22 000009c8: PUSH1 0x24 000009ca: DUP3 000009cb: ADD 000009cc: MSTORE 000009cd: PUSH32 0x45434453413a20696e76616c6964207369676e6174757265202773272076616c 000009ee: PUSH1 0x44 000009f0: DUP3 000009f1: ADD 000009f2: MSTORE 000009f3: PUSH2 0x7565 000009f6: PUSH1 0xf0 000009f8: SHL 000009f9: PUSH1 0x64 000009fb: DUP3 000009fc: ADD 000009fd: MSTORE 000009fe: PUSH1 0x84 00000a00: ADD 00000a01: PUSH2 0x021b 00000a04: JUMP 00000a05: JUMPDEST 00000a06: PUSH1 0x04 00000a08: DUP2 00000a09: PUSH1 0x04 00000a0b: DUP2 00000a0c: GT 00000a0d: ISZERO 00000a0e: PUSH2 0x0a19 00000a11: JUMPI 00000a12: PUSH2 0x0a19 00000a15: PUSH2 0x0dbe 00000a18: JUMP 00000a19: JUMPDEST 00000a1a: EQ 00000a1b: ISZERO 00000a1c: PUSH2 0x0751 00000a1f: JUMPI 00000a20: PUSH1 0x40 00000a22: MLOAD 00000a23: PUSH3 0x461bcd 00000a27: PUSH1 0xe5 00000a29: SHL 00000a2a: DUP2 00000a2b: MSTORE 00000a2c: PUSH1 0x20 00000a2e: PUSH1 0x04 00000a30: DUP3 00000a31: ADD 00000a32: MSTORE 00000a33: PUSH1 0x22 00000a35: PUSH1 0x24 00000a37: DUP3 00000a38: ADD 00000a39: MSTORE 00000a3a: PUSH32 0x45434453413a20696e76616c6964207369676e6174757265202776272076616c 00000a5b: PUSH1 0x44 00000a5d: DUP3 00000a5e: ADD 00000a5f: MSTORE 00000a60: PUSH2 0x7565 00000a63: PUSH1 0xf0 00000a65: SHL 00000a66: PUSH1 0x64 00000a68: DUP3 00000a69: ADD 00000a6a: MSTORE 00000a6b: PUSH1 0x84 00000a6d: ADD 00000a6e: PUSH2 0x021b 00000a71: JUMP 00000a72: JUMPDEST 00000a73: PUSH1 0x00 00000a75: DUP1 00000a76: PUSH32 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0 00000a97: DUP4 00000a98: GT 00000a99: ISZERO 00000a9a: PUSH2 0x0aa9 00000a9d: JUMPI 00000a9e: POP 00000a9f: PUSH1 0x00 00000aa1: SWAP1 00000aa2: POP 00000aa3: PUSH1 0x03 00000aa5: PUSH2 0x0b56 00000aa8: JUMP 00000aa9: JUMPDEST 00000aaa: DUP5 00000aab: PUSH1 0xff 00000aad: AND 00000aae: PUSH1 0x1b 00000ab0: EQ 00000ab1: ISZERO 00000ab2: DUP1 00000ab3: ISZERO 00000ab4: PUSH2 0x0ac1 00000ab7: JUMPI 00000ab8: POP 00000ab9: DUP5 00000aba: PUSH1 0xff 00000abc: AND 00000abd: PUSH1 0x1c 00000abf: EQ 00000ac0: ISZERO 00000ac1: JUMPDEST 00000ac2: ISZERO 00000ac3: PUSH2 0x0ad2 00000ac6: JUMPI 00000ac7: POP 00000ac8: PUSH1 0x00 00000aca: SWAP1 00000acb: POP 00000acc: PUSH1 0x04 00000ace: PUSH2 0x0b56 00000ad1: JUMP 00000ad2: JUMPDEST 00000ad3: PUSH1 0x40 00000ad5: DUP1 00000ad6: MLOAD 00000ad7: PUSH1 0x00 00000ad9: DUP1 00000ada: DUP3 00000adb: MSTORE 00000adc: PUSH1 0x20 00000ade: DUP3 00000adf: ADD 00000ae0: DUP1 00000ae1: DUP5 00000ae2: MSTORE 00000ae3: DUP10 00000ae4: SWAP1 00000ae5: MSTORE 00000ae6: PUSH1 0xff 00000ae8: DUP9 00000ae9: AND 00000aea: SWAP3 00000aeb: DUP3 00000aec: ADD 00000aed: SWAP3 00000aee: SWAP1 00000aef: SWAP3 00000af0: MSTORE 00000af1: PUSH1 0x60 00000af3: DUP2 00000af4: ADD 00000af5: DUP7 00000af6: SWAP1 00000af7: MSTORE 00000af8: PUSH1 0x80 00000afa: DUP2 00000afb: ADD 00000afc: DUP6 00000afd: SWAP1 00000afe: MSTORE 00000aff: PUSH1 0x01 00000b01: SWAP1 00000b02: PUSH1 0xa0 00000b04: ADD 00000b05: PUSH1 0x20 00000b07: PUSH1 0x40 00000b09: MLOAD 00000b0a: PUSH1 0x20 00000b0c: DUP2 00000b0d: SUB 00000b0e: SWAP1 00000b0f: DUP1 00000b10: DUP5 00000b11: SUB 00000b12: SWAP1 00000b13: DUP6 00000b14: GAS 00000b15: STATICCALL 00000b16: ISZERO 00000b17: DUP1 00000b18: ISZERO 00000b19: PUSH2 0x0b26 00000b1c: JUMPI 00000b1d: RETURNDATASIZE 00000b1e: PUSH1 0x00 00000b20: DUP1 00000b21: RETURNDATACOPY 00000b22: RETURNDATASIZE 00000b23: PUSH1 0x00 00000b25: REVERT 00000b26: JUMPDEST 00000b27: POP 00000b28: POP 00000b29: PUSH1 0x40 00000b2b: MLOAD 00000b2c: PUSH1 0x1f 00000b2e: NOT 00000b2f: ADD 00000b30: MLOAD 00000b31: SWAP2 00000b32: POP 00000b33: POP 00000b34: PUSH1 0x01 00000b36: PUSH1 0x01 00000b38: PUSH1 0xa0 00000b3a: SHL 00000b3b: SUB 00000b3c: DUP2 00000b3d: AND 00000b3e: PUSH2 0x0b4f 00000b41: JUMPI 00000b42: PUSH1 0x00 00000b44: PUSH1 0x01 00000b46: SWAP3 00000b47: POP 00000b48: SWAP3 00000b49: POP 00000b4a: POP 00000b4b: PUSH2 0x0b56 00000b4e: JUMP 00000b4f: JUMPDEST 00000b50: SWAP2 00000b51: POP 00000b52: PUSH1 0x00 00000b54: SWAP1 00000b55: POP 00000b56: JUMPDEST 00000b57: SWAP5 00000b58: POP 00000b59: SWAP5 00000b5a: SWAP3 00000b5b: POP 00000b5c: POP 00000b5d: POP 00000b5e: JUMP 00000b5f: JUMPDEST 00000b60: PUSH1 0x00 00000b62: DUP1 00000b63: PUSH1 0x01 00000b65: PUSH1 0x01 00000b67: PUSH1 0xff 00000b69: SHL 00000b6a: SUB 00000b6b: DUP4 00000b6c: AND 00000b6d: PUSH1 0xff 00000b6f: DUP5 00000b70: SWAP1 00000b71: SHR 00000b72: PUSH1 0x1b 00000b74: ADD 00000b75: PUSH2 0x0b80 00000b78: DUP8 00000b79: DUP3 00000b7a: DUP9 00000b7b: DUP6 00000b7c: PUSH2 0x0a72 00000b7f: JUMP 00000b80: JUMPDEST 00000b81: SWAP4 00000b82: POP 00000b83: SWAP4 00000b84: POP 00000b85: POP 00000b86: POP 00000b87: SWAP4 00000b88: POP 00000b89: SWAP4 00000b8a: SWAP2 00000b8b: POP 00000b8c: POP 00000b8d: JUMP 00000b8e: JUMPDEST 00000b8f: PUSH1 0x00 00000b91: PUSH1 0x20 00000b93: DUP3 00000b94: DUP5 00000b95: SUB 00000b96: SLT 00000b97: ISZERO 00000b98: PUSH2 0x0ba0 00000b9b: JUMPI 00000b9c: PUSH1 0x00 00000b9e: DUP1 00000b9f: REVERT 00000ba0: JUMPDEST 00000ba1: DUP2 00000ba2: CALLDATALOAD 00000ba3: PUSH1 0x01 00000ba5: PUSH1 0x01 00000ba7: PUSH1 0xa0 00000ba9: SHL 00000baa: SUB 00000bab: DUP2 00000bac: AND 00000bad: DUP2 00000bae: EQ 00000baf: PUSH2 0x081c 00000bb2: JUMPI 00000bb3: PUSH1 0x00 00000bb5: DUP1 00000bb6: REVERT 00000bb7: JUMPDEST 00000bb8: PUSH1 0x00 00000bba: DUP1 00000bbb: PUSH1 0x00 00000bbd: PUSH1 0x60 00000bbf: DUP5 00000bc0: DUP7 00000bc1: SUB 00000bc2: SLT 00000bc3: ISZERO 00000bc4: PUSH2 0x0bcc 00000bc7: JUMPI 00000bc8: PUSH1 0x00 00000bca: DUP1 00000bcb: REVERT 00000bcc: JUMPDEST 00000bcd: DUP4 00000bce: CALLDATALOAD 00000bcf: SWAP3 00000bd0: POP 00000bd1: PUSH1 0x20 00000bd3: DUP5 00000bd4: ADD 00000bd5: CALLDATALOAD 00000bd6: SWAP2 00000bd7: POP 00000bd8: PUSH1 0x40 00000bda: DUP5 00000bdb: ADD 00000bdc: CALLDATALOAD 00000bdd: PUSH8 0xffffffffffffffff 00000be6: DUP1 00000be7: DUP3 00000be8: GT 00000be9: ISZERO 00000bea: PUSH2 0x0bf2 00000bed: JUMPI 00000bee: PUSH1 0x00 00000bf0: DUP1 00000bf1: REVERT 00000bf2: JUMPDEST 00000bf3: DUP2 00000bf4: DUP7 00000bf5: ADD 00000bf6: SWAP2 00000bf7: POP 00000bf8: DUP7 00000bf9: PUSH1 0x1f 00000bfb: DUP4 00000bfc: ADD 00000bfd: SLT 00000bfe: PUSH2 0x0c06 00000c01: JUMPI 00000c02: PUSH1 0x00 00000c04: DUP1 00000c05: REVERT 00000c06: JUMPDEST 00000c07: DUP2 00000c08: CALLDATALOAD 00000c09: DUP2 00000c0a: DUP2 00000c0b: GT 00000c0c: ISZERO 00000c0d: PUSH2 0x0c18 00000c10: JUMPI 00000c11: PUSH2 0x0c18 00000c14: PUSH2 0x0dea 00000c17: JUMP 00000c18: JUMPDEST 00000c19: PUSH1 0x40 00000c1b: MLOAD 00000c1c: PUSH1 0x1f 00000c1e: DUP3 00000c1f: ADD 00000c20: PUSH1 0x1f 00000c22: NOT 00000c23: SWAP1 00000c24: DUP2 00000c25: AND 00000c26: PUSH1 0x3f 00000c28: ADD 00000c29: AND 00000c2a: DUP2 00000c2b: ADD 00000c2c: SWAP1 00000c2d: DUP4 00000c2e: DUP3 00000c2f: GT 00000c30: DUP2 00000c31: DUP4 00000c32: LT 00000c33: OR 00000c34: ISZERO 00000c35: PUSH2 0x0c40 00000c38: JUMPI 00000c39: PUSH2 0x0c40 00000c3c: PUSH2 0x0dea 00000c3f: JUMP 00000c40: JUMPDEST 00000c41: DUP2 00000c42: PUSH1 0x40 00000c44: MSTORE 00000c45: DUP3 00000c46: DUP2 00000c47: MSTORE 00000c48: DUP10 00000c49: PUSH1 0x20 00000c4b: DUP5 00000c4c: DUP8 00000c4d: ADD 00000c4e: ADD 00000c4f: GT 00000c50: ISZERO 00000c51: PUSH2 0x0c59 00000c54: JUMPI 00000c55: PUSH1 0x00 00000c57: DUP1 00000c58: REVERT 00000c59: JUMPDEST 00000c5a: DUP3 00000c5b: PUSH1 0x20 00000c5d: DUP7 00000c5e: ADD 00000c5f: PUSH1 0x20 00000c61: DUP4 00000c62: ADD 00000c63: CALLDATACOPY 00000c64: PUSH1 0x00 00000c66: PUSH1 0x20 00000c68: DUP5 00000c69: DUP4 00000c6a: ADD 00000c6b: ADD 00000c6c: MSTORE 00000c6d: DUP1 00000c6e: SWAP6 00000c6f: POP 00000c70: POP 00000c71: POP 00000c72: POP 00000c73: POP 00000c74: POP 00000c75: SWAP3 00000c76: POP 00000c77: SWAP3 00000c78: POP 00000c79: SWAP3 00000c7a: JUMP 00000c7b: JUMPDEST 00000c7c: PUSH1 0x20 00000c7e: DUP1 00000c7f: DUP3 00000c80: MSTORE 00000c81: DUP3 00000c82: MLOAD 00000c83: DUP3 00000c84: DUP3 00000c85: ADD 00000c86: DUP2 00000c87: SWAP1 00000c88: MSTORE 00000c89: PUSH1 0x00 00000c8b: SWAP2 00000c8c: SWAP1 00000c8d: DUP5 00000c8e: DUP3 00000c8f: ADD 00000c90: SWAP1 00000c91: PUSH1 0x40 00000c93: DUP6 00000c94: ADD 00000c95: SWAP1 00000c96: DUP5 00000c97: JUMPDEST 00000c98: DUP2 00000c99: DUP2 00000c9a: LT 00000c9b: ISZERO 00000c9c: PUSH2 0x0cbc 00000c9f: JUMPI 00000ca0: DUP4 00000ca1: MLOAD 00000ca2: PUSH1 0x01 00000ca4: PUSH1 0x01 00000ca6: PUSH1 0xa0 00000ca8: SHL 00000ca9: SUB 00000caa: AND 00000cab: DUP4 00000cac: MSTORE 00000cad: SWAP3 00000cae: DUP5 00000caf: ADD 00000cb0: SWAP3 00000cb1: SWAP2 00000cb2: DUP5 00000cb3: ADD 00000cb4: SWAP2 00000cb5: PUSH1 0x01 00000cb7: ADD 00000cb8: PUSH2 0x0c97 00000cbb: JUMP 00000cbc: JUMPDEST 00000cbd: POP 00000cbe: SWAP1 00000cbf: SWAP7 00000cc0: SWAP6 00000cc1: POP 00000cc2: POP 00000cc3: POP 00000cc4: POP 00000cc5: POP 00000cc6: POP 00000cc7: JUMP 00000cc8: JUMPDEST 00000cc9: PUSH1 0x00 00000ccb: PUSH1 0x20 00000ccd: DUP1 00000cce: DUP4 00000ccf: MSTORE 00000cd0: DUP4 00000cd1: MLOAD 00000cd2: DUP1 00000cd3: DUP3 00000cd4: DUP6 00000cd5: ADD 00000cd6: MSTORE 00000cd7: PUSH1 0x00 00000cd9: JUMPDEST 00000cda: DUP2 00000cdb: DUP2 00000cdc: LT 00000cdd: ISZERO 00000cde: PUSH2 0x0cf5 00000ce1: JUMPI 00000ce2: DUP6 00000ce3: DUP2 00000ce4: ADD 00000ce5: DUP4 00000ce6: ADD 00000ce7: MLOAD 00000ce8: DUP6 00000ce9: DUP3 00000cea: ADD 00000ceb: PUSH1 0x40 00000ced: ADD 00000cee: MSTORE 00000cef: DUP3 00000cf0: ADD 00000cf1: PUSH2 0x0cd9 00000cf4: JUMP 00000cf5: JUMPDEST 00000cf6: DUP2 00000cf7: DUP2 00000cf8: GT 00000cf9: ISZERO 00000cfa: PUSH2 0x0d07 00000cfd: JUMPI 00000cfe: PUSH1 0x00 00000d00: PUSH1 0x40 00000d02: DUP4 00000d03: DUP8 00000d04: ADD 00000d05: ADD 00000d06: MSTORE 00000d07: JUMPDEST 00000d08: POP 00000d09: PUSH1 0x1f 00000d0b: ADD 00000d0c: PUSH1 0x1f 00000d0e: NOT 00000d0f: AND 00000d10: SWAP3 00000d11: SWAP1 00000d12: SWAP3 00000d13: ADD 00000d14: PUSH1 0x40 00000d16: ADD 00000d17: SWAP4 00000d18: SWAP3 00000d19: POP 00000d1a: POP 00000d1b: POP 00000d1c: JUMP 00000d1d: JUMPDEST 00000d1e: PUSH1 0x00 00000d20: DUP3 00000d21: NOT 00000d22: DUP3 00000d23: GT 00000d24: ISZERO 00000d25: PUSH2 0x0d30 00000d28: JUMPI 00000d29: PUSH2 0x0d30 00000d2c: PUSH2 0x0da8 00000d2f: JUMP 00000d30: JUMPDEST 00000d31: POP 00000d32: ADD 00000d33: SWAP1 00000d34: JUMP 00000d35: JUMPDEST 00000d36: PUSH1 0x00 00000d38: DUP3 00000d39: PUSH2 0x0d52 00000d3c: JUMPI 00000d3d: PUSH4 0x4e487b71 00000d42: PUSH1 0xe0 00000d44: SHL 00000d45: PUSH1 0x00 00000d47: MSTORE 00000d48: PUSH1 0x12 00000d4a: PUSH1 0x04 00000d4c: MSTORE 00000d4d: PUSH1 0x24 00000d4f: PUSH1 0x00 00000d51: REVERT 00000d52: JUMPDEST 00000d53: POP 00000d54: DIV 00000d55: SWAP1 00000d56: JUMP 00000d57: JUMPDEST 00000d58: PUSH1 0x00 00000d5a: DUP2 00000d5b: PUSH1 0x00 00000d5d: NOT 00000d5e: DIV 00000d5f: DUP4 00000d60: GT 00000d61: DUP3 00000d62: ISZERO 00000d63: ISZERO 00000d64: AND 00000d65: ISZERO 00000d66: PUSH2 0x0d71 00000d69: JUMPI 00000d6a: PUSH2 0x0d71 00000d6d: PUSH2 0x0da8 00000d70: JUMP 00000d71: JUMPDEST 00000d72: POP 00000d73: MUL 00000d74: SWAP1 00000d75: JUMP 00000d76: JUMPDEST 00000d77: PUSH1 0x00 00000d79: DUP3 00000d7a: DUP3 00000d7b: LT 00000d7c: ISZERO 00000d7d: PUSH2 0x0d88 00000d80: JUMPI 00000d81: PUSH2 0x0d88 00000d84: PUSH2 0x0da8 00000d87: JUMP 00000d88: JUMPDEST 00000d89: POP 00000d8a: SUB 00000d8b: SWAP1 00000d8c: JUMP 00000d8d: JUMPDEST 00000d8e: PUSH1 0x00 00000d90: PUSH1 0x00 00000d92: NOT 00000d93: DUP3 00000d94: EQ 00000d95: ISZERO 00000d96: PUSH2 0x0da1 00000d99: JUMPI 00000d9a: PUSH2 0x0da1 00000d9d: PUSH2 0x0da8 00000da0: JUMP 00000da1: JUMPDEST 00000da2: POP 00000da3: PUSH1 0x01 00000da5: ADD 00000da6: SWAP1 00000da7: JUMP 00000da8: JUMPDEST 00000da9: PUSH4 0x4e487b71 00000dae: PUSH1 0xe0 00000db0: SHL 00000db1: PUSH1 0x00 00000db3: MSTORE 00000db4: PUSH1 0x11 00000db6: PUSH1 0x04 00000db8: MSTORE 00000db9: PUSH1 0x24 00000dbb: PUSH1 0x00 00000dbd: REVERT 00000dbe: JUMPDEST 00000dbf: PUSH4 0x4e487b71 00000dc4: PUSH1 0xe0 00000dc6: SHL 00000dc7: PUSH1 0x00 00000dc9: MSTORE 00000dca: PUSH1 0x21 00000dcc: PUSH1 0x04 00000dce: MSTORE 00000dcf: PUSH1 0x24 00000dd1: PUSH1 0x00 00000dd3: REVERT 00000dd4: JUMPDEST 00000dd5: PUSH4 0x4e487b71 00000dda: PUSH1 0xe0 00000ddc: SHL 00000ddd: PUSH1 0x00 00000ddf: MSTORE 00000de0: PUSH1 0x32 00000de2: PUSH1 0x04 00000de4: MSTORE 00000de5: PUSH1 0x24 00000de7: PUSH1 0x00 00000de9: REVERT 00000dea: JUMPDEST 00000deb: PUSH4 0x4e487b71 00000df0: PUSH1 0xe0 00000df2: SHL 00000df3: PUSH1 0x00 00000df5: MSTORE 00000df6: PUSH1 0x41 00000df8: PUSH1 0x04 00000dfa: MSTORE 00000dfb: PUSH1 0x24 00000dfd: PUSH1 0x00 00000dff: REVERT 00000e00: INVALID 00000e01: LOG2 00000e02: PUSH5 0x6970667358 00000e08: UNKNOWN(0x22) 00000e09: SLT 00000e0a: KECCAK256 00000e0b: UNKNOWN(0xD8) 00000e0c: UNKNOWN(0xDA) 00000e0d: PUSH25 0xae7d5a0ecf23dbe98329a096b3ce1dfa77bbde60eb12bfabd1 00000e27: UNKNOWN(0x0F) 00000e28: LOG2 00000e29: PUSH6 0x0664736f6c63 00000e30: NUMBER 00000e31: STOP 00000e32: ADDMOD 00000e33: SMOD 00000e34: STOP 00000e35: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x950ba3a33bc3ae794bef9f25db2acebb2967248b92ea8445c02f7870d63597da
call_targets:
0xe617f1722955706bc487257439d9d61fd3a991a4
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x950ba3a33bc3ae794bef9f25db2acebb2967248b92ea8445c02f7870d63597da",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xe617f1722955706bc487257439d9d61fd3a991a4"
],
"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": "0x81282a36",
"selector": "0x81282a36",
"calldata_variants": [
"0x81282a36",
"0x81282a360000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8d859f3e",
"selector": "0x8d859f3e",
"calldata_variants": [
"0x8d859f3e",
"0x8d859f3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x97e1b4ee",
"selector": "0x97e1b4ee",
"calldata_variants": [
"0x97e1b4ee",
"0x97e1b4ee0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaffe39c1",
"selector": "0xaffe39c1",
"calldata_variants": [
"0xaffe39c1",
"0xaffe39c10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe00cd493",
"selector": "0xe00cd493",
"calldata_variants": [
"0xe00cd493",
"0xe00cd4930000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa4bd2c7",
"selector": "0xfa4bd2c7",
"calldata_variants": [
"0xfa4bd2c7",
"0xfa4bd2c70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x32cb6b0c",
"selector": "0x32cb6b0c",
"calldata_variants": [
"0x32cb6b0c",
"0x32cb6b0c0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 648,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 744,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 883,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 3,
"guards_detected": [],
"untrusted_call_count": 3
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x950ba3a33bc3ae794bef9f25db2acebb2967248b92ea8445c02f7870d63597da
call_targets:
0xe617f1722955706bc487257439d9d61fd3a991a4
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x950ba3a33bc3ae794bef9f25db2acebb2967248b92ea8445c02f7870d63597da",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xe617f1722955706bc487257439d9d61fd3a991a4"
],
"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": "0x81282a36",
"selector": "0x81282a36",
"calldata_variants": [
"0x81282a36",
"0x81282a360000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8d859f3e",
"selector": "0x8d859f3e",
"calldata_variants": [
"0x8d859f3e",
"0x8d859f3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x97e1b4ee",
"selector": "0x97e1b4ee",
"calldata_variants": [
"0x97e1b4ee",
"0x97e1b4ee0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaffe39c1",
"selector": "0xaffe39c1",
"calldata_variants": [
"0xaffe39c1",
"0xaffe39c10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe00cd493",
"selector": "0xe00cd493",
"calldata_variants": [
"0xe00cd493",
"0xe00cd4930000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa4bd2c7",
"selector": "0xfa4bd2c7",
"calldata_variants": [
"0xfa4bd2c7",
"0xfa4bd2c70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x32cb6b0c",
"selector": "0x32cb6b0c",
"calldata_variants": [
"0x32cb6b0c",
"0x32cb6b0c0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 648,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 744,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 883,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 3,
"guards_detected": []
}
|
| high | math | codex | LAST_SUPPLY is reset instead of incremented, enabling repeated withdrawals of the same tranche | 85 | no | — |
viewevidence_json{
"evidence": "`uint paymentStage = uint ((SUPPLY - LAST_SUPPLY)/ 100);` followed by `LAST_SUPPLY = paymentStage * 100;` resets the counter instead of advancing it.",
"locations": [
"contracts/WORE.sol:461",
"contracts/WORE.sol:471"
],
"recommendation": "Track cumulative withdrawals by incrementing LAST_SUPPLY (e.g., LAST_SUPPLY += paymentStage * 100) and require paymentStage > 0. Update LAST_SUPPLY before external calls and consider a reentrancy guard to prevent reentry during payouts.",
"exploit_scenario": "After some sales, an admin calls withdraw(). If SUPPLY=150 and LAST_SUPPLY=0, paymentStage=1 and 100 tokens worth of proceeds are paid out, then LAST_SUPPLY is set to 100. A subsequent withdraw() with SUPPLY still 150 yields paymentStage=0 and resets LAST_SUPPLY to 0; the next call again computes paymentStage=1, paying out the same tranche repeatedly. This allows draining contract ETH to the configured payout addresses without additional sales."
}
|
| high | other | slither | WOREPrivateSale.withdraw() (contracts/Contract.sol#435-456) sends eth to arbitrary user | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "arbitrary-send-eth",
"elements": [
{
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 17157,
"length": 629,
"ending_column": 58,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 2,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "WOREPrivateSale",
"type": "contract",
"source_mapping": {
"lines": [
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 13542,
"length": 4246,
"ending_column": 60,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw()"
}
},
{
"name": "(art,None) = address(ARTaddress).call{value: ARTamount}()",
"type": "node",
"source_mapping": {
"lines": [
452
],
"start": 17523,
"length": 61,
"ending_column": 73,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 12,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 17157,
"length": 629,
"ending_column": 58,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 2,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "WOREPrivateSale",
"type": "contract",
"source_mapping": {
"lines": [
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 13542,
"length": 4246,
"ending_column": 60,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw()"
}
}
}
},
{
"name": "(project,None) = address(projectAddress).call{value: (PRICE * paymentStage * 100) - (ARTamount + QDamount)}()",
"type": "node",
"source_mapping": {
"lines": [
454,
455
],
"start": 17608,
"length": 113,
"ending_column": 64,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 1,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 17157,
"length": 629,
"ending_column": 58,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 2,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "WOREPrivateSale",
"type": "contract",
"source_mapping": {
"lines": [
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 13542,
"length": 4246,
"ending_column": 60,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw()"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "withdraw",
"type": "function",
"lines": [
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
]
},
{
"file": "contracts/Contract.sol",
"name": "(art,None) = address(ARTaddress).call{value: ARTamount}()",
"type": "node",
"lines": [
452
]
},
{
"file": "contracts/Contract.sol",
"name": "(project,None) = address(projectAddress).call{value: (PRICE * paymentStage * 100) - (ARTamount + QDamount)}()",
"type": "node",
"lines": [
454,
455
]
}
],
"description": "WOREPrivateSale.withdraw() (contracts/Contract.sol#435-456) sends eth to arbitrary user\n\tDangerous calls:\n\t- (art,None) = address(ARTaddress).call{value: ARTamount}() (contracts/Contract.sol#452)\n\t- (project,None) = address(projectAddress).call{value: (PRICE * paymentStage * 100) - (ARTamount + QDamount)}() (contracts/Contract.sol#454-455)"
}
|
| high | reentrancy | slither | Reentrancy in WOREPrivateSale.withdraw() (contracts/Contract.sol#435-456): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 17157,
"length": 629,
"ending_column": 58,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 2,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "WOREPrivateSale",
"type": "contract",
"source_mapping": {
"lines": [
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 13542,
"length": 4246,
"ending_column": 60,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw()"
}
},
{
"name": "(qd,None) = address(QDaddress).call{value: QDamount}()",
"type": "node",
"source_mapping": {
"lines": [
446,
447,
448,
449,
450
],
"start": 17442,
"length": 58,
"ending_column": 12,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 24,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 17157,
"length": 629,
"ending_column": 58,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 2,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "WOREPrivateSale",
"type": "contract",
"source_mapping": {
"lines": [
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 13542,
"length": 4246,
"ending_column": 60,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw()"
}
}
}
},
{
"name": "(art,None) = address(ARTaddress).call{value: ARTamount}()",
"type": "node",
"source_mapping": {
"lines": [
452
],
"start": 17523,
"length": 61,
"ending_column": 73,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 12,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 17157,
"length": 629,
"ending_column": 58,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 2,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "WOREPrivateSale",
"type": "contract",
"source_mapping": {
"lines": [
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 13542,
"length": 4246,
"ending_column": 60,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw()"
}
}
}
},
{
"name": "(project,None) = address(projectAddress).call{value: (PRICE * paymentStage * 100) - (ARTamount + QDamount)}()",
"type": "node",
"source_mapping": {
"lines": [
454,
455
],
"start": 17608,
"length": 113,
"ending_column": 64,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 1,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 17157,
"length": 629,
"ending_column": 58,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 2,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "WOREPrivateSale",
"type": "contract",
"source_mapping": {
"lines": [
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 13542,
"length": 4246,
"ending_column": 60,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw()"
}
}
}
},
{
"name": "LAST_SUPPLY = paymentStage * 100",
"type": "node",
"source_mapping": {
"lines": [
456
],
"start": 17749,
"length": 32,
"ending_column": 53,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 21,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"variable_name": "LAST_SUPPLY",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 17157,
"length": 629,
"ending_column": 58,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 2,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "WOREPrivateSale",
"type": "contract",
"source_mapping": {
"lines": [
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
],
"start": 13542,
"length": 4246,
"ending_column": 60,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-o29aulba/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw()"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "withdraw",
"type": "function",
"lines": [
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456
]
},
{
"file": "contracts/Contract.sol",
"name": "(qd,None) = address(QDaddress).call{value: QDamount}()",
"type": "node",
"lines": [
446,
447,
448,
449,
450
]
},
{
"file": "contracts/Contract.sol",
"name": "(art,None) = address(ARTaddress).call{value: ARTamount}()",
"type": "node",
"lines": [
452
]
},
{
"file": "contracts/Contract.sol",
"name": "(project,None) = address(projectAddress).call{value: (PRICE * paymentStage * 100) - (ARTamount + QDamount)}()",
"type": "node",
"lines": [
454,
455
]
},
{
"file": "contracts/Contract.sol",
"name": "LAST_SUPPLY = paymentStage * 100",
"type": "node",
"lines": [
456
]
}
],
"description": "Reentrancy in WOREPrivateSale.withdraw() (contracts/Contract.sol#435-456):\n\tExternal calls:\n\t- (qd,None) = address(QDaddress).call{value: QDamount}() (contracts/Contract.sol#446-450)\n\t- (art,None) = address(ARTaddress).call{value: ARTamount}() (contracts/Contract.sol#452)\n\t- (project,None) = address(projectAddress).call{value: (PRICE * paymentStage * 100) - (ARTamount + QDamount)}() (contracts/Contract.sol#454-455)\n\tState variables written after the call(s):\n\t- LAST_SUPPLY = paymentStage * 100 (contracts/Contract.sol#456)\n\tWOREPrivateSale.LAST_SUPPLY (contracts/Contract.sol#316) can be used in cross function reentrancies:\n\t- WOREPrivateSale.LAST_SUPPLY (contracts/Contract.sol#316)\n\t- WOREPrivateSale.withdraw() (contracts/Contract.sol#435-456)"
}
|