diff options
70 files changed, 10656 insertions, 10432 deletions
diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 34f74b601..257c91025 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -8,11 +8,13 @@ ## Types of changes -<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> +<!--- What types of changes does your code introduce? Uncomment all the bullets that apply: --> -* [ ] Bug fix (non-breaking change which fixes an issue) -* [ ] New feature (non-breaking change which adds functionality) -* [ ] Breaking change (fix or feature that would cause existing functionality to change) +<!-- * Bug fix (non-breaking change which fixes an issue) --> + +<!-- * New feature (non-breaking change which adds functionality) --> + +<!-- * Breaking change (fix or feature that would cause existing functionality to change) --> ## Checklist: diff --git a/packages/0x.js/package.json b/packages/0x.js/package.json index d77f31a69..966770cf0 100644 --- a/packages/0x.js/package.json +++ b/packages/0x.js/package.json @@ -105,6 +105,7 @@ "@0xproject/contract-wrappers": "^0.1.0", "@0xproject/order-utils": "^1.0.0", "@0xproject/sol-compiler": "^0.5.3", + "@0xproject/subproviders": "^0.10.5", "@0xproject/types": "^1.0.0", "@0xproject/typescript-typings": "^0.4.2", "@0xproject/utils": "^0.7.2", diff --git a/packages/0x.js/src/artifacts/ZRXToken.json b/packages/0x.js/src/artifacts/ZRXToken.json index 265560c77..0ce91c1c1 100644 --- a/packages/0x.js/src/artifacts/ZRXToken.json +++ b/packages/0x.js/src/artifacts/ZRXToken.json @@ -1,10058 +1,10031 @@ { - "schemaVersion": "2.0.0", - "contractName": "ZRXToken", - "compilerOutput": { - "abi": [ - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_from", - "type": "address" - }, - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - }, - { - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "inputs": [], - "payable": false, - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_from", - "type": "address" - }, - { - "indexed": true, - "name": "_to", - "type": "address" - }, - { - "indexed": false, - "name": "_value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_owner", - "type": "address" - }, - { - "indexed": true, - "name": "_spender", - "type": "address" - }, - { - "indexed": false, - "name": "_value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "devdoc": { - "methods": { - "transferFrom(address,address,uint256)": { - "details": - "ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance.", - "params": { - "_from": "Address to transfer from.", - "_to": "Address to transfer to.", - "_value": "Amount to transfer." - }, - "return": "Success of transfer." - } - } - }, - "evm": { - "assembly": - " /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":795:1242 contract ZRXToken is UnlimitedAllowanceToken {... */\n mstore(0x40, 0x60)\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":958:964 10**27 */\n 0x33b2e3c9fd0803ce8000000\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":932:964 uint public totalSupply = 10**27 */\n 0x3\n sstore\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1150:1240 function ZRXToken()... */\n jumpi(tag_1, iszero(callvalue))\n invalid\ntag_1:\ntag_2:\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1222:1233 totalSupply */\n sload(0x3)\n sub(exp(0x2, 0xa0), 0x1)\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1208:1218 msg.sender */\n caller\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1199:1219 balances[msg.sender] */\n and\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1199:1207 balances */\n 0x0\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1199:1219 balances[msg.sender] */\n swap1\n dup2\n mstore\n 0x20\n dup2\n swap1\n mstore\n 0x40\n swap1\n sha3\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1199:1233 balances[msg.sender] = totalSupply */\n sstore\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1150:1240 function ZRXToken()... */\ntag_3:\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":795:1242 contract ZRXToken is UnlimitedAllowanceToken {... */\ntag_4:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x0\n codecopy\n 0x0\n return\nstop\n\nsub_0: assembly {\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":795:1242 contract ZRXToken is UnlimitedAllowanceToken {... */\n mstore(0x40, 0x60)\n jumpi(tag_1, iszero(calldatasize))\n and(div(calldataload(0x0), 0x100000000000000000000000000000000000000000000000000000000), 0xffffffff)\n 0x6fdde03\n dup2\n eq\n tag_2\n jumpi\n dup1\n 0x95ea7b3\n eq\n tag_3\n jumpi\n dup1\n 0x18160ddd\n eq\n tag_4\n jumpi\n dup1\n 0x23b872dd\n eq\n tag_5\n jumpi\n dup1\n 0x313ce567\n eq\n tag_6\n jumpi\n dup1\n 0x70a08231\n eq\n tag_7\n jumpi\n dup1\n 0x95d89b41\n eq\n tag_8\n jumpi\n dup1\n 0xa9059cbb\n eq\n tag_9\n jumpi\n dup1\n 0xdd62ed3e\n eq\n tag_10\n jumpi\n tag_1:\n invalid\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1009:1058 string constant public name = \"0x Protocol Token\" */\n tag_2:\n jumpi(tag_11, iszero(callvalue))\n invalid\n tag_11:\n tag_12\n jump(tag_13)\n tag_12:\n 0x40\n dup1\n mload\n 0x20\n dup1\n dup3\n mstore\n dup4\n mload\n dup2\n dup4\n add\n mstore\n dup4\n mload\n swap2\n swap3\n dup4\n swap3\n swap1\n dup4\n add\n swap2\n dup6\n add\n swap1\n dup1\n dup4\n dup4\n /* \"--CODEGEN--\":18:20 */\n dup3\n iszero\n /* \"--CODEGEN--\":13:16 */\n tag_14\n /* \"--CODEGEN--\":7:12 */\n jumpi\n /* \"--CODEGEN--\":32:37 */\n tag_15:\n /* \"--CODEGEN--\":59:62 */\n dup1\n /* \"--CODEGEN--\":53:58 */\n mload\n /* \"--CODEGEN--\":48:51 */\n dup3\n /* \"--CODEGEN--\":41:47 */\n mstore\n /* \"--CODEGEN--\":93:95 */\n 0x20\n /* \"--CODEGEN--\":88:91 */\n dup4\n /* \"--CODEGEN--\":85:87 */\n gt\n /* \"--CODEGEN--\":78:84 */\n iszero\n /* \"--CODEGEN--\":73:76 */\n tag_14\n /* \"--CODEGEN--\":67:72 */\n jumpi\n /* \"--CODEGEN--\":152:155 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n swap1\n swap3\n add\n swap2\n /* \"--CODEGEN--\":117:119 */\n 0x20\n /* \"--CODEGEN--\":108:111 */\n swap2\n dup3\n add\n swap2\n /* \"--CODEGEN--\":130:133 */\n add\n /* \"--CODEGEN--\":172:177 */\n tag_15\n /* \"--CODEGEN--\":167:171 */\n jump\n /* \"--CODEGEN--\":181:184 */\n tag_14:\n /* \"--CODEGEN--\":3:189 */\n pop\n pop\n pop\n swap1\n pop\n swap1\n dup2\n add\n swap1\n 0x1f\n and\n dup1\n iszero\n tag_16\n jumpi\n dup1\n dup3\n sub\n dup1\n mload\n 0x1\n dup4\n 0x20\n sub\n 0x100\n exp\n sub\n not\n and\n dup2\n mstore\n 0x20\n add\n swap2\n pop\n tag_16:\n pop\n swap3\n pop\n pop\n pop\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1087:1274 */\n tag_3:\n jumpi(tag_17, iszero(callvalue))\n invalid\n tag_17:\n tag_18\n and(calldataload(0x4), 0xffffffffffffffffffffffffffffffffffffffff)\n calldataload(0x24)\n jump(tag_19)\n tag_18:\n 0x40\n dup1\n mload\n swap2\n iszero\n iszero\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":932:964 uint public totalSupply = 10**27 */\n tag_4:\n jumpi(tag_20, iszero(callvalue))\n invalid\n tag_20:\n tag_21\n jump(tag_22)\n tag_21:\n 0x40\n dup1\n mload\n swap2\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1066:1675 */\n tag_5:\n jumpi(tag_23, iszero(callvalue))\n invalid\n tag_23:\n tag_18\n 0xffffffffffffffffffffffffffffffffffffffff\n calldataload(0x4)\n dup2\n and\n swap1\n calldataload(0x24)\n and\n calldataload(0x44)\n jump(tag_25)\n tag_24:\n 0x40\n dup1\n mload\n swap2\n iszero\n iszero\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":891:926 uint8 constant public decimals = 18 */\n tag_6:\n jumpi(tag_26, iszero(callvalue))\n invalid\n tag_26:\n tag_27\n jump(tag_28)\n tag_27:\n 0x40\n dup1\n mload\n 0xff\n swap1\n swap3\n and\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":982:1081 */\n tag_7:\n jumpi(tag_29, iszero(callvalue))\n invalid\n tag_29:\n tag_21\n and(calldataload(0x4), 0xffffffffffffffffffffffffffffffffffffffff)\n jump(tag_31)\n tag_30:\n 0x40\n dup1\n mload\n swap2\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1064:1101 string constant public symbol = \"ZRX\" */\n tag_8:\n jumpi(tag_32, iszero(callvalue))\n invalid\n tag_32:\n tag_12\n jump(tag_34)\n tag_33:\n 0x40\n dup1\n mload\n 0x20\n dup1\n dup3\n mstore\n dup4\n mload\n dup2\n dup4\n add\n mstore\n dup4\n mload\n swap2\n swap3\n dup4\n swap3\n swap1\n dup4\n add\n swap2\n dup6\n add\n swap1\n dup1\n dup4\n dup4\n /* \"--CODEGEN--\":18:20 */\n dup3\n iszero\n /* \"--CODEGEN--\":13:16 */\n tag_14\n /* \"--CODEGEN--\":7:12 */\n jumpi\n /* \"--CODEGEN--\":32:37 */\n tag_36:\n /* \"--CODEGEN--\":59:62 */\n dup1\n /* \"--CODEGEN--\":53:58 */\n mload\n /* \"--CODEGEN--\":48:51 */\n dup3\n /* \"--CODEGEN--\":41:47 */\n mstore\n /* \"--CODEGEN--\":93:95 */\n 0x20\n /* \"--CODEGEN--\":88:91 */\n dup4\n /* \"--CODEGEN--\":85:87 */\n gt\n /* \"--CODEGEN--\":78:84 */\n iszero\n /* \"--CODEGEN--\":73:76 */\n tag_14\n /* \"--CODEGEN--\":67:72 */\n jumpi\n /* \"--CODEGEN--\":152:155 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n swap1\n swap3\n add\n swap2\n /* \"--CODEGEN--\":117:119 */\n 0x20\n /* \"--CODEGEN--\":108:111 */\n swap2\n dup3\n add\n swap2\n /* \"--CODEGEN--\":130:133 */\n add\n /* \"--CODEGEN--\":172:177 */\n tag_15\n /* \"--CODEGEN--\":167:171 */\n jump\n /* \"--CODEGEN--\":181:184 */\n tag_35:\n /* \"--CODEGEN--\":3:189 */\n pop\n pop\n pop\n swap1\n pop\n swap1\n dup2\n add\n swap1\n 0x1f\n and\n dup1\n iszero\n tag_16\n jumpi\n dup1\n dup3\n sub\n dup1\n mload\n 0x1\n dup4\n 0x20\n sub\n 0x100\n exp\n sub\n not\n and\n dup2\n mstore\n 0x20\n add\n swap2\n pop\n tag_37:\n pop\n swap3\n pop\n pop\n pop\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":125:535 */\n tag_9:\n jumpi(tag_38, iszero(callvalue))\n invalid\n tag_38:\n tag_18\n and(calldataload(0x4), 0xffffffffffffffffffffffffffffffffffffffff)\n calldataload(0x24)\n jump(tag_40)\n tag_39:\n 0x40\n dup1\n mload\n swap2\n iszero\n iszero\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1280:1406 */\n tag_10:\n jumpi(tag_41, iszero(callvalue))\n invalid\n tag_41:\n tag_21\n 0xffffffffffffffffffffffffffffffffffffffff\n calldataload(0x4)\n dup2\n and\n swap1\n calldataload(0x24)\n and\n jump(tag_43)\n tag_42:\n 0x40\n dup1\n mload\n swap2\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1009:1058 string constant public name = \"0x Protocol Token\" */\n tag_13:\n 0x40\n dup1\n mload\n dup1\n dup3\n add\n swap1\n swap2\n mstore\n 0x11\n dup2\n mstore\n 0x30782050726f746f636f6c20546f6b656e000000000000000000000000000000\n 0x20\n dup3\n add\n mstore\n dup2\n jump\t// out\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1087:1274 */\n tag_19:\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1179 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1168:1178 */\n caller\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1179 */\n dup2\n and\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1144:1148 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1179 */\n dup2\n dup2\n mstore\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1167 */\n 0x1\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1179 */\n 0x20\n swap1\n dup2\n mstore\n 0x40\n dup1\n dup4\n sha3\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1189 */\n swap5\n dup8\n and\n dup1\n dup5\n mstore\n swap5\n dup3\n mstore\n dup1\n dup4\n sha3\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1198 */\n dup7\n swap1\n sstore\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1208:1246 */\n dup1\n mload\n dup7\n dup2\n mstore\n swap1\n mload\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1144:1148 */\n swap3\n swap5\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1189 */\n swap4\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1179 */\n swap3\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1208:1246 */\n 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\n swap3\n swap2\n dup2\n swap1\n sub\n swap1\n swap2\n add\n swap1\n log3\n pop\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1263:1267 */\n 0x1\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1087:1274 */\n tag_44:\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":932:964 uint public totalSupply = 10**27 */\n tag_22:\n sload(0x3)\n dup2\n jump\t// out\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1066:1675 */\n tag_25:\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1198:1212 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup1\n dup5\n and\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1161:1165 */\n 0x0\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1198:1212 */\n dup2\n dup2\n mstore\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1198:1205 */\n 0x1\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1198:1212 */\n 0x20\n swap1\n dup2\n mstore\n 0x40\n dup1\n dup4\n sha3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1213:1223 */\n caller\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1198:1224 */\n swap1\n swap6\n and\n dup4\n mstore\n swap4\n dup2\n mstore\n dup4\n dup3\n sha3\n sload\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1238:1253 */\n swap3\n dup3\n mstore\n dup2\n swap1\n mstore\n swap2\n dup3\n sha3\n sload\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1238:1263 */\n dup4\n swap1\n lt\n dup1\n iszero\n swap1\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1238:1298 */\n tag_46\n jumpi\n pop\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1292:1298 */\n dup3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1279:1288 */\n dup2\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1279:1298 */\n lt\n iszero\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1238:1298 */\n tag_46:\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1238:1353 */\n dup1\n iszero\n tag_47\n jumpi\n pop\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1340:1353 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup5\n and\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1340:1348 */\n 0x0\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1340:1353 */\n swap1\n dup2\n mstore\n 0x20\n dup2\n swap1\n mstore\n 0x40\n swap1\n sha3\n sload\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1314:1336 */\n dup4\n dup2\n add\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1314:1353 */\n lt\n iszero\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1238:1353 */\n tag_47:\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1234:1669 */\n iszero\n tag_48\n jumpi\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1378:1391 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup1\n dup6\n and\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1378:1386 */\n 0x0\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1378:1391 */\n swap1\n dup2\n mstore\n 0x20\n dup2\n swap1\n mstore\n 0x40\n dup1\n dup3\n sha3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1378:1401 */\n dup1\n sload\n dup8\n add\n swap1\n sstore\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1415:1430 */\n swap2\n dup8\n and\n dup2\n mstore\n sha3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1415:1440 */\n dup1\n sload\n dup5\n swap1\n sub\n swap1\n sstore\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":768:778 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1458:1478 */\n dup2\n lt\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1454:1549 */\n iszero\n tag_49\n jumpi\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1498:1512 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup1\n dup7\n and\n 0x0\n swap1\n dup2\n mstore\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1498:1505 */\n 0x1\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1498:1512 */\n 0x20\n swap1\n dup2\n mstore\n 0x40\n dup1\n dup4\n sha3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1513:1523 */\n caller\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1498:1524 */\n swap1\n swap5\n and\n dup4\n mstore\n swap3\n swap1\n mstore\n sha3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1498:1534 */\n dup1\n sload\n dup5\n swap1\n sub\n swap1\n sstore\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1454:1549 */\n tag_49:\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1578:1581 */\n dup4\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1562:1590 */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1571:1576 */\n dup6\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1562:1590 */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1583:1589 */\n dup6\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1562:1590 */\n mload(0x40)\n dup1\n dup3\n dup2\n mstore\n 0x20\n add\n swap2\n pop\n pop\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1611:1615 */\n 0x1\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1604:1615 */\n swap2\n pop\n jump(tag_50)\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1234:1669 */\n tag_48:\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1653:1658 */\n 0x0\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1646:1658 */\n swap2\n pop\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1234:1669 */\n tag_50:\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1066:1675 */\n tag_45:\n pop\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":891:926 uint8 constant public decimals = 18 */\n tag_28:\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":924:926 18 */\n 0x12\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":891:926 uint8 constant public decimals = 18 */\n dup2\n jump\t// out\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":982:1081 */\n tag_31:\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1058:1074 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup2\n and\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1035:1039 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1058:1074 */\n swap1\n dup2\n mstore\n 0x20\n dup2\n swap1\n mstore\n 0x40\n swap1\n sha3\n sload\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":982:1081 */\n tag_51:\n swap2\n swap1\n pop\n jump\t// out\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1064:1101 string constant public symbol = \"ZRX\" */\n tag_34:\n 0x40\n dup1\n mload\n dup1\n dup3\n add\n swap1\n swap2\n mstore\n 0x3\n dup2\n mstore\n 0x5a52580000000000000000000000000000000000000000000000000000000000\n 0x20\n dup3\n add\n mstore\n dup2\n jump\t// out\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":125:535 */\n tag_40:\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":267:287 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":276:286 */\n caller\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":267:287 */\n and\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":178:182 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":267:287 */\n swap1\n dup2\n mstore\n 0x20\n dup2\n swap1\n mstore\n 0x40\n dup2\n sha3\n sload\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":267:297 */\n dup3\n swap1\n lt\n dup1\n iszero\n swap1\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":267:340 */\n tag_53\n jumpi\n pop\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":327:340 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup4\n and\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":327:335 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":327:340 */\n swap1\n dup2\n mstore\n 0x20\n dup2\n swap1\n mstore\n 0x40\n swap1\n sha3\n sload\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":301:323 */\n dup3\n dup2\n add\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":301:340 */\n lt\n iszero\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":267:340 */\n tag_53:\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":263:529 */\n iszero\n tag_54\n jumpi\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":356:376 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":365:375 */\n caller\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":356:376 */\n dup2\n and\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":356:364 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":356:376 */\n dup2\n dup2\n mstore\n 0x20\n dup2\n dup2\n mstore\n 0x40\n dup1\n dup4\n sha3\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":356:386 */\n dup1\n sload\n dup9\n swap1\n sub\n swap1\n sstore\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":400:413 */\n swap4\n dup8\n and\n dup1\n dup4\n mstore\n swap2\n dup5\n swap1\n sha3\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":400:423 */\n dup1\n sload\n dup8\n add\n swap1\n sstore\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":437:470 */\n dup4\n mload\n dup7\n dup2\n mstore\n swap4\n mload\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":400:413 */\n swap2\n swap4\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":437:470 */\n 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n swap3\n swap1\n dup2\n swap1\n sub\n swap1\n swap2\n add\n swap1\n log3\n pop\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":491:495 */\n 0x1\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":484:495 */\n jump(tag_44)\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":263:529 */\n tag_54:\n pop\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":521:526 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":514:526 */\n jump(tag_44)\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":263:529 */\n tag_55:\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":125:535 */\n tag_52:\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1280:1406 */\n tag_43:\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1374:1389 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup1\n dup4\n and\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1351:1355 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1374:1389 */\n swap1\n dup2\n mstore\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1374:1381 */\n 0x1\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1374:1389 */\n 0x20\n swap1\n dup2\n mstore\n 0x40\n dup1\n dup4\n sha3\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1374:1399 */\n swap4\n dup6\n and\n dup4\n mstore\n swap3\n swap1\n mstore\n sha3\n sload\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1280:1406 */\n tag_56:\n swap3\n swap2\n pop\n pop\n jump\t// out\n}\n", - "bytecode": { - "linkReferences": {}, - "object": - "0x60606040526b033b2e3c9fd0803ce8000000600355341561001c57fe5b5b600354600160a060020a0333166000908152602081905260409020555b5b61078d8061004a6000396000f300606060405236156100965763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610098578063095ea7b31461014657806318160ddd1461018657806323b872dd146101a8578063313ce567146101ee57806370a082311461021457806395d89b411461024f578063a9059cbb146102fd578063dd62ed3e1461033d575bfe5b34156100a057fe5b6100a861037e565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561014e57fe5b61017273ffffffffffffffffffffffffffffffffffffffff600435166024356103b5565b604080519115158252519081900360200190f35b341561018e57fe5b61019661042d565b60408051918252519081900360200190f35b34156101b057fe5b61017273ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610433565b604080519115158252519081900360200190f35b34156101f657fe5b6101fe6105d4565b6040805160ff9092168252519081900360200190f35b341561021c57fe5b61019673ffffffffffffffffffffffffffffffffffffffff600435166105d9565b60408051918252519081900360200190f35b341561025757fe5b6100a8610605565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030557fe5b61017273ffffffffffffffffffffffffffffffffffffffff6004351660243561063c565b604080519115158252519081900360200190f35b341561034557fe5b61019673ffffffffffffffffffffffffffffffffffffffff60043581169060243516610727565b60408051918252519081900360200190f35b60408051808201909152601181527f30782050726f746f636f6c20546f6b656e000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832033909516835293815283822054928252819052918220548390108015906104835750828110155b80156104b6575073ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090205483810110155b156105c65773ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105585773ffffffffffffffffffffffffffffffffffffffff808616600090815260016020908152604080832033909416835292905220805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191506105cb565b600091505b5b509392505050565b601281565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020545b919050565b60408051808201909152600381527f5a52580000000000000000000000000000000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff3316600090815260208190526040812054829010801590610699575073ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110155b156107185773ffffffffffffffffffffffffffffffffffffffff33811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3506001610427565b506000610427565b5b92915050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938516835292905220545b929150505600a165627a7a723058208999c5329f53064aac58d4b553cb379a45bfca17e024506ff916637cfc36f7b20029", - "opcodes": - "PUSH1 0x60 PUSH1 0x40 MSTORE PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x3 SSTORE CALLVALUE ISZERO PUSH2 0x1C JUMPI INVALID JUMPDEST JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB CALLER AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SSTORE JUMPDEST JUMPDEST PUSH2 0x78D DUP1 PUSH2 0x4A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x60 PUSH1 0x40 MSTORE CALLDATASIZE ISZERO PUSH2 0x96 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x24F JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x33D JUMPI JUMPDEST INVALID JUMPDEST CALLVALUE ISZERO PUSH2 0xA0 JUMPI INVALID JUMPDEST PUSH2 0xA8 PUSH2 0x37E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x10C JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x10C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xCE JUMP JUMPDEST POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x14E JUMPI INVALID JUMPDEST PUSH2 0x172 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x3B5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x18E JUMPI INVALID JUMPDEST PUSH2 0x196 PUSH2 0x42D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x1B0 JUMPI INVALID JUMPDEST PUSH2 0x172 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x433 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x1F6 JUMPI INVALID JUMPDEST PUSH2 0x1FE PUSH2 0x5D4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x21C JUMPI INVALID JUMPDEST PUSH2 0x196 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x257 JUMPI INVALID JUMPDEST PUSH2 0xA8 PUSH2 0x605 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x10C JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x10C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xCE JUMP JUMPDEST POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x305 JUMPI INVALID JUMPDEST PUSH2 0x172 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x63C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x345 JUMPI INVALID JUMPDEST PUSH2 0x196 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x727 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x30782050726F746F636F6C20546F6B656E000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 SHA3 DUP7 SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP5 SWAP4 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 CALLER SWAP1 SWAP6 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 SHA3 SLOAD SWAP3 DUP3 MSTORE DUP2 SWAP1 MSTORE SWAP2 DUP3 SHA3 SLOAD DUP4 SWAP1 LT DUP1 ISZERO SWAP1 PUSH2 0x483 JUMPI POP DUP3 DUP2 LT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x4B6 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP4 DUP2 ADD LT ISZERO JUMPDEST ISZERO PUSH2 0x5C6 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 SHA3 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SHA3 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 LT ISZERO PUSH2 0x558 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 CALLER SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SHA3 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP2 POP PUSH2 0x5CB JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 MSTORE PUSH32 0x5A52580000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 SHA3 SLOAD DUP3 SWAP1 LT DUP1 ISZERO SWAP1 PUSH2 0x699 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP3 DUP2 ADD LT ISZERO JUMPDEST ISZERO PUSH2 0x718 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 SHA3 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 PUSH2 0x427 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x427 JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SHA3 SLOAD JUMPDEST SWAP3 SWAP2 POP POP JUMP STOP LOG1 PUSH6 0x627A7A723058 SHA3 DUP10 SWAP10 0xc5 ORIGIN SWAP16 MSTORE8 MOD 0x4a 0xac PC 0xd4 0xb5 MSTORE8 0xcb CALLDATACOPY SWAP11 GASLIMIT 0xbf 0xca OR 0xe0 0x24 POP PUSH16 0xF916637CFC36F7B20029000000000000 ", - "sourceMap": - "795:447:3:-;;;958:6;932:32;;1150:90;;;;;;;1222:11;;-1:-1:-1;;;;;1208:10:3;1199:20;:8;:20;;;;;;;;;;:34;1150:90;795:447;;;;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": - "0x606060405236156100965763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610098578063095ea7b31461014657806318160ddd1461018657806323b872dd146101a8578063313ce567146101ee57806370a082311461021457806395d89b411461024f578063a9059cbb146102fd578063dd62ed3e1461033d575bfe5b34156100a057fe5b6100a861037e565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561014e57fe5b61017273ffffffffffffffffffffffffffffffffffffffff600435166024356103b5565b604080519115158252519081900360200190f35b341561018e57fe5b61019661042d565b60408051918252519081900360200190f35b34156101b057fe5b61017273ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610433565b604080519115158252519081900360200190f35b34156101f657fe5b6101fe6105d4565b6040805160ff9092168252519081900360200190f35b341561021c57fe5b61019673ffffffffffffffffffffffffffffffffffffffff600435166105d9565b60408051918252519081900360200190f35b341561025757fe5b6100a8610605565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030557fe5b61017273ffffffffffffffffffffffffffffffffffffffff6004351660243561063c565b604080519115158252519081900360200190f35b341561034557fe5b61019673ffffffffffffffffffffffffffffffffffffffff60043581169060243516610727565b60408051918252519081900360200190f35b60408051808201909152601181527f30782050726f746f636f6c20546f6b656e000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832033909516835293815283822054928252819052918220548390108015906104835750828110155b80156104b6575073ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090205483810110155b156105c65773ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105585773ffffffffffffffffffffffffffffffffffffffff808616600090815260016020908152604080832033909416835292905220805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191506105cb565b600091505b5b509392505050565b601281565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020545b919050565b60408051808201909152600381527f5a52580000000000000000000000000000000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff3316600090815260208190526040812054829010801590610699575073ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110155b156107185773ffffffffffffffffffffffffffffffffffffffff33811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3506001610427565b506000610427565b5b92915050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938516835292905220545b929150505600a165627a7a723058208999c5329f53064aac58d4b553cb379a45bfca17e024506ff916637cfc36f7b20029", - "opcodes": - "PUSH1 0x60 PUSH1 0x40 MSTORE CALLDATASIZE ISZERO PUSH2 0x96 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x24F JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x33D JUMPI JUMPDEST INVALID JUMPDEST CALLVALUE ISZERO PUSH2 0xA0 JUMPI INVALID JUMPDEST PUSH2 0xA8 PUSH2 0x37E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x10C JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x10C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xCE JUMP JUMPDEST POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x14E JUMPI INVALID JUMPDEST PUSH2 0x172 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x3B5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x18E JUMPI INVALID JUMPDEST PUSH2 0x196 PUSH2 0x42D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x1B0 JUMPI INVALID JUMPDEST PUSH2 0x172 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x433 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x1F6 JUMPI INVALID JUMPDEST PUSH2 0x1FE PUSH2 0x5D4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x21C JUMPI INVALID JUMPDEST PUSH2 0x196 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x257 JUMPI INVALID JUMPDEST PUSH2 0xA8 PUSH2 0x605 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x10C JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x10C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xCE JUMP JUMPDEST POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x305 JUMPI INVALID JUMPDEST PUSH2 0x172 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x63C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x345 JUMPI INVALID JUMPDEST PUSH2 0x196 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x727 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x30782050726F746F636F6C20546F6B656E000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 SHA3 DUP7 SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP5 SWAP4 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 CALLER SWAP1 SWAP6 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 SHA3 SLOAD SWAP3 DUP3 MSTORE DUP2 SWAP1 MSTORE SWAP2 DUP3 SHA3 SLOAD DUP4 SWAP1 LT DUP1 ISZERO SWAP1 PUSH2 0x483 JUMPI POP DUP3 DUP2 LT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x4B6 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP4 DUP2 ADD LT ISZERO JUMPDEST ISZERO PUSH2 0x5C6 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 SHA3 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SHA3 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 LT ISZERO PUSH2 0x558 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 CALLER SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SHA3 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP2 POP PUSH2 0x5CB JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 MSTORE PUSH32 0x5A52580000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 SHA3 SLOAD DUP3 SWAP1 LT DUP1 ISZERO SWAP1 PUSH2 0x699 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP3 DUP2 ADD LT ISZERO JUMPDEST ISZERO PUSH2 0x718 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 SHA3 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 PUSH2 0x427 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x427 JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SHA3 SLOAD JUMPDEST SWAP3 SWAP2 POP POP JUMP STOP LOG1 PUSH6 0x627A7A723058 SHA3 DUP10 SWAP10 0xc5 ORIGIN SWAP16 MSTORE8 MOD 0x4a 0xac PC 0xd4 0xb5 MSTORE8 0xcb CALLDATACOPY SWAP11 GASLIMIT 0xbf 0xca OR 0xe0 0x24 POP PUSH16 0xF916637CFC36F7B20029000000000000 ", - "sourceMap": - "795:447:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1009:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18:2:-1;;13:3;7:5;32;59:3;53:5;48:3;41:6;93:2;88:3;85:2;78:6;73:3;67:5;152:3;;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1087:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;932:32:3;;;;;;;;;;;;;;;;;;;;;;;;;;1066:609:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;891:35:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;982:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1064:37:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18:2:-1;;13:3;7:5;32;59:3;53:5;48:3;41:6;93:2;88:3;85:2;78:6;73:3;67:5;152:3;;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;125:410:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1280:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1009:49:3;;;;;;;;;;;;;;;;;;;:::o;1087:187:0:-;1160:19;1168:10;1160:19;;1144:4;1160:19;;;:7;:19;;;;;;;;:29;;;;;;;;;;;;:38;;;1208;;;;;;;1144:4;;1160:29;:19;1208:38;;;;;;;;;;;-1:-1:-1;1263:4:0;1087:187;;;;;:::o;932:32:3:-;;;;:::o;1066:609:2:-;1198:14;;;;1161:4;1198:14;;;:7;:14;;;;;;;;1213:10;1198:26;;;;;;;;;;;;1238:15;;;;;;;;;;:25;;;;;;:60;;;1292:6;1279:9;:19;;1238:60;:115;;;;-1:-1:-1;1340:13:2;;;:8;:13;;;;;;;;;;;1314:22;;;:39;;1238:115;1234:435;;;1378:13;;;;:8;:13;;;;;;;;;;;:23;;;;;;1415:15;;;;;;:25;;;;;;;768:10;1458:20;;1454:95;;;1498:14;;;;;;;;:7;:14;;;;;;;;1513:10;1498:26;;;;;;;;;:36;;;;;;;1454:95;1578:3;1562:28;;1571:5;1562:28;;;1583:6;1562:28;;;;;;;;;;;;;;;;;;1611:4;1604:11;;;;1234:435;1653:5;1646:12;;1234:435;1066:609;;;;;;;:::o;891:35:3:-;924:2;891:35;:::o;982:99:0:-;1058:16;;;1035:4;1058:16;;;;;;;;;;;982:99;;;;:::o;1064:37:3:-;;;;;;;;;;;;;;;;;;;:::o;125:410:0:-;267:20;276:10;267:20;178:4;267:20;;;;;;;;;;;:30;;;;;;:73;;-1:-1:-1;327:13:0;;;:8;:13;;;;;;;;;;;301:22;;;:39;;267:73;263:266;;;356:20;365:10;356:20;;:8;:20;;;;;;;;;;;:30;;;;;;;400:13;;;;;;;;;;:23;;;;;;437:33;;;;;;;400:13;;437:33;;;;;;;;;;;-1:-1:-1;491:4:0;484:11;;263:266;-1:-1:-1;521:5:0;514:12;;263:266;125:410;;;;;:::o;1280:126::-;1374:15;;;;1351:4;1374:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;1280:126;;;;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "386600", - "executionCost": "40780", - "totalCost": "427380" - }, - "external": { - "allowance(address,address)": "737", - "approve(address,uint256)": "22218", - "balanceOf(address)": "579", - "decimals()": "270", - "name()": "530", - "symbol()": "662", - "totalSupply()": "417", - "transfer(address,uint256)": "43393", - "transferFrom(address,address,uint256)": "64116" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "60" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "40" - }, - { - "begin": 795, - "end": 1242, - "name": "MSTORE" - }, - { - "begin": 958, - "end": 964, - "name": "PUSH", - "value": "33B2E3C9FD0803CE8000000" - }, - { - "begin": 932, - "end": 964, - "name": "PUSH", - "value": "3" - }, - { - "begin": 932, - "end": 964, - "name": "SSTORE" - }, - { - "begin": 1150, - "end": 1240, - "name": "CALLVALUE" - }, - { - "begin": 1150, - "end": 1240, - "name": "ISZERO" - }, - { - "begin": 1150, - "end": 1240, - "name": "PUSH [tag]", - "value": "1" - }, - { - "begin": 1150, - "end": 1240, - "name": "JUMPI" - }, - { - "begin": 1150, - "end": 1240, - "name": "INVALID" - }, - { - "begin": 1150, - "end": 1240, - "name": "tag", - "value": "1" - }, - { - "begin": 1150, - "end": 1240, - "name": "JUMPDEST" - }, - { - "begin": 1150, - "end": 1240, - "name": "tag", - "value": "2" - }, - { - "begin": 1150, - "end": 1240, - "name": "JUMPDEST" - }, - { - "begin": 1222, - "end": 1233, - "name": "PUSH", - "value": "3" - }, - { - "begin": 1222, - "end": 1233, - "name": "SLOAD" - }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "value": "1" - }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "value": "A0" - }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "value": "2" - }, - { - "begin": -1, - "end": -1, - "name": "EXP" - }, - { - "begin": -1, - "end": -1, - "name": "SUB" - }, - { - "begin": 1208, - "end": 1218, - "name": "CALLER" - }, - { - "begin": 1199, - "end": 1219, - "name": "AND" - }, - { - "begin": 1199, - "end": 1207, - "name": "PUSH", - "value": "0" - }, - { - "begin": 1199, - "end": 1219, - "name": "SWAP1" - }, - { - "begin": 1199, - "end": 1219, - "name": "DUP2" - }, - { - "begin": 1199, - "end": 1219, - "name": "MSTORE" - }, - { - "begin": 1199, - "end": 1219, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1199, - "end": 1219, - "name": "DUP2" - }, - { - "begin": 1199, - "end": 1219, - "name": "SWAP1" - }, - { - "begin": 1199, - "end": 1219, - "name": "MSTORE" - }, - { - "begin": 1199, - "end": 1219, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1199, - "end": 1219, - "name": "SWAP1" - }, - { - "begin": 1199, - "end": 1219, - "name": "SHA3" - }, - { - "begin": 1199, - "end": 1233, - "name": "SSTORE" - }, - { - "begin": 1150, - "end": 1240, - "name": "tag", - "value": "3" - }, - { - "begin": 1150, - "end": 1240, - "name": "JUMPDEST" - }, - { - "begin": 795, - "end": 1242, - "name": "tag", - "value": "4" - }, - { - "begin": 795, - "end": 1242, - "name": "JUMPDEST" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH #[$]", - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 795, - "end": 1242, - "name": "DUP1" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH [$]", - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "0" - }, - { - "begin": 795, - "end": 1242, - "name": "CODECOPY" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "0" - }, - { - "begin": 795, - "end": 1242, - "name": "RETURN" - } - ], - ".data": { - "0": { - ".code": [ - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "60" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "40" - }, - { - "begin": 795, - "end": 1242, - "name": "MSTORE" - }, - { - "begin": 795, - "end": 1242, - "name": "CALLDATASIZE" - }, - { - "begin": 795, - "end": 1242, - "name": "ISZERO" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH [tag]", - "value": "1" - }, - { - "begin": 795, - "end": 1242, - "name": "JUMPI" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "FFFFFFFF" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "0" - }, - { - "begin": 795, - "end": 1242, - "name": "CALLDATALOAD" - }, - { - "begin": 795, - "end": 1242, - "name": "DIV" - }, - { - "begin": 795, - "end": 1242, - "name": "AND" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "6FDDE03" - }, - { - "begin": 795, - "end": 1242, - "name": "DUP2" - }, - { - "begin": 795, - "end": 1242, - "name": "EQ" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH [tag]", - "value": "2" - }, - { - "begin": 795, - "end": 1242, - "name": "JUMPI" - }, - { - "begin": 795, - "end": 1242, - "name": "DUP1" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "95EA7B3" - }, - { - "begin": 795, - "end": 1242, - "name": "EQ" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH [tag]", - "value": "3" - }, - { - "begin": 795, - "end": 1242, - "name": "JUMPI" - }, - { - "begin": 795, - "end": 1242, - "name": "DUP1" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "18160DDD" - }, - { - "begin": 795, - "end": 1242, - "name": "EQ" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH [tag]", - "value": "4" - }, - { - "begin": 795, - "end": 1242, - "name": "JUMPI" - }, - { - "begin": 795, - "end": 1242, - "name": "DUP1" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "23B872DD" - }, - { - "begin": 795, - "end": 1242, - "name": "EQ" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH [tag]", - "value": "5" - }, - { - "begin": 795, - "end": 1242, - "name": "JUMPI" - }, - { - "begin": 795, - "end": 1242, - "name": "DUP1" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "313CE567" - }, - { - "begin": 795, - "end": 1242, - "name": "EQ" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH [tag]", - "value": "6" - }, - { - "begin": 795, - "end": 1242, - "name": "JUMPI" - }, - { - "begin": 795, - "end": 1242, - "name": "DUP1" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "70A08231" - }, - { - "begin": 795, - "end": 1242, - "name": "EQ" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH [tag]", - "value": "7" - }, - { - "begin": 795, - "end": 1242, - "name": "JUMPI" - }, - { - "begin": 795, - "end": 1242, - "name": "DUP1" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "95D89B41" - }, - { - "begin": 795, - "end": 1242, - "name": "EQ" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH [tag]", - "value": "8" - }, - { - "begin": 795, - "end": 1242, - "name": "JUMPI" - }, - { - "begin": 795, - "end": 1242, - "name": "DUP1" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "A9059CBB" - }, - { - "begin": 795, - "end": 1242, - "name": "EQ" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH [tag]", - "value": "9" - }, - { - "begin": 795, - "end": 1242, - "name": "JUMPI" - }, - { - "begin": 795, - "end": 1242, - "name": "DUP1" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH", - "value": "DD62ED3E" - }, - { - "begin": 795, - "end": 1242, - "name": "EQ" - }, - { - "begin": 795, - "end": 1242, - "name": "PUSH [tag]", - "value": "10" - }, - { - "begin": 795, - "end": 1242, - "name": "JUMPI" - }, - { - "begin": 795, - "end": 1242, - "name": "tag", - "value": "1" - }, - { - "begin": 795, - "end": 1242, - "name": "JUMPDEST" - }, - { - "begin": 795, - "end": 1242, - "name": "INVALID" - }, - { - "begin": 1009, - "end": 1058, - "name": "tag", - "value": "2" - }, - { - "begin": 1009, - "end": 1058, - "name": "JUMPDEST" - }, - { - "begin": 1009, - "end": 1058, - "name": "CALLVALUE" - }, - { - "begin": 1009, - "end": 1058, - "name": "ISZERO" - }, - { - "begin": 1009, - "end": 1058, - "name": "PUSH [tag]", - "value": "11" - }, - { - "begin": 1009, - "end": 1058, - "name": "JUMPI" - }, - { - "begin": 1009, - "end": 1058, - "name": "INVALID" - }, - { - "begin": 1009, - "end": 1058, - "name": "tag", - "value": "11" - }, - { - "begin": 1009, - "end": 1058, - "name": "JUMPDEST" - }, - { - "begin": 1009, - "end": 1058, - "name": "PUSH [tag]", - "value": "12" - }, - { - "begin": 1009, - "end": 1058, - "name": "PUSH [tag]", - "value": "13" - }, - { - "begin": 1009, - "end": 1058, - "name": "JUMP" - }, - { - "begin": 1009, - "end": 1058, - "name": "tag", - "value": "12" - }, - { - "begin": 1009, - "end": 1058, - "name": "JUMPDEST" - }, - { - "begin": 1009, - "end": 1058, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP1" - }, - { - "begin": 1009, - "end": 1058, - "name": "MLOAD" - }, - { - "begin": 1009, - "end": 1058, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP1" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP3" - }, - { - "begin": 1009, - "end": 1058, - "name": "MSTORE" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP4" - }, - { - "begin": 1009, - "end": 1058, - "name": "MLOAD" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP2" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP4" - }, - { - "begin": 1009, - "end": 1058, - "name": "ADD" - }, - { - "begin": 1009, - "end": 1058, - "name": "MSTORE" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP4" - }, - { - "begin": 1009, - "end": 1058, - "name": "MLOAD" - }, - { - "begin": 1009, - "end": 1058, - "name": "SWAP2" - }, - { - "begin": 1009, - "end": 1058, - "name": "SWAP3" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP4" - }, - { - "begin": 1009, - "end": 1058, - "name": "SWAP3" - }, - { - "begin": 1009, - "end": 1058, - "name": "SWAP1" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP4" - }, - { - "begin": 1009, - "end": 1058, - "name": "ADD" - }, - { - "begin": 1009, - "end": 1058, - "name": "SWAP2" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP6" - }, - { - "begin": 1009, - "end": 1058, - "name": "ADD" - }, - { - "begin": 1009, - "end": 1058, - "name": "SWAP1" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP1" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP4" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP4" - }, - { - "begin": 18, - "end": 20, - "name": "DUP3" - }, - { - "begin": 18, - "end": 20, - "name": "ISZERO" - }, - { - "begin": 13, - "end": 16, - "name": "PUSH [tag]", - "value": "14" - }, - { - "begin": 7, - "end": 12, - "name": "JUMPI" - }, - { - "begin": 32, - "end": 37, - "name": "tag", - "value": "15" - }, - { - "begin": 32, - "end": 37, - "name": "JUMPDEST" - }, - { - "begin": 59, - "end": 62, - "name": "DUP1" - }, - { - "begin": 53, - "end": 58, - "name": "MLOAD" - }, - { - "begin": 48, - "end": 51, - "name": "DUP3" - }, - { - "begin": 41, - "end": 47, - "name": "MSTORE" - }, - { - "begin": 93, - "end": 95, - "name": "PUSH", - "value": "20" - }, - { - "begin": 88, - "end": 91, - "name": "DUP4" - }, - { - "begin": 85, - "end": 87, - "name": "GT" - }, - { - "begin": 78, - "end": 84, - "name": "ISZERO" - }, - { - "begin": 73, - "end": 76, - "name": "PUSH [tag]", - "value": "14" - }, - { - "begin": 67, - "end": 72, - "name": "JUMPI" - }, - { - "begin": 152, - "end": 155, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0" - }, - { - "begin": 152, - "end": 155, - "name": "SWAP1" - }, - { - "begin": 152, - "end": 155, - "name": "SWAP3" - }, - { - "begin": 152, - "end": 155, - "name": "ADD" - }, - { - "begin": 152, - "end": 155, - "name": "SWAP2" - }, - { - "begin": 117, - "end": 119, - "name": "PUSH", - "value": "20" - }, - { - "begin": 108, - "end": 111, - "name": "SWAP2" - }, - { - "begin": 108, - "end": 111, - "name": "DUP3" - }, - { - "begin": 108, - "end": 111, - "name": "ADD" - }, - { - "begin": 108, - "end": 111, - "name": "SWAP2" - }, - { - "begin": 130, - "end": 133, - "name": "ADD" - }, - { - "begin": 172, - "end": 177, - "name": "PUSH [tag]", - "value": "15" - }, - { - "begin": 167, - "end": 171, - "name": "JUMP" - }, - { - "begin": 181, - "end": 184, - "name": "tag", - "value": "14" - }, - { - "begin": 181, - "end": 184, - "name": "JUMPDEST" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP1" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP1" - }, - { - "begin": 3, - "end": 189, - "name": "DUP2" - }, - { - "begin": 3, - "end": 189, - "name": "ADD" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP1" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH", - "value": "1F" - }, - { - "begin": 3, - "end": 189, - "name": "AND" - }, - { - "begin": 3, - "end": 189, - "name": "DUP1" - }, - { - "begin": 3, - "end": 189, - "name": "ISZERO" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH [tag]", - "value": "16" - }, - { - "begin": 3, - "end": 189, - "name": "JUMPI" - }, - { - "begin": 3, - "end": 189, - "name": "DUP1" - }, - { - "begin": 3, - "end": 189, - "name": "DUP3" - }, - { - "begin": 3, - "end": 189, - "name": "SUB" - }, - { - "begin": 3, - "end": 189, - "name": "DUP1" - }, - { - "begin": 3, - "end": 189, - "name": "MLOAD" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH", - "value": "1" - }, - { - "begin": 3, - "end": 189, - "name": "DUP4" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH", - "value": "20" - }, - { - "begin": 3, - "end": 189, - "name": "SUB" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH", - "value": "100" - }, - { - "begin": 3, - "end": 189, - "name": "EXP" - }, - { - "begin": 3, - "end": 189, - "name": "SUB" - }, - { - "begin": 3, - "end": 189, - "name": "NOT" - }, - { - "begin": 3, - "end": 189, - "name": "AND" - }, - { - "begin": 3, - "end": 189, - "name": "DUP2" - }, - { - "begin": 3, - "end": 189, - "name": "MSTORE" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH", - "value": "20" - }, - { - "begin": 3, - "end": 189, - "name": "ADD" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP2" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "tag", - "value": "16" - }, - { - "begin": 3, - "end": 189, - "name": "JUMPDEST" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP3" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH", - "value": "40" - }, - { - "begin": 3, - "end": 189, - "name": "MLOAD" - }, - { - "begin": 3, - "end": 189, - "name": "DUP1" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP2" - }, - { - "begin": 3, - "end": 189, - "name": "SUB" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP1" - }, - { - "begin": 3, - "end": 189, - "name": "RETURN" - }, - { - "begin": 1087, - "end": 1274, - "name": "tag", - "value": "3" - }, - { - "begin": 1087, - "end": 1274, - "name": "JUMPDEST" - }, - { - "begin": 1087, - "end": 1274, - "name": "CALLVALUE" - }, - { - "begin": 1087, - "end": 1274, - "name": "ISZERO" - }, - { - "begin": 1087, - "end": 1274, - "name": "PUSH [tag]", - "value": "17" - }, - { - "begin": 1087, - "end": 1274, - "name": "JUMPI" - }, - { - "begin": 1087, - "end": 1274, - "name": "INVALID" - }, - { - "begin": 1087, - "end": 1274, - "name": "tag", - "value": "17" - }, - { - "begin": 1087, - "end": 1274, - "name": "JUMPDEST" - }, - { - "begin": 1087, - "end": 1274, - "name": "PUSH [tag]", - "value": "18" - }, - { - "begin": 1087, - "end": 1274, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1087, - "end": 1274, - "name": "PUSH", - "value": "4" - }, - { - "begin": 1087, - "end": 1274, - "name": "CALLDATALOAD" - }, - { - "begin": 1087, - "end": 1274, - "name": "AND" - }, - { - "begin": 1087, - "end": 1274, - "name": "PUSH", - "value": "24" - }, - { - "begin": 1087, - "end": 1274, - "name": "CALLDATALOAD" - }, - { - "begin": 1087, - "end": 1274, - "name": "PUSH [tag]", - "value": "19" - }, - { - "begin": 1087, - "end": 1274, - "name": "JUMP" - }, - { - "begin": 1087, - "end": 1274, - "name": "tag", - "value": "18" - }, - { - "begin": 1087, - "end": 1274, - "name": "JUMPDEST" - }, - { - "begin": 1087, - "end": 1274, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1087, - "end": 1274, - "name": "DUP1" - }, - { - "begin": 1087, - "end": 1274, - "name": "MLOAD" - }, - { - "begin": 1087, - "end": 1274, - "name": "SWAP2" - }, - { - "begin": 1087, - "end": 1274, - "name": "ISZERO" - }, - { - "begin": 1087, - "end": 1274, - "name": "ISZERO" - }, - { - "begin": 1087, - "end": 1274, - "name": "DUP3" - }, - { - "begin": 1087, - "end": 1274, - "name": "MSTORE" - }, - { - "begin": 1087, - "end": 1274, - "name": "MLOAD" - }, - { - "begin": 1087, - "end": 1274, - "name": "SWAP1" - }, - { - "begin": 1087, - "end": 1274, - "name": "DUP2" - }, - { - "begin": 1087, - "end": 1274, - "name": "SWAP1" - }, - { - "begin": 1087, - "end": 1274, - "name": "SUB" - }, - { - "begin": 1087, - "end": 1274, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1087, - "end": 1274, - "name": "ADD" - }, - { - "begin": 1087, - "end": 1274, - "name": "SWAP1" - }, - { - "begin": 1087, - "end": 1274, - "name": "RETURN" - }, - { - "begin": 932, - "end": 964, - "name": "tag", - "value": "4" - }, - { - "begin": 932, - "end": 964, - "name": "JUMPDEST" - }, - { - "begin": 932, - "end": 964, - "name": "CALLVALUE" - }, - { - "begin": 932, - "end": 964, - "name": "ISZERO" - }, - { - "begin": 932, - "end": 964, - "name": "PUSH [tag]", - "value": "20" - }, - { - "begin": 932, - "end": 964, - "name": "JUMPI" - }, - { - "begin": 932, - "end": 964, - "name": "INVALID" - }, - { - "begin": 932, - "end": 964, - "name": "tag", - "value": "20" - }, - { - "begin": 932, - "end": 964, - "name": "JUMPDEST" - }, - { - "begin": 932, - "end": 964, - "name": "PUSH [tag]", - "value": "21" - }, - { - "begin": 932, - "end": 964, - "name": "PUSH [tag]", - "value": "22" - }, - { - "begin": 932, - "end": 964, - "name": "JUMP" - }, - { - "begin": 932, - "end": 964, - "name": "tag", - "value": "21" - }, - { - "begin": 932, - "end": 964, - "name": "JUMPDEST" - }, - { - "begin": 932, - "end": 964, - "name": "PUSH", - "value": "40" - }, - { - "begin": 932, - "end": 964, - "name": "DUP1" - }, - { - "begin": 932, - "end": 964, - "name": "MLOAD" - }, - { - "begin": 932, - "end": 964, - "name": "SWAP2" - }, - { - "begin": 932, - "end": 964, - "name": "DUP3" - }, - { - "begin": 932, - "end": 964, - "name": "MSTORE" - }, - { - "begin": 932, - "end": 964, - "name": "MLOAD" - }, - { - "begin": 932, - "end": 964, - "name": "SWAP1" - }, - { - "begin": 932, - "end": 964, - "name": "DUP2" - }, - { - "begin": 932, - "end": 964, - "name": "SWAP1" - }, - { - "begin": 932, - "end": 964, - "name": "SUB" - }, - { - "begin": 932, - "end": 964, - "name": "PUSH", - "value": "20" - }, - { - "begin": 932, - "end": 964, - "name": "ADD" - }, - { - "begin": 932, - "end": 964, - "name": "SWAP1" - }, - { - "begin": 932, - "end": 964, - "name": "RETURN" - }, - { - "begin": 1066, - "end": 1675, - "name": "tag", - "value": "5" - }, - { - "begin": 1066, - "end": 1675, - "name": "JUMPDEST" - }, - { - "begin": 1066, - "end": 1675, - "name": "CALLVALUE" - }, - { - "begin": 1066, - "end": 1675, - "name": "ISZERO" - }, - { - "begin": 1066, - "end": 1675, - "name": "PUSH [tag]", - "value": "23" - }, - { - "begin": 1066, - "end": 1675, - "name": "JUMPI" - }, - { - "begin": 1066, - "end": 1675, - "name": "INVALID" - }, - { - "begin": 1066, - "end": 1675, - "name": "tag", - "value": "23" - }, - { - "begin": 1066, - "end": 1675, - "name": "JUMPDEST" - }, - { - "begin": 1066, - "end": 1675, - "name": "PUSH [tag]", - "value": "18" - }, - { - "begin": 1066, - "end": 1675, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1066, - "end": 1675, - "name": "PUSH", - "value": "4" - }, - { - "begin": 1066, - "end": 1675, - "name": "CALLDATALOAD" - }, - { - "begin": 1066, - "end": 1675, - "name": "DUP2" - }, - { - "begin": 1066, - "end": 1675, - "name": "AND" - }, - { - "begin": 1066, - "end": 1675, - "name": "SWAP1" - }, - { - "begin": 1066, - "end": 1675, - "name": "PUSH", - "value": "24" - }, - { - "begin": 1066, - "end": 1675, - "name": "CALLDATALOAD" - }, - { - "begin": 1066, - "end": 1675, - "name": "AND" - }, - { - "begin": 1066, - "end": 1675, - "name": "PUSH", - "value": "44" - }, - { - "begin": 1066, - "end": 1675, - "name": "CALLDATALOAD" - }, - { - "begin": 1066, - "end": 1675, - "name": "PUSH [tag]", - "value": "25" - }, - { - "begin": 1066, - "end": 1675, - "name": "JUMP" - }, - { - "begin": 1066, - "end": 1675, - "name": "tag", - "value": "24" - }, - { - "begin": 1066, - "end": 1675, - "name": "JUMPDEST" - }, - { - "begin": 1066, - "end": 1675, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1066, - "end": 1675, - "name": "DUP1" - }, - { - "begin": 1066, - "end": 1675, - "name": "MLOAD" - }, - { - "begin": 1066, - "end": 1675, - "name": "SWAP2" - }, - { - "begin": 1066, - "end": 1675, - "name": "ISZERO" - }, - { - "begin": 1066, - "end": 1675, - "name": "ISZERO" - }, - { - "begin": 1066, - "end": 1675, - "name": "DUP3" - }, - { - "begin": 1066, - "end": 1675, - "name": "MSTORE" - }, - { - "begin": 1066, - "end": 1675, - "name": "MLOAD" - }, - { - "begin": 1066, - "end": 1675, - "name": "SWAP1" - }, - { - "begin": 1066, - "end": 1675, - "name": "DUP2" - }, - { - "begin": 1066, - "end": 1675, - "name": "SWAP1" - }, - { - "begin": 1066, - "end": 1675, - "name": "SUB" - }, - { - "begin": 1066, - "end": 1675, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1066, - "end": 1675, - "name": "ADD" - }, - { - "begin": 1066, - "end": 1675, - "name": "SWAP1" - }, - { - "begin": 1066, - "end": 1675, - "name": "RETURN" - }, - { - "begin": 891, - "end": 926, - "name": "tag", - "value": "6" - }, - { - "begin": 891, - "end": 926, - "name": "JUMPDEST" - }, - { - "begin": 891, - "end": 926, - "name": "CALLVALUE" - }, - { - "begin": 891, - "end": 926, - "name": "ISZERO" - }, - { - "begin": 891, - "end": 926, - "name": "PUSH [tag]", - "value": "26" - }, - { - "begin": 891, - "end": 926, - "name": "JUMPI" - }, - { - "begin": 891, - "end": 926, - "name": "INVALID" - }, - { - "begin": 891, - "end": 926, - "name": "tag", - "value": "26" - }, - { - "begin": 891, - "end": 926, - "name": "JUMPDEST" - }, - { - "begin": 891, - "end": 926, - "name": "PUSH [tag]", - "value": "27" - }, - { - "begin": 891, - "end": 926, - "name": "PUSH [tag]", - "value": "28" - }, - { - "begin": 891, - "end": 926, - "name": "JUMP" - }, - { - "begin": 891, - "end": 926, - "name": "tag", - "value": "27" - }, - { - "begin": 891, - "end": 926, - "name": "JUMPDEST" - }, - { - "begin": 891, - "end": 926, - "name": "PUSH", - "value": "40" - }, - { - "begin": 891, - "end": 926, - "name": "DUP1" - }, - { - "begin": 891, - "end": 926, - "name": "MLOAD" - }, - { - "begin": 891, - "end": 926, - "name": "PUSH", - "value": "FF" - }, - { - "begin": 891, - "end": 926, - "name": "SWAP1" - }, - { - "begin": 891, - "end": 926, - "name": "SWAP3" - }, - { - "begin": 891, - "end": 926, - "name": "AND" - }, - { - "begin": 891, - "end": 926, - "name": "DUP3" - }, - { - "begin": 891, - "end": 926, - "name": "MSTORE" - }, - { - "begin": 891, - "end": 926, - "name": "MLOAD" - }, - { - "begin": 891, - "end": 926, - "name": "SWAP1" - }, - { - "begin": 891, - "end": 926, - "name": "DUP2" - }, - { - "begin": 891, - "end": 926, - "name": "SWAP1" - }, - { - "begin": 891, - "end": 926, - "name": "SUB" - }, - { - "begin": 891, - "end": 926, - "name": "PUSH", - "value": "20" - }, - { - "begin": 891, - "end": 926, - "name": "ADD" - }, - { - "begin": 891, - "end": 926, - "name": "SWAP1" - }, - { - "begin": 891, - "end": 926, - "name": "RETURN" - }, - { - "begin": 982, - "end": 1081, - "name": "tag", - "value": "7" - }, - { - "begin": 982, - "end": 1081, - "name": "JUMPDEST" - }, - { - "begin": 982, - "end": 1081, - "name": "CALLVALUE" - }, - { - "begin": 982, - "end": 1081, - "name": "ISZERO" - }, - { - "begin": 982, - "end": 1081, - "name": "PUSH [tag]", - "value": "29" - }, - { - "begin": 982, - "end": 1081, - "name": "JUMPI" - }, - { - "begin": 982, - "end": 1081, - "name": "INVALID" - }, - { - "begin": 982, - "end": 1081, - "name": "tag", - "value": "29" - }, - { - "begin": 982, - "end": 1081, - "name": "JUMPDEST" - }, - { - "begin": 982, - "end": 1081, - "name": "PUSH [tag]", - "value": "21" - }, - { - "begin": 982, - "end": 1081, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 982, - "end": 1081, - "name": "PUSH", - "value": "4" - }, - { - "begin": 982, - "end": 1081, - "name": "CALLDATALOAD" - }, - { - "begin": 982, - "end": 1081, - "name": "AND" - }, - { - "begin": 982, - "end": 1081, - "name": "PUSH [tag]", - "value": "31" - }, - { - "begin": 982, - "end": 1081, - "name": "JUMP" - }, - { - "begin": 982, - "end": 1081, - "name": "tag", - "value": "30" - }, - { - "begin": 982, - "end": 1081, - "name": "JUMPDEST" - }, - { - "begin": 982, - "end": 1081, - "name": "PUSH", - "value": "40" - }, - { - "begin": 982, - "end": 1081, - "name": "DUP1" - }, - { - "begin": 982, - "end": 1081, - "name": "MLOAD" - }, - { - "begin": 982, - "end": 1081, - "name": "SWAP2" - }, - { - "begin": 982, - "end": 1081, - "name": "DUP3" - }, - { - "begin": 982, - "end": 1081, - "name": "MSTORE" - }, - { - "begin": 982, - "end": 1081, - "name": "MLOAD" - }, - { - "begin": 982, - "end": 1081, - "name": "SWAP1" - }, - { - "begin": 982, - "end": 1081, - "name": "DUP2" - }, - { - "begin": 982, - "end": 1081, - "name": "SWAP1" - }, - { - "begin": 982, - "end": 1081, - "name": "SUB" - }, - { - "begin": 982, - "end": 1081, - "name": "PUSH", - "value": "20" - }, - { - "begin": 982, - "end": 1081, - "name": "ADD" - }, - { - "begin": 982, - "end": 1081, - "name": "SWAP1" - }, - { - "begin": 982, - "end": 1081, - "name": "RETURN" - }, - { - "begin": 1064, - "end": 1101, - "name": "tag", - "value": "8" - }, - { - "begin": 1064, - "end": 1101, - "name": "JUMPDEST" - }, - { - "begin": 1064, - "end": 1101, - "name": "CALLVALUE" - }, - { - "begin": 1064, - "end": 1101, - "name": "ISZERO" - }, - { - "begin": 1064, - "end": 1101, - "name": "PUSH [tag]", - "value": "32" - }, - { - "begin": 1064, - "end": 1101, - "name": "JUMPI" - }, - { - "begin": 1064, - "end": 1101, - "name": "INVALID" - }, - { - "begin": 1064, - "end": 1101, - "name": "tag", - "value": "32" - }, - { - "begin": 1064, - "end": 1101, - "name": "JUMPDEST" - }, - { - "begin": 1064, - "end": 1101, - "name": "PUSH [tag]", - "value": "12" - }, - { - "begin": 1064, - "end": 1101, - "name": "PUSH [tag]", - "value": "34" - }, - { - "begin": 1064, - "end": 1101, - "name": "JUMP" - }, - { - "begin": 1064, - "end": 1101, - "name": "tag", - "value": "33" - }, - { - "begin": 1064, - "end": 1101, - "name": "JUMPDEST" - }, - { - "begin": 1064, - "end": 1101, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP1" - }, - { - "begin": 1064, - "end": 1101, - "name": "MLOAD" - }, - { - "begin": 1064, - "end": 1101, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP1" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP3" - }, - { - "begin": 1064, - "end": 1101, - "name": "MSTORE" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP4" - }, - { - "begin": 1064, - "end": 1101, - "name": "MLOAD" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP2" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP4" - }, - { - "begin": 1064, - "end": 1101, - "name": "ADD" - }, - { - "begin": 1064, - "end": 1101, - "name": "MSTORE" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP4" - }, - { - "begin": 1064, - "end": 1101, - "name": "MLOAD" - }, - { - "begin": 1064, - "end": 1101, - "name": "SWAP2" - }, - { - "begin": 1064, - "end": 1101, - "name": "SWAP3" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP4" - }, - { - "begin": 1064, - "end": 1101, - "name": "SWAP3" - }, - { - "begin": 1064, - "end": 1101, - "name": "SWAP1" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP4" - }, - { - "begin": 1064, - "end": 1101, - "name": "ADD" - }, - { - "begin": 1064, - "end": 1101, - "name": "SWAP2" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP6" - }, - { - "begin": 1064, - "end": 1101, - "name": "ADD" - }, - { - "begin": 1064, - "end": 1101, - "name": "SWAP1" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP1" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP4" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP4" - }, - { - "begin": 18, - "end": 20, - "name": "DUP3" - }, - { - "begin": 18, - "end": 20, - "name": "ISZERO" - }, - { - "begin": 13, - "end": 16, - "name": "PUSH [tag]", - "value": "14" - }, - { - "begin": 7, - "end": 12, - "name": "JUMPI" - }, - { - "begin": 32, - "end": 37, - "name": "tag", - "value": "36" - }, - { - "begin": 32, - "end": 37, - "name": "JUMPDEST" - }, - { - "begin": 59, - "end": 62, - "name": "DUP1" - }, - { - "begin": 53, - "end": 58, - "name": "MLOAD" - }, - { - "begin": 48, - "end": 51, - "name": "DUP3" - }, - { - "begin": 41, - "end": 47, - "name": "MSTORE" - }, - { - "begin": 93, - "end": 95, - "name": "PUSH", - "value": "20" - }, - { - "begin": 88, - "end": 91, - "name": "DUP4" - }, - { - "begin": 85, - "end": 87, - "name": "GT" - }, - { - "begin": 78, - "end": 84, - "name": "ISZERO" - }, - { - "begin": 73, - "end": 76, - "name": "PUSH [tag]", - "value": "14" - }, - { - "begin": 67, - "end": 72, - "name": "JUMPI" - }, - { - "begin": 152, - "end": 155, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0" - }, - { - "begin": 152, - "end": 155, - "name": "SWAP1" - }, - { - "begin": 152, - "end": 155, - "name": "SWAP3" - }, - { - "begin": 152, - "end": 155, - "name": "ADD" - }, - { - "begin": 152, - "end": 155, - "name": "SWAP2" - }, - { - "begin": 117, - "end": 119, - "name": "PUSH", - "value": "20" - }, - { - "begin": 108, - "end": 111, - "name": "SWAP2" - }, - { - "begin": 108, - "end": 111, - "name": "DUP3" - }, - { - "begin": 108, - "end": 111, - "name": "ADD" - }, - { - "begin": 108, - "end": 111, - "name": "SWAP2" - }, - { - "begin": 130, - "end": 133, - "name": "ADD" - }, - { - "begin": 172, - "end": 177, - "name": "PUSH [tag]", - "value": "15" - }, - { - "begin": 167, - "end": 171, - "name": "JUMP" - }, - { - "begin": 181, - "end": 184, - "name": "tag", - "value": "35" - }, - { - "begin": 181, - "end": 184, - "name": "JUMPDEST" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP1" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP1" - }, - { - "begin": 3, - "end": 189, - "name": "DUP2" - }, - { - "begin": 3, - "end": 189, - "name": "ADD" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP1" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH", - "value": "1F" - }, - { - "begin": 3, - "end": 189, - "name": "AND" - }, - { - "begin": 3, - "end": 189, - "name": "DUP1" - }, - { - "begin": 3, - "end": 189, - "name": "ISZERO" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH [tag]", - "value": "16" - }, - { - "begin": 3, - "end": 189, - "name": "JUMPI" - }, - { - "begin": 3, - "end": 189, - "name": "DUP1" - }, - { - "begin": 3, - "end": 189, - "name": "DUP3" - }, - { - "begin": 3, - "end": 189, - "name": "SUB" - }, - { - "begin": 3, - "end": 189, - "name": "DUP1" - }, - { - "begin": 3, - "end": 189, - "name": "MLOAD" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH", - "value": "1" - }, - { - "begin": 3, - "end": 189, - "name": "DUP4" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH", - "value": "20" - }, - { - "begin": 3, - "end": 189, - "name": "SUB" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH", - "value": "100" - }, - { - "begin": 3, - "end": 189, - "name": "EXP" - }, - { - "begin": 3, - "end": 189, - "name": "SUB" - }, - { - "begin": 3, - "end": 189, - "name": "NOT" - }, - { - "begin": 3, - "end": 189, - "name": "AND" - }, - { - "begin": 3, - "end": 189, - "name": "DUP2" - }, - { - "begin": 3, - "end": 189, - "name": "MSTORE" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH", - "value": "20" - }, - { - "begin": 3, - "end": 189, - "name": "ADD" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP2" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "tag", - "value": "37" - }, - { - "begin": 3, - "end": 189, - "name": "JUMPDEST" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP3" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "POP" - }, - { - "begin": 3, - "end": 189, - "name": "PUSH", - "value": "40" - }, - { - "begin": 3, - "end": 189, - "name": "MLOAD" - }, - { - "begin": 3, - "end": 189, - "name": "DUP1" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP2" - }, - { - "begin": 3, - "end": 189, - "name": "SUB" - }, - { - "begin": 3, - "end": 189, - "name": "SWAP1" - }, - { - "begin": 3, - "end": 189, - "name": "RETURN" - }, - { - "begin": 125, - "end": 535, - "name": "tag", - "value": "9" - }, - { - "begin": 125, - "end": 535, - "name": "JUMPDEST" - }, - { - "begin": 125, - "end": 535, - "name": "CALLVALUE" - }, - { - "begin": 125, - "end": 535, - "name": "ISZERO" - }, - { - "begin": 125, - "end": 535, - "name": "PUSH [tag]", - "value": "38" - }, - { - "begin": 125, - "end": 535, - "name": "JUMPI" - }, - { - "begin": 125, - "end": 535, - "name": "INVALID" - }, - { - "begin": 125, - "end": 535, - "name": "tag", - "value": "38" - }, - { - "begin": 125, - "end": 535, - "name": "JUMPDEST" - }, - { - "begin": 125, - "end": 535, - "name": "PUSH [tag]", - "value": "18" - }, - { - "begin": 125, - "end": 535, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 125, - "end": 535, - "name": "PUSH", - "value": "4" - }, - { - "begin": 125, - "end": 535, - "name": "CALLDATALOAD" - }, - { - "begin": 125, - "end": 535, - "name": "AND" - }, - { - "begin": 125, - "end": 535, - "name": "PUSH", - "value": "24" - }, - { - "begin": 125, - "end": 535, - "name": "CALLDATALOAD" - }, - { - "begin": 125, - "end": 535, - "name": "PUSH [tag]", - "value": "40" - }, - { - "begin": 125, - "end": 535, - "name": "JUMP" - }, - { - "begin": 125, - "end": 535, - "name": "tag", - "value": "39" - }, - { - "begin": 125, - "end": 535, - "name": "JUMPDEST" - }, - { - "begin": 125, - "end": 535, - "name": "PUSH", - "value": "40" - }, - { - "begin": 125, - "end": 535, - "name": "DUP1" - }, - { - "begin": 125, - "end": 535, - "name": "MLOAD" - }, - { - "begin": 125, - "end": 535, - "name": "SWAP2" - }, - { - "begin": 125, - "end": 535, - "name": "ISZERO" - }, - { - "begin": 125, - "end": 535, - "name": "ISZERO" - }, - { - "begin": 125, - "end": 535, - "name": "DUP3" - }, - { - "begin": 125, - "end": 535, - "name": "MSTORE" - }, - { - "begin": 125, - "end": 535, - "name": "MLOAD" - }, - { - "begin": 125, - "end": 535, - "name": "SWAP1" - }, - { - "begin": 125, - "end": 535, - "name": "DUP2" - }, - { - "begin": 125, - "end": 535, - "name": "SWAP1" - }, - { - "begin": 125, - "end": 535, - "name": "SUB" - }, - { - "begin": 125, - "end": 535, - "name": "PUSH", - "value": "20" - }, - { - "begin": 125, - "end": 535, - "name": "ADD" - }, - { - "begin": 125, - "end": 535, - "name": "SWAP1" - }, - { - "begin": 125, - "end": 535, - "name": "RETURN" - }, - { - "begin": 1280, - "end": 1406, - "name": "tag", - "value": "10" - }, - { - "begin": 1280, - "end": 1406, - "name": "JUMPDEST" - }, - { - "begin": 1280, - "end": 1406, - "name": "CALLVALUE" - }, - { - "begin": 1280, - "end": 1406, - "name": "ISZERO" - }, - { - "begin": 1280, - "end": 1406, - "name": "PUSH [tag]", - "value": "41" - }, - { - "begin": 1280, - "end": 1406, - "name": "JUMPI" - }, - { - "begin": 1280, - "end": 1406, - "name": "INVALID" - }, - { - "begin": 1280, - "end": 1406, - "name": "tag", - "value": "41" - }, - { - "begin": 1280, - "end": 1406, - "name": "JUMPDEST" - }, - { - "begin": 1280, - "end": 1406, - "name": "PUSH [tag]", - "value": "21" - }, - { - "begin": 1280, - "end": 1406, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1280, - "end": 1406, - "name": "PUSH", - "value": "4" - }, - { - "begin": 1280, - "end": 1406, - "name": "CALLDATALOAD" - }, - { - "begin": 1280, - "end": 1406, - "name": "DUP2" - }, - { - "begin": 1280, - "end": 1406, - "name": "AND" - }, - { - "begin": 1280, - "end": 1406, - "name": "SWAP1" - }, - { - "begin": 1280, - "end": 1406, - "name": "PUSH", - "value": "24" - }, - { - "begin": 1280, - "end": 1406, - "name": "CALLDATALOAD" - }, - { - "begin": 1280, - "end": 1406, - "name": "AND" - }, - { - "begin": 1280, - "end": 1406, - "name": "PUSH [tag]", - "value": "43" - }, - { - "begin": 1280, - "end": 1406, - "name": "JUMP" - }, - { - "begin": 1280, - "end": 1406, - "name": "tag", - "value": "42" - }, - { - "begin": 1280, - "end": 1406, - "name": "JUMPDEST" - }, - { - "begin": 1280, - "end": 1406, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1280, - "end": 1406, - "name": "DUP1" - }, - { - "begin": 1280, - "end": 1406, - "name": "MLOAD" - }, - { - "begin": 1280, - "end": 1406, - "name": "SWAP2" - }, - { - "begin": 1280, - "end": 1406, - "name": "DUP3" - }, - { - "begin": 1280, - "end": 1406, - "name": "MSTORE" - }, - { - "begin": 1280, - "end": 1406, - "name": "MLOAD" - }, - { - "begin": 1280, - "end": 1406, - "name": "SWAP1" - }, - { - "begin": 1280, - "end": 1406, - "name": "DUP2" - }, - { - "begin": 1280, - "end": 1406, - "name": "SWAP1" - }, - { - "begin": 1280, - "end": 1406, - "name": "SUB" - }, - { - "begin": 1280, - "end": 1406, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1280, - "end": 1406, - "name": "ADD" - }, - { - "begin": 1280, - "end": 1406, - "name": "SWAP1" - }, - { - "begin": 1280, - "end": 1406, - "name": "RETURN" - }, - { - "begin": 1009, - "end": 1058, - "name": "tag", - "value": "13" - }, - { - "begin": 1009, - "end": 1058, - "name": "JUMPDEST" - }, - { - "begin": 1009, - "end": 1058, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP1" - }, - { - "begin": 1009, - "end": 1058, - "name": "MLOAD" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP1" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP3" - }, - { - "begin": 1009, - "end": 1058, - "name": "ADD" - }, - { - "begin": 1009, - "end": 1058, - "name": "SWAP1" - }, - { - "begin": 1009, - "end": 1058, - "name": "SWAP2" - }, - { - "begin": 1009, - "end": 1058, - "name": "MSTORE" - }, - { - "begin": 1009, - "end": 1058, - "name": "PUSH", - "value": "11" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP2" - }, - { - "begin": 1009, - "end": 1058, - "name": "MSTORE" - }, - { - "begin": 1009, - "end": 1058, - "name": "PUSH", - "value": "30782050726F746F636F6C20546F6B656E000000000000000000000000000000" - }, - { - "begin": 1009, - "end": 1058, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP3" - }, - { - "begin": 1009, - "end": 1058, - "name": "ADD" - }, - { - "begin": 1009, - "end": 1058, - "name": "MSTORE" - }, - { - "begin": 1009, - "end": 1058, - "name": "DUP2" - }, - { - "begin": 1009, - "end": 1058, - "name": "JUMP", - "value": "[out]" - }, - { - "begin": 1087, - "end": 1274, - "name": "tag", - "value": "19" - }, - { - "begin": 1087, - "end": 1274, - "name": "JUMPDEST" - }, - { - "begin": 1160, - "end": 1179, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1168, - "end": 1178, - "name": "CALLER" - }, - { - "begin": 1160, - "end": 1179, - "name": "DUP2" - }, - { - "begin": 1160, - "end": 1179, - "name": "AND" - }, - { - "begin": 1144, - "end": 1148, - "name": "PUSH", - "value": "0" - }, - { - "begin": 1160, - "end": 1179, - "name": "DUP2" - }, - { - "begin": 1160, - "end": 1179, - "name": "DUP2" - }, - { - "begin": 1160, - "end": 1179, - "name": "MSTORE" - }, - { - "begin": 1160, - "end": 1167, - "name": "PUSH", - "value": "1" - }, - { - "begin": 1160, - "end": 1179, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1160, - "end": 1179, - "name": "SWAP1" - }, - { - "begin": 1160, - "end": 1179, - "name": "DUP2" - }, - { - "begin": 1160, - "end": 1179, - "name": "MSTORE" - }, - { - "begin": 1160, - "end": 1179, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1160, - "end": 1179, - "name": "DUP1" - }, - { - "begin": 1160, - "end": 1179, - "name": "DUP4" - }, - { - "begin": 1160, - "end": 1179, - "name": "SHA3" - }, - { - "begin": 1160, - "end": 1189, - "name": "SWAP5" - }, - { - "begin": 1160, - "end": 1189, - "name": "DUP8" - }, - { - "begin": 1160, - "end": 1189, - "name": "AND" - }, - { - "begin": 1160, - "end": 1189, - "name": "DUP1" - }, - { - "begin": 1160, - "end": 1189, - "name": "DUP5" - }, - { - "begin": 1160, - "end": 1189, - "name": "MSTORE" - }, - { - "begin": 1160, - "end": 1189, - "name": "SWAP5" - }, - { - "begin": 1160, - "end": 1189, - "name": "DUP3" - }, - { - "begin": 1160, - "end": 1189, - "name": "MSTORE" - }, - { - "begin": 1160, - "end": 1189, - "name": "DUP1" - }, - { - "begin": 1160, - "end": 1189, - "name": "DUP4" - }, - { - "begin": 1160, - "end": 1189, - "name": "SHA3" - }, - { - "begin": 1160, - "end": 1198, - "name": "DUP7" - }, - { - "begin": 1160, - "end": 1198, - "name": "SWAP1" - }, - { - "begin": 1160, - "end": 1198, - "name": "SSTORE" - }, - { - "begin": 1208, - "end": 1246, - "name": "DUP1" - }, - { - "begin": 1208, - "end": 1246, - "name": "MLOAD" - }, - { - "begin": 1208, - "end": 1246, - "name": "DUP7" - }, - { - "begin": 1208, - "end": 1246, - "name": "DUP2" - }, - { - "begin": 1208, - "end": 1246, - "name": "MSTORE" - }, - { - "begin": 1208, - "end": 1246, - "name": "SWAP1" - }, - { - "begin": 1208, - "end": 1246, - "name": "MLOAD" - }, - { - "begin": 1144, - "end": 1148, - "name": "SWAP3" - }, - { - "begin": 1144, - "end": 1148, - "name": "SWAP5" - }, - { - "begin": 1160, - "end": 1189, - "name": "SWAP4" - }, - { - "begin": 1160, - "end": 1179, - "name": "SWAP3" - }, - { - "begin": 1208, - "end": 1246, - "name": "PUSH", - "value": "8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925" - }, - { - "begin": 1208, - "end": 1246, - "name": "SWAP3" - }, - { - "begin": 1208, - "end": 1246, - "name": "SWAP2" - }, - { - "begin": 1208, - "end": 1246, - "name": "DUP2" - }, - { - "begin": 1208, - "end": 1246, - "name": "SWAP1" - }, - { - "begin": 1208, - "end": 1246, - "name": "SUB" - }, - { - "begin": 1208, - "end": 1246, - "name": "SWAP1" - }, - { - "begin": 1208, - "end": 1246, - "name": "SWAP2" - }, - { - "begin": 1208, - "end": 1246, - "name": "ADD" - }, - { - "begin": 1208, - "end": 1246, - "name": "SWAP1" - }, - { - "begin": 1208, - "end": 1246, - "name": "LOG3" - }, - { - "begin": -1, - "end": -1, - "name": "POP" - }, - { - "begin": 1263, - "end": 1267, - "name": "PUSH", - "value": "1" - }, - { - "begin": 1087, - "end": 1274, - "name": "tag", - "value": "44" - }, - { - "begin": 1087, - "end": 1274, - "name": "JUMPDEST" - }, - { - "begin": 1087, - "end": 1274, - "name": "SWAP3" - }, - { - "begin": 1087, - "end": 1274, - "name": "SWAP2" - }, - { - "begin": 1087, - "end": 1274, - "name": "POP" - }, - { - "begin": 1087, - "end": 1274, - "name": "POP" - }, - { - "begin": 1087, - "end": 1274, - "name": "JUMP", - "value": "[out]" - }, - { - "begin": 932, - "end": 964, - "name": "tag", - "value": "22" - }, - { - "begin": 932, - "end": 964, - "name": "JUMPDEST" - }, - { - "begin": 932, - "end": 964, - "name": "PUSH", - "value": "3" - }, - { - "begin": 932, - "end": 964, - "name": "SLOAD" - }, - { - "begin": 932, - "end": 964, - "name": "DUP2" - }, - { - "begin": 932, - "end": 964, - "name": "JUMP", - "value": "[out]" - }, - { - "begin": 1066, - "end": 1675, - "name": "tag", - "value": "25" - }, - { - "begin": 1066, - "end": 1675, - "name": "JUMPDEST" - }, - { - "begin": 1198, - "end": 1212, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1198, - "end": 1212, - "name": "DUP1" - }, - { - "begin": 1198, - "end": 1212, - "name": "DUP5" - }, - { - "begin": 1198, - "end": 1212, - "name": "AND" - }, - { - "begin": 1161, - "end": 1165, - "name": "PUSH", - "value": "0" - }, - { - "begin": 1198, - "end": 1212, - "name": "DUP2" - }, - { - "begin": 1198, - "end": 1212, - "name": "DUP2" - }, - { - "begin": 1198, - "end": 1212, - "name": "MSTORE" - }, - { - "begin": 1198, - "end": 1205, - "name": "PUSH", - "value": "1" - }, - { - "begin": 1198, - "end": 1212, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1198, - "end": 1212, - "name": "SWAP1" - }, - { - "begin": 1198, - "end": 1212, - "name": "DUP2" - }, - { - "begin": 1198, - "end": 1212, - "name": "MSTORE" - }, - { - "begin": 1198, - "end": 1212, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1198, - "end": 1212, - "name": "DUP1" - }, - { - "begin": 1198, - "end": 1212, - "name": "DUP4" - }, - { - "begin": 1198, - "end": 1212, - "name": "SHA3" - }, - { - "begin": 1213, - "end": 1223, - "name": "CALLER" - }, - { - "begin": 1198, - "end": 1224, - "name": "SWAP1" - }, - { - "begin": 1198, - "end": 1224, - "name": "SWAP6" - }, - { - "begin": 1198, - "end": 1224, - "name": "AND" - }, - { - "begin": 1198, - "end": 1224, - "name": "DUP4" - }, - { - "begin": 1198, - "end": 1224, - "name": "MSTORE" - }, - { - "begin": 1198, - "end": 1224, - "name": "SWAP4" - }, - { - "begin": 1198, - "end": 1224, - "name": "DUP2" - }, - { - "begin": 1198, - "end": 1224, - "name": "MSTORE" - }, - { - "begin": 1198, - "end": 1224, - "name": "DUP4" - }, - { - "begin": 1198, - "end": 1224, - "name": "DUP3" - }, - { - "begin": 1198, - "end": 1224, - "name": "SHA3" - }, - { - "begin": 1198, - "end": 1224, - "name": "SLOAD" - }, - { - "begin": 1238, - "end": 1253, - "name": "SWAP3" - }, - { - "begin": 1238, - "end": 1253, - "name": "DUP3" - }, - { - "begin": 1238, - "end": 1253, - "name": "MSTORE" - }, - { - "begin": 1238, - "end": 1253, - "name": "DUP2" - }, - { - "begin": 1238, - "end": 1253, - "name": "SWAP1" - }, - { - "begin": 1238, - "end": 1253, - "name": "MSTORE" - }, - { - "begin": 1238, - "end": 1253, - "name": "SWAP2" - }, - { - "begin": 1238, - "end": 1253, - "name": "DUP3" - }, - { - "begin": 1238, - "end": 1253, - "name": "SHA3" - }, - { - "begin": 1238, - "end": 1253, - "name": "SLOAD" - }, - { - "begin": 1238, - "end": 1263, - "name": "DUP4" - }, - { - "begin": 1238, - "end": 1263, - "name": "SWAP1" - }, - { - "begin": 1238, - "end": 1263, - "name": "LT" - }, - { - "begin": 1238, - "end": 1263, - "name": "DUP1" - }, - { - "begin": 1238, - "end": 1263, - "name": "ISZERO" - }, - { - "begin": 1238, - "end": 1263, - "name": "SWAP1" - }, - { - "begin": 1238, - "end": 1298, - "name": "PUSH [tag]", - "value": "46" - }, - { - "begin": 1238, - "end": 1298, - "name": "JUMPI" - }, - { - "begin": 1238, - "end": 1298, - "name": "POP" - }, - { - "begin": 1292, - "end": 1298, - "name": "DUP3" - }, - { - "begin": 1279, - "end": 1288, - "name": "DUP2" - }, - { - "begin": 1279, - "end": 1298, - "name": "LT" - }, - { - "begin": 1279, - "end": 1298, - "name": "ISZERO" - }, - { - "begin": 1238, - "end": 1298, - "name": "tag", - "value": "46" - }, - { - "begin": 1238, - "end": 1298, - "name": "JUMPDEST" - }, - { - "begin": 1238, - "end": 1353, - "name": "DUP1" - }, - { - "begin": 1238, - "end": 1353, - "name": "ISZERO" - }, - { - "begin": 1238, - "end": 1353, - "name": "PUSH [tag]", - "value": "47" - }, - { - "begin": 1238, - "end": 1353, - "name": "JUMPI" - }, - { - "begin": -1, - "end": -1, - "name": "POP" - }, - { - "begin": 1340, - "end": 1353, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1340, - "end": 1353, - "name": "DUP5" - }, - { - "begin": 1340, - "end": 1353, - "name": "AND" - }, - { - "begin": 1340, - "end": 1348, - "name": "PUSH", - "value": "0" - }, - { - "begin": 1340, - "end": 1353, - "name": "SWAP1" - }, - { - "begin": 1340, - "end": 1353, - "name": "DUP2" - }, - { - "begin": 1340, - "end": 1353, - "name": "MSTORE" - }, - { - "begin": 1340, - "end": 1353, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1340, - "end": 1353, - "name": "DUP2" - }, - { - "begin": 1340, - "end": 1353, - "name": "SWAP1" - }, - { - "begin": 1340, - "end": 1353, - "name": "MSTORE" - }, - { - "begin": 1340, - "end": 1353, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1340, - "end": 1353, - "name": "SWAP1" - }, - { - "begin": 1340, - "end": 1353, - "name": "SHA3" - }, - { - "begin": 1340, - "end": 1353, - "name": "SLOAD" - }, - { - "begin": 1314, - "end": 1336, - "name": "DUP4" - }, - { - "begin": 1314, - "end": 1336, - "name": "DUP2" - }, - { - "begin": 1314, - "end": 1336, - "name": "ADD" - }, - { - "begin": 1314, - "end": 1353, - "name": "LT" - }, - { - "begin": 1314, - "end": 1353, - "name": "ISZERO" - }, - { - "begin": 1238, - "end": 1353, - "name": "tag", - "value": "47" - }, - { - "begin": 1238, - "end": 1353, - "name": "JUMPDEST" - }, - { - "begin": 1234, - "end": 1669, - "name": "ISZERO" - }, - { - "begin": 1234, - "end": 1669, - "name": "PUSH [tag]", - "value": "48" - }, - { - "begin": 1234, - "end": 1669, - "name": "JUMPI" - }, - { - "begin": 1378, - "end": 1391, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1378, - "end": 1391, - "name": "DUP1" - }, - { - "begin": 1378, - "end": 1391, - "name": "DUP6" - }, - { - "begin": 1378, - "end": 1391, - "name": "AND" - }, - { - "begin": 1378, - "end": 1386, - "name": "PUSH", - "value": "0" - }, - { - "begin": 1378, - "end": 1391, - "name": "SWAP1" - }, - { - "begin": 1378, - "end": 1391, - "name": "DUP2" - }, - { - "begin": 1378, - "end": 1391, - "name": "MSTORE" - }, - { - "begin": 1378, - "end": 1391, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1378, - "end": 1391, - "name": "DUP2" - }, - { - "begin": 1378, - "end": 1391, - "name": "SWAP1" - }, - { - "begin": 1378, - "end": 1391, - "name": "MSTORE" - }, - { - "begin": 1378, - "end": 1391, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1378, - "end": 1391, - "name": "DUP1" - }, - { - "begin": 1378, - "end": 1391, - "name": "DUP3" - }, - { - "begin": 1378, - "end": 1391, - "name": "SHA3" - }, - { - "begin": 1378, - "end": 1401, - "name": "DUP1" - }, - { - "begin": 1378, - "end": 1401, - "name": "SLOAD" - }, - { - "begin": 1378, - "end": 1401, - "name": "DUP8" - }, - { - "begin": 1378, - "end": 1401, - "name": "ADD" - }, - { - "begin": 1378, - "end": 1401, - "name": "SWAP1" - }, - { - "begin": 1378, - "end": 1401, - "name": "SSTORE" - }, - { - "begin": 1415, - "end": 1430, - "name": "SWAP2" - }, - { - "begin": 1415, - "end": 1430, - "name": "DUP8" - }, - { - "begin": 1415, - "end": 1430, - "name": "AND" - }, - { - "begin": 1415, - "end": 1430, - "name": "DUP2" - }, - { - "begin": 1415, - "end": 1430, - "name": "MSTORE" - }, - { - "begin": 1415, - "end": 1430, - "name": "SHA3" - }, - { - "begin": 1415, - "end": 1440, - "name": "DUP1" - }, - { - "begin": 1415, - "end": 1440, - "name": "SLOAD" - }, - { - "begin": 1415, - "end": 1440, - "name": "DUP5" - }, - { - "begin": 1415, - "end": 1440, - "name": "SWAP1" - }, - { - "begin": 1415, - "end": 1440, - "name": "SUB" - }, - { - "begin": 1415, - "end": 1440, - "name": "SWAP1" - }, - { - "begin": 1415, - "end": 1440, - "name": "SSTORE" - }, - { - "begin": 768, - "end": 778, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1458, - "end": 1478, - "name": "DUP2" - }, - { - "begin": 1458, - "end": 1478, - "name": "LT" - }, - { - "begin": 1454, - "end": 1549, - "name": "ISZERO" - }, - { - "begin": 1454, - "end": 1549, - "name": "PUSH [tag]", - "value": "49" - }, - { - "begin": 1454, - "end": 1549, - "name": "JUMPI" - }, - { - "begin": 1498, - "end": 1512, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1498, - "end": 1512, - "name": "DUP1" - }, - { - "begin": 1498, - "end": 1512, - "name": "DUP7" - }, - { - "begin": 1498, - "end": 1512, - "name": "AND" - }, - { - "begin": 1498, - "end": 1512, - "name": "PUSH", - "value": "0" - }, - { - "begin": 1498, - "end": 1512, - "name": "SWAP1" - }, - { - "begin": 1498, - "end": 1512, - "name": "DUP2" - }, - { - "begin": 1498, - "end": 1512, - "name": "MSTORE" - }, - { - "begin": 1498, - "end": 1505, - "name": "PUSH", - "value": "1" - }, - { - "begin": 1498, - "end": 1512, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1498, - "end": 1512, - "name": "SWAP1" - }, - { - "begin": 1498, - "end": 1512, - "name": "DUP2" - }, - { - "begin": 1498, - "end": 1512, - "name": "MSTORE" - }, - { - "begin": 1498, - "end": 1512, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1498, - "end": 1512, - "name": "DUP1" - }, - { - "begin": 1498, - "end": 1512, - "name": "DUP4" - }, - { - "begin": 1498, - "end": 1512, - "name": "SHA3" - }, - { - "begin": 1513, - "end": 1523, - "name": "CALLER" - }, - { - "begin": 1498, - "end": 1524, - "name": "SWAP1" - }, - { - "begin": 1498, - "end": 1524, - "name": "SWAP5" - }, - { - "begin": 1498, - "end": 1524, - "name": "AND" - }, - { - "begin": 1498, - "end": 1524, - "name": "DUP4" - }, - { - "begin": 1498, - "end": 1524, - "name": "MSTORE" - }, - { - "begin": 1498, - "end": 1524, - "name": "SWAP3" - }, - { - "begin": 1498, - "end": 1524, - "name": "SWAP1" - }, - { - "begin": 1498, - "end": 1524, - "name": "MSTORE" - }, - { - "begin": 1498, - "end": 1524, - "name": "SHA3" - }, - { - "begin": 1498, - "end": 1534, - "name": "DUP1" - }, - { - "begin": 1498, - "end": 1534, - "name": "SLOAD" - }, - { - "begin": 1498, - "end": 1534, - "name": "DUP5" - }, - { - "begin": 1498, - "end": 1534, - "name": "SWAP1" - }, - { - "begin": 1498, - "end": 1534, - "name": "SUB" - }, - { - "begin": 1498, - "end": 1534, - "name": "SWAP1" - }, - { - "begin": 1498, - "end": 1534, - "name": "SSTORE" - }, - { - "begin": 1454, - "end": 1549, - "name": "tag", - "value": "49" - }, - { - "begin": 1454, - "end": 1549, - "name": "JUMPDEST" - }, - { - "begin": 1578, - "end": 1581, - "name": "DUP4" - }, - { - "begin": 1562, - "end": 1590, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1562, - "end": 1590, - "name": "AND" - }, - { - "begin": 1571, - "end": 1576, - "name": "DUP6" - }, - { - "begin": 1562, - "end": 1590, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1562, - "end": 1590, - "name": "AND" - }, - { - "begin": 1562, - "end": 1590, - "name": "PUSH", - "value": "DDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF" - }, - { - "begin": 1583, - "end": 1589, - "name": "DUP6" - }, - { - "begin": 1562, - "end": 1590, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1562, - "end": 1590, - "name": "MLOAD" - }, - { - "begin": 1562, - "end": 1590, - "name": "DUP1" - }, - { - "begin": 1562, - "end": 1590, - "name": "DUP3" - }, - { - "begin": 1562, - "end": 1590, - "name": "DUP2" - }, - { - "begin": 1562, - "end": 1590, - "name": "MSTORE" - }, - { - "begin": 1562, - "end": 1590, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1562, - "end": 1590, - "name": "ADD" - }, - { - "begin": 1562, - "end": 1590, - "name": "SWAP2" - }, - { - "begin": 1562, - "end": 1590, - "name": "POP" - }, - { - "begin": 1562, - "end": 1590, - "name": "POP" - }, - { - "begin": 1562, - "end": 1590, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1562, - "end": 1590, - "name": "MLOAD" - }, - { - "begin": 1562, - "end": 1590, - "name": "DUP1" - }, - { - "begin": 1562, - "end": 1590, - "name": "SWAP2" - }, - { - "begin": 1562, - "end": 1590, - "name": "SUB" - }, - { - "begin": 1562, - "end": 1590, - "name": "SWAP1" - }, - { - "begin": 1562, - "end": 1590, - "name": "LOG3" - }, - { - "begin": 1611, - "end": 1615, - "name": "PUSH", - "value": "1" - }, - { - "begin": 1604, - "end": 1615, - "name": "SWAP2" - }, - { - "begin": 1604, - "end": 1615, - "name": "POP" - }, - { - "begin": 1604, - "end": 1615, - "name": "PUSH [tag]", - "value": "50" - }, - { - "begin": 1604, - "end": 1615, - "name": "JUMP" - }, - { - "begin": 1234, - "end": 1669, - "name": "tag", - "value": "48" - }, - { - "begin": 1234, - "end": 1669, - "name": "JUMPDEST" - }, - { - "begin": 1653, - "end": 1658, - "name": "PUSH", - "value": "0" - }, - { - "begin": 1646, - "end": 1658, - "name": "SWAP2" - }, - { - "begin": 1646, - "end": 1658, - "name": "POP" - }, - { - "begin": 1234, - "end": 1669, - "name": "tag", - "value": "50" - }, - { - "begin": 1234, - "end": 1669, - "name": "JUMPDEST" - }, - { - "begin": 1066, - "end": 1675, - "name": "tag", - "value": "45" - }, - { - "begin": 1066, - "end": 1675, - "name": "JUMPDEST" - }, - { - "begin": 1066, - "end": 1675, - "name": "POP" - }, - { - "begin": 1066, - "end": 1675, - "name": "SWAP4" - }, - { - "begin": 1066, - "end": 1675, - "name": "SWAP3" - }, - { - "begin": 1066, - "end": 1675, - "name": "POP" - }, - { - "begin": 1066, - "end": 1675, - "name": "POP" - }, - { - "begin": 1066, - "end": 1675, - "name": "POP" - }, - { - "begin": 1066, - "end": 1675, - "name": "JUMP", - "value": "[out]" - }, - { - "begin": 891, - "end": 926, - "name": "tag", - "value": "28" - }, - { - "begin": 891, - "end": 926, - "name": "JUMPDEST" - }, - { - "begin": 924, - "end": 926, - "name": "PUSH", - "value": "12" - }, - { - "begin": 891, - "end": 926, - "name": "DUP2" - }, - { - "begin": 891, - "end": 926, - "name": "JUMP", - "value": "[out]" - }, - { - "begin": 982, - "end": 1081, - "name": "tag", - "value": "31" - }, - { - "begin": 982, - "end": 1081, - "name": "JUMPDEST" - }, - { - "begin": 1058, - "end": 1074, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1058, - "end": 1074, - "name": "DUP2" - }, - { - "begin": 1058, - "end": 1074, - "name": "AND" - }, - { - "begin": 1035, - "end": 1039, - "name": "PUSH", - "value": "0" - }, - { - "begin": 1058, - "end": 1074, - "name": "SWAP1" - }, - { - "begin": 1058, - "end": 1074, - "name": "DUP2" - }, - { - "begin": 1058, - "end": 1074, - "name": "MSTORE" - }, - { - "begin": 1058, - "end": 1074, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1058, - "end": 1074, - "name": "DUP2" - }, - { - "begin": 1058, - "end": 1074, - "name": "SWAP1" - }, - { - "begin": 1058, - "end": 1074, - "name": "MSTORE" - }, - { - "begin": 1058, - "end": 1074, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1058, - "end": 1074, - "name": "SWAP1" - }, - { - "begin": 1058, - "end": 1074, - "name": "SHA3" - }, - { - "begin": 1058, - "end": 1074, - "name": "SLOAD" - }, - { - "begin": 982, - "end": 1081, - "name": "tag", - "value": "51" - }, - { - "begin": 982, - "end": 1081, - "name": "JUMPDEST" - }, - { - "begin": 982, - "end": 1081, - "name": "SWAP2" - }, - { - "begin": 982, - "end": 1081, - "name": "SWAP1" - }, - { - "begin": 982, - "end": 1081, - "name": "POP" - }, - { - "begin": 982, - "end": 1081, - "name": "JUMP", - "value": "[out]" - }, - { - "begin": 1064, - "end": 1101, - "name": "tag", - "value": "34" - }, - { - "begin": 1064, - "end": 1101, - "name": "JUMPDEST" - }, - { - "begin": 1064, - "end": 1101, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP1" - }, - { - "begin": 1064, - "end": 1101, - "name": "MLOAD" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP1" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP3" - }, - { - "begin": 1064, - "end": 1101, - "name": "ADD" - }, - { - "begin": 1064, - "end": 1101, - "name": "SWAP1" - }, - { - "begin": 1064, - "end": 1101, - "name": "SWAP2" - }, - { - "begin": 1064, - "end": 1101, - "name": "MSTORE" - }, - { - "begin": 1064, - "end": 1101, - "name": "PUSH", - "value": "3" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP2" - }, - { - "begin": 1064, - "end": 1101, - "name": "MSTORE" - }, - { - "begin": 1064, - "end": 1101, - "name": "PUSH", - "value": "5A52580000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1064, - "end": 1101, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP3" - }, - { - "begin": 1064, - "end": 1101, - "name": "ADD" - }, - { - "begin": 1064, - "end": 1101, - "name": "MSTORE" - }, - { - "begin": 1064, - "end": 1101, - "name": "DUP2" - }, - { - "begin": 1064, - "end": 1101, - "name": "JUMP", - "value": "[out]" - }, - { - "begin": 125, - "end": 535, - "name": "tag", - "value": "40" - }, - { - "begin": 125, - "end": 535, - "name": "JUMPDEST" - }, - { - "begin": 267, - "end": 287, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 276, - "end": 286, - "name": "CALLER" - }, - { - "begin": 267, - "end": 287, - "name": "AND" - }, - { - "begin": 178, - "end": 182, - "name": "PUSH", - "value": "0" - }, - { - "begin": 267, - "end": 287, - "name": "SWAP1" - }, - { - "begin": 267, - "end": 287, - "name": "DUP2" - }, - { - "begin": 267, - "end": 287, - "name": "MSTORE" - }, - { - "begin": 267, - "end": 287, - "name": "PUSH", - "value": "20" - }, - { - "begin": 267, - "end": 287, - "name": "DUP2" - }, - { - "begin": 267, - "end": 287, - "name": "SWAP1" - }, - { - "begin": 267, - "end": 287, - "name": "MSTORE" - }, - { - "begin": 267, - "end": 287, - "name": "PUSH", - "value": "40" - }, - { - "begin": 267, - "end": 287, - "name": "DUP2" - }, - { - "begin": 267, - "end": 287, - "name": "SHA3" - }, - { - "begin": 267, - "end": 287, - "name": "SLOAD" - }, - { - "begin": 267, - "end": 297, - "name": "DUP3" - }, - { - "begin": 267, - "end": 297, - "name": "SWAP1" - }, - { - "begin": 267, - "end": 297, - "name": "LT" - }, - { - "begin": 267, - "end": 297, - "name": "DUP1" - }, - { - "begin": 267, - "end": 297, - "name": "ISZERO" - }, - { - "begin": 267, - "end": 297, - "name": "SWAP1" - }, - { - "begin": 267, - "end": 340, - "name": "PUSH [tag]", - "value": "53" - }, - { - "begin": 267, - "end": 340, - "name": "JUMPI" - }, - { - "begin": -1, - "end": -1, - "name": "POP" - }, - { - "begin": 327, - "end": 340, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 327, - "end": 340, - "name": "DUP4" - }, - { - "begin": 327, - "end": 340, - "name": "AND" - }, - { - "begin": 327, - "end": 335, - "name": "PUSH", - "value": "0" - }, - { - "begin": 327, - "end": 340, - "name": "SWAP1" - }, - { - "begin": 327, - "end": 340, - "name": "DUP2" - }, - { - "begin": 327, - "end": 340, - "name": "MSTORE" - }, - { - "begin": 327, - "end": 340, - "name": "PUSH", - "value": "20" - }, - { - "begin": 327, - "end": 340, - "name": "DUP2" - }, - { - "begin": 327, - "end": 340, - "name": "SWAP1" - }, - { - "begin": 327, - "end": 340, - "name": "MSTORE" - }, - { - "begin": 327, - "end": 340, - "name": "PUSH", - "value": "40" - }, - { - "begin": 327, - "end": 340, - "name": "SWAP1" - }, - { - "begin": 327, - "end": 340, - "name": "SHA3" - }, - { - "begin": 327, - "end": 340, - "name": "SLOAD" - }, - { - "begin": 301, - "end": 323, - "name": "DUP3" - }, - { - "begin": 301, - "end": 323, - "name": "DUP2" - }, - { - "begin": 301, - "end": 323, - "name": "ADD" - }, - { - "begin": 301, - "end": 340, - "name": "LT" - }, - { - "begin": 301, - "end": 340, - "name": "ISZERO" - }, - { - "begin": 267, - "end": 340, - "name": "tag", - "value": "53" - }, - { - "begin": 267, - "end": 340, - "name": "JUMPDEST" - }, - { - "begin": 263, - "end": 529, - "name": "ISZERO" - }, - { - "begin": 263, - "end": 529, - "name": "PUSH [tag]", - "value": "54" - }, - { - "begin": 263, - "end": 529, - "name": "JUMPI" - }, - { - "begin": 356, - "end": 376, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 365, - "end": 375, - "name": "CALLER" - }, - { - "begin": 356, - "end": 376, - "name": "DUP2" - }, - { - "begin": 356, - "end": 376, - "name": "AND" - }, - { - "begin": 356, - "end": 364, - "name": "PUSH", - "value": "0" - }, - { - "begin": 356, - "end": 376, - "name": "DUP2" - }, - { - "begin": 356, - "end": 376, - "name": "DUP2" - }, - { - "begin": 356, - "end": 376, - "name": "MSTORE" - }, - { - "begin": 356, - "end": 376, - "name": "PUSH", - "value": "20" - }, - { - "begin": 356, - "end": 376, - "name": "DUP2" - }, - { - "begin": 356, - "end": 376, - "name": "DUP2" - }, - { - "begin": 356, - "end": 376, - "name": "MSTORE" - }, - { - "begin": 356, - "end": 376, - "name": "PUSH", - "value": "40" - }, - { - "begin": 356, - "end": 376, - "name": "DUP1" - }, - { - "begin": 356, - "end": 376, - "name": "DUP4" - }, - { - "begin": 356, - "end": 376, - "name": "SHA3" - }, - { - "begin": 356, - "end": 386, - "name": "DUP1" - }, - { - "begin": 356, - "end": 386, - "name": "SLOAD" - }, - { - "begin": 356, - "end": 386, - "name": "DUP9" - }, - { - "begin": 356, - "end": 386, - "name": "SWAP1" - }, - { - "begin": 356, - "end": 386, - "name": "SUB" - }, - { - "begin": 356, - "end": 386, - "name": "SWAP1" - }, - { - "begin": 356, - "end": 386, - "name": "SSTORE" - }, - { - "begin": 400, - "end": 413, - "name": "SWAP4" - }, - { - "begin": 400, - "end": 413, - "name": "DUP8" - }, - { - "begin": 400, - "end": 413, - "name": "AND" - }, - { - "begin": 400, - "end": 413, - "name": "DUP1" - }, - { - "begin": 400, - "end": 413, - "name": "DUP4" - }, - { - "begin": 400, - "end": 413, - "name": "MSTORE" - }, - { - "begin": 400, - "end": 413, - "name": "SWAP2" - }, - { - "begin": 400, - "end": 413, - "name": "DUP5" - }, - { - "begin": 400, - "end": 413, - "name": "SWAP1" - }, - { - "begin": 400, - "end": 413, - "name": "SHA3" - }, - { - "begin": 400, - "end": 423, - "name": "DUP1" - }, - { - "begin": 400, - "end": 423, - "name": "SLOAD" - }, - { - "begin": 400, - "end": 423, - "name": "DUP8" - }, - { - "begin": 400, - "end": 423, - "name": "ADD" - }, - { - "begin": 400, - "end": 423, - "name": "SWAP1" - }, - { - "begin": 400, - "end": 423, - "name": "SSTORE" - }, - { - "begin": 437, - "end": 470, - "name": "DUP4" - }, - { - "begin": 437, - "end": 470, - "name": "MLOAD" - }, - { - "begin": 437, - "end": 470, - "name": "DUP7" - }, - { - "begin": 437, - "end": 470, - "name": "DUP2" - }, - { - "begin": 437, - "end": 470, - "name": "MSTORE" - }, - { - "begin": 437, - "end": 470, - "name": "SWAP4" - }, - { - "begin": 437, - "end": 470, - "name": "MLOAD" - }, - { - "begin": 400, - "end": 413, - "name": "SWAP2" - }, - { - "begin": 400, - "end": 413, - "name": "SWAP4" - }, - { - "begin": 437, - "end": 470, - "name": "PUSH", - "value": "DDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF" - }, - { - "begin": 437, - "end": 470, - "name": "SWAP3" - }, - { - "begin": 437, - "end": 470, - "name": "SWAP1" - }, - { - "begin": 437, - "end": 470, - "name": "DUP2" - }, - { - "begin": 437, - "end": 470, - "name": "SWAP1" - }, - { - "begin": 437, - "end": 470, - "name": "SUB" - }, - { - "begin": 437, - "end": 470, - "name": "SWAP1" - }, - { - "begin": 437, - "end": 470, - "name": "SWAP2" - }, - { - "begin": 437, - "end": 470, - "name": "ADD" - }, - { - "begin": 437, - "end": 470, - "name": "SWAP1" - }, - { - "begin": 437, - "end": 470, - "name": "LOG3" - }, - { - "begin": -1, - "end": -1, - "name": "POP" - }, - { - "begin": 491, - "end": 495, - "name": "PUSH", - "value": "1" - }, - { - "begin": 484, - "end": 495, - "name": "PUSH [tag]", - "value": "44" - }, - { - "begin": 484, - "end": 495, - "name": "JUMP" - }, - { - "begin": 263, - "end": 529, - "name": "tag", - "value": "54" - }, - { - "begin": 263, - "end": 529, - "name": "JUMPDEST" - }, - { - "begin": -1, - "end": -1, - "name": "POP" - }, - { - "begin": 521, - "end": 526, - "name": "PUSH", - "value": "0" - }, - { - "begin": 514, - "end": 526, - "name": "PUSH [tag]", - "value": "44" - }, - { - "begin": 514, - "end": 526, - "name": "JUMP" - }, - { - "begin": 263, - "end": 529, - "name": "tag", - "value": "55" - }, - { - "begin": 263, - "end": 529, - "name": "JUMPDEST" - }, - { - "begin": 125, - "end": 535, - "name": "tag", - "value": "52" - }, - { - "begin": 125, - "end": 535, - "name": "JUMPDEST" - }, - { - "begin": 125, - "end": 535, - "name": "SWAP3" - }, - { - "begin": 125, - "end": 535, - "name": "SWAP2" - }, - { - "begin": 125, - "end": 535, - "name": "POP" - }, - { - "begin": 125, - "end": 535, - "name": "POP" - }, - { - "begin": 125, - "end": 535, - "name": "JUMP", - "value": "[out]" - }, - { - "begin": 1280, - "end": 1406, - "name": "tag", - "value": "43" - }, - { - "begin": 1280, - "end": 1406, - "name": "JUMPDEST" - }, - { - "begin": 1374, - "end": 1389, - "name": "PUSH", - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { - "begin": 1374, - "end": 1389, - "name": "DUP1" - }, - { - "begin": 1374, - "end": 1389, - "name": "DUP4" - }, - { - "begin": 1374, - "end": 1389, - "name": "AND" - }, - { - "begin": 1351, - "end": 1355, - "name": "PUSH", - "value": "0" - }, - { - "begin": 1374, - "end": 1389, - "name": "SWAP1" - }, - { - "begin": 1374, - "end": 1389, - "name": "DUP2" - }, - { - "begin": 1374, - "end": 1389, - "name": "MSTORE" - }, - { - "begin": 1374, - "end": 1381, - "name": "PUSH", - "value": "1" - }, - { - "begin": 1374, - "end": 1389, - "name": "PUSH", - "value": "20" - }, - { - "begin": 1374, - "end": 1389, - "name": "SWAP1" - }, - { - "begin": 1374, - "end": 1389, - "name": "DUP2" - }, - { - "begin": 1374, - "end": 1389, - "name": "MSTORE" - }, - { - "begin": 1374, - "end": 1389, - "name": "PUSH", - "value": "40" - }, - { - "begin": 1374, - "end": 1389, - "name": "DUP1" - }, - { - "begin": 1374, - "end": 1389, - "name": "DUP4" - }, - { - "begin": 1374, - "end": 1389, - "name": "SHA3" - }, - { - "begin": 1374, - "end": 1399, - "name": "SWAP4" - }, - { - "begin": 1374, - "end": 1399, - "name": "DUP6" - }, - { - "begin": 1374, - "end": 1399, - "name": "AND" - }, - { - "begin": 1374, - "end": 1399, - "name": "DUP4" - }, - { - "begin": 1374, - "end": 1399, - "name": "MSTORE" - }, - { - "begin": 1374, - "end": 1399, - "name": "SWAP3" - }, - { - "begin": 1374, - "end": 1399, - "name": "SWAP1" - }, - { - "begin": 1374, - "end": 1399, - "name": "MSTORE" - }, - { - "begin": 1374, - "end": 1399, - "name": "SHA3" - }, - { - "begin": 1374, - "end": 1399, - "name": "SLOAD" - }, - { - "begin": 1280, - "end": 1406, - "name": "tag", - "value": "56" - }, - { - "begin": 1280, - "end": 1406, - "name": "JUMPDEST" - }, - { - "begin": 1280, - "end": 1406, - "name": "SWAP3" - }, - { - "begin": 1280, - "end": 1406, - "name": "SWAP2" - }, - { - "begin": 1280, - "end": 1406, - "name": "POP" - }, - { - "begin": 1280, - "end": 1406, - "name": "POP" - }, - { - "begin": 1280, - "end": 1406, - "name": "JUMP", - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "name()": "06fdde03", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": - "{\"compiler\":{\"version\":\"0.4.11+commit.68ef5810\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"transferFrom(address,address,uint256)\":{\"details\":\"ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance.\",\"params\":{\"_from\":\"Address to transfer from.\",\"_to\":\"Address to transfer to.\",\"_value\":\"Amount to transfer.\"},\"return\":\"Success of transfer.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"2.0.0/tokens/ZRXToken/ZRXToken.sol\":\"ZRXToken\"},\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"1.0.0/ERC20Token/ERC20Token_v1.sol\":{\"keccak256\":\"0x3d710b436c430d6fe49f64b091555405360d76da6454b93faa8e213eea34a96d\",\"urls\":[\"bzzr://d12710a563415ad98ff28ecb3aab0b68467b3d023e7c130c73ed9918ef86158e\"]},\"1.0.0/Token/Token_v1.sol\":{\"keccak256\":\"0x35a82bc7bc0994caa97f8ea44660b9b5e796acfe72705b5ff7ed8f2a3c47ff37\",\"urls\":[\"bzzr://a62ae857a4cf2e8948e36d02470c612ac1a5ac20ebe1c1b553ad1ed8becb634e\"]},\"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":{\"keccak256\":\"0x2e1f4b899081cedd8940a9cd0f0f7413264c883312ed0ba9c53885766fe0a1a5\",\"urls\":[\"bzzr://47c42a58e56ffe81e49c8aabd3c391f5fa807fea299b3a2178501e3669baeb52\"]},\"2.0.0/tokens/ZRXToken/ZRXToken.sol\":{\"keccak256\":\"0x9eeb623d48909b083c77688b13b610811c53e37622b3fcbaa23c01873230f5d6\",\"urls\":[\"bzzr://84f3b5c2653068092771d443281018ff2ee0543817426d0fb6f9037a3570e37f\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - }, - "sources": { - "1.0.0/ERC20Token/ERC20Token_v1.sol": { - "id": 0, - "legacyAST": { - "children": [ - { - "attributes": { - "literals": ["solidity", "^", "0.4", ".11"] - }, - "id": 126, - "name": "PragmaDirective", - "src": "0:24:0" - }, - { - "attributes": { - "file": "../Token/Token_v1.sol" - }, - "id": 128, - "name": "ImportDirective", - "src": "26:58:0" - }, - { - "attributes": { - "fullyImplemented": true, - "isLibrary": false, - "linearizedBaseContracts": [322, 397], - "name": "ERC20Token_v1" - }, - "children": [ - { - "children": [ - { - "attributes": { - "name": "Token" - }, - "id": 129, - "name": "UserDefinedTypeName", - "src": "112:5:0" - } - ], - "id": 130, - "name": "InheritanceSpecifier", - "src": "112:5:0" - }, - { - "attributes": { - "constant": false, - "name": "transfer", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "name": "_to", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 131, - "name": "ElementaryTypeName", - "src": "143:7:0" - } - ], - "id": 132, - "name": "VariableDeclaration", - "src": "143:11:0" - }, - { - "attributes": { - "constant": false, - "name": "_value", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 133, - "name": "ElementaryTypeName", - "src": "156:4:0" - } - ], - "id": 134, - "name": "VariableDeclaration", - "src": "156:11:0" - } - ], - "id": 135, - "name": "ParameterList", - "src": "142:26:0" - }, - { - "children": [ - { - "attributes": { - "constant": false, - "name": "", - "storageLocation": "default", - "type": "bool", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "bool" - }, - "id": 136, - "name": "ElementaryTypeName", - "src": "178:4:0" - } - ], - "id": 137, - "name": "VariableDeclaration", - "src": "178:4:0" - } - ], - "id": 138, - "name": "ParameterList", - "src": "177:6:0" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "operator": "&&", - "type": "bool" - }, - "children": [ - { - "attributes": { - "operator": ">=", - "type": "bool" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 139, - "name": "Identifier", - "src": "267:8:0" - }, - { - "attributes": { - "member_name": "sender", - "type": "address" - }, - "children": [ - { - "attributes": { - "type": "msg", - "value": "msg" - }, - "id": 140, - "name": "Identifier", - "src": "276:3:0" - } - ], - "id": 141, - "name": "MemberAccess", - "src": "276:10:0" - } - ], - "id": 142, - "name": "IndexAccess", - "src": "267:20:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 143, - "name": "Identifier", - "src": "291:6:0" - } - ], - "id": 144, - "name": "BinaryOperation", - "src": "267:30:0" - }, - { - "attributes": { - "operator": ">=", - "type": "bool" - }, - "children": [ - { - "attributes": { - "operator": "+", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 145, - "name": "Identifier", - "src": "301:8:0" - }, - { - "attributes": { - "type": "address", - "value": "_to" - }, - "id": 146, - "name": "Identifier", - "src": "310:3:0" - } - ], - "id": 147, - "name": "IndexAccess", - "src": "301:13:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 148, - "name": "Identifier", - "src": "317:6:0" - } - ], - "id": 149, - "name": "BinaryOperation", - "src": "301:22:0" - }, - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 150, - "name": "Identifier", - "src": "327:8:0" - }, - { - "attributes": { - "type": "address", - "value": "_to" - }, - "id": 151, - "name": "Identifier", - "src": "336:3:0" - } - ], - "id": 152, - "name": "IndexAccess", - "src": "327:13:0" - } - ], - "id": 153, - "name": "BinaryOperation", - "src": "301:39:0" - } - ], - "id": 154, - "name": "BinaryOperation", - "src": "267:73:0" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "operator": "-=", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 155, - "name": "Identifier", - "src": "356:8:0" - }, - { - "attributes": { - "member_name": "sender", - "type": "address" - }, - "children": [ - { - "attributes": { - "type": "msg", - "value": "msg" - }, - "id": 156, - "name": "Identifier", - "src": "365:3:0" - } - ], - "id": 157, - "name": "MemberAccess", - "src": "365:10:0" - } - ], - "id": 158, - "name": "IndexAccess", - "src": "356:20:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 159, - "name": "Identifier", - "src": "380:6:0" - } - ], - "id": 160, - "name": "Assignment", - "src": "356:30:0" - } - ], - "id": 161, - "name": "ExpressionStatement", - "src": "356:30:0" - }, - { - "children": [ - { - "attributes": { - "operator": "+=", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 162, - "name": "Identifier", - "src": "400:8:0" - }, - { - "attributes": { - "type": "address", - "value": "_to" - }, - "id": 163, - "name": "Identifier", - "src": "409:3:0" - } - ], - "id": 164, - "name": "IndexAccess", - "src": "400:13:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 165, - "name": "Identifier", - "src": "417:6:0" - } - ], - "id": 166, - "name": "Assignment", - "src": "400:23:0" - } - ], - "id": 167, - "name": "ExpressionStatement", - "src": "400:23:0" - }, - { - "children": [ - { - "attributes": { - "type": "tuple()", - "type_conversion": false - }, - "children": [ - { - "attributes": { - "type": - "function (address,address,uint256) constant", - "value": "Transfer" - }, - "id": 168, - "name": "Identifier", - "src": "437:8:0" - }, - { - "attributes": { - "member_name": "sender", - "type": "address" - }, - "children": [ - { - "attributes": { - "type": "msg", - "value": "msg" - }, - "id": 169, - "name": "Identifier", - "src": "446:3:0" - } - ], - "id": 170, - "name": "MemberAccess", - "src": "446:10:0" - }, - { - "attributes": { - "type": "address", - "value": "_to" - }, - "id": 171, - "name": "Identifier", - "src": "458:3:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 172, - "name": "Identifier", - "src": "463:6:0" - } - ], - "id": 173, - "name": "FunctionCall", - "src": "437:33:0" - } - ], - "id": 174, - "name": "ExpressionStatement", - "src": "437:33:0" - }, - { - "children": [ - { - "attributes": { - "hexvalue": "74727565", - "subdenomination": null, - "token": "true", - "type": "bool", - "value": "true" - }, - "id": 175, - "name": "Literal", - "src": "491:4:0" - } - ], - "id": 176, - "name": "Return", - "src": "484:11:0" - } - ], - "id": 177, - "name": "Block", - "src": "342:164:0" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "hexvalue": "66616c7365", - "subdenomination": null, - "token": "false", - "type": "bool", - "value": "false" - }, - "id": 178, - "name": "Literal", - "src": "521:5:0" - } - ], - "id": 179, - "name": "Return", - "src": "514:12:0" - } - ], - "id": 180, - "name": "Block", - "src": "512:17:0" - } - ], - "id": 181, - "name": "IfStatement", - "src": "263:266:0" - } - ], - "id": 182, - "name": "Block", - "src": "184:351:0" - } - ], - "id": 183, - "name": "FunctionDefinition", - "src": "125:410:0" - }, - { - "attributes": { - "constant": false, - "name": "transferFrom", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "name": "_from", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 184, - "name": "ElementaryTypeName", - "src": "563:7:0" - } - ], - "id": 185, - "name": "VariableDeclaration", - "src": "563:13:0" - }, - { - "attributes": { - "constant": false, - "name": "_to", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 186, - "name": "ElementaryTypeName", - "src": "578:7:0" - } - ], - "id": 187, - "name": "VariableDeclaration", - "src": "578:11:0" - }, - { - "attributes": { - "constant": false, - "name": "_value", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 188, - "name": "ElementaryTypeName", - "src": "591:4:0" - } - ], - "id": 189, - "name": "VariableDeclaration", - "src": "591:11:0" - } - ], - "id": 190, - "name": "ParameterList", - "src": "562:41:0" - }, - { - "children": [ - { - "attributes": { - "constant": false, - "name": "", - "storageLocation": "default", - "type": "bool", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "bool" - }, - "id": 191, - "name": "ElementaryTypeName", - "src": "613:4:0" - } - ], - "id": 192, - "name": "VariableDeclaration", - "src": "613:4:0" - } - ], - "id": 193, - "name": "ParameterList", - "src": "612:6:0" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "operator": "&&", - "type": "bool" - }, - "children": [ - { - "attributes": { - "operator": "&&", - "type": "bool" - }, - "children": [ - { - "attributes": { - "operator": ">=", - "type": "bool" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 194, - "name": "Identifier", - "src": "633:8:0" - }, - { - "attributes": { - "type": "address", - "value": "_from" - }, - "id": 195, - "name": "Identifier", - "src": "642:5:0" - } - ], - "id": 196, - "name": "IndexAccess", - "src": "633:15:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 197, - "name": "Identifier", - "src": "652:6:0" - } - ], - "id": 198, - "name": "BinaryOperation", - "src": "633:25:0" - }, - { - "attributes": { - "operator": ">=", - "type": "bool" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => mapping(address => uint256))", - "value": "allowed" - }, - "id": 199, - "name": "Identifier", - "src": "662:7:0" - }, - { - "attributes": { - "type": "address", - "value": "_from" - }, - "id": 200, - "name": "Identifier", - "src": "670:5:0" - } - ], - "id": 201, - "name": "IndexAccess", - "src": "662:14:0" - }, - { - "attributes": { - "member_name": "sender", - "type": "address" - }, - "children": [ - { - "attributes": { - "type": "msg", - "value": "msg" - }, - "id": 202, - "name": "Identifier", - "src": "677:3:0" - } - ], - "id": 203, - "name": "MemberAccess", - "src": "677:10:0" - } - ], - "id": 204, - "name": "IndexAccess", - "src": "662:26:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 205, - "name": "Identifier", - "src": "692:6:0" - } - ], - "id": 206, - "name": "BinaryOperation", - "src": "662:36:0" - } - ], - "id": 207, - "name": "BinaryOperation", - "src": "633:65:0" - }, - { - "attributes": { - "operator": ">=", - "type": "bool" - }, - "children": [ - { - "attributes": { - "operator": "+", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 208, - "name": "Identifier", - "src": "702:8:0" - }, - { - "attributes": { - "type": "address", - "value": "_to" - }, - "id": 209, - "name": "Identifier", - "src": "711:3:0" - } - ], - "id": 210, - "name": "IndexAccess", - "src": "702:13:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 211, - "name": "Identifier", - "src": "718:6:0" - } - ], - "id": 212, - "name": "BinaryOperation", - "src": "702:22:0" - }, - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 213, - "name": "Identifier", - "src": "728:8:0" - }, - { - "attributes": { - "type": "address", - "value": "_to" - }, - "id": 214, - "name": "Identifier", - "src": "737:3:0" - } - ], - "id": 215, - "name": "IndexAccess", - "src": "728:13:0" - } - ], - "id": 216, - "name": "BinaryOperation", - "src": "702:39:0" - } - ], - "id": 217, - "name": "BinaryOperation", - "src": "633:108:0" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "operator": "+=", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 218, - "name": "Identifier", - "src": "757:8:0" - }, - { - "attributes": { - "type": "address", - "value": "_to" - }, - "id": 219, - "name": "Identifier", - "src": "766:3:0" - } - ], - "id": 220, - "name": "IndexAccess", - "src": "757:13:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 221, - "name": "Identifier", - "src": "774:6:0" - } - ], - "id": 222, - "name": "Assignment", - "src": "757:23:0" - } - ], - "id": 223, - "name": "ExpressionStatement", - "src": "757:23:0" - }, - { - "children": [ - { - "attributes": { - "operator": "-=", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 224, - "name": "Identifier", - "src": "794:8:0" - }, - { - "attributes": { - "type": "address", - "value": "_from" - }, - "id": 225, - "name": "Identifier", - "src": "803:5:0" - } - ], - "id": 226, - "name": "IndexAccess", - "src": "794:15:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 227, - "name": "Identifier", - "src": "813:6:0" - } - ], - "id": 228, - "name": "Assignment", - "src": "794:25:0" - } - ], - "id": 229, - "name": "ExpressionStatement", - "src": "794:25:0" - }, - { - "children": [ - { - "attributes": { - "operator": "-=", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => mapping(address => uint256))", - "value": "allowed" - }, - "id": 230, - "name": "Identifier", - "src": "833:7:0" - }, - { - "attributes": { - "type": "address", - "value": "_from" - }, - "id": 231, - "name": "Identifier", - "src": "841:5:0" - } - ], - "id": 234, - "name": "IndexAccess", - "src": "833:14:0" - }, - { - "attributes": { - "member_name": "sender", - "type": "address" - }, - "children": [ - { - "attributes": { - "type": "msg", - "value": "msg" - }, - "id": 232, - "name": "Identifier", - "src": "848:3:0" - } - ], - "id": 233, - "name": "MemberAccess", - "src": "848:10:0" - } - ], - "id": 235, - "name": "IndexAccess", - "src": "833:26:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 236, - "name": "Identifier", - "src": "863:6:0" - } - ], - "id": 237, - "name": "Assignment", - "src": "833:36:0" - } - ], - "id": 238, - "name": "ExpressionStatement", - "src": "833:36:0" - }, - { - "children": [ - { - "attributes": { - "type": "tuple()", - "type_conversion": false - }, - "children": [ - { - "attributes": { - "type": - "function (address,address,uint256) constant", - "value": "Transfer" - }, - "id": 239, - "name": "Identifier", - "src": "883:8:0" - }, - { - "attributes": { - "type": "address", - "value": "_from" - }, - "id": 240, - "name": "Identifier", - "src": "892:5:0" - }, - { - "attributes": { - "type": "address", - "value": "_to" - }, - "id": 241, - "name": "Identifier", - "src": "899:3:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 242, - "name": "Identifier", - "src": "904:6:0" - } - ], - "id": 243, - "name": "FunctionCall", - "src": "883:28:0" - } - ], - "id": 244, - "name": "ExpressionStatement", - "src": "883:28:0" - }, - { - "children": [ - { - "attributes": { - "hexvalue": "74727565", - "subdenomination": null, - "token": "true", - "type": "bool", - "value": "true" - }, - "id": 245, - "name": "Literal", - "src": "932:4:0" - } - ], - "id": 246, - "name": "Return", - "src": "925:11:0" - } - ], - "id": 247, - "name": "Block", - "src": "743:204:0" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "hexvalue": "66616c7365", - "subdenomination": null, - "token": "false", - "type": "bool", - "value": "false" - }, - "id": 248, - "name": "Literal", - "src": "962:5:0" - } - ], - "id": 249, - "name": "Return", - "src": "955:12:0" - } - ], - "id": 250, - "name": "Block", - "src": "953:17:0" - } - ], - "id": 251, - "name": "IfStatement", - "src": "629:341:0" - } - ], - "id": 252, - "name": "Block", - "src": "619:357:0" - } - ], - "id": 253, - "name": "FunctionDefinition", - "src": "541:435:0" - }, - { - "attributes": { - "constant": true, - "name": "balanceOf", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "name": "_owner", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 254, - "name": "ElementaryTypeName", - "src": "1001:7:0" - } - ], - "id": 255, - "name": "VariableDeclaration", - "src": "1001:14:0" - } - ], - "id": 256, - "name": "ParameterList", - "src": "1000:16:0" - }, - { - "children": [ - { - "attributes": { - "constant": false, - "name": "", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 257, - "name": "ElementaryTypeName", - "src": "1035:4:0" - } - ], - "id": 258, - "name": "VariableDeclaration", - "src": "1035:4:0" - } - ], - "id": 259, - "name": "ParameterList", - "src": "1034:6:0" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "mapping(address => uint256)", - "value": "balances" - }, - "id": 260, - "name": "Identifier", - "src": "1058:8:0" - }, - { - "attributes": { - "type": "address", - "value": "_owner" - }, - "id": 261, - "name": "Identifier", - "src": "1067:6:0" - } - ], - "id": 262, - "name": "IndexAccess", - "src": "1058:16:0" - } - ], - "id": 263, - "name": "Return", - "src": "1051:23:0" - } - ], - "id": 264, - "name": "Block", - "src": "1041:40:0" - } - ], - "id": 265, - "name": "FunctionDefinition", - "src": "982:99:0" - }, - { - "attributes": { - "constant": false, - "name": "approve", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "name": "_spender", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 266, - "name": "ElementaryTypeName", - "src": "1104:7:0" - } - ], - "id": 267, - "name": "VariableDeclaration", - "src": "1104:16:0" - }, - { - "attributes": { - "constant": false, - "name": "_value", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 268, - "name": "ElementaryTypeName", - "src": "1122:4:0" - } - ], - "id": 269, - "name": "VariableDeclaration", - "src": "1122:11:0" - } - ], - "id": 270, - "name": "ParameterList", - "src": "1103:31:0" - }, - { - "children": [ - { - "attributes": { - "constant": false, - "name": "", - "storageLocation": "default", - "type": "bool", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "bool" - }, - "id": 271, - "name": "ElementaryTypeName", - "src": "1144:4:0" - } - ], - "id": 272, - "name": "VariableDeclaration", - "src": "1144:4:0" - } - ], - "id": 273, - "name": "ParameterList", - "src": "1143:6:0" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "operator": "=", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "mapping(address => uint256)" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => mapping(address => uint256))", - "value": "allowed" - }, - "id": 274, - "name": "Identifier", - "src": "1160:7:0" - }, - { - "attributes": { - "member_name": "sender", - "type": "address" - }, - "children": [ - { - "attributes": { - "type": "msg", - "value": "msg" - }, - "id": 275, - "name": "Identifier", - "src": "1168:3:0" - } - ], - "id": 276, - "name": "MemberAccess", - "src": "1168:10:0" - } - ], - "id": 278, - "name": "IndexAccess", - "src": "1160:19:0" - }, - { - "attributes": { - "type": "address", - "value": "_spender" - }, - "id": 277, - "name": "Identifier", - "src": "1180:8:0" - } - ], - "id": 279, - "name": "IndexAccess", - "src": "1160:29:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 280, - "name": "Identifier", - "src": "1192:6:0" - } - ], - "id": 281, - "name": "Assignment", - "src": "1160:38:0" - } - ], - "id": 282, - "name": "ExpressionStatement", - "src": "1160:38:0" - }, - { - "children": [ - { - "attributes": { - "type": "tuple()", - "type_conversion": false - }, - "children": [ - { - "attributes": { - "type": - "function (address,address,uint256) constant", - "value": "Approval" - }, - "id": 283, - "name": "Identifier", - "src": "1208:8:0" - }, - { - "attributes": { - "member_name": "sender", - "type": "address" - }, - "children": [ - { - "attributes": { - "type": "msg", - "value": "msg" - }, - "id": 284, - "name": "Identifier", - "src": "1217:3:0" - } - ], - "id": 285, - "name": "MemberAccess", - "src": "1217:10:0" - }, - { - "attributes": { - "type": "address", - "value": "_spender" - }, - "id": 286, - "name": "Identifier", - "src": "1229:8:0" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 287, - "name": "Identifier", - "src": "1239:6:0" - } - ], - "id": 288, - "name": "FunctionCall", - "src": "1208:38:0" - } - ], - "id": 289, - "name": "ExpressionStatement", - "src": "1208:38:0" - }, - { - "children": [ - { - "attributes": { - "hexvalue": "74727565", - "subdenomination": null, - "token": "true", - "type": "bool", - "value": "true" - }, - "id": 290, - "name": "Literal", - "src": "1263:4:0" - } - ], - "id": 291, - "name": "Return", - "src": "1256:11:0" - } - ], - "id": 292, - "name": "Block", - "src": "1150:124:0" - } - ], - "id": 293, - "name": "FunctionDefinition", - "src": "1087:187:0" - }, - { - "attributes": { - "constant": true, - "name": "allowance", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "name": "_owner", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 294, - "name": "ElementaryTypeName", - "src": "1299:7:0" - } - ], - "id": 295, - "name": "VariableDeclaration", - "src": "1299:14:0" - }, - { - "attributes": { - "constant": false, - "name": "_spender", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 296, - "name": "ElementaryTypeName", - "src": "1315:7:0" - } - ], - "id": 297, - "name": "VariableDeclaration", - "src": "1315:16:0" - } - ], - "id": 298, - "name": "ParameterList", - "src": "1298:34:0" - }, - { - "children": [ - { - "attributes": { - "constant": false, - "name": "", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 299, - "name": "ElementaryTypeName", - "src": "1351:4:0" - } - ], - "id": 300, - "name": "VariableDeclaration", - "src": "1351:4:0" - } - ], - "id": 301, - "name": "ParameterList", - "src": "1350:6:0" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "mapping(address => uint256)" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => mapping(address => uint256))", - "value": "allowed" - }, - "id": 302, - "name": "Identifier", - "src": "1374:7:0" - }, - { - "attributes": { - "type": "address", - "value": "_owner" - }, - "id": 303, - "name": "Identifier", - "src": "1382:6:0" - } - ], - "id": 304, - "name": "IndexAccess", - "src": "1374:15:0" - }, - { - "attributes": { - "type": "address", - "value": "_spender" - }, - "id": 305, - "name": "Identifier", - "src": "1390:8:0" - } - ], - "id": 306, - "name": "IndexAccess", - "src": "1374:25:0" - } - ], - "id": 307, - "name": "Return", - "src": "1367:32:0" - } - ], - "id": 308, - "name": "Block", - "src": "1357:49:0" - } - ], - "id": 309, - "name": "FunctionDefinition", - "src": "1280:126:0" - }, - { - "attributes": { - "constant": false, - "name": "balances", - "storageLocation": "default", - "type": "mapping(address => uint256)", - "visibility": "internal" - }, - "children": [ - { - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 310, - "name": "ElementaryTypeName", - "src": "1421:7:0" - }, - { - "attributes": { - "name": "uint" - }, - "id": 311, - "name": "ElementaryTypeName", - "src": "1432:4:0" - } - ], - "id": 312, - "name": "Mapping", - "src": "1412:25:0" - } - ], - "id": 313, - "name": "VariableDeclaration", - "src": "1412:34:0" - }, - { - "attributes": { - "constant": false, - "name": "allowed", - "storageLocation": "default", - "type": "mapping(address => mapping(address => uint256))", - "visibility": "internal" - }, - "children": [ - { - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 314, - "name": "ElementaryTypeName", - "src": "1461:7:0" - }, - { - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 315, - "name": "ElementaryTypeName", - "src": "1481:7:0" - }, - { - "attributes": { - "name": "uint" - }, - "id": 316, - "name": "ElementaryTypeName", - "src": "1492:4:0" - } - ], - "id": 317, - "name": "Mapping", - "src": "1472:25:0" - } - ], - "id": 318, - "name": "Mapping", - "src": "1452:46:0" - } - ], - "id": 319, - "name": "VariableDeclaration", - "src": "1452:54:0" - }, - { - "attributes": { - "constant": false, - "name": "totalSupply", - "storageLocation": "default", - "type": "uint256", - "visibility": "public" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 320, - "name": "ElementaryTypeName", - "src": "1512:4:0" - } - ], - "id": 321, - "name": "VariableDeclaration", - "src": "1512:23:0" - } - ], - "id": 322, - "name": "ContractDefinition", - "src": "86:1452:0" - } - ], - "name": "SourceUnit" - } - }, - "1.0.0/Token/Token_v1.sol": { - "id": 1, - "legacyAST": { - "children": [ - { - "attributes": { - "literals": ["solidity", "^", "0.4", ".11"] - }, - "id": 324, - "name": "PragmaDirective", - "src": "0:24:1" - }, - { - "attributes": { - "fullyImplemented": true, - "isLibrary": false, - "linearizedBaseContracts": [397], - "name": "Token_v1" - }, - "children": [ - { - "attributes": { - "constant": true, - "name": "totalSupply", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [], - "id": 325, - "name": "ParameterList", - "src": "110:2:1" - }, - { - "children": [ - { - "attributes": { - "constant": false, - "name": "supply", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 326, - "name": "ElementaryTypeName", - "src": "131:4:1" - } - ], - "id": 327, - "name": "VariableDeclaration", - "src": "131:11:1" - } - ], - "id": 328, - "name": "ParameterList", - "src": "130:13:1" - }, - { - "children": [], - "id": 329, - "name": "Block", - "src": "144:2:1" - } - ], - "id": 330, - "name": "FunctionDefinition", - "src": "90:56:1" - }, - { - "attributes": { - "constant": true, - "name": "balanceOf", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "name": "_owner", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 331, - "name": "ElementaryTypeName", - "src": "274:7:1" - } - ], - "id": 332, - "name": "VariableDeclaration", - "src": "274:14:1" - } - ], - "id": 333, - "name": "ParameterList", - "src": "273:16:1" - }, - { - "children": [ - { - "attributes": { - "constant": false, - "name": "balance", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 334, - "name": "ElementaryTypeName", - "src": "308:4:1" - } - ], - "id": 335, - "name": "VariableDeclaration", - "src": "308:12:1" - } - ], - "id": 336, - "name": "ParameterList", - "src": "307:14:1" - }, - { - "children": [], - "id": 337, - "name": "Block", - "src": "322:2:1" - } - ], - "id": 338, - "name": "FunctionDefinition", - "src": "255:69:1" - }, - { - "attributes": { - "constant": false, - "name": "transfer", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "name": "_to", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 339, - "name": "ElementaryTypeName", - "src": "578:7:1" - } - ], - "id": 340, - "name": "VariableDeclaration", - "src": "578:11:1" - }, - { - "attributes": { - "constant": false, - "name": "_value", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 341, - "name": "ElementaryTypeName", - "src": "591:4:1" - } - ], - "id": 342, - "name": "VariableDeclaration", - "src": "591:11:1" - } - ], - "id": 343, - "name": "ParameterList", - "src": "577:26:1" - }, - { - "children": [ - { - "attributes": { - "constant": false, - "name": "success", - "storageLocation": "default", - "type": "bool", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "bool" - }, - "id": 344, - "name": "ElementaryTypeName", - "src": "613:4:1" - } - ], - "id": 345, - "name": "VariableDeclaration", - "src": "613:12:1" - } - ], - "id": 346, - "name": "ParameterList", - "src": "612:14:1" - }, - { - "children": [], - "id": 347, - "name": "Block", - "src": "627:2:1" - } - ], - "id": 348, - "name": "FunctionDefinition", - "src": "560:69:1" - }, - { - "attributes": { - "constant": false, - "name": "transferFrom", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "name": "_from", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 349, - "name": "ElementaryTypeName", - "src": "972:7:1" - } - ], - "id": 350, - "name": "VariableDeclaration", - "src": "972:13:1" - }, - { - "attributes": { - "constant": false, - "name": "_to", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 351, - "name": "ElementaryTypeName", - "src": "987:7:1" - } - ], - "id": 352, - "name": "VariableDeclaration", - "src": "987:11:1" - }, - { - "attributes": { - "constant": false, - "name": "_value", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 353, - "name": "ElementaryTypeName", - "src": "1000:4:1" - } - ], - "id": 354, - "name": "VariableDeclaration", - "src": "1000:11:1" - } - ], - "id": 355, - "name": "ParameterList", - "src": "971:41:1" - }, - { - "children": [ - { - "attributes": { - "constant": false, - "name": "success", - "storageLocation": "default", - "type": "bool", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "bool" - }, - "id": 356, - "name": "ElementaryTypeName", - "src": "1022:4:1" - } - ], - "id": 357, - "name": "VariableDeclaration", - "src": "1022:12:1" - } - ], - "id": 358, - "name": "ParameterList", - "src": "1021:14:1" - }, - { - "children": [], - "id": 359, - "name": "Block", - "src": "1036:2:1" - } - ], - "id": 360, - "name": "FunctionDefinition", - "src": "950:88:1" - }, - { - "attributes": { - "constant": false, - "name": "approve", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "name": "_spender", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 361, - "name": "ElementaryTypeName", - "src": "1338:7:1" - } - ], - "id": 362, - "name": "VariableDeclaration", - "src": "1338:16:1" - }, - { - "attributes": { - "constant": false, - "name": "_value", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 363, - "name": "ElementaryTypeName", - "src": "1356:4:1" - } - ], - "id": 364, - "name": "VariableDeclaration", - "src": "1356:11:1" - } - ], - "id": 365, - "name": "ParameterList", - "src": "1337:31:1" - }, - { - "children": [ - { - "attributes": { - "constant": false, - "name": "success", - "storageLocation": "default", - "type": "bool", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "bool" - }, - "id": 366, - "name": "ElementaryTypeName", - "src": "1378:4:1" - } - ], - "id": 367, - "name": "VariableDeclaration", - "src": "1378:12:1" - } - ], - "id": 368, - "name": "ParameterList", - "src": "1377:14:1" - }, - { - "children": [], - "id": 369, - "name": "Block", - "src": "1392:2:1" - } - ], - "id": 370, - "name": "FunctionDefinition", - "src": "1321:73:1" - }, - { - "attributes": { - "constant": true, - "name": "allowance", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "name": "_owner", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 371, - "name": "ElementaryTypeName", - "src": "1621:7:1" - } - ], - "id": 372, - "name": "VariableDeclaration", - "src": "1621:14:1" - }, - { - "attributes": { - "constant": false, - "name": "_spender", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 373, - "name": "ElementaryTypeName", - "src": "1637:7:1" - } - ], - "id": 374, - "name": "VariableDeclaration", - "src": "1637:16:1" - } - ], - "id": 375, - "name": "ParameterList", - "src": "1620:34:1" - }, - { - "children": [ - { - "attributes": { - "constant": false, - "name": "remaining", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 376, - "name": "ElementaryTypeName", - "src": "1673:4:1" - } - ], - "id": 377, - "name": "VariableDeclaration", - "src": "1673:14:1" - } - ], - "id": 378, - "name": "ParameterList", - "src": "1672:16:1" - }, - { - "children": [], - "id": 379, - "name": "Block", - "src": "1689:2:1" - } - ], - "id": 380, - "name": "FunctionDefinition", - "src": "1602:89:1" - }, - { - "attributes": { - "name": "Transfer" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "indexed": true, - "name": "_from", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 381, - "name": "ElementaryTypeName", - "src": "1712:7:1" - } - ], - "id": 382, - "name": "VariableDeclaration", - "src": "1712:21:1" - }, - { - "attributes": { - "constant": false, - "indexed": true, - "name": "_to", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 383, - "name": "ElementaryTypeName", - "src": "1735:7:1" - } - ], - "id": 384, - "name": "VariableDeclaration", - "src": "1735:19:1" - }, - { - "attributes": { - "constant": false, - "indexed": false, - "name": "_value", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 385, - "name": "ElementaryTypeName", - "src": "1756:4:1" - } - ], - "id": 386, - "name": "VariableDeclaration", - "src": "1756:11:1" - } - ], - "id": 387, - "name": "ParameterList", - "src": "1711:57:1" - } - ], - "id": 388, - "name": "EventDefinition", - "src": "1697:72:1" - }, - { - "attributes": { - "name": "Approval" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "indexed": true, - "name": "_owner", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 389, - "name": "ElementaryTypeName", - "src": "1789:7:1" - } - ], - "id": 390, - "name": "VariableDeclaration", - "src": "1789:22:1" - }, - { - "attributes": { - "constant": false, - "indexed": true, - "name": "_spender", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 391, - "name": "ElementaryTypeName", - "src": "1813:7:1" - } - ], - "id": 392, - "name": "VariableDeclaration", - "src": "1813:24:1" - }, - { - "attributes": { - "constant": false, - "indexed": false, - "name": "_value", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 393, - "name": "ElementaryTypeName", - "src": "1839:4:1" - } - ], - "id": 394, - "name": "VariableDeclaration", - "src": "1839:11:1" - } - ], - "id": 395, - "name": "ParameterList", - "src": "1788:63:1" - } - ], - "id": 396, - "name": "EventDefinition", - "src": "1774:78:1" - } - ], - "id": 397, - "name": "ContractDefinition", - "src": "26:1828:1" - } - ], - "name": "SourceUnit" - } - }, - "1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol": { - "id": 2, - "legacyAST": { - "children": [ - { - "attributes": { - "literals": ["solidity", "^", "0.4", ".11"] - }, - "id": 33, - "name": "PragmaDirective", - "src": "580:24:2" - }, - { - "attributes": { - "file": "../ERC20Token/ERC20Token_v1.sol" - }, - "id": 35, - "name": "ImportDirective", - "src": "606:78:2" - }, - { - "attributes": { - "fullyImplemented": true, - "isLibrary": false, - "linearizedBaseContracts": [124, 322, 397], - "name": "UnlimitedAllowanceToken_v1" - }, - "children": [ - { - "children": [ - { - "attributes": { - "name": "ERC20Token" - }, - "id": 36, - "name": "UserDefinedTypeName", - "src": "725:10:2" - } - ], - "id": 37, - "name": "InheritanceSpecifier", - "src": "725:10:2" - }, - { - "attributes": { - "constant": true, - "name": "MAX_UINT", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 38, - "name": "ElementaryTypeName", - "src": "743:4:2" - }, - { - "attributes": { - "operator": "-", - "type": - "int_const 115792089237316195423570985008687907853269984665640564039457584007913129639935" - }, - "children": [ - { - "attributes": { - "operator": "**", - "type": - "int_const 115792089237316195423570985008687907853269984665640564039457584007913129639936" - }, - "children": [ - { - "attributes": { - "hexvalue": "32", - "subdenomination": null, - "token": null, - "type": "int_const 2", - "value": "2" - }, - "id": 39, - "name": "Literal", - "src": "768:1:2" - }, - { - "attributes": { - "hexvalue": "323536", - "subdenomination": null, - "token": null, - "type": "int_const 256", - "value": "256" - }, - "id": 40, - "name": "Literal", - "src": "771:3:2" - } - ], - "id": 41, - "name": "BinaryOperation", - "src": "768:6:2" - }, - { - "attributes": { - "hexvalue": "31", - "subdenomination": null, - "token": null, - "type": "int_const 1", - "value": "1" - }, - "id": 42, - "name": "Literal", - "src": "777:1:2" - } - ], - "id": 43, - "name": "BinaryOperation", - "src": "768:10:2" - } - ], - "id": 44, - "name": "VariableDeclaration", - "src": "743:35:2" - }, - { - "attributes": { - "constant": false, - "name": "transferFrom", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "name": "_from", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 45, - "name": "ElementaryTypeName", - "src": "1088:7:2" - } - ], - "id": 46, - "name": "VariableDeclaration", - "src": "1088:13:2" - }, - { - "attributes": { - "constant": false, - "name": "_to", - "storageLocation": "default", - "type": "address", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "address" - }, - "id": 47, - "name": "ElementaryTypeName", - "src": "1103:7:2" - } - ], - "id": 48, - "name": "VariableDeclaration", - "src": "1103:11:2" - }, - { - "attributes": { - "constant": false, - "name": "_value", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 49, - "name": "ElementaryTypeName", - "src": "1116:4:2" - } - ], - "id": 50, - "name": "VariableDeclaration", - "src": "1116:11:2" - } - ], - "id": 51, - "name": "ParameterList", - "src": "1087:41:2" - }, - { - "children": [ - { - "attributes": { - "constant": false, - "name": "", - "storageLocation": "default", - "type": "bool", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "bool" - }, - "id": 52, - "name": "ElementaryTypeName", - "src": "1161:4:2" - } - ], - "id": 53, - "name": "VariableDeclaration", - "src": "1161:4:2" - } - ], - "id": 54, - "name": "ParameterList", - "src": "1160:6:2" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "constant": false, - "name": "allowance", - "storageLocation": "default", - "type": "uint256", - "visibility": "internal" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 55, - "name": "ElementaryTypeName", - "src": "1181:4:2" - } - ], - "id": 56, - "name": "VariableDeclaration", - "src": "1181:14:2" - }, - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "mapping(address => uint256)" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => mapping(address => uint256))", - "value": "allowed" - }, - "id": 57, - "name": "Identifier", - "src": "1198:7:2" - }, - { - "attributes": { - "type": "address", - "value": "_from" - }, - "id": 58, - "name": "Identifier", - "src": "1206:5:2" - } - ], - "id": 59, - "name": "IndexAccess", - "src": "1198:14:2" - }, - { - "attributes": { - "member_name": "sender", - "type": "address" - }, - "children": [ - { - "attributes": { - "type": "msg", - "value": "msg" - }, - "id": 60, - "name": "Identifier", - "src": "1213:3:2" - } - ], - "id": 61, - "name": "MemberAccess", - "src": "1213:10:2" - } - ], - "id": 62, - "name": "IndexAccess", - "src": "1198:26:2" - } - ], - "id": 63, - "name": "VariableDeclarationStatement", - "src": "1181:43:2" - }, - { - "children": [ - { - "attributes": { - "operator": "&&", - "type": "bool" - }, - "children": [ - { - "attributes": { - "operator": "&&", - "type": "bool" - }, - "children": [ - { - "attributes": { - "operator": ">=", - "type": "bool" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 64, - "name": "Identifier", - "src": "1238:8:2" - }, - { - "attributes": { - "type": "address", - "value": "_from" - }, - "id": 65, - "name": "Identifier", - "src": "1247:5:2" - } - ], - "id": 66, - "name": "IndexAccess", - "src": "1238:15:2" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 67, - "name": "Identifier", - "src": "1257:6:2" - } - ], - "id": 68, - "name": "BinaryOperation", - "src": "1238:25:2" - }, - { - "attributes": { - "operator": ">=", - "type": "bool" - }, - "children": [ - { - "attributes": { - "type": "uint256", - "value": "allowance" - }, - "id": 69, - "name": "Identifier", - "src": "1279:9:2" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 70, - "name": "Identifier", - "src": "1292:6:2" - } - ], - "id": 71, - "name": "BinaryOperation", - "src": "1279:19:2" - } - ], - "id": 72, - "name": "BinaryOperation", - "src": "1238:60:2" - }, - { - "attributes": { - "operator": ">=", - "type": "bool" - }, - "children": [ - { - "attributes": { - "operator": "+", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 73, - "name": "Identifier", - "src": "1314:8:2" - }, - { - "attributes": { - "type": "address", - "value": "_to" - }, - "id": 74, - "name": "Identifier", - "src": "1323:3:2" - } - ], - "id": 75, - "name": "IndexAccess", - "src": "1314:13:2" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 76, - "name": "Identifier", - "src": "1330:6:2" - } - ], - "id": 77, - "name": "BinaryOperation", - "src": "1314:22:2" - }, - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 78, - "name": "Identifier", - "src": "1340:8:2" - }, - { - "attributes": { - "type": "address", - "value": "_to" - }, - "id": 79, - "name": "Identifier", - "src": "1349:3:2" - } - ], - "id": 80, - "name": "IndexAccess", - "src": "1340:13:2" - } - ], - "id": 81, - "name": "BinaryOperation", - "src": "1314:39:2" - } - ], - "id": 82, - "name": "BinaryOperation", - "src": "1238:115:2" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "operator": "+=", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 83, - "name": "Identifier", - "src": "1378:8:2" - }, - { - "attributes": { - "type": "address", - "value": "_to" - }, - "id": 84, - "name": "Identifier", - "src": "1387:3:2" - } - ], - "id": 85, - "name": "IndexAccess", - "src": "1378:13:2" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 86, - "name": "Identifier", - "src": "1395:6:2" - } - ], - "id": 87, - "name": "Assignment", - "src": "1378:23:2" - } - ], - "id": 88, - "name": "ExpressionStatement", - "src": "1378:23:2" - }, - { - "children": [ - { - "attributes": { - "operator": "-=", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)", - "value": "balances" - }, - "id": 89, - "name": "Identifier", - "src": "1415:8:2" - }, - { - "attributes": { - "type": "address", - "value": "_from" - }, - "id": 90, - "name": "Identifier", - "src": "1424:5:2" - } - ], - "id": 91, - "name": "IndexAccess", - "src": "1415:15:2" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 92, - "name": "Identifier", - "src": "1434:6:2" - } - ], - "id": 93, - "name": "Assignment", - "src": "1415:25:2" - } - ], - "id": 94, - "name": "ExpressionStatement", - "src": "1415:25:2" - }, - { - "children": [ - { - "attributes": { - "operator": "<", - "type": "bool" - }, - "children": [ - { - "attributes": { - "type": "uint256", - "value": "allowance" - }, - "id": 95, - "name": "Identifier", - "src": "1458:9:2" - }, - { - "attributes": { - "type": "uint256", - "value": "MAX_UINT" - }, - "id": 96, - "name": "Identifier", - "src": "1470:8:2" - } - ], - "id": 97, - "name": "BinaryOperation", - "src": "1458:20:2" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "operator": "-=", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => uint256)" - }, - "children": [ - { - "attributes": { - "type": - "mapping(address => mapping(address => uint256))", - "value": - "allowed" - }, - "id": 98, - "name": - "Identifier", - "src": - "1498:7:2" - }, - { - "attributes": { - "type": - "address", - "value": - "_from" - }, - "id": 99, - "name": - "Identifier", - "src": - "1506:5:2" - } - ], - "id": 102, - "name": - "IndexAccess", - "src": - "1498:14:2" - }, - { - "attributes": { - "member_name": - "sender", - "type": - "address" - }, - "children": [ - { - "attributes": { - "type": - "msg", - "value": - "msg" - }, - "id": 100, - "name": - "Identifier", - "src": - "1513:3:2" - } - ], - "id": 101, - "name": - "MemberAccess", - "src": - "1513:10:2" - } - ], - "id": 103, - "name": "IndexAccess", - "src": "1498:26:2" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 104, - "name": "Identifier", - "src": "1528:6:2" - } - ], - "id": 105, - "name": "Assignment", - "src": "1498:36:2" - } - ], - "id": 106, - "name": "ExpressionStatement", - "src": "1498:36:2" - } - ], - "id": 107, - "name": "Block", - "src": "1480:69:2" - } - ], - "id": 108, - "name": "IfStatement", - "src": "1454:95:2" - }, - { - "children": [ - { - "attributes": { - "type": "tuple()", - "type_conversion": false - }, - "children": [ - { - "attributes": { - "type": - "function (address,address,uint256) constant", - "value": "Transfer" - }, - "id": 109, - "name": "Identifier", - "src": "1562:8:2" - }, - { - "attributes": { - "type": "address", - "value": "_from" - }, - "id": 110, - "name": "Identifier", - "src": "1571:5:2" - }, - { - "attributes": { - "type": "address", - "value": "_to" - }, - "id": 111, - "name": "Identifier", - "src": "1578:3:2" - }, - { - "attributes": { - "type": "uint256", - "value": "_value" - }, - "id": 112, - "name": "Identifier", - "src": "1583:6:2" - } - ], - "id": 113, - "name": "FunctionCall", - "src": "1562:28:2" - } - ], - "id": 114, - "name": "ExpressionStatement", - "src": "1562:28:2" - }, - { - "children": [ - { - "attributes": { - "hexvalue": "74727565", - "subdenomination": null, - "token": "true", - "type": "bool", - "value": "true" - }, - "id": 115, - "name": "Literal", - "src": "1611:4:2" - } - ], - "id": 116, - "name": "Return", - "src": "1604:11:2" - } - ], - "id": 117, - "name": "Block", - "src": "1364:262:2" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "hexvalue": "66616c7365", - "subdenomination": null, - "token": "false", - "type": "bool", - "value": "false" - }, - "id": 118, - "name": "Literal", - "src": "1653:5:2" - } - ], - "id": 119, - "name": "Return", - "src": "1646:12:2" - } - ], - "id": 120, - "name": "Block", - "src": "1632:37:2" - } - ], - "id": 121, - "name": "IfStatement", - "src": "1234:435:2" - } - ], - "id": 122, - "name": "Block", - "src": "1171:504:2" - } - ], - "id": 123, - "name": "FunctionDefinition", - "src": "1066:609:2" - } - ], - "id": 124, - "name": "ContractDefinition", - "src": "686:991:2" - } - ], - "name": "SourceUnit" - } - }, - "2.0.0/tokens/ZRXToken/ZRXToken.sol": { - "id": 3, - "legacyAST": { - "children": [ - { - "attributes": { - "literals": ["solidity", "0.4", ".11"] - }, - "id": 1, - "name": "PragmaDirective", - "src": "580:23:3" - }, - { - "attributes": { - "file": "../../../1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol" - }, - "id": 3, - "name": "ImportDirective", - "src": "650:142:3" - }, - { - "attributes": { - "fullyImplemented": true, - "isLibrary": false, - "linearizedBaseContracts": [31, 124, 322, 397], - "name": "ZRXToken" - }, - "children": [ - { - "children": [ - { - "attributes": { - "name": "UnlimitedAllowanceToken" - }, - "id": 4, - "name": "UserDefinedTypeName", - "src": "816:23:3" - } - ], - "id": 5, - "name": "InheritanceSpecifier", - "src": "816:23:3" - }, - { - "attributes": { - "constant": true, - "name": "decimals", - "storageLocation": "default", - "type": "uint8", - "visibility": "public" - }, - "children": [ - { - "attributes": { - "name": "uint8" - }, - "id": 6, - "name": "ElementaryTypeName", - "src": "891:5:3" - }, - { - "attributes": { - "hexvalue": "3138", - "subdenomination": null, - "token": null, - "type": "int_const 18", - "value": "18" - }, - "id": 7, - "name": "Literal", - "src": "924:2:3" - } - ], - "id": 8, - "name": "VariableDeclaration", - "src": "891:35:3" - }, - { - "attributes": { - "constant": false, - "name": "totalSupply", - "storageLocation": "default", - "type": "uint256", - "visibility": "public" - }, - "children": [ - { - "attributes": { - "name": "uint" - }, - "id": 9, - "name": "ElementaryTypeName", - "src": "932:4:3" - }, - { - "attributes": { - "operator": "**", - "type": "int_const 1000000000000000000000000000" - }, - "children": [ - { - "attributes": { - "hexvalue": "3130", - "subdenomination": null, - "token": null, - "type": "int_const 10", - "value": "10" - }, - "id": 10, - "name": "Literal", - "src": "958:2:3" - }, - { - "attributes": { - "hexvalue": "3237", - "subdenomination": null, - "token": null, - "type": "int_const 27", - "value": "27" - }, - "id": 11, - "name": "Literal", - "src": "962:2:3" - } - ], - "id": 12, - "name": "BinaryOperation", - "src": "958:6:3" - } - ], - "id": 13, - "name": "VariableDeclaration", - "src": "932:32:3" - }, - { - "attributes": { - "constant": true, - "name": "name", - "storageLocation": "default", - "type": "string memory", - "visibility": "public" - }, - "children": [ - { - "attributes": { - "name": "string" - }, - "id": 14, - "name": "ElementaryTypeName", - "src": "1009:6:3" - }, - { - "attributes": { - "hexvalue": "30782050726f746f636f6c20546f6b656e", - "subdenomination": null, - "token": null, - "type": "literal_string \"0x Protocol Token\"", - "value": "0x Protocol Token" - }, - "id": 15, - "name": "Literal", - "src": "1039:19:3" - } - ], - "id": 16, - "name": "VariableDeclaration", - "src": "1009:49:3" - }, - { - "attributes": { - "constant": true, - "name": "symbol", - "storageLocation": "default", - "type": "string memory", - "visibility": "public" - }, - "children": [ - { - "attributes": { - "name": "string" - }, - "id": 17, - "name": "ElementaryTypeName", - "src": "1064:6:3" - }, - { - "attributes": { - "hexvalue": "5a5258", - "subdenomination": null, - "token": null, - "type": "literal_string \"ZRX\"", - "value": "ZRX" - }, - "id": 18, - "name": "Literal", - "src": "1096:5:3" - } - ], - "id": 19, - "name": "VariableDeclaration", - "src": "1064:37:3" - }, - { - "attributes": { - "constant": false, - "name": "ZRXToken", - "payable": false, - "visibility": "public" - }, - "children": [ - { - "children": [], - "id": 20, - "name": "ParameterList", - "src": "1167:2:3" - }, - { - "children": [], - "id": 21, - "name": "ParameterList", - "src": "1189:0:3" - }, - { - "children": [ - { - "children": [ - { - "attributes": { - "operator": "=", - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "uint256" - }, - "children": [ - { - "attributes": { - "type": "mapping(address => uint256)", - "value": "balances" - }, - "id": 22, - "name": "Identifier", - "src": "1199:8:3" - }, - { - "attributes": { - "member_name": "sender", - "type": "address" - }, - "children": [ - { - "attributes": { - "type": "msg", - "value": "msg" - }, - "id": 23, - "name": "Identifier", - "src": "1208:3:3" - } - ], - "id": 24, - "name": "MemberAccess", - "src": "1208:10:3" - } - ], - "id": 25, - "name": "IndexAccess", - "src": "1199:20:3" - }, - { - "attributes": { - "type": "uint256", - "value": "totalSupply" - }, - "id": 26, - "name": "Identifier", - "src": "1222:11:3" - } - ], - "id": 27, - "name": "Assignment", - "src": "1199:34:3" - } - ], - "id": 28, - "name": "ExpressionStatement", - "src": "1199:34:3" - } - ], - "id": 29, - "name": "Block", - "src": "1189:51:3" - } - ], - "id": 30, - "name": "FunctionDefinition", - "src": "1150:90:3" - } - ], - "id": 31, - "name": "ContractDefinition", - "src": "795:447:3" - } - ], - "name": "SourceUnit" - } - } - }, - "sourceCodes": { - "1.0.0/ERC20Token/ERC20Token_v1.sol": - "pragma solidity ^0.4.11;\n\nimport { Token_v1 as Token } from \"../Token/Token_v1.sol\";\n\ncontract ERC20Token_v1 is Token {\n\n function transfer(address _to, uint _value) returns (bool) {\n //Default assumes totalSupply can't be over max (2^256 - 1).\n if (balances[msg.sender] >= _value && balances[_to] + _value >= balances[_to]) {\n balances[msg.sender] -= _value;\n balances[_to] += _value;\n Transfer(msg.sender, _to, _value);\n return true;\n } else { return false; }\n }\n\n function transferFrom(address _from, address _to, uint _value) returns (bool) {\n if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value >= balances[_to]) {\n balances[_to] += _value;\n balances[_from] -= _value;\n allowed[_from][msg.sender] -= _value;\n Transfer(_from, _to, _value);\n return true;\n } else { return false; }\n }\n\n function balanceOf(address _owner) constant returns (uint) {\n return balances[_owner];\n }\n\n function approve(address _spender, uint _value) returns (bool) {\n allowed[msg.sender][_spender] = _value;\n Approval(msg.sender, _spender, _value);\n return true;\n }\n\n function allowance(address _owner, address _spender) constant returns (uint) {\n return allowed[_owner][_spender];\n }\n\n mapping (address => uint) balances;\n mapping (address => mapping (address => uint)) allowed;\n uint public totalSupply;\n}\n", - "1.0.0/Token/Token_v1.sol": - "pragma solidity ^0.4.11;\n\ncontract Token_v1 {\n\n /// @return total amount of tokens\n function totalSupply() constant returns (uint supply) {}\n\n /// @param _owner The address from which the balance will be retrieved\n /// @return The balance\n function balanceOf(address _owner) constant returns (uint balance) {}\n\n /// @notice send `_value` token to `_to` from `msg.sender`\n /// @param _to The address of the recipient\n /// @param _value The amount of token to be transferred\n /// @return Whether the transfer was successful or not\n function transfer(address _to, uint _value) returns (bool success) {}\n\n /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`\n /// @param _from The address of the sender\n /// @param _to The address of the recipient\n /// @param _value The amount of token to be transferred\n /// @return Whether the transfer was successful or not\n function transferFrom(address _from, address _to, uint _value) returns (bool success) {}\n\n /// @notice `msg.sender` approves `_addr` to spend `_value` tokens\n /// @param _spender The address of the account able to transfer the tokens\n /// @param _value The amount of wei to be approved for transfer\n /// @return Whether the approval was successful or not\n function approve(address _spender, uint _value) returns (bool success) {}\n\n /// @param _owner The address of the account owning tokens\n /// @param _spender The address of the account able to transfer the tokens\n /// @return Amount of remaining tokens allowed to spent\n function allowance(address _owner, address _spender) constant returns (uint remaining) {}\n\n event Transfer(address indexed _from, address indexed _to, uint _value);\n event Approval(address indexed _owner, address indexed _spender, uint _value);\n}\n\n", - "1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol": - "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.11;\n\nimport { ERC20Token_v1 as ERC20Token } from \"../ERC20Token/ERC20Token_v1.sol\";\n\ncontract UnlimitedAllowanceToken_v1 is ERC20Token {\n\n uint constant MAX_UINT = 2**256 - 1;\n\n /// @dev ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance.\n /// @param _from Address to transfer from.\n /// @param _to Address to transfer to.\n /// @param _value Amount to transfer.\n /// @return Success of transfer.\n function transferFrom(address _from, address _to, uint _value)\n public\n returns (bool)\n {\n uint allowance = allowed[_from][msg.sender];\n if (balances[_from] >= _value\n && allowance >= _value\n && balances[_to] + _value >= balances[_to]\n ) {\n balances[_to] += _value;\n balances[_from] -= _value;\n if (allowance < MAX_UINT) {\n allowed[_from][msg.sender] -= _value;\n }\n Transfer(_from, _to, _value);\n return true;\n } else {\n return false;\n }\n }\n}\n", - "2.0.0/tokens/ZRXToken/ZRXToken.sol": - "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity 0.4.11;\n\n// solhint-disable-next-line max-line-length\nimport { UnlimitedAllowanceToken_v1 as UnlimitedAllowanceToken } from \"../../../1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\";\n\n\ncontract ZRXToken is UnlimitedAllowanceToken {\n\n // solhint-disable const-name-snakecase\n uint8 constant public decimals = 18;\n uint public totalSupply = 10**27; // 1 billion tokens, 18 decimal places\n string constant public name = \"0x Protocol Token\";\n string constant public symbol = \"ZRX\";\n // solhint-enableconst-name-snakecase\n\n function ZRXToken()\n public\n {\n balances[msg.sender] = totalSupply;\n }\n}\n" - }, - "sourceTreeHashHex": "0xbcce67d129fe53ddb9717b4f567b33108c41a4f4324aa47ac609037e41f5b95d", - "compiler": { - "name": "solc", - "version": "soljson-v0.4.11+commit.68ef5810.js", - "settings": { - "optimizer": { - "enabled": true, - "runs": 1000000 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode.object", - "evm.bytecode.sourceMap", - "evm.deployedBytecode.object", - "evm.deployedBytecode.sourceMap" - ] - } - } - } - }, - "networks": { - "50": { - "address": "0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c", - "links": {}, - "constructorArgs": "[]" - } - } -} + "schemaVersion": "2.0.0", + "contractName": "ZRXToken", + "compilerOutput": { + "abi": [ + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "", + "type": "uint8" + } + ], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "type": "function" + }, + { + "inputs": [], + "payable": false, + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "_from", + "type": "address" + }, + { + "indexed": true, + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "name": "_value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "_owner", + "type": "address" + }, + { + "indexed": true, + "name": "_spender", + "type": "address" + }, + { + "indexed": false, + "name": "_value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + } + ], + "devdoc": { + "methods": { + "transferFrom(address,address,uint256)": { + "details": "ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance.", + "params": { + "_from": "Address to transfer from.", + "_to": "Address to transfer to.", + "_value": "Amount to transfer." + }, + "return": "Success of transfer." + } + } + }, + "evm": { + "assembly": " /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":795:1242 contract ZRXToken is UnlimitedAllowanceToken {... */\n mstore(0x40, 0x60)\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":958:964 10**27 */\n 0x33b2e3c9fd0803ce8000000\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":932:964 uint public totalSupply = 10**27 */\n 0x3\n sstore\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1150:1240 function ZRXToken()... */\n jumpi(tag_1, iszero(callvalue))\n invalid\ntag_1:\ntag_2:\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1222:1233 totalSupply */\n sload(0x3)\n sub(exp(0x2, 0xa0), 0x1)\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1208:1218 msg.sender */\n caller\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1199:1219 balances[msg.sender] */\n and\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1199:1207 balances */\n 0x0\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1199:1219 balances[msg.sender] */\n swap1\n dup2\n mstore\n 0x20\n dup2\n swap1\n mstore\n 0x40\n swap1\n sha3\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1199:1233 balances[msg.sender] = totalSupply */\n sstore\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1150:1240 function ZRXToken()... */\ntag_3:\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":795:1242 contract ZRXToken is UnlimitedAllowanceToken {... */\ntag_4:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x0\n codecopy\n 0x0\n return\nstop\n\nsub_0: assembly {\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":795:1242 contract ZRXToken is UnlimitedAllowanceToken {... */\n mstore(0x40, 0x60)\n jumpi(tag_1, iszero(calldatasize))\n and(div(calldataload(0x0), 0x100000000000000000000000000000000000000000000000000000000), 0xffffffff)\n 0x6fdde03\n dup2\n eq\n tag_2\n jumpi\n dup1\n 0x95ea7b3\n eq\n tag_3\n jumpi\n dup1\n 0x18160ddd\n eq\n tag_4\n jumpi\n dup1\n 0x23b872dd\n eq\n tag_5\n jumpi\n dup1\n 0x313ce567\n eq\n tag_6\n jumpi\n dup1\n 0x70a08231\n eq\n tag_7\n jumpi\n dup1\n 0x95d89b41\n eq\n tag_8\n jumpi\n dup1\n 0xa9059cbb\n eq\n tag_9\n jumpi\n dup1\n 0xdd62ed3e\n eq\n tag_10\n jumpi\n tag_1:\n invalid\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1009:1058 string constant public name = \"0x Protocol Token\" */\n tag_2:\n jumpi(tag_11, iszero(callvalue))\n invalid\n tag_11:\n tag_12\n jump(tag_13)\n tag_12:\n 0x40\n dup1\n mload\n 0x20\n dup1\n dup3\n mstore\n dup4\n mload\n dup2\n dup4\n add\n mstore\n dup4\n mload\n swap2\n swap3\n dup4\n swap3\n swap1\n dup4\n add\n swap2\n dup6\n add\n swap1\n dup1\n dup4\n dup4\n /* \"--CODEGEN--\":18:20 */\n dup3\n iszero\n /* \"--CODEGEN--\":13:16 */\n tag_14\n /* \"--CODEGEN--\":7:12 */\n jumpi\n /* \"--CODEGEN--\":32:37 */\n tag_15:\n /* \"--CODEGEN--\":59:62 */\n dup1\n /* \"--CODEGEN--\":53:58 */\n mload\n /* \"--CODEGEN--\":48:51 */\n dup3\n /* \"--CODEGEN--\":41:47 */\n mstore\n /* \"--CODEGEN--\":93:95 */\n 0x20\n /* \"--CODEGEN--\":88:91 */\n dup4\n /* \"--CODEGEN--\":85:87 */\n gt\n /* \"--CODEGEN--\":78:84 */\n iszero\n /* \"--CODEGEN--\":73:76 */\n tag_14\n /* \"--CODEGEN--\":67:72 */\n jumpi\n /* \"--CODEGEN--\":152:155 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n swap1\n swap3\n add\n swap2\n /* \"--CODEGEN--\":117:119 */\n 0x20\n /* \"--CODEGEN--\":108:111 */\n swap2\n dup3\n add\n swap2\n /* \"--CODEGEN--\":130:133 */\n add\n /* \"--CODEGEN--\":172:177 */\n tag_15\n /* \"--CODEGEN--\":167:171 */\n jump\n /* \"--CODEGEN--\":181:184 */\n tag_14:\n /* \"--CODEGEN--\":3:189 */\n pop\n pop\n pop\n swap1\n pop\n swap1\n dup2\n add\n swap1\n 0x1f\n and\n dup1\n iszero\n tag_16\n jumpi\n dup1\n dup3\n sub\n dup1\n mload\n 0x1\n dup4\n 0x20\n sub\n 0x100\n exp\n sub\n not\n and\n dup2\n mstore\n 0x20\n add\n swap2\n pop\n tag_16:\n pop\n swap3\n pop\n pop\n pop\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1087:1274 */\n tag_3:\n jumpi(tag_17, iszero(callvalue))\n invalid\n tag_17:\n tag_18\n and(calldataload(0x4), 0xffffffffffffffffffffffffffffffffffffffff)\n calldataload(0x24)\n jump(tag_19)\n tag_18:\n 0x40\n dup1\n mload\n swap2\n iszero\n iszero\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":932:964 uint public totalSupply = 10**27 */\n tag_4:\n jumpi(tag_20, iszero(callvalue))\n invalid\n tag_20:\n tag_21\n jump(tag_22)\n tag_21:\n 0x40\n dup1\n mload\n swap2\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1066:1675 */\n tag_5:\n jumpi(tag_23, iszero(callvalue))\n invalid\n tag_23:\n tag_18\n 0xffffffffffffffffffffffffffffffffffffffff\n calldataload(0x4)\n dup2\n and\n swap1\n calldataload(0x24)\n and\n calldataload(0x44)\n jump(tag_25)\n tag_24:\n 0x40\n dup1\n mload\n swap2\n iszero\n iszero\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":891:926 uint8 constant public decimals = 18 */\n tag_6:\n jumpi(tag_26, iszero(callvalue))\n invalid\n tag_26:\n tag_27\n jump(tag_28)\n tag_27:\n 0x40\n dup1\n mload\n 0xff\n swap1\n swap3\n and\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":982:1081 */\n tag_7:\n jumpi(tag_29, iszero(callvalue))\n invalid\n tag_29:\n tag_21\n and(calldataload(0x4), 0xffffffffffffffffffffffffffffffffffffffff)\n jump(tag_31)\n tag_30:\n 0x40\n dup1\n mload\n swap2\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1064:1101 string constant public symbol = \"ZRX\" */\n tag_8:\n jumpi(tag_32, iszero(callvalue))\n invalid\n tag_32:\n tag_12\n jump(tag_34)\n tag_33:\n 0x40\n dup1\n mload\n 0x20\n dup1\n dup3\n mstore\n dup4\n mload\n dup2\n dup4\n add\n mstore\n dup4\n mload\n swap2\n swap3\n dup4\n swap3\n swap1\n dup4\n add\n swap2\n dup6\n add\n swap1\n dup1\n dup4\n dup4\n /* \"--CODEGEN--\":18:20 */\n dup3\n iszero\n /* \"--CODEGEN--\":13:16 */\n tag_14\n /* \"--CODEGEN--\":7:12 */\n jumpi\n /* \"--CODEGEN--\":32:37 */\n tag_36:\n /* \"--CODEGEN--\":59:62 */\n dup1\n /* \"--CODEGEN--\":53:58 */\n mload\n /* \"--CODEGEN--\":48:51 */\n dup3\n /* \"--CODEGEN--\":41:47 */\n mstore\n /* \"--CODEGEN--\":93:95 */\n 0x20\n /* \"--CODEGEN--\":88:91 */\n dup4\n /* \"--CODEGEN--\":85:87 */\n gt\n /* \"--CODEGEN--\":78:84 */\n iszero\n /* \"--CODEGEN--\":73:76 */\n tag_14\n /* \"--CODEGEN--\":67:72 */\n jumpi\n /* \"--CODEGEN--\":152:155 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n swap1\n swap3\n add\n swap2\n /* \"--CODEGEN--\":117:119 */\n 0x20\n /* \"--CODEGEN--\":108:111 */\n swap2\n dup3\n add\n swap2\n /* \"--CODEGEN--\":130:133 */\n add\n /* \"--CODEGEN--\":172:177 */\n tag_15\n /* \"--CODEGEN--\":167:171 */\n jump\n /* \"--CODEGEN--\":181:184 */\n tag_35:\n /* \"--CODEGEN--\":3:189 */\n pop\n pop\n pop\n swap1\n pop\n swap1\n dup2\n add\n swap1\n 0x1f\n and\n dup1\n iszero\n tag_16\n jumpi\n dup1\n dup3\n sub\n dup1\n mload\n 0x1\n dup4\n 0x20\n sub\n 0x100\n exp\n sub\n not\n and\n dup2\n mstore\n 0x20\n add\n swap2\n pop\n tag_37:\n pop\n swap3\n pop\n pop\n pop\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":125:535 */\n tag_9:\n jumpi(tag_38, iszero(callvalue))\n invalid\n tag_38:\n tag_18\n and(calldataload(0x4), 0xffffffffffffffffffffffffffffffffffffffff)\n calldataload(0x24)\n jump(tag_40)\n tag_39:\n 0x40\n dup1\n mload\n swap2\n iszero\n iszero\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1280:1406 */\n tag_10:\n jumpi(tag_41, iszero(callvalue))\n invalid\n tag_41:\n tag_21\n 0xffffffffffffffffffffffffffffffffffffffff\n calldataload(0x4)\n dup2\n and\n swap1\n calldataload(0x24)\n and\n jump(tag_43)\n tag_42:\n 0x40\n dup1\n mload\n swap2\n dup3\n mstore\n mload\n swap1\n dup2\n swap1\n sub\n 0x20\n add\n swap1\n return\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1009:1058 string constant public name = \"0x Protocol Token\" */\n tag_13:\n 0x40\n dup1\n mload\n dup1\n dup3\n add\n swap1\n swap2\n mstore\n 0x11\n dup2\n mstore\n 0x30782050726f746f636f6c20546f6b656e000000000000000000000000000000\n 0x20\n dup3\n add\n mstore\n dup2\n jump\t// out\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1087:1274 */\n tag_19:\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1179 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1168:1178 */\n caller\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1179 */\n dup2\n and\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1144:1148 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1179 */\n dup2\n dup2\n mstore\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1167 */\n 0x1\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1179 */\n 0x20\n swap1\n dup2\n mstore\n 0x40\n dup1\n dup4\n sha3\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1189 */\n swap5\n dup8\n and\n dup1\n dup5\n mstore\n swap5\n dup3\n mstore\n dup1\n dup4\n sha3\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1198 */\n dup7\n swap1\n sstore\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1208:1246 */\n dup1\n mload\n dup7\n dup2\n mstore\n swap1\n mload\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1144:1148 */\n swap3\n swap5\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1189 */\n swap4\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1160:1179 */\n swap3\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1208:1246 */\n 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\n swap3\n swap2\n dup2\n swap1\n sub\n swap1\n swap2\n add\n swap1\n log3\n pop\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1263:1267 */\n 0x1\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1087:1274 */\n tag_44:\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":932:964 uint public totalSupply = 10**27 */\n tag_22:\n sload(0x3)\n dup2\n jump\t// out\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1066:1675 */\n tag_25:\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1198:1212 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup1\n dup5\n and\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1161:1165 */\n 0x0\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1198:1212 */\n dup2\n dup2\n mstore\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1198:1205 */\n 0x1\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1198:1212 */\n 0x20\n swap1\n dup2\n mstore\n 0x40\n dup1\n dup4\n sha3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1213:1223 */\n caller\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1198:1224 */\n swap1\n swap6\n and\n dup4\n mstore\n swap4\n dup2\n mstore\n dup4\n dup3\n sha3\n sload\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1238:1253 */\n swap3\n dup3\n mstore\n dup2\n swap1\n mstore\n swap2\n dup3\n sha3\n sload\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1238:1263 */\n dup4\n swap1\n lt\n dup1\n iszero\n swap1\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1238:1298 */\n tag_46\n jumpi\n pop\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1292:1298 */\n dup3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1279:1288 */\n dup2\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1279:1298 */\n lt\n iszero\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1238:1298 */\n tag_46:\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1238:1353 */\n dup1\n iszero\n tag_47\n jumpi\n pop\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1340:1353 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup5\n and\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1340:1348 */\n 0x0\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1340:1353 */\n swap1\n dup2\n mstore\n 0x20\n dup2\n swap1\n mstore\n 0x40\n swap1\n sha3\n sload\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1314:1336 */\n dup4\n dup2\n add\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1314:1353 */\n lt\n iszero\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1238:1353 */\n tag_47:\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1234:1669 */\n iszero\n tag_48\n jumpi\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1378:1391 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup1\n dup6\n and\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1378:1386 */\n 0x0\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1378:1391 */\n swap1\n dup2\n mstore\n 0x20\n dup2\n swap1\n mstore\n 0x40\n dup1\n dup3\n sha3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1378:1401 */\n dup1\n sload\n dup8\n add\n swap1\n sstore\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1415:1430 */\n swap2\n dup8\n and\n dup2\n mstore\n sha3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1415:1440 */\n dup1\n sload\n dup5\n swap1\n sub\n swap1\n sstore\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":768:778 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1458:1478 */\n dup2\n lt\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1454:1549 */\n iszero\n tag_49\n jumpi\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1498:1512 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup1\n dup7\n and\n 0x0\n swap1\n dup2\n mstore\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1498:1505 */\n 0x1\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1498:1512 */\n 0x20\n swap1\n dup2\n mstore\n 0x40\n dup1\n dup4\n sha3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1513:1523 */\n caller\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1498:1524 */\n swap1\n swap5\n and\n dup4\n mstore\n swap3\n swap1\n mstore\n sha3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1498:1534 */\n dup1\n sload\n dup5\n swap1\n sub\n swap1\n sstore\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1454:1549 */\n tag_49:\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1578:1581 */\n dup4\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1562:1590 */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1571:1576 */\n dup6\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1562:1590 */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1583:1589 */\n dup6\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1562:1590 */\n mload(0x40)\n dup1\n dup3\n dup2\n mstore\n 0x20\n add\n swap2\n pop\n pop\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log3\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1611:1615 */\n 0x1\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1604:1615 */\n swap2\n pop\n jump(tag_50)\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1234:1669 */\n tag_48:\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1653:1658 */\n 0x0\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1646:1658 */\n swap2\n pop\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1234:1669 */\n tag_50:\n /* \"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":1066:1675 */\n tag_45:\n pop\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":891:926 uint8 constant public decimals = 18 */\n tag_28:\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":924:926 18 */\n 0x12\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":891:926 uint8 constant public decimals = 18 */\n dup2\n jump\t// out\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":982:1081 */\n tag_31:\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1058:1074 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup2\n and\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1035:1039 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1058:1074 */\n swap1\n dup2\n mstore\n 0x20\n dup2\n swap1\n mstore\n 0x40\n swap1\n sha3\n sload\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":982:1081 */\n tag_51:\n swap2\n swap1\n pop\n jump\t// out\n /* \"2.0.0/tokens/ZRXToken/ZRXToken.sol\":1064:1101 string constant public symbol = \"ZRX\" */\n tag_34:\n 0x40\n dup1\n mload\n dup1\n dup3\n add\n swap1\n swap2\n mstore\n 0x3\n dup2\n mstore\n 0x5a52580000000000000000000000000000000000000000000000000000000000\n 0x20\n dup3\n add\n mstore\n dup2\n jump\t// out\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":125:535 */\n tag_40:\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":267:287 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":276:286 */\n caller\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":267:287 */\n and\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":178:182 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":267:287 */\n swap1\n dup2\n mstore\n 0x20\n dup2\n swap1\n mstore\n 0x40\n dup2\n sha3\n sload\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":267:297 */\n dup3\n swap1\n lt\n dup1\n iszero\n swap1\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":267:340 */\n tag_53\n jumpi\n pop\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":327:340 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup4\n and\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":327:335 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":327:340 */\n swap1\n dup2\n mstore\n 0x20\n dup2\n swap1\n mstore\n 0x40\n swap1\n sha3\n sload\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":301:323 */\n dup3\n dup2\n add\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":301:340 */\n lt\n iszero\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":267:340 */\n tag_53:\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":263:529 */\n iszero\n tag_54\n jumpi\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":356:376 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":365:375 */\n caller\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":356:376 */\n dup2\n and\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":356:364 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":356:376 */\n dup2\n dup2\n mstore\n 0x20\n dup2\n dup2\n mstore\n 0x40\n dup1\n dup4\n sha3\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":356:386 */\n dup1\n sload\n dup9\n swap1\n sub\n swap1\n sstore\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":400:413 */\n swap4\n dup8\n and\n dup1\n dup4\n mstore\n swap2\n dup5\n swap1\n sha3\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":400:423 */\n dup1\n sload\n dup8\n add\n swap1\n sstore\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":437:470 */\n dup4\n mload\n dup7\n dup2\n mstore\n swap4\n mload\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":400:413 */\n swap2\n swap4\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":437:470 */\n 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n swap3\n swap1\n dup2\n swap1\n sub\n swap1\n swap2\n add\n swap1\n log3\n pop\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":491:495 */\n 0x1\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":484:495 */\n jump(tag_44)\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":263:529 */\n tag_54:\n pop\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":521:526 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":514:526 */\n jump(tag_44)\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":263:529 */\n tag_55:\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":125:535 */\n tag_52:\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1280:1406 */\n tag_43:\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1374:1389 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup1\n dup4\n and\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1351:1355 */\n 0x0\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1374:1389 */\n swap1\n dup2\n mstore\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1374:1381 */\n 0x1\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1374:1389 */\n 0x20\n swap1\n dup2\n mstore\n 0x40\n dup1\n dup4\n sha3\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1374:1399 */\n swap4\n dup6\n and\n dup4\n mstore\n swap3\n swap1\n mstore\n sha3\n sload\n /* \"1.0.0/ERC20Token/ERC20Token_v1.sol\":1280:1406 */\n tag_56:\n swap3\n swap2\n pop\n pop\n jump\t// out\n}\n", + "bytecode": { + "linkReferences": {}, + "object": "0x60606040526b033b2e3c9fd0803ce8000000600355341561001c57fe5b5b600354600160a060020a0333166000908152602081905260409020555b5b61078d8061004a6000396000f300606060405236156100965763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610098578063095ea7b31461014657806318160ddd1461018657806323b872dd146101a8578063313ce567146101ee57806370a082311461021457806395d89b411461024f578063a9059cbb146102fd578063dd62ed3e1461033d575bfe5b34156100a057fe5b6100a861037e565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561014e57fe5b61017273ffffffffffffffffffffffffffffffffffffffff600435166024356103b5565b604080519115158252519081900360200190f35b341561018e57fe5b61019661042d565b60408051918252519081900360200190f35b34156101b057fe5b61017273ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610433565b604080519115158252519081900360200190f35b34156101f657fe5b6101fe6105d4565b6040805160ff9092168252519081900360200190f35b341561021c57fe5b61019673ffffffffffffffffffffffffffffffffffffffff600435166105d9565b60408051918252519081900360200190f35b341561025757fe5b6100a8610605565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030557fe5b61017273ffffffffffffffffffffffffffffffffffffffff6004351660243561063c565b604080519115158252519081900360200190f35b341561034557fe5b61019673ffffffffffffffffffffffffffffffffffffffff60043581169060243516610727565b60408051918252519081900360200190f35b60408051808201909152601181527f30782050726f746f636f6c20546f6b656e000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832033909516835293815283822054928252819052918220548390108015906104835750828110155b80156104b6575073ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090205483810110155b156105c65773ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105585773ffffffffffffffffffffffffffffffffffffffff808616600090815260016020908152604080832033909416835292905220805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191506105cb565b600091505b5b509392505050565b601281565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020545b919050565b60408051808201909152600381527f5a52580000000000000000000000000000000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff3316600090815260208190526040812054829010801590610699575073ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110155b156107185773ffffffffffffffffffffffffffffffffffffffff33811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3506001610427565b506000610427565b5b92915050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938516835292905220545b929150505600a165627a7a723058208999c5329f53064aac58d4b553cb379a45bfca17e024506ff916637cfc36f7b20029", + "opcodes": "PUSH1 0x60 PUSH1 0x40 MSTORE PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x3 SSTORE CALLVALUE ISZERO PUSH2 0x1C JUMPI INVALID JUMPDEST JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB CALLER AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SSTORE JUMPDEST JUMPDEST PUSH2 0x78D DUP1 PUSH2 0x4A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x60 PUSH1 0x40 MSTORE CALLDATASIZE ISZERO PUSH2 0x96 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x24F JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x33D JUMPI JUMPDEST INVALID JUMPDEST CALLVALUE ISZERO PUSH2 0xA0 JUMPI INVALID JUMPDEST PUSH2 0xA8 PUSH2 0x37E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x10C JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x10C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xCE JUMP JUMPDEST POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x14E JUMPI INVALID JUMPDEST PUSH2 0x172 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x3B5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x18E JUMPI INVALID JUMPDEST PUSH2 0x196 PUSH2 0x42D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x1B0 JUMPI INVALID JUMPDEST PUSH2 0x172 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x433 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x1F6 JUMPI INVALID JUMPDEST PUSH2 0x1FE PUSH2 0x5D4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x21C JUMPI INVALID JUMPDEST PUSH2 0x196 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x257 JUMPI INVALID JUMPDEST PUSH2 0xA8 PUSH2 0x605 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x10C JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x10C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xCE JUMP JUMPDEST POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x305 JUMPI INVALID JUMPDEST PUSH2 0x172 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x63C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x345 JUMPI INVALID JUMPDEST PUSH2 0x196 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x727 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x30782050726F746F636F6C20546F6B656E000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 SHA3 DUP7 SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP5 SWAP4 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 CALLER SWAP1 SWAP6 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 SHA3 SLOAD SWAP3 DUP3 MSTORE DUP2 SWAP1 MSTORE SWAP2 DUP3 SHA3 SLOAD DUP4 SWAP1 LT DUP1 ISZERO SWAP1 PUSH2 0x483 JUMPI POP DUP3 DUP2 LT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x4B6 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP4 DUP2 ADD LT ISZERO JUMPDEST ISZERO PUSH2 0x5C6 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 SHA3 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SHA3 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 LT ISZERO PUSH2 0x558 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 CALLER SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SHA3 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP2 POP PUSH2 0x5CB JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 MSTORE PUSH32 0x5A52580000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 SHA3 SLOAD DUP3 SWAP1 LT DUP1 ISZERO SWAP1 PUSH2 0x699 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP3 DUP2 ADD LT ISZERO JUMPDEST ISZERO PUSH2 0x718 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 SHA3 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 PUSH2 0x427 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x427 JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SHA3 SLOAD JUMPDEST SWAP3 SWAP2 POP POP JUMP STOP LOG1 PUSH6 0x627A7A723058 SHA3 DUP10 SWAP10 0xc5 ORIGIN SWAP16 MSTORE8 MOD 0x4a 0xac PC 0xd4 0xb5 MSTORE8 0xcb CALLDATACOPY SWAP11 GASLIMIT 0xbf 0xca OR 0xe0 0x24 POP PUSH16 0xF916637CFC36F7B20029000000000000 ", + "sourceMap": "795:447:3:-;;;958:6;932:32;;1150:90;;;;;;;1222:11;;-1:-1:-1;;;;;1208:10:3;1199:20;:8;:20;;;;;;;;;;:34;1150:90;795:447;;;;;;;" + }, + "deployedBytecode": { + "linkReferences": {}, + "object": "0x606060405236156100965763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610098578063095ea7b31461014657806318160ddd1461018657806323b872dd146101a8578063313ce567146101ee57806370a082311461021457806395d89b411461024f578063a9059cbb146102fd578063dd62ed3e1461033d575bfe5b34156100a057fe5b6100a861037e565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561014e57fe5b61017273ffffffffffffffffffffffffffffffffffffffff600435166024356103b5565b604080519115158252519081900360200190f35b341561018e57fe5b61019661042d565b60408051918252519081900360200190f35b34156101b057fe5b61017273ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610433565b604080519115158252519081900360200190f35b34156101f657fe5b6101fe6105d4565b6040805160ff9092168252519081900360200190f35b341561021c57fe5b61019673ffffffffffffffffffffffffffffffffffffffff600435166105d9565b60408051918252519081900360200190f35b341561025757fe5b6100a8610605565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030557fe5b61017273ffffffffffffffffffffffffffffffffffffffff6004351660243561063c565b604080519115158252519081900360200190f35b341561034557fe5b61019673ffffffffffffffffffffffffffffffffffffffff60043581169060243516610727565b60408051918252519081900360200190f35b60408051808201909152601181527f30782050726f746f636f6c20546f6b656e000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832033909516835293815283822054928252819052918220548390108015906104835750828110155b80156104b6575073ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090205483810110155b156105c65773ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105585773ffffffffffffffffffffffffffffffffffffffff808616600090815260016020908152604080832033909416835292905220805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191506105cb565b600091505b5b509392505050565b601281565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020545b919050565b60408051808201909152600381527f5a52580000000000000000000000000000000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff3316600090815260208190526040812054829010801590610699575073ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110155b156107185773ffffffffffffffffffffffffffffffffffffffff33811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3506001610427565b506000610427565b5b92915050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938516835292905220545b929150505600a165627a7a723058208999c5329f53064aac58d4b553cb379a45bfca17e024506ff916637cfc36f7b20029", + "opcodes": "PUSH1 0x60 PUSH1 0x40 MSTORE CALLDATASIZE ISZERO PUSH2 0x96 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x24F JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x33D JUMPI JUMPDEST INVALID JUMPDEST CALLVALUE ISZERO PUSH2 0xA0 JUMPI INVALID JUMPDEST PUSH2 0xA8 PUSH2 0x37E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x10C JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x10C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xCE JUMP JUMPDEST POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x14E JUMPI INVALID JUMPDEST PUSH2 0x172 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x3B5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x18E JUMPI INVALID JUMPDEST PUSH2 0x196 PUSH2 0x42D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x1B0 JUMPI INVALID JUMPDEST PUSH2 0x172 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x433 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x1F6 JUMPI INVALID JUMPDEST PUSH2 0x1FE PUSH2 0x5D4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x21C JUMPI INVALID JUMPDEST PUSH2 0x196 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x257 JUMPI INVALID JUMPDEST PUSH2 0xA8 PUSH2 0x605 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x10C JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x10C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xCE JUMP JUMPDEST POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x305 JUMPI INVALID JUMPDEST PUSH2 0x172 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x63C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x345 JUMPI INVALID JUMPDEST PUSH2 0x196 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x727 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH32 0x30782050726F746F636F6C20546F6B656E000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 SHA3 DUP7 SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP5 SWAP4 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 CALLER SWAP1 SWAP6 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 SHA3 SLOAD SWAP3 DUP3 MSTORE DUP2 SWAP1 MSTORE SWAP2 DUP3 SHA3 SLOAD DUP4 SWAP1 LT DUP1 ISZERO SWAP1 PUSH2 0x483 JUMPI POP DUP3 DUP2 LT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x4B6 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP4 DUP2 ADD LT ISZERO JUMPDEST ISZERO PUSH2 0x5C6 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 SHA3 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SHA3 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 LT ISZERO PUSH2 0x558 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 CALLER SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SHA3 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP2 POP PUSH2 0x5CB JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 MSTORE PUSH32 0x5A52580000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 SHA3 SLOAD DUP3 SWAP1 LT DUP1 ISZERO SWAP1 PUSH2 0x699 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP3 DUP2 ADD LT ISZERO JUMPDEST ISZERO PUSH2 0x718 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 SHA3 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 PUSH2 0x427 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x427 JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SHA3 SLOAD JUMPDEST SWAP3 SWAP2 POP POP JUMP STOP LOG1 PUSH6 0x627A7A723058 SHA3 DUP10 SWAP10 0xc5 ORIGIN SWAP16 MSTORE8 MOD 0x4a 0xac PC 0xd4 0xb5 MSTORE8 0xcb CALLDATACOPY SWAP11 GASLIMIT 0xbf 0xca OR 0xe0 0x24 POP PUSH16 0xF916637CFC36F7B20029000000000000 ", + "sourceMap": "795:447:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1009:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18:2:-1;;13:3;7:5;32;59:3;53:5;48:3;41:6;93:2;88:3;85:2;78:6;73:3;67:5;152:3;;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1087:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;932:32:3;;;;;;;;;;;;;;;;;;;;;;;;;;1066:609:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;891:35:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;982:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1064:37:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18:2:-1;;13:3;7:5;32;59:3;53:5;48:3;41:6;93:2;88:3;85:2;78:6;73:3;67:5;152:3;;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;125:410:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1280:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1009:49:3;;;;;;;;;;;;;;;;;;;:::o;1087:187:0:-;1160:19;1168:10;1160:19;;1144:4;1160:19;;;:7;:19;;;;;;;;:29;;;;;;;;;;;;:38;;;1208;;;;;;;1144:4;;1160:29;:19;1208:38;;;;;;;;;;;-1:-1:-1;1263:4:0;1087:187;;;;;:::o;932:32:3:-;;;;:::o;1066:609:2:-;1198:14;;;;1161:4;1198:14;;;:7;:14;;;;;;;;1213:10;1198:26;;;;;;;;;;;;1238:15;;;;;;;;;;:25;;;;;;:60;;;1292:6;1279:9;:19;;1238:60;:115;;;;-1:-1:-1;1340:13:2;;;:8;:13;;;;;;;;;;;1314:22;;;:39;;1238:115;1234:435;;;1378:13;;;;:8;:13;;;;;;;;;;;:23;;;;;;1415:15;;;;;;:25;;;;;;;768:10;1458:20;;1454:95;;;1498:14;;;;;;;;:7;:14;;;;;;;;1513:10;1498:26;;;;;;;;;:36;;;;;;;1454:95;1578:3;1562:28;;1571:5;1562:28;;;1583:6;1562:28;;;;;;;;;;;;;;;;;;1611:4;1604:11;;;;1234:435;1653:5;1646:12;;1234:435;1066:609;;;;;;;:::o;891:35:3:-;924:2;891:35;:::o;982:99:0:-;1058:16;;;1035:4;1058:16;;;;;;;;;;;982:99;;;;:::o;1064:37:3:-;;;;;;;;;;;;;;;;;;;:::o;125:410:0:-;267:20;276:10;267:20;178:4;267:20;;;;;;;;;;;:30;;;;;;:73;;-1:-1:-1;327:13:0;;;:8;:13;;;;;;;;;;;301:22;;;:39;;267:73;263:266;;;356:20;365:10;356:20;;:8;:20;;;;;;;;;;;:30;;;;;;;400:13;;;;;;;;;;:23;;;;;;437:33;;;;;;;400:13;;437:33;;;;;;;;;;;-1:-1:-1;491:4:0;484:11;;263:266;-1:-1:-1;521:5:0;514:12;;263:266;125:410;;;;;:::o;1280:126::-;1374:15;;;;1351:4;1374:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;1280:126;;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "386600", + "executionCost": "40780", + "totalCost": "427380" + }, + "external": { + "allowance(address,address)": "737", + "approve(address,uint256)": "22218", + "balanceOf(address)": "579", + "decimals()": "270", + "name()": "530", + "symbol()": "662", + "totalSupply()": "417", + "transfer(address,uint256)": "43393", + "transferFrom(address,address,uint256)": "64116" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "60" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "40" + }, + { + "begin": 795, + "end": 1242, + "name": "MSTORE" + }, + { + "begin": 958, + "end": 964, + "name": "PUSH", + "value": "33B2E3C9FD0803CE8000000" + }, + { + "begin": 932, + "end": 964, + "name": "PUSH", + "value": "3" + }, + { + "begin": 932, + "end": 964, + "name": "SSTORE" + }, + { + "begin": 1150, + "end": 1240, + "name": "CALLVALUE" + }, + { + "begin": 1150, + "end": 1240, + "name": "ISZERO" + }, + { + "begin": 1150, + "end": 1240, + "name": "PUSH [tag]", + "value": "1" + }, + { + "begin": 1150, + "end": 1240, + "name": "JUMPI" + }, + { + "begin": 1150, + "end": 1240, + "name": "INVALID" + }, + { + "begin": 1150, + "end": 1240, + "name": "tag", + "value": "1" + }, + { + "begin": 1150, + "end": 1240, + "name": "JUMPDEST" + }, + { + "begin": 1150, + "end": 1240, + "name": "tag", + "value": "2" + }, + { + "begin": 1150, + "end": 1240, + "name": "JUMPDEST" + }, + { + "begin": 1222, + "end": 1233, + "name": "PUSH", + "value": "3" + }, + { + "begin": 1222, + "end": 1233, + "name": "SLOAD" + }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "value": "1" + }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "value": "A0" + }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "value": "2" + }, + { + "begin": -1, + "end": -1, + "name": "EXP" + }, + { + "begin": -1, + "end": -1, + "name": "SUB" + }, + { + "begin": 1208, + "end": 1218, + "name": "CALLER" + }, + { + "begin": 1199, + "end": 1219, + "name": "AND" + }, + { + "begin": 1199, + "end": 1207, + "name": "PUSH", + "value": "0" + }, + { + "begin": 1199, + "end": 1219, + "name": "SWAP1" + }, + { + "begin": 1199, + "end": 1219, + "name": "DUP2" + }, + { + "begin": 1199, + "end": 1219, + "name": "MSTORE" + }, + { + "begin": 1199, + "end": 1219, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1199, + "end": 1219, + "name": "DUP2" + }, + { + "begin": 1199, + "end": 1219, + "name": "SWAP1" + }, + { + "begin": 1199, + "end": 1219, + "name": "MSTORE" + }, + { + "begin": 1199, + "end": 1219, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1199, + "end": 1219, + "name": "SWAP1" + }, + { + "begin": 1199, + "end": 1219, + "name": "SHA3" + }, + { + "begin": 1199, + "end": 1233, + "name": "SSTORE" + }, + { + "begin": 1150, + "end": 1240, + "name": "tag", + "value": "3" + }, + { + "begin": 1150, + "end": 1240, + "name": "JUMPDEST" + }, + { + "begin": 795, + "end": 1242, + "name": "tag", + "value": "4" + }, + { + "begin": 795, + "end": 1242, + "name": "JUMPDEST" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH #[$]", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 795, + "end": 1242, + "name": "DUP1" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH [$]", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "0" + }, + { + "begin": 795, + "end": 1242, + "name": "CODECOPY" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "0" + }, + { + "begin": 795, + "end": 1242, + "name": "RETURN" + } + ], + ".data": { + "0": { + ".code": [ + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "60" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "40" + }, + { + "begin": 795, + "end": 1242, + "name": "MSTORE" + }, + { + "begin": 795, + "end": 1242, + "name": "CALLDATASIZE" + }, + { + "begin": 795, + "end": 1242, + "name": "ISZERO" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH [tag]", + "value": "1" + }, + { + "begin": 795, + "end": 1242, + "name": "JUMPI" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "FFFFFFFF" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "0" + }, + { + "begin": 795, + "end": 1242, + "name": "CALLDATALOAD" + }, + { + "begin": 795, + "end": 1242, + "name": "DIV" + }, + { + "begin": 795, + "end": 1242, + "name": "AND" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "6FDDE03" + }, + { + "begin": 795, + "end": 1242, + "name": "DUP2" + }, + { + "begin": 795, + "end": 1242, + "name": "EQ" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH [tag]", + "value": "2" + }, + { + "begin": 795, + "end": 1242, + "name": "JUMPI" + }, + { + "begin": 795, + "end": 1242, + "name": "DUP1" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "95EA7B3" + }, + { + "begin": 795, + "end": 1242, + "name": "EQ" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH [tag]", + "value": "3" + }, + { + "begin": 795, + "end": 1242, + "name": "JUMPI" + }, + { + "begin": 795, + "end": 1242, + "name": "DUP1" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "18160DDD" + }, + { + "begin": 795, + "end": 1242, + "name": "EQ" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH [tag]", + "value": "4" + }, + { + "begin": 795, + "end": 1242, + "name": "JUMPI" + }, + { + "begin": 795, + "end": 1242, + "name": "DUP1" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "23B872DD" + }, + { + "begin": 795, + "end": 1242, + "name": "EQ" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH [tag]", + "value": "5" + }, + { + "begin": 795, + "end": 1242, + "name": "JUMPI" + }, + { + "begin": 795, + "end": 1242, + "name": "DUP1" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "313CE567" + }, + { + "begin": 795, + "end": 1242, + "name": "EQ" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH [tag]", + "value": "6" + }, + { + "begin": 795, + "end": 1242, + "name": "JUMPI" + }, + { + "begin": 795, + "end": 1242, + "name": "DUP1" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "70A08231" + }, + { + "begin": 795, + "end": 1242, + "name": "EQ" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH [tag]", + "value": "7" + }, + { + "begin": 795, + "end": 1242, + "name": "JUMPI" + }, + { + "begin": 795, + "end": 1242, + "name": "DUP1" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "95D89B41" + }, + { + "begin": 795, + "end": 1242, + "name": "EQ" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH [tag]", + "value": "8" + }, + { + "begin": 795, + "end": 1242, + "name": "JUMPI" + }, + { + "begin": 795, + "end": 1242, + "name": "DUP1" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "A9059CBB" + }, + { + "begin": 795, + "end": 1242, + "name": "EQ" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH [tag]", + "value": "9" + }, + { + "begin": 795, + "end": 1242, + "name": "JUMPI" + }, + { + "begin": 795, + "end": 1242, + "name": "DUP1" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH", + "value": "DD62ED3E" + }, + { + "begin": 795, + "end": 1242, + "name": "EQ" + }, + { + "begin": 795, + "end": 1242, + "name": "PUSH [tag]", + "value": "10" + }, + { + "begin": 795, + "end": 1242, + "name": "JUMPI" + }, + { + "begin": 795, + "end": 1242, + "name": "tag", + "value": "1" + }, + { + "begin": 795, + "end": 1242, + "name": "JUMPDEST" + }, + { + "begin": 795, + "end": 1242, + "name": "INVALID" + }, + { + "begin": 1009, + "end": 1058, + "name": "tag", + "value": "2" + }, + { + "begin": 1009, + "end": 1058, + "name": "JUMPDEST" + }, + { + "begin": 1009, + "end": 1058, + "name": "CALLVALUE" + }, + { + "begin": 1009, + "end": 1058, + "name": "ISZERO" + }, + { + "begin": 1009, + "end": 1058, + "name": "PUSH [tag]", + "value": "11" + }, + { + "begin": 1009, + "end": 1058, + "name": "JUMPI" + }, + { + "begin": 1009, + "end": 1058, + "name": "INVALID" + }, + { + "begin": 1009, + "end": 1058, + "name": "tag", + "value": "11" + }, + { + "begin": 1009, + "end": 1058, + "name": "JUMPDEST" + }, + { + "begin": 1009, + "end": 1058, + "name": "PUSH [tag]", + "value": "12" + }, + { + "begin": 1009, + "end": 1058, + "name": "PUSH [tag]", + "value": "13" + }, + { + "begin": 1009, + "end": 1058, + "name": "JUMP" + }, + { + "begin": 1009, + "end": 1058, + "name": "tag", + "value": "12" + }, + { + "begin": 1009, + "end": 1058, + "name": "JUMPDEST" + }, + { + "begin": 1009, + "end": 1058, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP1" + }, + { + "begin": 1009, + "end": 1058, + "name": "MLOAD" + }, + { + "begin": 1009, + "end": 1058, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP1" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP3" + }, + { + "begin": 1009, + "end": 1058, + "name": "MSTORE" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP4" + }, + { + "begin": 1009, + "end": 1058, + "name": "MLOAD" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP2" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP4" + }, + { + "begin": 1009, + "end": 1058, + "name": "ADD" + }, + { + "begin": 1009, + "end": 1058, + "name": "MSTORE" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP4" + }, + { + "begin": 1009, + "end": 1058, + "name": "MLOAD" + }, + { + "begin": 1009, + "end": 1058, + "name": "SWAP2" + }, + { + "begin": 1009, + "end": 1058, + "name": "SWAP3" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP4" + }, + { + "begin": 1009, + "end": 1058, + "name": "SWAP3" + }, + { + "begin": 1009, + "end": 1058, + "name": "SWAP1" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP4" + }, + { + "begin": 1009, + "end": 1058, + "name": "ADD" + }, + { + "begin": 1009, + "end": 1058, + "name": "SWAP2" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP6" + }, + { + "begin": 1009, + "end": 1058, + "name": "ADD" + }, + { + "begin": 1009, + "end": 1058, + "name": "SWAP1" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP1" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP4" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP4" + }, + { + "begin": 18, + "end": 20, + "name": "DUP3" + }, + { + "begin": 18, + "end": 20, + "name": "ISZERO" + }, + { + "begin": 13, + "end": 16, + "name": "PUSH [tag]", + "value": "14" + }, + { + "begin": 7, + "end": 12, + "name": "JUMPI" + }, + { + "begin": 32, + "end": 37, + "name": "tag", + "value": "15" + }, + { + "begin": 32, + "end": 37, + "name": "JUMPDEST" + }, + { + "begin": 59, + "end": 62, + "name": "DUP1" + }, + { + "begin": 53, + "end": 58, + "name": "MLOAD" + }, + { + "begin": 48, + "end": 51, + "name": "DUP3" + }, + { + "begin": 41, + "end": 47, + "name": "MSTORE" + }, + { + "begin": 93, + "end": 95, + "name": "PUSH", + "value": "20" + }, + { + "begin": 88, + "end": 91, + "name": "DUP4" + }, + { + "begin": 85, + "end": 87, + "name": "GT" + }, + { + "begin": 78, + "end": 84, + "name": "ISZERO" + }, + { + "begin": 73, + "end": 76, + "name": "PUSH [tag]", + "value": "14" + }, + { + "begin": 67, + "end": 72, + "name": "JUMPI" + }, + { + "begin": 152, + "end": 155, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0" + }, + { + "begin": 152, + "end": 155, + "name": "SWAP1" + }, + { + "begin": 152, + "end": 155, + "name": "SWAP3" + }, + { + "begin": 152, + "end": 155, + "name": "ADD" + }, + { + "begin": 152, + "end": 155, + "name": "SWAP2" + }, + { + "begin": 117, + "end": 119, + "name": "PUSH", + "value": "20" + }, + { + "begin": 108, + "end": 111, + "name": "SWAP2" + }, + { + "begin": 108, + "end": 111, + "name": "DUP3" + }, + { + "begin": 108, + "end": 111, + "name": "ADD" + }, + { + "begin": 108, + "end": 111, + "name": "SWAP2" + }, + { + "begin": 130, + "end": 133, + "name": "ADD" + }, + { + "begin": 172, + "end": 177, + "name": "PUSH [tag]", + "value": "15" + }, + { + "begin": 167, + "end": 171, + "name": "JUMP" + }, + { + "begin": 181, + "end": 184, + "name": "tag", + "value": "14" + }, + { + "begin": 181, + "end": 184, + "name": "JUMPDEST" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP1" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP1" + }, + { + "begin": 3, + "end": 189, + "name": "DUP2" + }, + { + "begin": 3, + "end": 189, + "name": "ADD" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP1" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH", + "value": "1F" + }, + { + "begin": 3, + "end": 189, + "name": "AND" + }, + { + "begin": 3, + "end": 189, + "name": "DUP1" + }, + { + "begin": 3, + "end": 189, + "name": "ISZERO" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH [tag]", + "value": "16" + }, + { + "begin": 3, + "end": 189, + "name": "JUMPI" + }, + { + "begin": 3, + "end": 189, + "name": "DUP1" + }, + { + "begin": 3, + "end": 189, + "name": "DUP3" + }, + { + "begin": 3, + "end": 189, + "name": "SUB" + }, + { + "begin": 3, + "end": 189, + "name": "DUP1" + }, + { + "begin": 3, + "end": 189, + "name": "MLOAD" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH", + "value": "1" + }, + { + "begin": 3, + "end": 189, + "name": "DUP4" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH", + "value": "20" + }, + { + "begin": 3, + "end": 189, + "name": "SUB" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH", + "value": "100" + }, + { + "begin": 3, + "end": 189, + "name": "EXP" + }, + { + "begin": 3, + "end": 189, + "name": "SUB" + }, + { + "begin": 3, + "end": 189, + "name": "NOT" + }, + { + "begin": 3, + "end": 189, + "name": "AND" + }, + { + "begin": 3, + "end": 189, + "name": "DUP2" + }, + { + "begin": 3, + "end": 189, + "name": "MSTORE" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH", + "value": "20" + }, + { + "begin": 3, + "end": 189, + "name": "ADD" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP2" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "tag", + "value": "16" + }, + { + "begin": 3, + "end": 189, + "name": "JUMPDEST" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP3" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH", + "value": "40" + }, + { + "begin": 3, + "end": 189, + "name": "MLOAD" + }, + { + "begin": 3, + "end": 189, + "name": "DUP1" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP2" + }, + { + "begin": 3, + "end": 189, + "name": "SUB" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP1" + }, + { + "begin": 3, + "end": 189, + "name": "RETURN" + }, + { + "begin": 1087, + "end": 1274, + "name": "tag", + "value": "3" + }, + { + "begin": 1087, + "end": 1274, + "name": "JUMPDEST" + }, + { + "begin": 1087, + "end": 1274, + "name": "CALLVALUE" + }, + { + "begin": 1087, + "end": 1274, + "name": "ISZERO" + }, + { + "begin": 1087, + "end": 1274, + "name": "PUSH [tag]", + "value": "17" + }, + { + "begin": 1087, + "end": 1274, + "name": "JUMPI" + }, + { + "begin": 1087, + "end": 1274, + "name": "INVALID" + }, + { + "begin": 1087, + "end": 1274, + "name": "tag", + "value": "17" + }, + { + "begin": 1087, + "end": 1274, + "name": "JUMPDEST" + }, + { + "begin": 1087, + "end": 1274, + "name": "PUSH [tag]", + "value": "18" + }, + { + "begin": 1087, + "end": 1274, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1087, + "end": 1274, + "name": "PUSH", + "value": "4" + }, + { + "begin": 1087, + "end": 1274, + "name": "CALLDATALOAD" + }, + { + "begin": 1087, + "end": 1274, + "name": "AND" + }, + { + "begin": 1087, + "end": 1274, + "name": "PUSH", + "value": "24" + }, + { + "begin": 1087, + "end": 1274, + "name": "CALLDATALOAD" + }, + { + "begin": 1087, + "end": 1274, + "name": "PUSH [tag]", + "value": "19" + }, + { + "begin": 1087, + "end": 1274, + "name": "JUMP" + }, + { + "begin": 1087, + "end": 1274, + "name": "tag", + "value": "18" + }, + { + "begin": 1087, + "end": 1274, + "name": "JUMPDEST" + }, + { + "begin": 1087, + "end": 1274, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1087, + "end": 1274, + "name": "DUP1" + }, + { + "begin": 1087, + "end": 1274, + "name": "MLOAD" + }, + { + "begin": 1087, + "end": 1274, + "name": "SWAP2" + }, + { + "begin": 1087, + "end": 1274, + "name": "ISZERO" + }, + { + "begin": 1087, + "end": 1274, + "name": "ISZERO" + }, + { + "begin": 1087, + "end": 1274, + "name": "DUP3" + }, + { + "begin": 1087, + "end": 1274, + "name": "MSTORE" + }, + { + "begin": 1087, + "end": 1274, + "name": "MLOAD" + }, + { + "begin": 1087, + "end": 1274, + "name": "SWAP1" + }, + { + "begin": 1087, + "end": 1274, + "name": "DUP2" + }, + { + "begin": 1087, + "end": 1274, + "name": "SWAP1" + }, + { + "begin": 1087, + "end": 1274, + "name": "SUB" + }, + { + "begin": 1087, + "end": 1274, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1087, + "end": 1274, + "name": "ADD" + }, + { + "begin": 1087, + "end": 1274, + "name": "SWAP1" + }, + { + "begin": 1087, + "end": 1274, + "name": "RETURN" + }, + { + "begin": 932, + "end": 964, + "name": "tag", + "value": "4" + }, + { + "begin": 932, + "end": 964, + "name": "JUMPDEST" + }, + { + "begin": 932, + "end": 964, + "name": "CALLVALUE" + }, + { + "begin": 932, + "end": 964, + "name": "ISZERO" + }, + { + "begin": 932, + "end": 964, + "name": "PUSH [tag]", + "value": "20" + }, + { + "begin": 932, + "end": 964, + "name": "JUMPI" + }, + { + "begin": 932, + "end": 964, + "name": "INVALID" + }, + { + "begin": 932, + "end": 964, + "name": "tag", + "value": "20" + }, + { + "begin": 932, + "end": 964, + "name": "JUMPDEST" + }, + { + "begin": 932, + "end": 964, + "name": "PUSH [tag]", + "value": "21" + }, + { + "begin": 932, + "end": 964, + "name": "PUSH [tag]", + "value": "22" + }, + { + "begin": 932, + "end": 964, + "name": "JUMP" + }, + { + "begin": 932, + "end": 964, + "name": "tag", + "value": "21" + }, + { + "begin": 932, + "end": 964, + "name": "JUMPDEST" + }, + { + "begin": 932, + "end": 964, + "name": "PUSH", + "value": "40" + }, + { + "begin": 932, + "end": 964, + "name": "DUP1" + }, + { + "begin": 932, + "end": 964, + "name": "MLOAD" + }, + { + "begin": 932, + "end": 964, + "name": "SWAP2" + }, + { + "begin": 932, + "end": 964, + "name": "DUP3" + }, + { + "begin": 932, + "end": 964, + "name": "MSTORE" + }, + { + "begin": 932, + "end": 964, + "name": "MLOAD" + }, + { + "begin": 932, + "end": 964, + "name": "SWAP1" + }, + { + "begin": 932, + "end": 964, + "name": "DUP2" + }, + { + "begin": 932, + "end": 964, + "name": "SWAP1" + }, + { + "begin": 932, + "end": 964, + "name": "SUB" + }, + { + "begin": 932, + "end": 964, + "name": "PUSH", + "value": "20" + }, + { + "begin": 932, + "end": 964, + "name": "ADD" + }, + { + "begin": 932, + "end": 964, + "name": "SWAP1" + }, + { + "begin": 932, + "end": 964, + "name": "RETURN" + }, + { + "begin": 1066, + "end": 1675, + "name": "tag", + "value": "5" + }, + { + "begin": 1066, + "end": 1675, + "name": "JUMPDEST" + }, + { + "begin": 1066, + "end": 1675, + "name": "CALLVALUE" + }, + { + "begin": 1066, + "end": 1675, + "name": "ISZERO" + }, + { + "begin": 1066, + "end": 1675, + "name": "PUSH [tag]", + "value": "23" + }, + { + "begin": 1066, + "end": 1675, + "name": "JUMPI" + }, + { + "begin": 1066, + "end": 1675, + "name": "INVALID" + }, + { + "begin": 1066, + "end": 1675, + "name": "tag", + "value": "23" + }, + { + "begin": 1066, + "end": 1675, + "name": "JUMPDEST" + }, + { + "begin": 1066, + "end": 1675, + "name": "PUSH [tag]", + "value": "18" + }, + { + "begin": 1066, + "end": 1675, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1066, + "end": 1675, + "name": "PUSH", + "value": "4" + }, + { + "begin": 1066, + "end": 1675, + "name": "CALLDATALOAD" + }, + { + "begin": 1066, + "end": 1675, + "name": "DUP2" + }, + { + "begin": 1066, + "end": 1675, + "name": "AND" + }, + { + "begin": 1066, + "end": 1675, + "name": "SWAP1" + }, + { + "begin": 1066, + "end": 1675, + "name": "PUSH", + "value": "24" + }, + { + "begin": 1066, + "end": 1675, + "name": "CALLDATALOAD" + }, + { + "begin": 1066, + "end": 1675, + "name": "AND" + }, + { + "begin": 1066, + "end": 1675, + "name": "PUSH", + "value": "44" + }, + { + "begin": 1066, + "end": 1675, + "name": "CALLDATALOAD" + }, + { + "begin": 1066, + "end": 1675, + "name": "PUSH [tag]", + "value": "25" + }, + { + "begin": 1066, + "end": 1675, + "name": "JUMP" + }, + { + "begin": 1066, + "end": 1675, + "name": "tag", + "value": "24" + }, + { + "begin": 1066, + "end": 1675, + "name": "JUMPDEST" + }, + { + "begin": 1066, + "end": 1675, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1066, + "end": 1675, + "name": "DUP1" + }, + { + "begin": 1066, + "end": 1675, + "name": "MLOAD" + }, + { + "begin": 1066, + "end": 1675, + "name": "SWAP2" + }, + { + "begin": 1066, + "end": 1675, + "name": "ISZERO" + }, + { + "begin": 1066, + "end": 1675, + "name": "ISZERO" + }, + { + "begin": 1066, + "end": 1675, + "name": "DUP3" + }, + { + "begin": 1066, + "end": 1675, + "name": "MSTORE" + }, + { + "begin": 1066, + "end": 1675, + "name": "MLOAD" + }, + { + "begin": 1066, + "end": 1675, + "name": "SWAP1" + }, + { + "begin": 1066, + "end": 1675, + "name": "DUP2" + }, + { + "begin": 1066, + "end": 1675, + "name": "SWAP1" + }, + { + "begin": 1066, + "end": 1675, + "name": "SUB" + }, + { + "begin": 1066, + "end": 1675, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1066, + "end": 1675, + "name": "ADD" + }, + { + "begin": 1066, + "end": 1675, + "name": "SWAP1" + }, + { + "begin": 1066, + "end": 1675, + "name": "RETURN" + }, + { + "begin": 891, + "end": 926, + "name": "tag", + "value": "6" + }, + { + "begin": 891, + "end": 926, + "name": "JUMPDEST" + }, + { + "begin": 891, + "end": 926, + "name": "CALLVALUE" + }, + { + "begin": 891, + "end": 926, + "name": "ISZERO" + }, + { + "begin": 891, + "end": 926, + "name": "PUSH [tag]", + "value": "26" + }, + { + "begin": 891, + "end": 926, + "name": "JUMPI" + }, + { + "begin": 891, + "end": 926, + "name": "INVALID" + }, + { + "begin": 891, + "end": 926, + "name": "tag", + "value": "26" + }, + { + "begin": 891, + "end": 926, + "name": "JUMPDEST" + }, + { + "begin": 891, + "end": 926, + "name": "PUSH [tag]", + "value": "27" + }, + { + "begin": 891, + "end": 926, + "name": "PUSH [tag]", + "value": "28" + }, + { + "begin": 891, + "end": 926, + "name": "JUMP" + }, + { + "begin": 891, + "end": 926, + "name": "tag", + "value": "27" + }, + { + "begin": 891, + "end": 926, + "name": "JUMPDEST" + }, + { + "begin": 891, + "end": 926, + "name": "PUSH", + "value": "40" + }, + { + "begin": 891, + "end": 926, + "name": "DUP1" + }, + { + "begin": 891, + "end": 926, + "name": "MLOAD" + }, + { + "begin": 891, + "end": 926, + "name": "PUSH", + "value": "FF" + }, + { + "begin": 891, + "end": 926, + "name": "SWAP1" + }, + { + "begin": 891, + "end": 926, + "name": "SWAP3" + }, + { + "begin": 891, + "end": 926, + "name": "AND" + }, + { + "begin": 891, + "end": 926, + "name": "DUP3" + }, + { + "begin": 891, + "end": 926, + "name": "MSTORE" + }, + { + "begin": 891, + "end": 926, + "name": "MLOAD" + }, + { + "begin": 891, + "end": 926, + "name": "SWAP1" + }, + { + "begin": 891, + "end": 926, + "name": "DUP2" + }, + { + "begin": 891, + "end": 926, + "name": "SWAP1" + }, + { + "begin": 891, + "end": 926, + "name": "SUB" + }, + { + "begin": 891, + "end": 926, + "name": "PUSH", + "value": "20" + }, + { + "begin": 891, + "end": 926, + "name": "ADD" + }, + { + "begin": 891, + "end": 926, + "name": "SWAP1" + }, + { + "begin": 891, + "end": 926, + "name": "RETURN" + }, + { + "begin": 982, + "end": 1081, + "name": "tag", + "value": "7" + }, + { + "begin": 982, + "end": 1081, + "name": "JUMPDEST" + }, + { + "begin": 982, + "end": 1081, + "name": "CALLVALUE" + }, + { + "begin": 982, + "end": 1081, + "name": "ISZERO" + }, + { + "begin": 982, + "end": 1081, + "name": "PUSH [tag]", + "value": "29" + }, + { + "begin": 982, + "end": 1081, + "name": "JUMPI" + }, + { + "begin": 982, + "end": 1081, + "name": "INVALID" + }, + { + "begin": 982, + "end": 1081, + "name": "tag", + "value": "29" + }, + { + "begin": 982, + "end": 1081, + "name": "JUMPDEST" + }, + { + "begin": 982, + "end": 1081, + "name": "PUSH [tag]", + "value": "21" + }, + { + "begin": 982, + "end": 1081, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 982, + "end": 1081, + "name": "PUSH", + "value": "4" + }, + { + "begin": 982, + "end": 1081, + "name": "CALLDATALOAD" + }, + { + "begin": 982, + "end": 1081, + "name": "AND" + }, + { + "begin": 982, + "end": 1081, + "name": "PUSH [tag]", + "value": "31" + }, + { + "begin": 982, + "end": 1081, + "name": "JUMP" + }, + { + "begin": 982, + "end": 1081, + "name": "tag", + "value": "30" + }, + { + "begin": 982, + "end": 1081, + "name": "JUMPDEST" + }, + { + "begin": 982, + "end": 1081, + "name": "PUSH", + "value": "40" + }, + { + "begin": 982, + "end": 1081, + "name": "DUP1" + }, + { + "begin": 982, + "end": 1081, + "name": "MLOAD" + }, + { + "begin": 982, + "end": 1081, + "name": "SWAP2" + }, + { + "begin": 982, + "end": 1081, + "name": "DUP3" + }, + { + "begin": 982, + "end": 1081, + "name": "MSTORE" + }, + { + "begin": 982, + "end": 1081, + "name": "MLOAD" + }, + { + "begin": 982, + "end": 1081, + "name": "SWAP1" + }, + { + "begin": 982, + "end": 1081, + "name": "DUP2" + }, + { + "begin": 982, + "end": 1081, + "name": "SWAP1" + }, + { + "begin": 982, + "end": 1081, + "name": "SUB" + }, + { + "begin": 982, + "end": 1081, + "name": "PUSH", + "value": "20" + }, + { + "begin": 982, + "end": 1081, + "name": "ADD" + }, + { + "begin": 982, + "end": 1081, + "name": "SWAP1" + }, + { + "begin": 982, + "end": 1081, + "name": "RETURN" + }, + { + "begin": 1064, + "end": 1101, + "name": "tag", + "value": "8" + }, + { + "begin": 1064, + "end": 1101, + "name": "JUMPDEST" + }, + { + "begin": 1064, + "end": 1101, + "name": "CALLVALUE" + }, + { + "begin": 1064, + "end": 1101, + "name": "ISZERO" + }, + { + "begin": 1064, + "end": 1101, + "name": "PUSH [tag]", + "value": "32" + }, + { + "begin": 1064, + "end": 1101, + "name": "JUMPI" + }, + { + "begin": 1064, + "end": 1101, + "name": "INVALID" + }, + { + "begin": 1064, + "end": 1101, + "name": "tag", + "value": "32" + }, + { + "begin": 1064, + "end": 1101, + "name": "JUMPDEST" + }, + { + "begin": 1064, + "end": 1101, + "name": "PUSH [tag]", + "value": "12" + }, + { + "begin": 1064, + "end": 1101, + "name": "PUSH [tag]", + "value": "34" + }, + { + "begin": 1064, + "end": 1101, + "name": "JUMP" + }, + { + "begin": 1064, + "end": 1101, + "name": "tag", + "value": "33" + }, + { + "begin": 1064, + "end": 1101, + "name": "JUMPDEST" + }, + { + "begin": 1064, + "end": 1101, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP1" + }, + { + "begin": 1064, + "end": 1101, + "name": "MLOAD" + }, + { + "begin": 1064, + "end": 1101, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP1" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP3" + }, + { + "begin": 1064, + "end": 1101, + "name": "MSTORE" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP4" + }, + { + "begin": 1064, + "end": 1101, + "name": "MLOAD" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP2" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP4" + }, + { + "begin": 1064, + "end": 1101, + "name": "ADD" + }, + { + "begin": 1064, + "end": 1101, + "name": "MSTORE" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP4" + }, + { + "begin": 1064, + "end": 1101, + "name": "MLOAD" + }, + { + "begin": 1064, + "end": 1101, + "name": "SWAP2" + }, + { + "begin": 1064, + "end": 1101, + "name": "SWAP3" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP4" + }, + { + "begin": 1064, + "end": 1101, + "name": "SWAP3" + }, + { + "begin": 1064, + "end": 1101, + "name": "SWAP1" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP4" + }, + { + "begin": 1064, + "end": 1101, + "name": "ADD" + }, + { + "begin": 1064, + "end": 1101, + "name": "SWAP2" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP6" + }, + { + "begin": 1064, + "end": 1101, + "name": "ADD" + }, + { + "begin": 1064, + "end": 1101, + "name": "SWAP1" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP1" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP4" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP4" + }, + { + "begin": 18, + "end": 20, + "name": "DUP3" + }, + { + "begin": 18, + "end": 20, + "name": "ISZERO" + }, + { + "begin": 13, + "end": 16, + "name": "PUSH [tag]", + "value": "14" + }, + { + "begin": 7, + "end": 12, + "name": "JUMPI" + }, + { + "begin": 32, + "end": 37, + "name": "tag", + "value": "36" + }, + { + "begin": 32, + "end": 37, + "name": "JUMPDEST" + }, + { + "begin": 59, + "end": 62, + "name": "DUP1" + }, + { + "begin": 53, + "end": 58, + "name": "MLOAD" + }, + { + "begin": 48, + "end": 51, + "name": "DUP3" + }, + { + "begin": 41, + "end": 47, + "name": "MSTORE" + }, + { + "begin": 93, + "end": 95, + "name": "PUSH", + "value": "20" + }, + { + "begin": 88, + "end": 91, + "name": "DUP4" + }, + { + "begin": 85, + "end": 87, + "name": "GT" + }, + { + "begin": 78, + "end": 84, + "name": "ISZERO" + }, + { + "begin": 73, + "end": 76, + "name": "PUSH [tag]", + "value": "14" + }, + { + "begin": 67, + "end": 72, + "name": "JUMPI" + }, + { + "begin": 152, + "end": 155, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0" + }, + { + "begin": 152, + "end": 155, + "name": "SWAP1" + }, + { + "begin": 152, + "end": 155, + "name": "SWAP3" + }, + { + "begin": 152, + "end": 155, + "name": "ADD" + }, + { + "begin": 152, + "end": 155, + "name": "SWAP2" + }, + { + "begin": 117, + "end": 119, + "name": "PUSH", + "value": "20" + }, + { + "begin": 108, + "end": 111, + "name": "SWAP2" + }, + { + "begin": 108, + "end": 111, + "name": "DUP3" + }, + { + "begin": 108, + "end": 111, + "name": "ADD" + }, + { + "begin": 108, + "end": 111, + "name": "SWAP2" + }, + { + "begin": 130, + "end": 133, + "name": "ADD" + }, + { + "begin": 172, + "end": 177, + "name": "PUSH [tag]", + "value": "15" + }, + { + "begin": 167, + "end": 171, + "name": "JUMP" + }, + { + "begin": 181, + "end": 184, + "name": "tag", + "value": "35" + }, + { + "begin": 181, + "end": 184, + "name": "JUMPDEST" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP1" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP1" + }, + { + "begin": 3, + "end": 189, + "name": "DUP2" + }, + { + "begin": 3, + "end": 189, + "name": "ADD" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP1" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH", + "value": "1F" + }, + { + "begin": 3, + "end": 189, + "name": "AND" + }, + { + "begin": 3, + "end": 189, + "name": "DUP1" + }, + { + "begin": 3, + "end": 189, + "name": "ISZERO" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH [tag]", + "value": "16" + }, + { + "begin": 3, + "end": 189, + "name": "JUMPI" + }, + { + "begin": 3, + "end": 189, + "name": "DUP1" + }, + { + "begin": 3, + "end": 189, + "name": "DUP3" + }, + { + "begin": 3, + "end": 189, + "name": "SUB" + }, + { + "begin": 3, + "end": 189, + "name": "DUP1" + }, + { + "begin": 3, + "end": 189, + "name": "MLOAD" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH", + "value": "1" + }, + { + "begin": 3, + "end": 189, + "name": "DUP4" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH", + "value": "20" + }, + { + "begin": 3, + "end": 189, + "name": "SUB" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH", + "value": "100" + }, + { + "begin": 3, + "end": 189, + "name": "EXP" + }, + { + "begin": 3, + "end": 189, + "name": "SUB" + }, + { + "begin": 3, + "end": 189, + "name": "NOT" + }, + { + "begin": 3, + "end": 189, + "name": "AND" + }, + { + "begin": 3, + "end": 189, + "name": "DUP2" + }, + { + "begin": 3, + "end": 189, + "name": "MSTORE" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH", + "value": "20" + }, + { + "begin": 3, + "end": 189, + "name": "ADD" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP2" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "tag", + "value": "37" + }, + { + "begin": 3, + "end": 189, + "name": "JUMPDEST" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP3" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "POP" + }, + { + "begin": 3, + "end": 189, + "name": "PUSH", + "value": "40" + }, + { + "begin": 3, + "end": 189, + "name": "MLOAD" + }, + { + "begin": 3, + "end": 189, + "name": "DUP1" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP2" + }, + { + "begin": 3, + "end": 189, + "name": "SUB" + }, + { + "begin": 3, + "end": 189, + "name": "SWAP1" + }, + { + "begin": 3, + "end": 189, + "name": "RETURN" + }, + { + "begin": 125, + "end": 535, + "name": "tag", + "value": "9" + }, + { + "begin": 125, + "end": 535, + "name": "JUMPDEST" + }, + { + "begin": 125, + "end": 535, + "name": "CALLVALUE" + }, + { + "begin": 125, + "end": 535, + "name": "ISZERO" + }, + { + "begin": 125, + "end": 535, + "name": "PUSH [tag]", + "value": "38" + }, + { + "begin": 125, + "end": 535, + "name": "JUMPI" + }, + { + "begin": 125, + "end": 535, + "name": "INVALID" + }, + { + "begin": 125, + "end": 535, + "name": "tag", + "value": "38" + }, + { + "begin": 125, + "end": 535, + "name": "JUMPDEST" + }, + { + "begin": 125, + "end": 535, + "name": "PUSH [tag]", + "value": "18" + }, + { + "begin": 125, + "end": 535, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 125, + "end": 535, + "name": "PUSH", + "value": "4" + }, + { + "begin": 125, + "end": 535, + "name": "CALLDATALOAD" + }, + { + "begin": 125, + "end": 535, + "name": "AND" + }, + { + "begin": 125, + "end": 535, + "name": "PUSH", + "value": "24" + }, + { + "begin": 125, + "end": 535, + "name": "CALLDATALOAD" + }, + { + "begin": 125, + "end": 535, + "name": "PUSH [tag]", + "value": "40" + }, + { + "begin": 125, + "end": 535, + "name": "JUMP" + }, + { + "begin": 125, + "end": 535, + "name": "tag", + "value": "39" + }, + { + "begin": 125, + "end": 535, + "name": "JUMPDEST" + }, + { + "begin": 125, + "end": 535, + "name": "PUSH", + "value": "40" + }, + { + "begin": 125, + "end": 535, + "name": "DUP1" + }, + { + "begin": 125, + "end": 535, + "name": "MLOAD" + }, + { + "begin": 125, + "end": 535, + "name": "SWAP2" + }, + { + "begin": 125, + "end": 535, + "name": "ISZERO" + }, + { + "begin": 125, + "end": 535, + "name": "ISZERO" + }, + { + "begin": 125, + "end": 535, + "name": "DUP3" + }, + { + "begin": 125, + "end": 535, + "name": "MSTORE" + }, + { + "begin": 125, + "end": 535, + "name": "MLOAD" + }, + { + "begin": 125, + "end": 535, + "name": "SWAP1" + }, + { + "begin": 125, + "end": 535, + "name": "DUP2" + }, + { + "begin": 125, + "end": 535, + "name": "SWAP1" + }, + { + "begin": 125, + "end": 535, + "name": "SUB" + }, + { + "begin": 125, + "end": 535, + "name": "PUSH", + "value": "20" + }, + { + "begin": 125, + "end": 535, + "name": "ADD" + }, + { + "begin": 125, + "end": 535, + "name": "SWAP1" + }, + { + "begin": 125, + "end": 535, + "name": "RETURN" + }, + { + "begin": 1280, + "end": 1406, + "name": "tag", + "value": "10" + }, + { + "begin": 1280, + "end": 1406, + "name": "JUMPDEST" + }, + { + "begin": 1280, + "end": 1406, + "name": "CALLVALUE" + }, + { + "begin": 1280, + "end": 1406, + "name": "ISZERO" + }, + { + "begin": 1280, + "end": 1406, + "name": "PUSH [tag]", + "value": "41" + }, + { + "begin": 1280, + "end": 1406, + "name": "JUMPI" + }, + { + "begin": 1280, + "end": 1406, + "name": "INVALID" + }, + { + "begin": 1280, + "end": 1406, + "name": "tag", + "value": "41" + }, + { + "begin": 1280, + "end": 1406, + "name": "JUMPDEST" + }, + { + "begin": 1280, + "end": 1406, + "name": "PUSH [tag]", + "value": "21" + }, + { + "begin": 1280, + "end": 1406, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1280, + "end": 1406, + "name": "PUSH", + "value": "4" + }, + { + "begin": 1280, + "end": 1406, + "name": "CALLDATALOAD" + }, + { + "begin": 1280, + "end": 1406, + "name": "DUP2" + }, + { + "begin": 1280, + "end": 1406, + "name": "AND" + }, + { + "begin": 1280, + "end": 1406, + "name": "SWAP1" + }, + { + "begin": 1280, + "end": 1406, + "name": "PUSH", + "value": "24" + }, + { + "begin": 1280, + "end": 1406, + "name": "CALLDATALOAD" + }, + { + "begin": 1280, + "end": 1406, + "name": "AND" + }, + { + "begin": 1280, + "end": 1406, + "name": "PUSH [tag]", + "value": "43" + }, + { + "begin": 1280, + "end": 1406, + "name": "JUMP" + }, + { + "begin": 1280, + "end": 1406, + "name": "tag", + "value": "42" + }, + { + "begin": 1280, + "end": 1406, + "name": "JUMPDEST" + }, + { + "begin": 1280, + "end": 1406, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1280, + "end": 1406, + "name": "DUP1" + }, + { + "begin": 1280, + "end": 1406, + "name": "MLOAD" + }, + { + "begin": 1280, + "end": 1406, + "name": "SWAP2" + }, + { + "begin": 1280, + "end": 1406, + "name": "DUP3" + }, + { + "begin": 1280, + "end": 1406, + "name": "MSTORE" + }, + { + "begin": 1280, + "end": 1406, + "name": "MLOAD" + }, + { + "begin": 1280, + "end": 1406, + "name": "SWAP1" + }, + { + "begin": 1280, + "end": 1406, + "name": "DUP2" + }, + { + "begin": 1280, + "end": 1406, + "name": "SWAP1" + }, + { + "begin": 1280, + "end": 1406, + "name": "SUB" + }, + { + "begin": 1280, + "end": 1406, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1280, + "end": 1406, + "name": "ADD" + }, + { + "begin": 1280, + "end": 1406, + "name": "SWAP1" + }, + { + "begin": 1280, + "end": 1406, + "name": "RETURN" + }, + { + "begin": 1009, + "end": 1058, + "name": "tag", + "value": "13" + }, + { + "begin": 1009, + "end": 1058, + "name": "JUMPDEST" + }, + { + "begin": 1009, + "end": 1058, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP1" + }, + { + "begin": 1009, + "end": 1058, + "name": "MLOAD" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP1" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP3" + }, + { + "begin": 1009, + "end": 1058, + "name": "ADD" + }, + { + "begin": 1009, + "end": 1058, + "name": "SWAP1" + }, + { + "begin": 1009, + "end": 1058, + "name": "SWAP2" + }, + { + "begin": 1009, + "end": 1058, + "name": "MSTORE" + }, + { + "begin": 1009, + "end": 1058, + "name": "PUSH", + "value": "11" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP2" + }, + { + "begin": 1009, + "end": 1058, + "name": "MSTORE" + }, + { + "begin": 1009, + "end": 1058, + "name": "PUSH", + "value": "30782050726F746F636F6C20546F6B656E000000000000000000000000000000" + }, + { + "begin": 1009, + "end": 1058, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP3" + }, + { + "begin": 1009, + "end": 1058, + "name": "ADD" + }, + { + "begin": 1009, + "end": 1058, + "name": "MSTORE" + }, + { + "begin": 1009, + "end": 1058, + "name": "DUP2" + }, + { + "begin": 1009, + "end": 1058, + "name": "JUMP", + "value": "[out]" + }, + { + "begin": 1087, + "end": 1274, + "name": "tag", + "value": "19" + }, + { + "begin": 1087, + "end": 1274, + "name": "JUMPDEST" + }, + { + "begin": 1160, + "end": 1179, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1168, + "end": 1178, + "name": "CALLER" + }, + { + "begin": 1160, + "end": 1179, + "name": "DUP2" + }, + { + "begin": 1160, + "end": 1179, + "name": "AND" + }, + { + "begin": 1144, + "end": 1148, + "name": "PUSH", + "value": "0" + }, + { + "begin": 1160, + "end": 1179, + "name": "DUP2" + }, + { + "begin": 1160, + "end": 1179, + "name": "DUP2" + }, + { + "begin": 1160, + "end": 1179, + "name": "MSTORE" + }, + { + "begin": 1160, + "end": 1167, + "name": "PUSH", + "value": "1" + }, + { + "begin": 1160, + "end": 1179, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1160, + "end": 1179, + "name": "SWAP1" + }, + { + "begin": 1160, + "end": 1179, + "name": "DUP2" + }, + { + "begin": 1160, + "end": 1179, + "name": "MSTORE" + }, + { + "begin": 1160, + "end": 1179, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1160, + "end": 1179, + "name": "DUP1" + }, + { + "begin": 1160, + "end": 1179, + "name": "DUP4" + }, + { + "begin": 1160, + "end": 1179, + "name": "SHA3" + }, + { + "begin": 1160, + "end": 1189, + "name": "SWAP5" + }, + { + "begin": 1160, + "end": 1189, + "name": "DUP8" + }, + { + "begin": 1160, + "end": 1189, + "name": "AND" + }, + { + "begin": 1160, + "end": 1189, + "name": "DUP1" + }, + { + "begin": 1160, + "end": 1189, + "name": "DUP5" + }, + { + "begin": 1160, + "end": 1189, + "name": "MSTORE" + }, + { + "begin": 1160, + "end": 1189, + "name": "SWAP5" + }, + { + "begin": 1160, + "end": 1189, + "name": "DUP3" + }, + { + "begin": 1160, + "end": 1189, + "name": "MSTORE" + }, + { + "begin": 1160, + "end": 1189, + "name": "DUP1" + }, + { + "begin": 1160, + "end": 1189, + "name": "DUP4" + }, + { + "begin": 1160, + "end": 1189, + "name": "SHA3" + }, + { + "begin": 1160, + "end": 1198, + "name": "DUP7" + }, + { + "begin": 1160, + "end": 1198, + "name": "SWAP1" + }, + { + "begin": 1160, + "end": 1198, + "name": "SSTORE" + }, + { + "begin": 1208, + "end": 1246, + "name": "DUP1" + }, + { + "begin": 1208, + "end": 1246, + "name": "MLOAD" + }, + { + "begin": 1208, + "end": 1246, + "name": "DUP7" + }, + { + "begin": 1208, + "end": 1246, + "name": "DUP2" + }, + { + "begin": 1208, + "end": 1246, + "name": "MSTORE" + }, + { + "begin": 1208, + "end": 1246, + "name": "SWAP1" + }, + { + "begin": 1208, + "end": 1246, + "name": "MLOAD" + }, + { + "begin": 1144, + "end": 1148, + "name": "SWAP3" + }, + { + "begin": 1144, + "end": 1148, + "name": "SWAP5" + }, + { + "begin": 1160, + "end": 1189, + "name": "SWAP4" + }, + { + "begin": 1160, + "end": 1179, + "name": "SWAP3" + }, + { + "begin": 1208, + "end": 1246, + "name": "PUSH", + "value": "8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925" + }, + { + "begin": 1208, + "end": 1246, + "name": "SWAP3" + }, + { + "begin": 1208, + "end": 1246, + "name": "SWAP2" + }, + { + "begin": 1208, + "end": 1246, + "name": "DUP2" + }, + { + "begin": 1208, + "end": 1246, + "name": "SWAP1" + }, + { + "begin": 1208, + "end": 1246, + "name": "SUB" + }, + { + "begin": 1208, + "end": 1246, + "name": "SWAP1" + }, + { + "begin": 1208, + "end": 1246, + "name": "SWAP2" + }, + { + "begin": 1208, + "end": 1246, + "name": "ADD" + }, + { + "begin": 1208, + "end": 1246, + "name": "SWAP1" + }, + { + "begin": 1208, + "end": 1246, + "name": "LOG3" + }, + { + "begin": -1, + "end": -1, + "name": "POP" + }, + { + "begin": 1263, + "end": 1267, + "name": "PUSH", + "value": "1" + }, + { + "begin": 1087, + "end": 1274, + "name": "tag", + "value": "44" + }, + { + "begin": 1087, + "end": 1274, + "name": "JUMPDEST" + }, + { + "begin": 1087, + "end": 1274, + "name": "SWAP3" + }, + { + "begin": 1087, + "end": 1274, + "name": "SWAP2" + }, + { + "begin": 1087, + "end": 1274, + "name": "POP" + }, + { + "begin": 1087, + "end": 1274, + "name": "POP" + }, + { + "begin": 1087, + "end": 1274, + "name": "JUMP", + "value": "[out]" + }, + { + "begin": 932, + "end": 964, + "name": "tag", + "value": "22" + }, + { + "begin": 932, + "end": 964, + "name": "JUMPDEST" + }, + { + "begin": 932, + "end": 964, + "name": "PUSH", + "value": "3" + }, + { + "begin": 932, + "end": 964, + "name": "SLOAD" + }, + { + "begin": 932, + "end": 964, + "name": "DUP2" + }, + { + "begin": 932, + "end": 964, + "name": "JUMP", + "value": "[out]" + }, + { + "begin": 1066, + "end": 1675, + "name": "tag", + "value": "25" + }, + { + "begin": 1066, + "end": 1675, + "name": "JUMPDEST" + }, + { + "begin": 1198, + "end": 1212, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1198, + "end": 1212, + "name": "DUP1" + }, + { + "begin": 1198, + "end": 1212, + "name": "DUP5" + }, + { + "begin": 1198, + "end": 1212, + "name": "AND" + }, + { + "begin": 1161, + "end": 1165, + "name": "PUSH", + "value": "0" + }, + { + "begin": 1198, + "end": 1212, + "name": "DUP2" + }, + { + "begin": 1198, + "end": 1212, + "name": "DUP2" + }, + { + "begin": 1198, + "end": 1212, + "name": "MSTORE" + }, + { + "begin": 1198, + "end": 1205, + "name": "PUSH", + "value": "1" + }, + { + "begin": 1198, + "end": 1212, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1198, + "end": 1212, + "name": "SWAP1" + }, + { + "begin": 1198, + "end": 1212, + "name": "DUP2" + }, + { + "begin": 1198, + "end": 1212, + "name": "MSTORE" + }, + { + "begin": 1198, + "end": 1212, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1198, + "end": 1212, + "name": "DUP1" + }, + { + "begin": 1198, + "end": 1212, + "name": "DUP4" + }, + { + "begin": 1198, + "end": 1212, + "name": "SHA3" + }, + { + "begin": 1213, + "end": 1223, + "name": "CALLER" + }, + { + "begin": 1198, + "end": 1224, + "name": "SWAP1" + }, + { + "begin": 1198, + "end": 1224, + "name": "SWAP6" + }, + { + "begin": 1198, + "end": 1224, + "name": "AND" + }, + { + "begin": 1198, + "end": 1224, + "name": "DUP4" + }, + { + "begin": 1198, + "end": 1224, + "name": "MSTORE" + }, + { + "begin": 1198, + "end": 1224, + "name": "SWAP4" + }, + { + "begin": 1198, + "end": 1224, + "name": "DUP2" + }, + { + "begin": 1198, + "end": 1224, + "name": "MSTORE" + }, + { + "begin": 1198, + "end": 1224, + "name": "DUP4" + }, + { + "begin": 1198, + "end": 1224, + "name": "DUP3" + }, + { + "begin": 1198, + "end": 1224, + "name": "SHA3" + }, + { + "begin": 1198, + "end": 1224, + "name": "SLOAD" + }, + { + "begin": 1238, + "end": 1253, + "name": "SWAP3" + }, + { + "begin": 1238, + "end": 1253, + "name": "DUP3" + }, + { + "begin": 1238, + "end": 1253, + "name": "MSTORE" + }, + { + "begin": 1238, + "end": 1253, + "name": "DUP2" + }, + { + "begin": 1238, + "end": 1253, + "name": "SWAP1" + }, + { + "begin": 1238, + "end": 1253, + "name": "MSTORE" + }, + { + "begin": 1238, + "end": 1253, + "name": "SWAP2" + }, + { + "begin": 1238, + "end": 1253, + "name": "DUP3" + }, + { + "begin": 1238, + "end": 1253, + "name": "SHA3" + }, + { + "begin": 1238, + "end": 1253, + "name": "SLOAD" + }, + { + "begin": 1238, + "end": 1263, + "name": "DUP4" + }, + { + "begin": 1238, + "end": 1263, + "name": "SWAP1" + }, + { + "begin": 1238, + "end": 1263, + "name": "LT" + }, + { + "begin": 1238, + "end": 1263, + "name": "DUP1" + }, + { + "begin": 1238, + "end": 1263, + "name": "ISZERO" + }, + { + "begin": 1238, + "end": 1263, + "name": "SWAP1" + }, + { + "begin": 1238, + "end": 1298, + "name": "PUSH [tag]", + "value": "46" + }, + { + "begin": 1238, + "end": 1298, + "name": "JUMPI" + }, + { + "begin": 1238, + "end": 1298, + "name": "POP" + }, + { + "begin": 1292, + "end": 1298, + "name": "DUP3" + }, + { + "begin": 1279, + "end": 1288, + "name": "DUP2" + }, + { + "begin": 1279, + "end": 1298, + "name": "LT" + }, + { + "begin": 1279, + "end": 1298, + "name": "ISZERO" + }, + { + "begin": 1238, + "end": 1298, + "name": "tag", + "value": "46" + }, + { + "begin": 1238, + "end": 1298, + "name": "JUMPDEST" + }, + { + "begin": 1238, + "end": 1353, + "name": "DUP1" + }, + { + "begin": 1238, + "end": 1353, + "name": "ISZERO" + }, + { + "begin": 1238, + "end": 1353, + "name": "PUSH [tag]", + "value": "47" + }, + { + "begin": 1238, + "end": 1353, + "name": "JUMPI" + }, + { + "begin": -1, + "end": -1, + "name": "POP" + }, + { + "begin": 1340, + "end": 1353, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1340, + "end": 1353, + "name": "DUP5" + }, + { + "begin": 1340, + "end": 1353, + "name": "AND" + }, + { + "begin": 1340, + "end": 1348, + "name": "PUSH", + "value": "0" + }, + { + "begin": 1340, + "end": 1353, + "name": "SWAP1" + }, + { + "begin": 1340, + "end": 1353, + "name": "DUP2" + }, + { + "begin": 1340, + "end": 1353, + "name": "MSTORE" + }, + { + "begin": 1340, + "end": 1353, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1340, + "end": 1353, + "name": "DUP2" + }, + { + "begin": 1340, + "end": 1353, + "name": "SWAP1" + }, + { + "begin": 1340, + "end": 1353, + "name": "MSTORE" + }, + { + "begin": 1340, + "end": 1353, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1340, + "end": 1353, + "name": "SWAP1" + }, + { + "begin": 1340, + "end": 1353, + "name": "SHA3" + }, + { + "begin": 1340, + "end": 1353, + "name": "SLOAD" + }, + { + "begin": 1314, + "end": 1336, + "name": "DUP4" + }, + { + "begin": 1314, + "end": 1336, + "name": "DUP2" + }, + { + "begin": 1314, + "end": 1336, + "name": "ADD" + }, + { + "begin": 1314, + "end": 1353, + "name": "LT" + }, + { + "begin": 1314, + "end": 1353, + "name": "ISZERO" + }, + { + "begin": 1238, + "end": 1353, + "name": "tag", + "value": "47" + }, + { + "begin": 1238, + "end": 1353, + "name": "JUMPDEST" + }, + { + "begin": 1234, + "end": 1669, + "name": "ISZERO" + }, + { + "begin": 1234, + "end": 1669, + "name": "PUSH [tag]", + "value": "48" + }, + { + "begin": 1234, + "end": 1669, + "name": "JUMPI" + }, + { + "begin": 1378, + "end": 1391, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1378, + "end": 1391, + "name": "DUP1" + }, + { + "begin": 1378, + "end": 1391, + "name": "DUP6" + }, + { + "begin": 1378, + "end": 1391, + "name": "AND" + }, + { + "begin": 1378, + "end": 1386, + "name": "PUSH", + "value": "0" + }, + { + "begin": 1378, + "end": 1391, + "name": "SWAP1" + }, + { + "begin": 1378, + "end": 1391, + "name": "DUP2" + }, + { + "begin": 1378, + "end": 1391, + "name": "MSTORE" + }, + { + "begin": 1378, + "end": 1391, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1378, + "end": 1391, + "name": "DUP2" + }, + { + "begin": 1378, + "end": 1391, + "name": "SWAP1" + }, + { + "begin": 1378, + "end": 1391, + "name": "MSTORE" + }, + { + "begin": 1378, + "end": 1391, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1378, + "end": 1391, + "name": "DUP1" + }, + { + "begin": 1378, + "end": 1391, + "name": "DUP3" + }, + { + "begin": 1378, + "end": 1391, + "name": "SHA3" + }, + { + "begin": 1378, + "end": 1401, + "name": "DUP1" + }, + { + "begin": 1378, + "end": 1401, + "name": "SLOAD" + }, + { + "begin": 1378, + "end": 1401, + "name": "DUP8" + }, + { + "begin": 1378, + "end": 1401, + "name": "ADD" + }, + { + "begin": 1378, + "end": 1401, + "name": "SWAP1" + }, + { + "begin": 1378, + "end": 1401, + "name": "SSTORE" + }, + { + "begin": 1415, + "end": 1430, + "name": "SWAP2" + }, + { + "begin": 1415, + "end": 1430, + "name": "DUP8" + }, + { + "begin": 1415, + "end": 1430, + "name": "AND" + }, + { + "begin": 1415, + "end": 1430, + "name": "DUP2" + }, + { + "begin": 1415, + "end": 1430, + "name": "MSTORE" + }, + { + "begin": 1415, + "end": 1430, + "name": "SHA3" + }, + { + "begin": 1415, + "end": 1440, + "name": "DUP1" + }, + { + "begin": 1415, + "end": 1440, + "name": "SLOAD" + }, + { + "begin": 1415, + "end": 1440, + "name": "DUP5" + }, + { + "begin": 1415, + "end": 1440, + "name": "SWAP1" + }, + { + "begin": 1415, + "end": 1440, + "name": "SUB" + }, + { + "begin": 1415, + "end": 1440, + "name": "SWAP1" + }, + { + "begin": 1415, + "end": 1440, + "name": "SSTORE" + }, + { + "begin": 768, + "end": 778, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1458, + "end": 1478, + "name": "DUP2" + }, + { + "begin": 1458, + "end": 1478, + "name": "LT" + }, + { + "begin": 1454, + "end": 1549, + "name": "ISZERO" + }, + { + "begin": 1454, + "end": 1549, + "name": "PUSH [tag]", + "value": "49" + }, + { + "begin": 1454, + "end": 1549, + "name": "JUMPI" + }, + { + "begin": 1498, + "end": 1512, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1498, + "end": 1512, + "name": "DUP1" + }, + { + "begin": 1498, + "end": 1512, + "name": "DUP7" + }, + { + "begin": 1498, + "end": 1512, + "name": "AND" + }, + { + "begin": 1498, + "end": 1512, + "name": "PUSH", + "value": "0" + }, + { + "begin": 1498, + "end": 1512, + "name": "SWAP1" + }, + { + "begin": 1498, + "end": 1512, + "name": "DUP2" + }, + { + "begin": 1498, + "end": 1512, + "name": "MSTORE" + }, + { + "begin": 1498, + "end": 1505, + "name": "PUSH", + "value": "1" + }, + { + "begin": 1498, + "end": 1512, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1498, + "end": 1512, + "name": "SWAP1" + }, + { + "begin": 1498, + "end": 1512, + "name": "DUP2" + }, + { + "begin": 1498, + "end": 1512, + "name": "MSTORE" + }, + { + "begin": 1498, + "end": 1512, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1498, + "end": 1512, + "name": "DUP1" + }, + { + "begin": 1498, + "end": 1512, + "name": "DUP4" + }, + { + "begin": 1498, + "end": 1512, + "name": "SHA3" + }, + { + "begin": 1513, + "end": 1523, + "name": "CALLER" + }, + { + "begin": 1498, + "end": 1524, + "name": "SWAP1" + }, + { + "begin": 1498, + "end": 1524, + "name": "SWAP5" + }, + { + "begin": 1498, + "end": 1524, + "name": "AND" + }, + { + "begin": 1498, + "end": 1524, + "name": "DUP4" + }, + { + "begin": 1498, + "end": 1524, + "name": "MSTORE" + }, + { + "begin": 1498, + "end": 1524, + "name": "SWAP3" + }, + { + "begin": 1498, + "end": 1524, + "name": "SWAP1" + }, + { + "begin": 1498, + "end": 1524, + "name": "MSTORE" + }, + { + "begin": 1498, + "end": 1524, + "name": "SHA3" + }, + { + "begin": 1498, + "end": 1534, + "name": "DUP1" + }, + { + "begin": 1498, + "end": 1534, + "name": "SLOAD" + }, + { + "begin": 1498, + "end": 1534, + "name": "DUP5" + }, + { + "begin": 1498, + "end": 1534, + "name": "SWAP1" + }, + { + "begin": 1498, + "end": 1534, + "name": "SUB" + }, + { + "begin": 1498, + "end": 1534, + "name": "SWAP1" + }, + { + "begin": 1498, + "end": 1534, + "name": "SSTORE" + }, + { + "begin": 1454, + "end": 1549, + "name": "tag", + "value": "49" + }, + { + "begin": 1454, + "end": 1549, + "name": "JUMPDEST" + }, + { + "begin": 1578, + "end": 1581, + "name": "DUP4" + }, + { + "begin": 1562, + "end": 1590, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1562, + "end": 1590, + "name": "AND" + }, + { + "begin": 1571, + "end": 1576, + "name": "DUP6" + }, + { + "begin": 1562, + "end": 1590, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1562, + "end": 1590, + "name": "AND" + }, + { + "begin": 1562, + "end": 1590, + "name": "PUSH", + "value": "DDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF" + }, + { + "begin": 1583, + "end": 1589, + "name": "DUP6" + }, + { + "begin": 1562, + "end": 1590, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1562, + "end": 1590, + "name": "MLOAD" + }, + { + "begin": 1562, + "end": 1590, + "name": "DUP1" + }, + { + "begin": 1562, + "end": 1590, + "name": "DUP3" + }, + { + "begin": 1562, + "end": 1590, + "name": "DUP2" + }, + { + "begin": 1562, + "end": 1590, + "name": "MSTORE" + }, + { + "begin": 1562, + "end": 1590, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1562, + "end": 1590, + "name": "ADD" + }, + { + "begin": 1562, + "end": 1590, + "name": "SWAP2" + }, + { + "begin": 1562, + "end": 1590, + "name": "POP" + }, + { + "begin": 1562, + "end": 1590, + "name": "POP" + }, + { + "begin": 1562, + "end": 1590, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1562, + "end": 1590, + "name": "MLOAD" + }, + { + "begin": 1562, + "end": 1590, + "name": "DUP1" + }, + { + "begin": 1562, + "end": 1590, + "name": "SWAP2" + }, + { + "begin": 1562, + "end": 1590, + "name": "SUB" + }, + { + "begin": 1562, + "end": 1590, + "name": "SWAP1" + }, + { + "begin": 1562, + "end": 1590, + "name": "LOG3" + }, + { + "begin": 1611, + "end": 1615, + "name": "PUSH", + "value": "1" + }, + { + "begin": 1604, + "end": 1615, + "name": "SWAP2" + }, + { + "begin": 1604, + "end": 1615, + "name": "POP" + }, + { + "begin": 1604, + "end": 1615, + "name": "PUSH [tag]", + "value": "50" + }, + { + "begin": 1604, + "end": 1615, + "name": "JUMP" + }, + { + "begin": 1234, + "end": 1669, + "name": "tag", + "value": "48" + }, + { + "begin": 1234, + "end": 1669, + "name": "JUMPDEST" + }, + { + "begin": 1653, + "end": 1658, + "name": "PUSH", + "value": "0" + }, + { + "begin": 1646, + "end": 1658, + "name": "SWAP2" + }, + { + "begin": 1646, + "end": 1658, + "name": "POP" + }, + { + "begin": 1234, + "end": 1669, + "name": "tag", + "value": "50" + }, + { + "begin": 1234, + "end": 1669, + "name": "JUMPDEST" + }, + { + "begin": 1066, + "end": 1675, + "name": "tag", + "value": "45" + }, + { + "begin": 1066, + "end": 1675, + "name": "JUMPDEST" + }, + { + "begin": 1066, + "end": 1675, + "name": "POP" + }, + { + "begin": 1066, + "end": 1675, + "name": "SWAP4" + }, + { + "begin": 1066, + "end": 1675, + "name": "SWAP3" + }, + { + "begin": 1066, + "end": 1675, + "name": "POP" + }, + { + "begin": 1066, + "end": 1675, + "name": "POP" + }, + { + "begin": 1066, + "end": 1675, + "name": "POP" + }, + { + "begin": 1066, + "end": 1675, + "name": "JUMP", + "value": "[out]" + }, + { + "begin": 891, + "end": 926, + "name": "tag", + "value": "28" + }, + { + "begin": 891, + "end": 926, + "name": "JUMPDEST" + }, + { + "begin": 924, + "end": 926, + "name": "PUSH", + "value": "12" + }, + { + "begin": 891, + "end": 926, + "name": "DUP2" + }, + { + "begin": 891, + "end": 926, + "name": "JUMP", + "value": "[out]" + }, + { + "begin": 982, + "end": 1081, + "name": "tag", + "value": "31" + }, + { + "begin": 982, + "end": 1081, + "name": "JUMPDEST" + }, + { + "begin": 1058, + "end": 1074, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1058, + "end": 1074, + "name": "DUP2" + }, + { + "begin": 1058, + "end": 1074, + "name": "AND" + }, + { + "begin": 1035, + "end": 1039, + "name": "PUSH", + "value": "0" + }, + { + "begin": 1058, + "end": 1074, + "name": "SWAP1" + }, + { + "begin": 1058, + "end": 1074, + "name": "DUP2" + }, + { + "begin": 1058, + "end": 1074, + "name": "MSTORE" + }, + { + "begin": 1058, + "end": 1074, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1058, + "end": 1074, + "name": "DUP2" + }, + { + "begin": 1058, + "end": 1074, + "name": "SWAP1" + }, + { + "begin": 1058, + "end": 1074, + "name": "MSTORE" + }, + { + "begin": 1058, + "end": 1074, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1058, + "end": 1074, + "name": "SWAP1" + }, + { + "begin": 1058, + "end": 1074, + "name": "SHA3" + }, + { + "begin": 1058, + "end": 1074, + "name": "SLOAD" + }, + { + "begin": 982, + "end": 1081, + "name": "tag", + "value": "51" + }, + { + "begin": 982, + "end": 1081, + "name": "JUMPDEST" + }, + { + "begin": 982, + "end": 1081, + "name": "SWAP2" + }, + { + "begin": 982, + "end": 1081, + "name": "SWAP1" + }, + { + "begin": 982, + "end": 1081, + "name": "POP" + }, + { + "begin": 982, + "end": 1081, + "name": "JUMP", + "value": "[out]" + }, + { + "begin": 1064, + "end": 1101, + "name": "tag", + "value": "34" + }, + { + "begin": 1064, + "end": 1101, + "name": "JUMPDEST" + }, + { + "begin": 1064, + "end": 1101, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP1" + }, + { + "begin": 1064, + "end": 1101, + "name": "MLOAD" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP1" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP3" + }, + { + "begin": 1064, + "end": 1101, + "name": "ADD" + }, + { + "begin": 1064, + "end": 1101, + "name": "SWAP1" + }, + { + "begin": 1064, + "end": 1101, + "name": "SWAP2" + }, + { + "begin": 1064, + "end": 1101, + "name": "MSTORE" + }, + { + "begin": 1064, + "end": 1101, + "name": "PUSH", + "value": "3" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP2" + }, + { + "begin": 1064, + "end": 1101, + "name": "MSTORE" + }, + { + "begin": 1064, + "end": 1101, + "name": "PUSH", + "value": "5A52580000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1064, + "end": 1101, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP3" + }, + { + "begin": 1064, + "end": 1101, + "name": "ADD" + }, + { + "begin": 1064, + "end": 1101, + "name": "MSTORE" + }, + { + "begin": 1064, + "end": 1101, + "name": "DUP2" + }, + { + "begin": 1064, + "end": 1101, + "name": "JUMP", + "value": "[out]" + }, + { + "begin": 125, + "end": 535, + "name": "tag", + "value": "40" + }, + { + "begin": 125, + "end": 535, + "name": "JUMPDEST" + }, + { + "begin": 267, + "end": 287, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 276, + "end": 286, + "name": "CALLER" + }, + { + "begin": 267, + "end": 287, + "name": "AND" + }, + { + "begin": 178, + "end": 182, + "name": "PUSH", + "value": "0" + }, + { + "begin": 267, + "end": 287, + "name": "SWAP1" + }, + { + "begin": 267, + "end": 287, + "name": "DUP2" + }, + { + "begin": 267, + "end": 287, + "name": "MSTORE" + }, + { + "begin": 267, + "end": 287, + "name": "PUSH", + "value": "20" + }, + { + "begin": 267, + "end": 287, + "name": "DUP2" + }, + { + "begin": 267, + "end": 287, + "name": "SWAP1" + }, + { + "begin": 267, + "end": 287, + "name": "MSTORE" + }, + { + "begin": 267, + "end": 287, + "name": "PUSH", + "value": "40" + }, + { + "begin": 267, + "end": 287, + "name": "DUP2" + }, + { + "begin": 267, + "end": 287, + "name": "SHA3" + }, + { + "begin": 267, + "end": 287, + "name": "SLOAD" + }, + { + "begin": 267, + "end": 297, + "name": "DUP3" + }, + { + "begin": 267, + "end": 297, + "name": "SWAP1" + }, + { + "begin": 267, + "end": 297, + "name": "LT" + }, + { + "begin": 267, + "end": 297, + "name": "DUP1" + }, + { + "begin": 267, + "end": 297, + "name": "ISZERO" + }, + { + "begin": 267, + "end": 297, + "name": "SWAP1" + }, + { + "begin": 267, + "end": 340, + "name": "PUSH [tag]", + "value": "53" + }, + { + "begin": 267, + "end": 340, + "name": "JUMPI" + }, + { + "begin": -1, + "end": -1, + "name": "POP" + }, + { + "begin": 327, + "end": 340, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 327, + "end": 340, + "name": "DUP4" + }, + { + "begin": 327, + "end": 340, + "name": "AND" + }, + { + "begin": 327, + "end": 335, + "name": "PUSH", + "value": "0" + }, + { + "begin": 327, + "end": 340, + "name": "SWAP1" + }, + { + "begin": 327, + "end": 340, + "name": "DUP2" + }, + { + "begin": 327, + "end": 340, + "name": "MSTORE" + }, + { + "begin": 327, + "end": 340, + "name": "PUSH", + "value": "20" + }, + { + "begin": 327, + "end": 340, + "name": "DUP2" + }, + { + "begin": 327, + "end": 340, + "name": "SWAP1" + }, + { + "begin": 327, + "end": 340, + "name": "MSTORE" + }, + { + "begin": 327, + "end": 340, + "name": "PUSH", + "value": "40" + }, + { + "begin": 327, + "end": 340, + "name": "SWAP1" + }, + { + "begin": 327, + "end": 340, + "name": "SHA3" + }, + { + "begin": 327, + "end": 340, + "name": "SLOAD" + }, + { + "begin": 301, + "end": 323, + "name": "DUP3" + }, + { + "begin": 301, + "end": 323, + "name": "DUP2" + }, + { + "begin": 301, + "end": 323, + "name": "ADD" + }, + { + "begin": 301, + "end": 340, + "name": "LT" + }, + { + "begin": 301, + "end": 340, + "name": "ISZERO" + }, + { + "begin": 267, + "end": 340, + "name": "tag", + "value": "53" + }, + { + "begin": 267, + "end": 340, + "name": "JUMPDEST" + }, + { + "begin": 263, + "end": 529, + "name": "ISZERO" + }, + { + "begin": 263, + "end": 529, + "name": "PUSH [tag]", + "value": "54" + }, + { + "begin": 263, + "end": 529, + "name": "JUMPI" + }, + { + "begin": 356, + "end": 376, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 365, + "end": 375, + "name": "CALLER" + }, + { + "begin": 356, + "end": 376, + "name": "DUP2" + }, + { + "begin": 356, + "end": 376, + "name": "AND" + }, + { + "begin": 356, + "end": 364, + "name": "PUSH", + "value": "0" + }, + { + "begin": 356, + "end": 376, + "name": "DUP2" + }, + { + "begin": 356, + "end": 376, + "name": "DUP2" + }, + { + "begin": 356, + "end": 376, + "name": "MSTORE" + }, + { + "begin": 356, + "end": 376, + "name": "PUSH", + "value": "20" + }, + { + "begin": 356, + "end": 376, + "name": "DUP2" + }, + { + "begin": 356, + "end": 376, + "name": "DUP2" + }, + { + "begin": 356, + "end": 376, + "name": "MSTORE" + }, + { + "begin": 356, + "end": 376, + "name": "PUSH", + "value": "40" + }, + { + "begin": 356, + "end": 376, + "name": "DUP1" + }, + { + "begin": 356, + "end": 376, + "name": "DUP4" + }, + { + "begin": 356, + "end": 376, + "name": "SHA3" + }, + { + "begin": 356, + "end": 386, + "name": "DUP1" + }, + { + "begin": 356, + "end": 386, + "name": "SLOAD" + }, + { + "begin": 356, + "end": 386, + "name": "DUP9" + }, + { + "begin": 356, + "end": 386, + "name": "SWAP1" + }, + { + "begin": 356, + "end": 386, + "name": "SUB" + }, + { + "begin": 356, + "end": 386, + "name": "SWAP1" + }, + { + "begin": 356, + "end": 386, + "name": "SSTORE" + }, + { + "begin": 400, + "end": 413, + "name": "SWAP4" + }, + { + "begin": 400, + "end": 413, + "name": "DUP8" + }, + { + "begin": 400, + "end": 413, + "name": "AND" + }, + { + "begin": 400, + "end": 413, + "name": "DUP1" + }, + { + "begin": 400, + "end": 413, + "name": "DUP4" + }, + { + "begin": 400, + "end": 413, + "name": "MSTORE" + }, + { + "begin": 400, + "end": 413, + "name": "SWAP2" + }, + { + "begin": 400, + "end": 413, + "name": "DUP5" + }, + { + "begin": 400, + "end": 413, + "name": "SWAP1" + }, + { + "begin": 400, + "end": 413, + "name": "SHA3" + }, + { + "begin": 400, + "end": 423, + "name": "DUP1" + }, + { + "begin": 400, + "end": 423, + "name": "SLOAD" + }, + { + "begin": 400, + "end": 423, + "name": "DUP8" + }, + { + "begin": 400, + "end": 423, + "name": "ADD" + }, + { + "begin": 400, + "end": 423, + "name": "SWAP1" + }, + { + "begin": 400, + "end": 423, + "name": "SSTORE" + }, + { + "begin": 437, + "end": 470, + "name": "DUP4" + }, + { + "begin": 437, + "end": 470, + "name": "MLOAD" + }, + { + "begin": 437, + "end": 470, + "name": "DUP7" + }, + { + "begin": 437, + "end": 470, + "name": "DUP2" + }, + { + "begin": 437, + "end": 470, + "name": "MSTORE" + }, + { + "begin": 437, + "end": 470, + "name": "SWAP4" + }, + { + "begin": 437, + "end": 470, + "name": "MLOAD" + }, + { + "begin": 400, + "end": 413, + "name": "SWAP2" + }, + { + "begin": 400, + "end": 413, + "name": "SWAP4" + }, + { + "begin": 437, + "end": 470, + "name": "PUSH", + "value": "DDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF" + }, + { + "begin": 437, + "end": 470, + "name": "SWAP3" + }, + { + "begin": 437, + "end": 470, + "name": "SWAP1" + }, + { + "begin": 437, + "end": 470, + "name": "DUP2" + }, + { + "begin": 437, + "end": 470, + "name": "SWAP1" + }, + { + "begin": 437, + "end": 470, + "name": "SUB" + }, + { + "begin": 437, + "end": 470, + "name": "SWAP1" + }, + { + "begin": 437, + "end": 470, + "name": "SWAP2" + }, + { + "begin": 437, + "end": 470, + "name": "ADD" + }, + { + "begin": 437, + "end": 470, + "name": "SWAP1" + }, + { + "begin": 437, + "end": 470, + "name": "LOG3" + }, + { + "begin": -1, + "end": -1, + "name": "POP" + }, + { + "begin": 491, + "end": 495, + "name": "PUSH", + "value": "1" + }, + { + "begin": 484, + "end": 495, + "name": "PUSH [tag]", + "value": "44" + }, + { + "begin": 484, + "end": 495, + "name": "JUMP" + }, + { + "begin": 263, + "end": 529, + "name": "tag", + "value": "54" + }, + { + "begin": 263, + "end": 529, + "name": "JUMPDEST" + }, + { + "begin": -1, + "end": -1, + "name": "POP" + }, + { + "begin": 521, + "end": 526, + "name": "PUSH", + "value": "0" + }, + { + "begin": 514, + "end": 526, + "name": "PUSH [tag]", + "value": "44" + }, + { + "begin": 514, + "end": 526, + "name": "JUMP" + }, + { + "begin": 263, + "end": 529, + "name": "tag", + "value": "55" + }, + { + "begin": 263, + "end": 529, + "name": "JUMPDEST" + }, + { + "begin": 125, + "end": 535, + "name": "tag", + "value": "52" + }, + { + "begin": 125, + "end": 535, + "name": "JUMPDEST" + }, + { + "begin": 125, + "end": 535, + "name": "SWAP3" + }, + { + "begin": 125, + "end": 535, + "name": "SWAP2" + }, + { + "begin": 125, + "end": 535, + "name": "POP" + }, + { + "begin": 125, + "end": 535, + "name": "POP" + }, + { + "begin": 125, + "end": 535, + "name": "JUMP", + "value": "[out]" + }, + { + "begin": 1280, + "end": 1406, + "name": "tag", + "value": "43" + }, + { + "begin": 1280, + "end": 1406, + "name": "JUMPDEST" + }, + { + "begin": 1374, + "end": 1389, + "name": "PUSH", + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1374, + "end": 1389, + "name": "DUP1" + }, + { + "begin": 1374, + "end": 1389, + "name": "DUP4" + }, + { + "begin": 1374, + "end": 1389, + "name": "AND" + }, + { + "begin": 1351, + "end": 1355, + "name": "PUSH", + "value": "0" + }, + { + "begin": 1374, + "end": 1389, + "name": "SWAP1" + }, + { + "begin": 1374, + "end": 1389, + "name": "DUP2" + }, + { + "begin": 1374, + "end": 1389, + "name": "MSTORE" + }, + { + "begin": 1374, + "end": 1381, + "name": "PUSH", + "value": "1" + }, + { + "begin": 1374, + "end": 1389, + "name": "PUSH", + "value": "20" + }, + { + "begin": 1374, + "end": 1389, + "name": "SWAP1" + }, + { + "begin": 1374, + "end": 1389, + "name": "DUP2" + }, + { + "begin": 1374, + "end": 1389, + "name": "MSTORE" + }, + { + "begin": 1374, + "end": 1389, + "name": "PUSH", + "value": "40" + }, + { + "begin": 1374, + "end": 1389, + "name": "DUP1" + }, + { + "begin": 1374, + "end": 1389, + "name": "DUP4" + }, + { + "begin": 1374, + "end": 1389, + "name": "SHA3" + }, + { + "begin": 1374, + "end": 1399, + "name": "SWAP4" + }, + { + "begin": 1374, + "end": 1399, + "name": "DUP6" + }, + { + "begin": 1374, + "end": 1399, + "name": "AND" + }, + { + "begin": 1374, + "end": 1399, + "name": "DUP4" + }, + { + "begin": 1374, + "end": 1399, + "name": "MSTORE" + }, + { + "begin": 1374, + "end": 1399, + "name": "SWAP3" + }, + { + "begin": 1374, + "end": 1399, + "name": "SWAP1" + }, + { + "begin": 1374, + "end": 1399, + "name": "MSTORE" + }, + { + "begin": 1374, + "end": 1399, + "name": "SHA3" + }, + { + "begin": 1374, + "end": 1399, + "name": "SLOAD" + }, + { + "begin": 1280, + "end": 1406, + "name": "tag", + "value": "56" + }, + { + "begin": 1280, + "end": 1406, + "name": "JUMPDEST" + }, + { + "begin": 1280, + "end": 1406, + "name": "SWAP3" + }, + { + "begin": 1280, + "end": 1406, + "name": "SWAP2" + }, + { + "begin": 1280, + "end": 1406, + "name": "POP" + }, + { + "begin": 1280, + "end": 1406, + "name": "POP" + }, + { + "begin": 1280, + "end": 1406, + "name": "JUMP", + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "name()": "06fdde03", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.4.11+commit.68ef5810\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"transferFrom(address,address,uint256)\":{\"details\":\"ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance.\",\"params\":{\"_from\":\"Address to transfer from.\",\"_to\":\"Address to transfer to.\",\"_value\":\"Amount to transfer.\"},\"return\":\"Success of transfer.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"2.0.0/tokens/ZRXToken/ZRXToken.sol\":\"ZRXToken\"},\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"1.0.0/ERC20Token/ERC20Token_v1.sol\":{\"keccak256\":\"0x3d710b436c430d6fe49f64b091555405360d76da6454b93faa8e213eea34a96d\",\"urls\":[\"bzzr://d12710a563415ad98ff28ecb3aab0b68467b3d023e7c130c73ed9918ef86158e\"]},\"1.0.0/Token/Token_v1.sol\":{\"keccak256\":\"0x35a82bc7bc0994caa97f8ea44660b9b5e796acfe72705b5ff7ed8f2a3c47ff37\",\"urls\":[\"bzzr://a62ae857a4cf2e8948e36d02470c612ac1a5ac20ebe1c1b553ad1ed8becb634e\"]},\"1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\":{\"keccak256\":\"0x2e1f4b899081cedd8940a9cd0f0f7413264c883312ed0ba9c53885766fe0a1a5\",\"urls\":[\"bzzr://47c42a58e56ffe81e49c8aabd3c391f5fa807fea299b3a2178501e3669baeb52\"]},\"2.0.0/tokens/ZRXToken/ZRXToken.sol\":{\"keccak256\":\"0x9eeb623d48909b083c77688b13b610811c53e37622b3fcbaa23c01873230f5d6\",\"urls\":[\"bzzr://84f3b5c2653068092771d443281018ff2ee0543817426d0fb6f9037a3570e37f\"]}},\"version\":1}", + "userdoc": { + "methods": {} + } + }, + "sources": { + "1.0.0/ERC20Token/ERC20Token_v1.sol": { + "id": 0, + "legacyAST": { + "children": [ + { + "attributes": { + "literals": [ + "solidity", + "^", + "0.4", + ".11" + ] + }, + "id": 126, + "name": "PragmaDirective", + "src": "0:24:0" + }, + { + "attributes": { + "file": "../Token/Token_v1.sol" + }, + "id": 128, + "name": "ImportDirective", + "src": "26:58:0" + }, + { + "attributes": { + "fullyImplemented": true, + "isLibrary": false, + "linearizedBaseContracts": [ + 322, + 397 + ], + "name": "ERC20Token_v1" + }, + "children": [ + { + "children": [ + { + "attributes": { + "name": "Token" + }, + "id": 129, + "name": "UserDefinedTypeName", + "src": "112:5:0" + } + ], + "id": 130, + "name": "InheritanceSpecifier", + "src": "112:5:0" + }, + { + "attributes": { + "constant": false, + "name": "transfer", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "_to", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 131, + "name": "ElementaryTypeName", + "src": "143:7:0" + } + ], + "id": 132, + "name": "VariableDeclaration", + "src": "143:11:0" + }, + { + "attributes": { + "constant": false, + "name": "_value", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 133, + "name": "ElementaryTypeName", + "src": "156:4:0" + } + ], + "id": 134, + "name": "VariableDeclaration", + "src": "156:11:0" + } + ], + "id": 135, + "name": "ParameterList", + "src": "142:26:0" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool" + }, + "id": 136, + "name": "ElementaryTypeName", + "src": "178:4:0" + } + ], + "id": 137, + "name": "VariableDeclaration", + "src": "178:4:0" + } + ], + "id": 138, + "name": "ParameterList", + "src": "177:6:0" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "operator": "&&", + "type": "bool" + }, + "children": [ + { + "attributes": { + "operator": ">=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 139, + "name": "Identifier", + "src": "267:8:0" + }, + { + "attributes": { + "member_name": "sender", + "type": "address" + }, + "children": [ + { + "attributes": { + "type": "msg", + "value": "msg" + }, + "id": 140, + "name": "Identifier", + "src": "276:3:0" + } + ], + "id": 141, + "name": "MemberAccess", + "src": "276:10:0" + } + ], + "id": 142, + "name": "IndexAccess", + "src": "267:20:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 143, + "name": "Identifier", + "src": "291:6:0" + } + ], + "id": 144, + "name": "BinaryOperation", + "src": "267:30:0" + }, + { + "attributes": { + "operator": ">=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 145, + "name": "Identifier", + "src": "301:8:0" + }, + { + "attributes": { + "type": "address", + "value": "_to" + }, + "id": 146, + "name": "Identifier", + "src": "310:3:0" + } + ], + "id": 147, + "name": "IndexAccess", + "src": "301:13:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 148, + "name": "Identifier", + "src": "317:6:0" + } + ], + "id": 149, + "name": "BinaryOperation", + "src": "301:22:0" + }, + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 150, + "name": "Identifier", + "src": "327:8:0" + }, + { + "attributes": { + "type": "address", + "value": "_to" + }, + "id": 151, + "name": "Identifier", + "src": "336:3:0" + } + ], + "id": 152, + "name": "IndexAccess", + "src": "327:13:0" + } + ], + "id": 153, + "name": "BinaryOperation", + "src": "301:39:0" + } + ], + "id": 154, + "name": "BinaryOperation", + "src": "267:73:0" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "operator": "-=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 155, + "name": "Identifier", + "src": "356:8:0" + }, + { + "attributes": { + "member_name": "sender", + "type": "address" + }, + "children": [ + { + "attributes": { + "type": "msg", + "value": "msg" + }, + "id": 156, + "name": "Identifier", + "src": "365:3:0" + } + ], + "id": 157, + "name": "MemberAccess", + "src": "365:10:0" + } + ], + "id": 158, + "name": "IndexAccess", + "src": "356:20:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 159, + "name": "Identifier", + "src": "380:6:0" + } + ], + "id": 160, + "name": "Assignment", + "src": "356:30:0" + } + ], + "id": 161, + "name": "ExpressionStatement", + "src": "356:30:0" + }, + { + "children": [ + { + "attributes": { + "operator": "+=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 162, + "name": "Identifier", + "src": "400:8:0" + }, + { + "attributes": { + "type": "address", + "value": "_to" + }, + "id": 163, + "name": "Identifier", + "src": "409:3:0" + } + ], + "id": 164, + "name": "IndexAccess", + "src": "400:13:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 165, + "name": "Identifier", + "src": "417:6:0" + } + ], + "id": 166, + "name": "Assignment", + "src": "400:23:0" + } + ], + "id": 167, + "name": "ExpressionStatement", + "src": "400:23:0" + }, + { + "children": [ + { + "attributes": { + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "type": "function (address,address,uint256) constant", + "value": "Transfer" + }, + "id": 168, + "name": "Identifier", + "src": "437:8:0" + }, + { + "attributes": { + "member_name": "sender", + "type": "address" + }, + "children": [ + { + "attributes": { + "type": "msg", + "value": "msg" + }, + "id": 169, + "name": "Identifier", + "src": "446:3:0" + } + ], + "id": 170, + "name": "MemberAccess", + "src": "446:10:0" + }, + { + "attributes": { + "type": "address", + "value": "_to" + }, + "id": 171, + "name": "Identifier", + "src": "458:3:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 172, + "name": "Identifier", + "src": "463:6:0" + } + ], + "id": 173, + "name": "FunctionCall", + "src": "437:33:0" + } + ], + "id": 174, + "name": "ExpressionStatement", + "src": "437:33:0" + }, + { + "children": [ + { + "attributes": { + "hexvalue": "74727565", + "subdenomination": null, + "token": "true", + "type": "bool", + "value": "true" + }, + "id": 175, + "name": "Literal", + "src": "491:4:0" + } + ], + "id": 176, + "name": "Return", + "src": "484:11:0" + } + ], + "id": 177, + "name": "Block", + "src": "342:164:0" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "subdenomination": null, + "token": "false", + "type": "bool", + "value": "false" + }, + "id": 178, + "name": "Literal", + "src": "521:5:0" + } + ], + "id": 179, + "name": "Return", + "src": "514:12:0" + } + ], + "id": 180, + "name": "Block", + "src": "512:17:0" + } + ], + "id": 181, + "name": "IfStatement", + "src": "263:266:0" + } + ], + "id": 182, + "name": "Block", + "src": "184:351:0" + } + ], + "id": 183, + "name": "FunctionDefinition", + "src": "125:410:0" + }, + { + "attributes": { + "constant": false, + "name": "transferFrom", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "_from", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 184, + "name": "ElementaryTypeName", + "src": "563:7:0" + } + ], + "id": 185, + "name": "VariableDeclaration", + "src": "563:13:0" + }, + { + "attributes": { + "constant": false, + "name": "_to", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 186, + "name": "ElementaryTypeName", + "src": "578:7:0" + } + ], + "id": 187, + "name": "VariableDeclaration", + "src": "578:11:0" + }, + { + "attributes": { + "constant": false, + "name": "_value", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 188, + "name": "ElementaryTypeName", + "src": "591:4:0" + } + ], + "id": 189, + "name": "VariableDeclaration", + "src": "591:11:0" + } + ], + "id": 190, + "name": "ParameterList", + "src": "562:41:0" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool" + }, + "id": 191, + "name": "ElementaryTypeName", + "src": "613:4:0" + } + ], + "id": 192, + "name": "VariableDeclaration", + "src": "613:4:0" + } + ], + "id": 193, + "name": "ParameterList", + "src": "612:6:0" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "operator": "&&", + "type": "bool" + }, + "children": [ + { + "attributes": { + "operator": "&&", + "type": "bool" + }, + "children": [ + { + "attributes": { + "operator": ">=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 194, + "name": "Identifier", + "src": "633:8:0" + }, + { + "attributes": { + "type": "address", + "value": "_from" + }, + "id": 195, + "name": "Identifier", + "src": "642:5:0" + } + ], + "id": 196, + "name": "IndexAccess", + "src": "633:15:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 197, + "name": "Identifier", + "src": "652:6:0" + } + ], + "id": 198, + "name": "BinaryOperation", + "src": "633:25:0" + }, + { + "attributes": { + "operator": ">=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => mapping(address => uint256))", + "value": "allowed" + }, + "id": 199, + "name": "Identifier", + "src": "662:7:0" + }, + { + "attributes": { + "type": "address", + "value": "_from" + }, + "id": 200, + "name": "Identifier", + "src": "670:5:0" + } + ], + "id": 201, + "name": "IndexAccess", + "src": "662:14:0" + }, + { + "attributes": { + "member_name": "sender", + "type": "address" + }, + "children": [ + { + "attributes": { + "type": "msg", + "value": "msg" + }, + "id": 202, + "name": "Identifier", + "src": "677:3:0" + } + ], + "id": 203, + "name": "MemberAccess", + "src": "677:10:0" + } + ], + "id": 204, + "name": "IndexAccess", + "src": "662:26:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 205, + "name": "Identifier", + "src": "692:6:0" + } + ], + "id": 206, + "name": "BinaryOperation", + "src": "662:36:0" + } + ], + "id": 207, + "name": "BinaryOperation", + "src": "633:65:0" + }, + { + "attributes": { + "operator": ">=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 208, + "name": "Identifier", + "src": "702:8:0" + }, + { + "attributes": { + "type": "address", + "value": "_to" + }, + "id": 209, + "name": "Identifier", + "src": "711:3:0" + } + ], + "id": 210, + "name": "IndexAccess", + "src": "702:13:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 211, + "name": "Identifier", + "src": "718:6:0" + } + ], + "id": 212, + "name": "BinaryOperation", + "src": "702:22:0" + }, + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 213, + "name": "Identifier", + "src": "728:8:0" + }, + { + "attributes": { + "type": "address", + "value": "_to" + }, + "id": 214, + "name": "Identifier", + "src": "737:3:0" + } + ], + "id": 215, + "name": "IndexAccess", + "src": "728:13:0" + } + ], + "id": 216, + "name": "BinaryOperation", + "src": "702:39:0" + } + ], + "id": 217, + "name": "BinaryOperation", + "src": "633:108:0" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "operator": "+=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 218, + "name": "Identifier", + "src": "757:8:0" + }, + { + "attributes": { + "type": "address", + "value": "_to" + }, + "id": 219, + "name": "Identifier", + "src": "766:3:0" + } + ], + "id": 220, + "name": "IndexAccess", + "src": "757:13:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 221, + "name": "Identifier", + "src": "774:6:0" + } + ], + "id": 222, + "name": "Assignment", + "src": "757:23:0" + } + ], + "id": 223, + "name": "ExpressionStatement", + "src": "757:23:0" + }, + { + "children": [ + { + "attributes": { + "operator": "-=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 224, + "name": "Identifier", + "src": "794:8:0" + }, + { + "attributes": { + "type": "address", + "value": "_from" + }, + "id": 225, + "name": "Identifier", + "src": "803:5:0" + } + ], + "id": 226, + "name": "IndexAccess", + "src": "794:15:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 227, + "name": "Identifier", + "src": "813:6:0" + } + ], + "id": 228, + "name": "Assignment", + "src": "794:25:0" + } + ], + "id": 229, + "name": "ExpressionStatement", + "src": "794:25:0" + }, + { + "children": [ + { + "attributes": { + "operator": "-=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => mapping(address => uint256))", + "value": "allowed" + }, + "id": 230, + "name": "Identifier", + "src": "833:7:0" + }, + { + "attributes": { + "type": "address", + "value": "_from" + }, + "id": 231, + "name": "Identifier", + "src": "841:5:0" + } + ], + "id": 234, + "name": "IndexAccess", + "src": "833:14:0" + }, + { + "attributes": { + "member_name": "sender", + "type": "address" + }, + "children": [ + { + "attributes": { + "type": "msg", + "value": "msg" + }, + "id": 232, + "name": "Identifier", + "src": "848:3:0" + } + ], + "id": 233, + "name": "MemberAccess", + "src": "848:10:0" + } + ], + "id": 235, + "name": "IndexAccess", + "src": "833:26:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 236, + "name": "Identifier", + "src": "863:6:0" + } + ], + "id": 237, + "name": "Assignment", + "src": "833:36:0" + } + ], + "id": 238, + "name": "ExpressionStatement", + "src": "833:36:0" + }, + { + "children": [ + { + "attributes": { + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "type": "function (address,address,uint256) constant", + "value": "Transfer" + }, + "id": 239, + "name": "Identifier", + "src": "883:8:0" + }, + { + "attributes": { + "type": "address", + "value": "_from" + }, + "id": 240, + "name": "Identifier", + "src": "892:5:0" + }, + { + "attributes": { + "type": "address", + "value": "_to" + }, + "id": 241, + "name": "Identifier", + "src": "899:3:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 242, + "name": "Identifier", + "src": "904:6:0" + } + ], + "id": 243, + "name": "FunctionCall", + "src": "883:28:0" + } + ], + "id": 244, + "name": "ExpressionStatement", + "src": "883:28:0" + }, + { + "children": [ + { + "attributes": { + "hexvalue": "74727565", + "subdenomination": null, + "token": "true", + "type": "bool", + "value": "true" + }, + "id": 245, + "name": "Literal", + "src": "932:4:0" + } + ], + "id": 246, + "name": "Return", + "src": "925:11:0" + } + ], + "id": 247, + "name": "Block", + "src": "743:204:0" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "subdenomination": null, + "token": "false", + "type": "bool", + "value": "false" + }, + "id": 248, + "name": "Literal", + "src": "962:5:0" + } + ], + "id": 249, + "name": "Return", + "src": "955:12:0" + } + ], + "id": 250, + "name": "Block", + "src": "953:17:0" + } + ], + "id": 251, + "name": "IfStatement", + "src": "629:341:0" + } + ], + "id": 252, + "name": "Block", + "src": "619:357:0" + } + ], + "id": 253, + "name": "FunctionDefinition", + "src": "541:435:0" + }, + { + "attributes": { + "constant": true, + "name": "balanceOf", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "_owner", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 254, + "name": "ElementaryTypeName", + "src": "1001:7:0" + } + ], + "id": 255, + "name": "VariableDeclaration", + "src": "1001:14:0" + } + ], + "id": 256, + "name": "ParameterList", + "src": "1000:16:0" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 257, + "name": "ElementaryTypeName", + "src": "1035:4:0" + } + ], + "id": 258, + "name": "VariableDeclaration", + "src": "1035:4:0" + } + ], + "id": 259, + "name": "ParameterList", + "src": "1034:6:0" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 260, + "name": "Identifier", + "src": "1058:8:0" + }, + { + "attributes": { + "type": "address", + "value": "_owner" + }, + "id": 261, + "name": "Identifier", + "src": "1067:6:0" + } + ], + "id": 262, + "name": "IndexAccess", + "src": "1058:16:0" + } + ], + "id": 263, + "name": "Return", + "src": "1051:23:0" + } + ], + "id": 264, + "name": "Block", + "src": "1041:40:0" + } + ], + "id": 265, + "name": "FunctionDefinition", + "src": "982:99:0" + }, + { + "attributes": { + "constant": false, + "name": "approve", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "_spender", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 266, + "name": "ElementaryTypeName", + "src": "1104:7:0" + } + ], + "id": 267, + "name": "VariableDeclaration", + "src": "1104:16:0" + }, + { + "attributes": { + "constant": false, + "name": "_value", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 268, + "name": "ElementaryTypeName", + "src": "1122:4:0" + } + ], + "id": 269, + "name": "VariableDeclaration", + "src": "1122:11:0" + } + ], + "id": 270, + "name": "ParameterList", + "src": "1103:31:0" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool" + }, + "id": 271, + "name": "ElementaryTypeName", + "src": "1144:4:0" + } + ], + "id": 272, + "name": "VariableDeclaration", + "src": "1144:4:0" + } + ], + "id": 273, + "name": "ParameterList", + "src": "1143:6:0" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => mapping(address => uint256))", + "value": "allowed" + }, + "id": 274, + "name": "Identifier", + "src": "1160:7:0" + }, + { + "attributes": { + "member_name": "sender", + "type": "address" + }, + "children": [ + { + "attributes": { + "type": "msg", + "value": "msg" + }, + "id": 275, + "name": "Identifier", + "src": "1168:3:0" + } + ], + "id": 276, + "name": "MemberAccess", + "src": "1168:10:0" + } + ], + "id": 278, + "name": "IndexAccess", + "src": "1160:19:0" + }, + { + "attributes": { + "type": "address", + "value": "_spender" + }, + "id": 277, + "name": "Identifier", + "src": "1180:8:0" + } + ], + "id": 279, + "name": "IndexAccess", + "src": "1160:29:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 280, + "name": "Identifier", + "src": "1192:6:0" + } + ], + "id": 281, + "name": "Assignment", + "src": "1160:38:0" + } + ], + "id": 282, + "name": "ExpressionStatement", + "src": "1160:38:0" + }, + { + "children": [ + { + "attributes": { + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "type": "function (address,address,uint256) constant", + "value": "Approval" + }, + "id": 283, + "name": "Identifier", + "src": "1208:8:0" + }, + { + "attributes": { + "member_name": "sender", + "type": "address" + }, + "children": [ + { + "attributes": { + "type": "msg", + "value": "msg" + }, + "id": 284, + "name": "Identifier", + "src": "1217:3:0" + } + ], + "id": 285, + "name": "MemberAccess", + "src": "1217:10:0" + }, + { + "attributes": { + "type": "address", + "value": "_spender" + }, + "id": 286, + "name": "Identifier", + "src": "1229:8:0" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 287, + "name": "Identifier", + "src": "1239:6:0" + } + ], + "id": 288, + "name": "FunctionCall", + "src": "1208:38:0" + } + ], + "id": 289, + "name": "ExpressionStatement", + "src": "1208:38:0" + }, + { + "children": [ + { + "attributes": { + "hexvalue": "74727565", + "subdenomination": null, + "token": "true", + "type": "bool", + "value": "true" + }, + "id": 290, + "name": "Literal", + "src": "1263:4:0" + } + ], + "id": 291, + "name": "Return", + "src": "1256:11:0" + } + ], + "id": 292, + "name": "Block", + "src": "1150:124:0" + } + ], + "id": 293, + "name": "FunctionDefinition", + "src": "1087:187:0" + }, + { + "attributes": { + "constant": true, + "name": "allowance", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "_owner", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 294, + "name": "ElementaryTypeName", + "src": "1299:7:0" + } + ], + "id": 295, + "name": "VariableDeclaration", + "src": "1299:14:0" + }, + { + "attributes": { + "constant": false, + "name": "_spender", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 296, + "name": "ElementaryTypeName", + "src": "1315:7:0" + } + ], + "id": 297, + "name": "VariableDeclaration", + "src": "1315:16:0" + } + ], + "id": 298, + "name": "ParameterList", + "src": "1298:34:0" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 299, + "name": "ElementaryTypeName", + "src": "1351:4:0" + } + ], + "id": 300, + "name": "VariableDeclaration", + "src": "1351:4:0" + } + ], + "id": 301, + "name": "ParameterList", + "src": "1350:6:0" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => mapping(address => uint256))", + "value": "allowed" + }, + "id": 302, + "name": "Identifier", + "src": "1374:7:0" + }, + { + "attributes": { + "type": "address", + "value": "_owner" + }, + "id": 303, + "name": "Identifier", + "src": "1382:6:0" + } + ], + "id": 304, + "name": "IndexAccess", + "src": "1374:15:0" + }, + { + "attributes": { + "type": "address", + "value": "_spender" + }, + "id": 305, + "name": "Identifier", + "src": "1390:8:0" + } + ], + "id": 306, + "name": "IndexAccess", + "src": "1374:25:0" + } + ], + "id": 307, + "name": "Return", + "src": "1367:32:0" + } + ], + "id": 308, + "name": "Block", + "src": "1357:49:0" + } + ], + "id": 309, + "name": "FunctionDefinition", + "src": "1280:126:0" + }, + { + "attributes": { + "constant": false, + "name": "balances", + "storageLocation": "default", + "type": "mapping(address => uint256)", + "visibility": "internal" + }, + "children": [ + { + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 310, + "name": "ElementaryTypeName", + "src": "1421:7:0" + }, + { + "attributes": { + "name": "uint" + }, + "id": 311, + "name": "ElementaryTypeName", + "src": "1432:4:0" + } + ], + "id": 312, + "name": "Mapping", + "src": "1412:25:0" + } + ], + "id": 313, + "name": "VariableDeclaration", + "src": "1412:34:0" + }, + { + "attributes": { + "constant": false, + "name": "allowed", + "storageLocation": "default", + "type": "mapping(address => mapping(address => uint256))", + "visibility": "internal" + }, + "children": [ + { + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 314, + "name": "ElementaryTypeName", + "src": "1461:7:0" + }, + { + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 315, + "name": "ElementaryTypeName", + "src": "1481:7:0" + }, + { + "attributes": { + "name": "uint" + }, + "id": 316, + "name": "ElementaryTypeName", + "src": "1492:4:0" + } + ], + "id": 317, + "name": "Mapping", + "src": "1472:25:0" + } + ], + "id": 318, + "name": "Mapping", + "src": "1452:46:0" + } + ], + "id": 319, + "name": "VariableDeclaration", + "src": "1452:54:0" + }, + { + "attributes": { + "constant": false, + "name": "totalSupply", + "storageLocation": "default", + "type": "uint256", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 320, + "name": "ElementaryTypeName", + "src": "1512:4:0" + } + ], + "id": 321, + "name": "VariableDeclaration", + "src": "1512:23:0" + } + ], + "id": 322, + "name": "ContractDefinition", + "src": "86:1452:0" + } + ], + "name": "SourceUnit" + } + }, + "1.0.0/Token/Token_v1.sol": { + "id": 1, + "legacyAST": { + "children": [ + { + "attributes": { + "literals": [ + "solidity", + "^", + "0.4", + ".11" + ] + }, + "id": 324, + "name": "PragmaDirective", + "src": "0:24:1" + }, + { + "attributes": { + "fullyImplemented": true, + "isLibrary": false, + "linearizedBaseContracts": [ + 397 + ], + "name": "Token_v1" + }, + "children": [ + { + "attributes": { + "constant": true, + "name": "totalSupply", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [], + "id": 325, + "name": "ParameterList", + "src": "110:2:1" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "supply", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 326, + "name": "ElementaryTypeName", + "src": "131:4:1" + } + ], + "id": 327, + "name": "VariableDeclaration", + "src": "131:11:1" + } + ], + "id": 328, + "name": "ParameterList", + "src": "130:13:1" + }, + { + "children": [], + "id": 329, + "name": "Block", + "src": "144:2:1" + } + ], + "id": 330, + "name": "FunctionDefinition", + "src": "90:56:1" + }, + { + "attributes": { + "constant": true, + "name": "balanceOf", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "_owner", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 331, + "name": "ElementaryTypeName", + "src": "274:7:1" + } + ], + "id": 332, + "name": "VariableDeclaration", + "src": "274:14:1" + } + ], + "id": 333, + "name": "ParameterList", + "src": "273:16:1" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "balance", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 334, + "name": "ElementaryTypeName", + "src": "308:4:1" + } + ], + "id": 335, + "name": "VariableDeclaration", + "src": "308:12:1" + } + ], + "id": 336, + "name": "ParameterList", + "src": "307:14:1" + }, + { + "children": [], + "id": 337, + "name": "Block", + "src": "322:2:1" + } + ], + "id": 338, + "name": "FunctionDefinition", + "src": "255:69:1" + }, + { + "attributes": { + "constant": false, + "name": "transfer", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "_to", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 339, + "name": "ElementaryTypeName", + "src": "578:7:1" + } + ], + "id": 340, + "name": "VariableDeclaration", + "src": "578:11:1" + }, + { + "attributes": { + "constant": false, + "name": "_value", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 341, + "name": "ElementaryTypeName", + "src": "591:4:1" + } + ], + "id": 342, + "name": "VariableDeclaration", + "src": "591:11:1" + } + ], + "id": 343, + "name": "ParameterList", + "src": "577:26:1" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "success", + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool" + }, + "id": 344, + "name": "ElementaryTypeName", + "src": "613:4:1" + } + ], + "id": 345, + "name": "VariableDeclaration", + "src": "613:12:1" + } + ], + "id": 346, + "name": "ParameterList", + "src": "612:14:1" + }, + { + "children": [], + "id": 347, + "name": "Block", + "src": "627:2:1" + } + ], + "id": 348, + "name": "FunctionDefinition", + "src": "560:69:1" + }, + { + "attributes": { + "constant": false, + "name": "transferFrom", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "_from", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 349, + "name": "ElementaryTypeName", + "src": "972:7:1" + } + ], + "id": 350, + "name": "VariableDeclaration", + "src": "972:13:1" + }, + { + "attributes": { + "constant": false, + "name": "_to", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 351, + "name": "ElementaryTypeName", + "src": "987:7:1" + } + ], + "id": 352, + "name": "VariableDeclaration", + "src": "987:11:1" + }, + { + "attributes": { + "constant": false, + "name": "_value", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 353, + "name": "ElementaryTypeName", + "src": "1000:4:1" + } + ], + "id": 354, + "name": "VariableDeclaration", + "src": "1000:11:1" + } + ], + "id": 355, + "name": "ParameterList", + "src": "971:41:1" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "success", + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool" + }, + "id": 356, + "name": "ElementaryTypeName", + "src": "1022:4:1" + } + ], + "id": 357, + "name": "VariableDeclaration", + "src": "1022:12:1" + } + ], + "id": 358, + "name": "ParameterList", + "src": "1021:14:1" + }, + { + "children": [], + "id": 359, + "name": "Block", + "src": "1036:2:1" + } + ], + "id": 360, + "name": "FunctionDefinition", + "src": "950:88:1" + }, + { + "attributes": { + "constant": false, + "name": "approve", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "_spender", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 361, + "name": "ElementaryTypeName", + "src": "1338:7:1" + } + ], + "id": 362, + "name": "VariableDeclaration", + "src": "1338:16:1" + }, + { + "attributes": { + "constant": false, + "name": "_value", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 363, + "name": "ElementaryTypeName", + "src": "1356:4:1" + } + ], + "id": 364, + "name": "VariableDeclaration", + "src": "1356:11:1" + } + ], + "id": 365, + "name": "ParameterList", + "src": "1337:31:1" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "success", + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool" + }, + "id": 366, + "name": "ElementaryTypeName", + "src": "1378:4:1" + } + ], + "id": 367, + "name": "VariableDeclaration", + "src": "1378:12:1" + } + ], + "id": 368, + "name": "ParameterList", + "src": "1377:14:1" + }, + { + "children": [], + "id": 369, + "name": "Block", + "src": "1392:2:1" + } + ], + "id": 370, + "name": "FunctionDefinition", + "src": "1321:73:1" + }, + { + "attributes": { + "constant": true, + "name": "allowance", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "_owner", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 371, + "name": "ElementaryTypeName", + "src": "1621:7:1" + } + ], + "id": 372, + "name": "VariableDeclaration", + "src": "1621:14:1" + }, + { + "attributes": { + "constant": false, + "name": "_spender", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 373, + "name": "ElementaryTypeName", + "src": "1637:7:1" + } + ], + "id": 374, + "name": "VariableDeclaration", + "src": "1637:16:1" + } + ], + "id": 375, + "name": "ParameterList", + "src": "1620:34:1" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "remaining", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 376, + "name": "ElementaryTypeName", + "src": "1673:4:1" + } + ], + "id": 377, + "name": "VariableDeclaration", + "src": "1673:14:1" + } + ], + "id": 378, + "name": "ParameterList", + "src": "1672:16:1" + }, + { + "children": [], + "id": 379, + "name": "Block", + "src": "1689:2:1" + } + ], + "id": 380, + "name": "FunctionDefinition", + "src": "1602:89:1" + }, + { + "attributes": { + "name": "Transfer" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "indexed": true, + "name": "_from", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 381, + "name": "ElementaryTypeName", + "src": "1712:7:1" + } + ], + "id": 382, + "name": "VariableDeclaration", + "src": "1712:21:1" + }, + { + "attributes": { + "constant": false, + "indexed": true, + "name": "_to", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 383, + "name": "ElementaryTypeName", + "src": "1735:7:1" + } + ], + "id": 384, + "name": "VariableDeclaration", + "src": "1735:19:1" + }, + { + "attributes": { + "constant": false, + "indexed": false, + "name": "_value", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 385, + "name": "ElementaryTypeName", + "src": "1756:4:1" + } + ], + "id": 386, + "name": "VariableDeclaration", + "src": "1756:11:1" + } + ], + "id": 387, + "name": "ParameterList", + "src": "1711:57:1" + } + ], + "id": 388, + "name": "EventDefinition", + "src": "1697:72:1" + }, + { + "attributes": { + "name": "Approval" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "indexed": true, + "name": "_owner", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 389, + "name": "ElementaryTypeName", + "src": "1789:7:1" + } + ], + "id": 390, + "name": "VariableDeclaration", + "src": "1789:22:1" + }, + { + "attributes": { + "constant": false, + "indexed": true, + "name": "_spender", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 391, + "name": "ElementaryTypeName", + "src": "1813:7:1" + } + ], + "id": 392, + "name": "VariableDeclaration", + "src": "1813:24:1" + }, + { + "attributes": { + "constant": false, + "indexed": false, + "name": "_value", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 393, + "name": "ElementaryTypeName", + "src": "1839:4:1" + } + ], + "id": 394, + "name": "VariableDeclaration", + "src": "1839:11:1" + } + ], + "id": 395, + "name": "ParameterList", + "src": "1788:63:1" + } + ], + "id": 396, + "name": "EventDefinition", + "src": "1774:78:1" + } + ], + "id": 397, + "name": "ContractDefinition", + "src": "26:1828:1" + } + ], + "name": "SourceUnit" + } + }, + "1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol": { + "id": 2, + "legacyAST": { + "children": [ + { + "attributes": { + "literals": [ + "solidity", + "^", + "0.4", + ".11" + ] + }, + "id": 33, + "name": "PragmaDirective", + "src": "580:24:2" + }, + { + "attributes": { + "file": "../ERC20Token/ERC20Token_v1.sol" + }, + "id": 35, + "name": "ImportDirective", + "src": "606:78:2" + }, + { + "attributes": { + "fullyImplemented": true, + "isLibrary": false, + "linearizedBaseContracts": [ + 124, + 322, + 397 + ], + "name": "UnlimitedAllowanceToken_v1" + }, + "children": [ + { + "children": [ + { + "attributes": { + "name": "ERC20Token" + }, + "id": 36, + "name": "UserDefinedTypeName", + "src": "725:10:2" + } + ], + "id": 37, + "name": "InheritanceSpecifier", + "src": "725:10:2" + }, + { + "attributes": { + "constant": true, + "name": "MAX_UINT", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 38, + "name": "ElementaryTypeName", + "src": "743:4:2" + }, + { + "attributes": { + "operator": "-", + "type": "int_const 115792089237316195423570985008687907853269984665640564039457584007913129639935" + }, + "children": [ + { + "attributes": { + "operator": "**", + "type": "int_const 115792089237316195423570985008687907853269984665640564039457584007913129639936" + }, + "children": [ + { + "attributes": { + "hexvalue": "32", + "subdenomination": null, + "token": null, + "type": "int_const 2", + "value": "2" + }, + "id": 39, + "name": "Literal", + "src": "768:1:2" + }, + { + "attributes": { + "hexvalue": "323536", + "subdenomination": null, + "token": null, + "type": "int_const 256", + "value": "256" + }, + "id": 40, + "name": "Literal", + "src": "771:3:2" + } + ], + "id": 41, + "name": "BinaryOperation", + "src": "768:6:2" + }, + { + "attributes": { + "hexvalue": "31", + "subdenomination": null, + "token": null, + "type": "int_const 1", + "value": "1" + }, + "id": 42, + "name": "Literal", + "src": "777:1:2" + } + ], + "id": 43, + "name": "BinaryOperation", + "src": "768:10:2" + } + ], + "id": 44, + "name": "VariableDeclaration", + "src": "743:35:2" + }, + { + "attributes": { + "constant": false, + "name": "transferFrom", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "_from", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 45, + "name": "ElementaryTypeName", + "src": "1088:7:2" + } + ], + "id": 46, + "name": "VariableDeclaration", + "src": "1088:13:2" + }, + { + "attributes": { + "constant": false, + "name": "_to", + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 47, + "name": "ElementaryTypeName", + "src": "1103:7:2" + } + ], + "id": 48, + "name": "VariableDeclaration", + "src": "1103:11:2" + }, + { + "attributes": { + "constant": false, + "name": "_value", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 49, + "name": "ElementaryTypeName", + "src": "1116:4:2" + } + ], + "id": 50, + "name": "VariableDeclaration", + "src": "1116:11:2" + } + ], + "id": 51, + "name": "ParameterList", + "src": "1087:41:2" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool" + }, + "id": 52, + "name": "ElementaryTypeName", + "src": "1161:4:2" + } + ], + "id": 53, + "name": "VariableDeclaration", + "src": "1161:4:2" + } + ], + "id": 54, + "name": "ParameterList", + "src": "1160:6:2" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "allowance", + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 55, + "name": "ElementaryTypeName", + "src": "1181:4:2" + } + ], + "id": 56, + "name": "VariableDeclaration", + "src": "1181:14:2" + }, + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => mapping(address => uint256))", + "value": "allowed" + }, + "id": 57, + "name": "Identifier", + "src": "1198:7:2" + }, + { + "attributes": { + "type": "address", + "value": "_from" + }, + "id": 58, + "name": "Identifier", + "src": "1206:5:2" + } + ], + "id": 59, + "name": "IndexAccess", + "src": "1198:14:2" + }, + { + "attributes": { + "member_name": "sender", + "type": "address" + }, + "children": [ + { + "attributes": { + "type": "msg", + "value": "msg" + }, + "id": 60, + "name": "Identifier", + "src": "1213:3:2" + } + ], + "id": 61, + "name": "MemberAccess", + "src": "1213:10:2" + } + ], + "id": 62, + "name": "IndexAccess", + "src": "1198:26:2" + } + ], + "id": 63, + "name": "VariableDeclarationStatement", + "src": "1181:43:2" + }, + { + "children": [ + { + "attributes": { + "operator": "&&", + "type": "bool" + }, + "children": [ + { + "attributes": { + "operator": "&&", + "type": "bool" + }, + "children": [ + { + "attributes": { + "operator": ">=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 64, + "name": "Identifier", + "src": "1238:8:2" + }, + { + "attributes": { + "type": "address", + "value": "_from" + }, + "id": 65, + "name": "Identifier", + "src": "1247:5:2" + } + ], + "id": 66, + "name": "IndexAccess", + "src": "1238:15:2" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 67, + "name": "Identifier", + "src": "1257:6:2" + } + ], + "id": 68, + "name": "BinaryOperation", + "src": "1238:25:2" + }, + { + "attributes": { + "operator": ">=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "type": "uint256", + "value": "allowance" + }, + "id": 69, + "name": "Identifier", + "src": "1279:9:2" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 70, + "name": "Identifier", + "src": "1292:6:2" + } + ], + "id": 71, + "name": "BinaryOperation", + "src": "1279:19:2" + } + ], + "id": 72, + "name": "BinaryOperation", + "src": "1238:60:2" + }, + { + "attributes": { + "operator": ">=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 73, + "name": "Identifier", + "src": "1314:8:2" + }, + { + "attributes": { + "type": "address", + "value": "_to" + }, + "id": 74, + "name": "Identifier", + "src": "1323:3:2" + } + ], + "id": 75, + "name": "IndexAccess", + "src": "1314:13:2" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 76, + "name": "Identifier", + "src": "1330:6:2" + } + ], + "id": 77, + "name": "BinaryOperation", + "src": "1314:22:2" + }, + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 78, + "name": "Identifier", + "src": "1340:8:2" + }, + { + "attributes": { + "type": "address", + "value": "_to" + }, + "id": 79, + "name": "Identifier", + "src": "1349:3:2" + } + ], + "id": 80, + "name": "IndexAccess", + "src": "1340:13:2" + } + ], + "id": 81, + "name": "BinaryOperation", + "src": "1314:39:2" + } + ], + "id": 82, + "name": "BinaryOperation", + "src": "1238:115:2" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "operator": "+=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 83, + "name": "Identifier", + "src": "1378:8:2" + }, + { + "attributes": { + "type": "address", + "value": "_to" + }, + "id": 84, + "name": "Identifier", + "src": "1387:3:2" + } + ], + "id": 85, + "name": "IndexAccess", + "src": "1378:13:2" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 86, + "name": "Identifier", + "src": "1395:6:2" + } + ], + "id": 87, + "name": "Assignment", + "src": "1378:23:2" + } + ], + "id": 88, + "name": "ExpressionStatement", + "src": "1378:23:2" + }, + { + "children": [ + { + "attributes": { + "operator": "-=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 89, + "name": "Identifier", + "src": "1415:8:2" + }, + { + "attributes": { + "type": "address", + "value": "_from" + }, + "id": 90, + "name": "Identifier", + "src": "1424:5:2" + } + ], + "id": 91, + "name": "IndexAccess", + "src": "1415:15:2" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 92, + "name": "Identifier", + "src": "1434:6:2" + } + ], + "id": 93, + "name": "Assignment", + "src": "1415:25:2" + } + ], + "id": 94, + "name": "ExpressionStatement", + "src": "1415:25:2" + }, + { + "children": [ + { + "attributes": { + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "type": "uint256", + "value": "allowance" + }, + "id": 95, + "name": "Identifier", + "src": "1458:9:2" + }, + { + "attributes": { + "type": "uint256", + "value": "MAX_UINT" + }, + "id": 96, + "name": "Identifier", + "src": "1470:8:2" + } + ], + "id": 97, + "name": "BinaryOperation", + "src": "1458:20:2" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "operator": "-=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => mapping(address => uint256))", + "value": "allowed" + }, + "id": 98, + "name": "Identifier", + "src": "1498:7:2" + }, + { + "attributes": { + "type": "address", + "value": "_from" + }, + "id": 99, + "name": "Identifier", + "src": "1506:5:2" + } + ], + "id": 102, + "name": "IndexAccess", + "src": "1498:14:2" + }, + { + "attributes": { + "member_name": "sender", + "type": "address" + }, + "children": [ + { + "attributes": { + "type": "msg", + "value": "msg" + }, + "id": 100, + "name": "Identifier", + "src": "1513:3:2" + } + ], + "id": 101, + "name": "MemberAccess", + "src": "1513:10:2" + } + ], + "id": 103, + "name": "IndexAccess", + "src": "1498:26:2" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 104, + "name": "Identifier", + "src": "1528:6:2" + } + ], + "id": 105, + "name": "Assignment", + "src": "1498:36:2" + } + ], + "id": 106, + "name": "ExpressionStatement", + "src": "1498:36:2" + } + ], + "id": 107, + "name": "Block", + "src": "1480:69:2" + } + ], + "id": 108, + "name": "IfStatement", + "src": "1454:95:2" + }, + { + "children": [ + { + "attributes": { + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "type": "function (address,address,uint256) constant", + "value": "Transfer" + }, + "id": 109, + "name": "Identifier", + "src": "1562:8:2" + }, + { + "attributes": { + "type": "address", + "value": "_from" + }, + "id": 110, + "name": "Identifier", + "src": "1571:5:2" + }, + { + "attributes": { + "type": "address", + "value": "_to" + }, + "id": 111, + "name": "Identifier", + "src": "1578:3:2" + }, + { + "attributes": { + "type": "uint256", + "value": "_value" + }, + "id": 112, + "name": "Identifier", + "src": "1583:6:2" + } + ], + "id": 113, + "name": "FunctionCall", + "src": "1562:28:2" + } + ], + "id": 114, + "name": "ExpressionStatement", + "src": "1562:28:2" + }, + { + "children": [ + { + "attributes": { + "hexvalue": "74727565", + "subdenomination": null, + "token": "true", + "type": "bool", + "value": "true" + }, + "id": 115, + "name": "Literal", + "src": "1611:4:2" + } + ], + "id": 116, + "name": "Return", + "src": "1604:11:2" + } + ], + "id": 117, + "name": "Block", + "src": "1364:262:2" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "subdenomination": null, + "token": "false", + "type": "bool", + "value": "false" + }, + "id": 118, + "name": "Literal", + "src": "1653:5:2" + } + ], + "id": 119, + "name": "Return", + "src": "1646:12:2" + } + ], + "id": 120, + "name": "Block", + "src": "1632:37:2" + } + ], + "id": 121, + "name": "IfStatement", + "src": "1234:435:2" + } + ], + "id": 122, + "name": "Block", + "src": "1171:504:2" + } + ], + "id": 123, + "name": "FunctionDefinition", + "src": "1066:609:2" + } + ], + "id": 124, + "name": "ContractDefinition", + "src": "686:991:2" + } + ], + "name": "SourceUnit" + } + }, + "2.0.0/tokens/ZRXToken/ZRXToken.sol": { + "id": 3, + "legacyAST": { + "children": [ + { + "attributes": { + "literals": [ + "solidity", + "0.4", + ".11" + ] + }, + "id": 1, + "name": "PragmaDirective", + "src": "580:23:3" + }, + { + "attributes": { + "file": "../../../1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol" + }, + "id": 3, + "name": "ImportDirective", + "src": "650:142:3" + }, + { + "attributes": { + "fullyImplemented": true, + "isLibrary": false, + "linearizedBaseContracts": [ + 31, + 124, + 322, + 397 + ], + "name": "ZRXToken" + }, + "children": [ + { + "children": [ + { + "attributes": { + "name": "UnlimitedAllowanceToken" + }, + "id": 4, + "name": "UserDefinedTypeName", + "src": "816:23:3" + } + ], + "id": 5, + "name": "InheritanceSpecifier", + "src": "816:23:3" + }, + { + "attributes": { + "constant": true, + "name": "decimals", + "storageLocation": "default", + "type": "uint8", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "uint8" + }, + "id": 6, + "name": "ElementaryTypeName", + "src": "891:5:3" + }, + { + "attributes": { + "hexvalue": "3138", + "subdenomination": null, + "token": null, + "type": "int_const 18", + "value": "18" + }, + "id": 7, + "name": "Literal", + "src": "924:2:3" + } + ], + "id": 8, + "name": "VariableDeclaration", + "src": "891:35:3" + }, + { + "attributes": { + "constant": false, + "name": "totalSupply", + "storageLocation": "default", + "type": "uint256", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "uint" + }, + "id": 9, + "name": "ElementaryTypeName", + "src": "932:4:3" + }, + { + "attributes": { + "operator": "**", + "type": "int_const 1000000000000000000000000000" + }, + "children": [ + { + "attributes": { + "hexvalue": "3130", + "subdenomination": null, + "token": null, + "type": "int_const 10", + "value": "10" + }, + "id": 10, + "name": "Literal", + "src": "958:2:3" + }, + { + "attributes": { + "hexvalue": "3237", + "subdenomination": null, + "token": null, + "type": "int_const 27", + "value": "27" + }, + "id": 11, + "name": "Literal", + "src": "962:2:3" + } + ], + "id": 12, + "name": "BinaryOperation", + "src": "958:6:3" + } + ], + "id": 13, + "name": "VariableDeclaration", + "src": "932:32:3" + }, + { + "attributes": { + "constant": true, + "name": "name", + "storageLocation": "default", + "type": "string memory", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "string" + }, + "id": 14, + "name": "ElementaryTypeName", + "src": "1009:6:3" + }, + { + "attributes": { + "hexvalue": "30782050726f746f636f6c20546f6b656e", + "subdenomination": null, + "token": null, + "type": "literal_string \"0x Protocol Token\"", + "value": "0x Protocol Token" + }, + "id": 15, + "name": "Literal", + "src": "1039:19:3" + } + ], + "id": 16, + "name": "VariableDeclaration", + "src": "1009:49:3" + }, + { + "attributes": { + "constant": true, + "name": "symbol", + "storageLocation": "default", + "type": "string memory", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "string" + }, + "id": 17, + "name": "ElementaryTypeName", + "src": "1064:6:3" + }, + { + "attributes": { + "hexvalue": "5a5258", + "subdenomination": null, + "token": null, + "type": "literal_string \"ZRX\"", + "value": "ZRX" + }, + "id": 18, + "name": "Literal", + "src": "1096:5:3" + } + ], + "id": 19, + "name": "VariableDeclaration", + "src": "1064:37:3" + }, + { + "attributes": { + "constant": false, + "name": "ZRXToken", + "payable": false, + "visibility": "public" + }, + "children": [ + { + "children": [], + "id": 20, + "name": "ParameterList", + "src": "1167:2:3" + }, + { + "children": [], + "id": 21, + "name": "ParameterList", + "src": "1189:0:3" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "uint256" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => uint256)", + "value": "balances" + }, + "id": 22, + "name": "Identifier", + "src": "1199:8:3" + }, + { + "attributes": { + "member_name": "sender", + "type": "address" + }, + "children": [ + { + "attributes": { + "type": "msg", + "value": "msg" + }, + "id": 23, + "name": "Identifier", + "src": "1208:3:3" + } + ], + "id": 24, + "name": "MemberAccess", + "src": "1208:10:3" + } + ], + "id": 25, + "name": "IndexAccess", + "src": "1199:20:3" + }, + { + "attributes": { + "type": "uint256", + "value": "totalSupply" + }, + "id": 26, + "name": "Identifier", + "src": "1222:11:3" + } + ], + "id": 27, + "name": "Assignment", + "src": "1199:34:3" + } + ], + "id": 28, + "name": "ExpressionStatement", + "src": "1199:34:3" + } + ], + "id": 29, + "name": "Block", + "src": "1189:51:3" + } + ], + "id": 30, + "name": "FunctionDefinition", + "src": "1150:90:3" + } + ], + "id": 31, + "name": "ContractDefinition", + "src": "795:447:3" + } + ], + "name": "SourceUnit" + } + } + }, + "sourceCodes": { + "1.0.0/ERC20Token/ERC20Token_v1.sol": "pragma solidity ^0.4.11;\n\nimport { Token_v1 as Token } from \"../Token/Token_v1.sol\";\n\ncontract ERC20Token_v1 is Token {\n\n function transfer(address _to, uint _value) returns (bool) {\n //Default assumes totalSupply can't be over max (2^256 - 1).\n if (balances[msg.sender] >= _value && balances[_to] + _value >= balances[_to]) {\n balances[msg.sender] -= _value;\n balances[_to] += _value;\n Transfer(msg.sender, _to, _value);\n return true;\n } else { return false; }\n }\n\n function transferFrom(address _from, address _to, uint _value) returns (bool) {\n if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value >= balances[_to]) {\n balances[_to] += _value;\n balances[_from] -= _value;\n allowed[_from][msg.sender] -= _value;\n Transfer(_from, _to, _value);\n return true;\n } else { return false; }\n }\n\n function balanceOf(address _owner) constant returns (uint) {\n return balances[_owner];\n }\n\n function approve(address _spender, uint _value) returns (bool) {\n allowed[msg.sender][_spender] = _value;\n Approval(msg.sender, _spender, _value);\n return true;\n }\n\n function allowance(address _owner, address _spender) constant returns (uint) {\n return allowed[_owner][_spender];\n }\n\n mapping (address => uint) balances;\n mapping (address => mapping (address => uint)) allowed;\n uint public totalSupply;\n}\n", + "1.0.0/Token/Token_v1.sol": "pragma solidity ^0.4.11;\n\ncontract Token_v1 {\n\n /// @return total amount of tokens\n function totalSupply() constant returns (uint supply) {}\n\n /// @param _owner The address from which the balance will be retrieved\n /// @return The balance\n function balanceOf(address _owner) constant returns (uint balance) {}\n\n /// @notice send `_value` token to `_to` from `msg.sender`\n /// @param _to The address of the recipient\n /// @param _value The amount of token to be transferred\n /// @return Whether the transfer was successful or not\n function transfer(address _to, uint _value) returns (bool success) {}\n\n /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`\n /// @param _from The address of the sender\n /// @param _to The address of the recipient\n /// @param _value The amount of token to be transferred\n /// @return Whether the transfer was successful or not\n function transferFrom(address _from, address _to, uint _value) returns (bool success) {}\n\n /// @notice `msg.sender` approves `_addr` to spend `_value` tokens\n /// @param _spender The address of the account able to transfer the tokens\n /// @param _value The amount of wei to be approved for transfer\n /// @return Whether the approval was successful or not\n function approve(address _spender, uint _value) returns (bool success) {}\n\n /// @param _owner The address of the account owning tokens\n /// @param _spender The address of the account able to transfer the tokens\n /// @return Amount of remaining tokens allowed to spent\n function allowance(address _owner, address _spender) constant returns (uint remaining) {}\n\n event Transfer(address indexed _from, address indexed _to, uint _value);\n event Approval(address indexed _owner, address indexed _spender, uint _value);\n}\n\n", + "1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.4.11;\n\nimport { ERC20Token_v1 as ERC20Token } from \"../ERC20Token/ERC20Token_v1.sol\";\n\ncontract UnlimitedAllowanceToken_v1 is ERC20Token {\n\n uint constant MAX_UINT = 2**256 - 1;\n\n /// @dev ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance.\n /// @param _from Address to transfer from.\n /// @param _to Address to transfer to.\n /// @param _value Amount to transfer.\n /// @return Success of transfer.\n function transferFrom(address _from, address _to, uint _value)\n public\n returns (bool)\n {\n uint allowance = allowed[_from][msg.sender];\n if (balances[_from] >= _value\n && allowance >= _value\n && balances[_to] + _value >= balances[_to]\n ) {\n balances[_to] += _value;\n balances[_from] -= _value;\n if (allowance < MAX_UINT) {\n allowed[_from][msg.sender] -= _value;\n }\n Transfer(_from, _to, _value);\n return true;\n } else {\n return false;\n }\n }\n}\n", + "2.0.0/tokens/ZRXToken/ZRXToken.sol": "/*\n\n Copyright 2018 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity 0.4.11;\n\n// solhint-disable-next-line max-line-length\nimport { UnlimitedAllowanceToken_v1 as UnlimitedAllowanceToken } from \"../../../1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\";\n\n\ncontract ZRXToken is UnlimitedAllowanceToken {\n\n // solhint-disable const-name-snakecase\n uint8 constant public decimals = 18;\n uint public totalSupply = 10**27; // 1 billion tokens, 18 decimal places\n string constant public name = \"0x Protocol Token\";\n string constant public symbol = \"ZRX\";\n // solhint-enableconst-name-snakecase\n\n function ZRXToken()\n public\n {\n balances[msg.sender] = totalSupply;\n }\n}\n" + }, + "sourceTreeHashHex": "0xbcce67d129fe53ddb9717b4f567b33108c41a4f4324aa47ac609037e41f5b95d", + "compiler": { + "name": "solc", + "version": "soljson-v0.4.11+commit.68ef5810.js", + "settings": { + "optimizer": { + "enabled": true, + "runs": 1000000 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode.object", + "evm.bytecode.sourceMap", + "evm.deployedBytecode.object", + "evm.deployedBytecode.sourceMap" + ] + } + } + } + }, + "networks": { + "50": { + "address": "0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c", + "links": {}, + "constructorArgs": "[]" + } + } +}
\ No newline at end of file diff --git a/packages/0x.js/src/index.ts b/packages/0x.js/src/index.ts index 6dfc0bacc..95faa860d 100644 --- a/packages/0x.js/src/index.ts +++ b/packages/0x.js/src/index.ts @@ -1,6 +1,7 @@ export { ZeroEx } from './0x'; export { MessagePrefixType, MessagePrefixOpts } from '@0xproject/order-utils'; +export { Web3ProviderEngine, RPCSubprovider } from '@0xproject/subproviders'; export { ExchangeContractErrs, diff --git a/packages/abi-gen/test/utils_test.ts b/packages/abi-gen/test/utils_test.ts index c6147df38..820c0c675 100644 --- a/packages/abi-gen/test/utils_test.ts +++ b/packages/abi-gen/test/utils_test.ts @@ -2,7 +2,6 @@ import * as chai from 'chai'; import * as dirtyChai from 'dirty-chai'; import * as fs from 'fs'; import 'mocha'; -import * as sleep from 'sleep'; import * as tmp from 'tmp'; import { utils } from '../src/utils'; @@ -13,8 +12,6 @@ chai.use(dirtyChai); const expect = chai.expect; -const SLEEP_MS = 10; // time to wait before re-timestamping a file - describe('makeOutputFileName()', () => { it('should handle Metacoin usage', () => { expect(utils.makeOutputFileName('Metacoin')).to.equal('metacoin'); @@ -65,19 +62,22 @@ describe('isOutputFileUpToDate()', () => { describe('with an existing output file', () => { let outputFile: string; before(() => { - sleep.msleep(SLEEP_MS); // to ensure different timestamp outputFile = tmp.fileSync( { discardDescriptor: true }, // close file (set timestamp) ).name; + const abiFileModTimeMs = fs.statSync(abiFile).mtimeMs; + const outfileModTimeMs = abiFileModTimeMs + 1; + fs.utimesSync(outputFile, outfileModTimeMs, outfileModTimeMs); }); - it('should return true when output file and is newer than abi file', async () => { + it('should return true when output file is newer than abi file', async () => { expect(utils.isOutputFileUpToDate(abiFile, outputFile)).to.be.true(); }); it('should return false when output file exists but is older than abi file', () => { - sleep.msleep(SLEEP_MS); // to ensure different timestamp - fs.closeSync(fs.openSync(abiFile, 'w')); // touch abi file + const outFileModTimeMs = fs.statSync(outputFile).mtimeMs; + const abiFileModTimeMs = outFileModTimeMs + 1; + fs.utimesSync(abiFile, abiFileModTimeMs, abiFileModTimeMs); expect(utils.isOutputFileUpToDate(abiFile, outputFile)).to.be.false(); }); diff --git a/packages/connect/package.json b/packages/connect/package.json index cc68d34f4..343df4031 100644 --- a/packages/connect/package.json +++ b/packages/connect/package.json @@ -56,7 +56,6 @@ "@0xproject/types": "^0.8.2", "@0xproject/typescript-typings": "^0.4.2", "@0xproject/utils": "^0.7.2", - "isomorphic-fetch": "^2.2.1", "lodash": "^4.17.4", "query-string": "^5.0.1", "sinon": "^4.0.0", diff --git a/packages/connect/src/http_client.ts b/packages/connect/src/http_client.ts index f6503835a..f3800d581 100644 --- a/packages/connect/src/http_client.ts +++ b/packages/connect/src/http_client.ts @@ -1,7 +1,7 @@ import { assert } from '@0xproject/assert'; import { schemas } from '@0xproject/json-schemas'; import { SignedOrder } from '@0xproject/types'; -import 'isomorphic-fetch'; +import { fetchAsync } from '@0xproject/utils'; import * as _ from 'lodash'; import * as queryString from 'query-string'; @@ -167,7 +167,7 @@ export class HttpClient implements Client { const headers = new Headers({ 'content-type': 'application/json', }); - const response = await fetch(url, { + const response = await fetchAsync(url, { method: requestType, body: JSON.stringify(payload), headers, diff --git a/packages/contract-wrappers/package.json b/packages/contract-wrappers/package.json index b8fd8bd50..a781496ab 100644 --- a/packages/contract-wrappers/package.json +++ b/packages/contract-wrappers/package.json @@ -70,8 +70,7 @@ "sinon": "^4.0.0", "source-map-support": "^0.5.0", "tslint": "5.8.0", - "typescript": "2.7.1", - "web3-provider-engine": "14.0.6" + "typescript": "2.7.1" }, "dependencies": { "@0xproject/assert": "^0.3.0", diff --git a/packages/contract-wrappers/test/erc20_wrapper_test.ts b/packages/contract-wrappers/test/erc20_wrapper_test.ts index 0011508e0..cf7ac527e 100644 --- a/packages/contract-wrappers/test/erc20_wrapper_test.ts +++ b/packages/contract-wrappers/test/erc20_wrapper_test.ts @@ -1,11 +1,10 @@ import { BlockchainLifecycle, callbackErrorReporter } from '@0xproject/dev-utils'; -import { EmptyWalletSubprovider } from '@0xproject/subproviders'; +import { EmptyWalletSubprovider, Web3ProviderEngine } from '@0xproject/subproviders'; import { DoneCallback } from '@0xproject/types'; import { BigNumber } from '@0xproject/utils'; import * as chai from 'chai'; import { Provider } from 'ethereum-types'; import 'mocha'; -import Web3ProviderEngine = require('web3-provider-engine'); import { BlockParamLiteral, diff --git a/packages/contract-wrappers/test/erc721_wrapper_test.ts b/packages/contract-wrappers/test/erc721_wrapper_test.ts index 96b8fcf1d..f005ac2e0 100644 --- a/packages/contract-wrappers/test/erc721_wrapper_test.ts +++ b/packages/contract-wrappers/test/erc721_wrapper_test.ts @@ -1,11 +1,10 @@ import { BlockchainLifecycle, callbackErrorReporter } from '@0xproject/dev-utils'; -import { EmptyWalletSubprovider } from '@0xproject/subproviders'; +import { EmptyWalletSubprovider, Web3ProviderEngine } from '@0xproject/subproviders'; import { DoneCallback } from '@0xproject/types'; import { BigNumber } from '@0xproject/utils'; import * as chai from 'chai'; import { Provider } from 'ethereum-types'; import 'mocha'; -import Web3ProviderEngine = require('web3-provider-engine'); import { BlockParamLiteral, diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 1808e23e4..f0ef24684 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -51,8 +51,7 @@ "ethereum-types": "^0.0.2", "@0xproject/typescript-typings": "^0.4.2", "@0xproject/web3-wrapper": "^0.7.2", - "lodash": "^4.17.4", - "web3-provider-engine": "14.0.6" + "lodash": "^4.17.4" }, "publishConfig": { "access": "public" diff --git a/packages/dev-utils/src/web3_factory.ts b/packages/dev-utils/src/web3_factory.ts index 362a6c3c6..8e713fa68 100644 --- a/packages/dev-utils/src/web3_factory.ts +++ b/packages/dev-utils/src/web3_factory.ts @@ -1,7 +1,10 @@ -import ProviderEngine = require('web3-provider-engine'); -import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); - -import { EmptyWalletSubprovider, FakeGasEstimateSubprovider, GanacheSubprovider } from '@0xproject/subproviders'; +import { + EmptyWalletSubprovider, + FakeGasEstimateSubprovider, + GanacheSubprovider, + RPCSubprovider, + Web3ProviderEngine, +} from '@0xproject/subproviders'; import * as fs from 'fs'; import * as _ from 'lodash'; @@ -16,8 +19,8 @@ export interface Web3Config { } export const web3Factory = { - getRpcProvider(config: Web3Config = {}): ProviderEngine { - const provider = new ProviderEngine(); + getRpcProvider(config: Web3Config = {}): Web3ProviderEngine { + const provider = new Web3ProviderEngine(); const hasAddresses = _.isUndefined(config.hasAddresses) || config.hasAddresses; config.shouldUseFakeGasEstimate = _.isUndefined(config.shouldUseFakeGasEstimate) || config.shouldUseFakeGasEstimate; @@ -49,11 +52,7 @@ export const web3Factory = { }), ); } else { - provider.addProvider( - new RpcSubprovider({ - rpcUrl: config.rpcUrl || constants.RPC_URL, - }), - ); + provider.addProvider(new RPCSubprovider(config.rpcUrl || constants.RPC_URL)); } provider.start(); return provider; diff --git a/packages/metacoin/package.json b/packages/metacoin/package.json index 9b96441c4..744e9e69a 100644 --- a/packages/metacoin/package.json +++ b/packages/metacoin/package.json @@ -44,8 +44,7 @@ "ethereum-types": "^0.0.2", "ethers": "3.0.22", "lodash": "^4.17.4", - "run-s": "^0.0.0", - "web3-provider-engine": "14.0.6" + "run-s": "^0.0.0" }, "devDependencies": { "@0xproject/dev-utils": "^0.4.5", diff --git a/packages/metacoin/test/utils/web3_wrapper.ts b/packages/metacoin/test/utils/web3_wrapper.ts index d3655cb6a..36bd6343f 100644 --- a/packages/metacoin/test/utils/web3_wrapper.ts +++ b/packages/metacoin/test/utils/web3_wrapper.ts @@ -1,10 +1,8 @@ import { env, EnvVars } from '@0xproject/dev-utils'; -import { GanacheSubprovider, prependSubprovider } from '@0xproject/subproviders'; +import { GanacheSubprovider, prependSubprovider, RPCSubprovider, Web3ProviderEngine } from '@0xproject/subproviders'; import { errorUtils, logUtils } from '@0xproject/utils'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; import * as fs from 'fs'; -import ProviderEngine = require('web3-provider-engine'); -import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); import { config } from './config'; import { coverage } from './coverage'; @@ -30,7 +28,7 @@ switch (process.env.TEST_PROVIDER) { throw errorUtils.spawnSwitchErr('TEST_PROVIDER', process.env.TEST_PROVIDER); } -export const provider = new ProviderEngine(); +export const provider = new Web3ProviderEngine(); if (testProvider === ProviderType.Ganache) { provider.addProvider( new GanacheSubprovider({ @@ -45,7 +43,7 @@ if (testProvider === ProviderType.Ganache) { }), ); } else { - provider.addProvider(new RpcSubprovider({ rpcUrl: 'http://localhost:8501' })); + provider.addProvider(new RPCSubprovider('http://localhost:8501')); } provider.start(); diff --git a/packages/migrations/package.json b/packages/migrations/package.json index 0b7ab8ae2..d4aa73912 100644 --- a/packages/migrations/package.json +++ b/packages/migrations/package.json @@ -60,8 +60,7 @@ "@ledgerhq/hw-app-eth": "^4.3.0", "ethereum-types": "^0.0.2", "ethers": "3.0.22", - "lodash": "^4.17.4", - "web3-provider-engine": "14.0.6" + "lodash": "^4.17.4" }, "optionalDependencies": { "@ledgerhq/hw-transport-node-hid": "^4.3.0" diff --git a/packages/migrations/src/utils/provider_factory.ts b/packages/migrations/src/utils/provider_factory.ts index 7a217b1e0..5f69b258d 100644 --- a/packages/migrations/src/utils/provider_factory.ts +++ b/packages/migrations/src/utils/provider_factory.ts @@ -1,10 +1,8 @@ -import { LedgerEthereumClient, LedgerSubprovider } from '@0xproject/subproviders'; +import { LedgerEthereumClient, LedgerSubprovider, RPCSubprovider, Web3ProviderEngine } from '@0xproject/subproviders'; import Eth from '@ledgerhq/hw-app-eth'; // tslint:disable:no-implicit-dependencies import TransportNodeHid from '@ledgerhq/hw-transport-node-hid'; import { Provider } from 'ethereum-types'; -import ProviderEngine = require('web3-provider-engine'); -import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); import { constants } from './constants'; @@ -15,18 +13,14 @@ async function ledgerEthereumNodeJsClientFactoryAsync(): Promise<LedgerEthereumC } export const providerFactory = { async getLedgerProviderAsync(): Promise<Provider> { - const provider = new ProviderEngine(); + const provider = new Web3ProviderEngine(); const ledgerWalletConfigs = { networkId: constants.KOVAN_NETWORK_ID, ledgerEthereumClientFactoryAsync: ledgerEthereumNodeJsClientFactoryAsync, }; const ledgerSubprovider = new LedgerSubprovider(ledgerWalletConfigs); provider.addProvider(ledgerSubprovider); - provider.addProvider( - new RpcSubprovider({ - rpcUrl: constants.RPC_URL, - }), - ); + provider.addProvider(new RPCSubprovider(constants.RPC_URL)); provider.start(); return provider; }, diff --git a/packages/sol-compiler/package.json b/packages/sol-compiler/package.json index e738ab56b..8460420ad 100644 --- a/packages/sol-compiler/package.json +++ b/packages/sol-compiler/package.json @@ -87,7 +87,6 @@ "ethereum-types": "^0.0.2", "chalk": "^2.3.0", "ethereumjs-util": "^5.1.1", - "isomorphic-fetch": "^2.2.1", "lodash": "^4.17.4", "mkdirp": "^0.5.1", "require-from-string": "^2.0.1", diff --git a/packages/sol-compiler/src/compiler.ts b/packages/sol-compiler/src/compiler.ts index bb701a8ce..e61c606be 100644 --- a/packages/sol-compiler/src/compiler.ts +++ b/packages/sol-compiler/src/compiler.ts @@ -8,11 +8,10 @@ import { Resolver, URLResolver, } from '@0xproject/sol-resolver'; -import { logUtils } from '@0xproject/utils'; +import { fetchAsync, logUtils } from '@0xproject/utils'; import chalk from 'chalk'; import * as ethUtil from 'ethereumjs-util'; import * as fs from 'fs'; -import 'isomorphic-fetch'; import * as _ from 'lodash'; import * as path from 'path'; import * as requireFromString from 'require-from-string'; @@ -149,7 +148,7 @@ export class Compiler { } else { logUtils.log(`Downloading ${fullSolcVersion}...`); const url = `${constants.BASE_COMPILER_URL}${fullSolcVersion}`; - const response = await fetch(url); + const response = await fetchAsync(url); const SUCCESS_STATUS = 200; if (response.status !== SUCCESS_STATUS) { throw new Error(`Failed to load ${fullSolcVersion}`); diff --git a/packages/subproviders/package.json b/packages/subproviders/package.json index bdc846e6b..796d87cf4 100644 --- a/packages/subproviders/package.json +++ b/packages/subproviders/package.json @@ -55,6 +55,7 @@ "ethereumjs-util": "^5.1.1", "ganache-core": "0xProject/ganache-core", "hdkey": "^0.7.1", + "json-rpc-error": "2.0.0", "lodash": "^4.17.4", "semaphore-async-await": "^1.5.1", "web3-provider-engine": "14.0.6" diff --git a/packages/subproviders/src/index.ts b/packages/subproviders/src/index.ts index 71d643f14..9d4480e59 100644 --- a/packages/subproviders/src/index.ts +++ b/packages/subproviders/src/index.ts @@ -1,5 +1,6 @@ import Eth from '@ledgerhq/hw-app-eth'; import TransportU2F from '@ledgerhq/hw-transport-u2f'; +export import Web3ProviderEngine = require('web3-provider-engine'); export { ECSignature } from '@0xproject/types'; import { LedgerEthereumClient } from './types'; @@ -10,6 +11,7 @@ export { FakeGasEstimateSubprovider } from './subproviders/fake_gas_estimate_sub export { SignerSubprovider } from './subproviders/signer'; export { RedundantSubprovider } from './subproviders/redundant_subprovider'; export { LedgerSubprovider } from './subproviders/ledger'; +export { RPCSubprovider } from './subproviders/rpc_subprovider'; export { GanacheSubprovider } from './subproviders/ganache'; export { Subprovider } from './subproviders/subprovider'; export { NonceTrackerSubprovider } from './subproviders/nonce_tracker'; diff --git a/packages/subproviders/src/subproviders/rpc_subprovider.ts b/packages/subproviders/src/subproviders/rpc_subprovider.ts new file mode 100644 index 000000000..3ad0e5325 --- /dev/null +++ b/packages/subproviders/src/subproviders/rpc_subprovider.ts @@ -0,0 +1,90 @@ +import { assert } from '@0xproject/assert'; +import { StatusCodes } from '@0xproject/types'; +import { fetchAsync } from '@0xproject/utils'; +import { JSONRPCRequestPayload } from 'ethereum-types'; +import JsonRpcError = require('json-rpc-error'); + +import { Callback, ErrorCallback } from '../types'; + +import { Subprovider } from './subprovider'; + +/** + * This class implements the [web3-provider-engine](https://github.com/MetaMask/provider-engine) subprovider interface. + * It forwards on JSON RPC requests to the supplied `rpcUrl` endpoint + */ +export class RPCSubprovider extends Subprovider { + private _rpcUrl: string; + private _requestTimeoutMs: number; + constructor(rpcUrl: string, requestTimeoutMs: number = 20000) { + super(); + assert.isString('rpcUrl', rpcUrl); + assert.isNumber('requestTimeoutMs', requestTimeoutMs); + this._rpcUrl = rpcUrl; + this._requestTimeoutMs = requestTimeoutMs; + } + /** + * This method conforms to the web3-provider-engine interface. + * It is called internally by the ProviderEngine when it is this subproviders + * turn to handle a JSON RPC request. + * @param payload JSON RPC payload + * @param next Callback to call if this subprovider decides not to handle the request + * @param end Callback to call if subprovider handled the request and wants to pass back the request. + */ + // tslint:disable-next-line:prefer-function-over-method async-suffix + public async handleRequest(payload: JSONRPCRequestPayload, _next: Callback, end: ErrorCallback): Promise<void> { + const finalPayload = Subprovider._createFinalPayload(payload); + const headers = new Headers({ + Accept: 'application/json', + 'Content-Type': 'application/json', + }); + + let response; + try { + response = await fetchAsync( + this._rpcUrl, + { + method: 'POST', + headers, + body: JSON.stringify(finalPayload), + }, + this._requestTimeoutMs, + ); + } catch (err) { + end(new JsonRpcError.InternalError(err)); + return; + } + + const text = await response.text(); + if (!response.ok) { + const statusCode = response.status; + switch (statusCode) { + case StatusCodes.MethodNotAllowed: + end(new JsonRpcError.MethodNotFound()); + return; + case StatusCodes.GatewayTimeout: + const errMsg = + 'Gateway timeout. The request took too long to process. This can happen when querying logs over too wide a block range.'; + const err = new Error(errMsg); + end(new JsonRpcError.InternalError(err)); + return; + default: + end(new JsonRpcError.InternalError(text)); + return; + } + } + + let data; + try { + data = JSON.parse(text); + } catch (err) { + end(new JsonRpcError.InternalError(err)); + return; + } + + if (data.error) { + end(data.error); + return; + } + end(null, data.result); + } +} diff --git a/packages/subproviders/src/subproviders/subprovider.ts b/packages/subproviders/src/subproviders/subprovider.ts index ff8378c4e..5dc273569 100644 --- a/packages/subproviders/src/subproviders/subprovider.ts +++ b/packages/subproviders/src/subproviders/subprovider.ts @@ -9,18 +9,7 @@ import { Callback, ErrorCallback, JSONRPCRequestPayloadWithMethod } from '../typ export abstract class Subprovider { // tslint:disable-next-line:underscore-private-and-protected private engine!: Provider; - // Ported from: https://github.com/MetaMask/provider-engine/blob/master/util/random-id.js - private static _getRandomId(): number { - const extraDigits = 3; - const baseTen = 10; - // 13 time digits - const datePart = new Date().getTime() * Math.pow(baseTen, extraDigits); - // 3 random digits - const extraPart = Math.floor(Math.random() * Math.pow(baseTen, extraDigits)); - // 16 digits - return datePart + extraPart; - } - private static _createFinalPayload( + protected static _createFinalPayload( payload: Partial<JSONRPCRequestPayloadWithMethod>, ): Partial<JSONRPCRequestPayloadWithMethod> { const finalPayload = { @@ -32,6 +21,17 @@ export abstract class Subprovider { }; return finalPayload; } + // Ported from: https://github.com/MetaMask/provider-engine/blob/master/util/random-id.js + private static _getRandomId(): number { + const extraDigits = 3; + const baseTen = 10; + // 13 time digits + const datePart = new Date().getTime() * Math.pow(baseTen, extraDigits); + // 3 random digits + const extraPart = Math.floor(Math.random() * Math.pow(baseTen, extraDigits)); + // 16 digits + return datePart + extraPart; + } // tslint:disable-next-line:async-suffix public abstract async handleRequest( payload: JSONRPCRequestPayload, diff --git a/packages/subproviders/src/utils/subprovider_utils.ts b/packages/subproviders/src/utils/subprovider_utils.ts index 24ebedd06..beda408ab 100644 --- a/packages/subproviders/src/utils/subprovider_utils.ts +++ b/packages/subproviders/src/utils/subprovider_utils.ts @@ -1,4 +1,4 @@ -import ProviderEngine = require('web3-provider-engine'); +import Web3ProviderEngine = require('web3-provider-engine'); import { Subprovider } from '../subproviders/subprovider'; @@ -7,7 +7,7 @@ import { Subprovider } from '../subproviders/subprovider'; * @param provider Given provider * @param subprovider Subprovider to prepend */ -export function prependSubprovider(provider: ProviderEngine, subprovider: Subprovider): void { +export function prependSubprovider(provider: Web3ProviderEngine, subprovider: Subprovider): void { subprovider.setEngine(provider); // HACK: We use implementation details of provider engine here // https://github.com/MetaMask/provider-engine/blob/master/index.js#L68 diff --git a/packages/subproviders/test/integration/ledger_subprovider_test.ts b/packages/subproviders/test/integration/ledger_subprovider_test.ts index 196cecf32..103e8f952 100644 --- a/packages/subproviders/test/integration/ledger_subprovider_test.ts +++ b/packages/subproviders/test/integration/ledger_subprovider_test.ts @@ -7,10 +7,8 @@ import TransportNodeHid from '@ledgerhq/hw-transport-node-hid'; import * as chai from 'chai'; import { JSONRPCResponsePayload } from 'ethereum-types'; import * as ethUtils from 'ethereumjs-util'; -import Web3ProviderEngine = require('web3-provider-engine'); -import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); -import { LedgerSubprovider } from '../../src'; +import { LedgerSubprovider, RPCSubprovider, Web3ProviderEngine } from '../../src'; import { LedgerEthereumClient } from '../../src/types'; import { chaiSetup } from '../chai_setup'; import { fixtureData } from '../utils/fixture_data'; @@ -86,9 +84,7 @@ describe('LedgerSubprovider', () => { before(() => { ledgerProvider = new Web3ProviderEngine(); ledgerProvider.addProvider(ledgerSubprovider); - const httpProvider = new RpcSubprovider({ - rpcUrl: 'http://localhost:8545', - }); + const httpProvider = new RPCSubprovider('http://localhost:8545'); ledgerProvider.addProvider(httpProvider); ledgerProvider.start(); diff --git a/packages/subproviders/test/unit/eth_lightwallet_subprovider_test.ts b/packages/subproviders/test/unit/eth_lightwallet_subprovider_test.ts index f17c21f02..063817a95 100644 --- a/packages/subproviders/test/unit/eth_lightwallet_subprovider_test.ts +++ b/packages/subproviders/test/unit/eth_lightwallet_subprovider_test.ts @@ -2,9 +2,8 @@ import * as chai from 'chai'; import * as lightwallet from 'eth-lightwallet'; import { JSONRPCResponsePayload } from 'ethereum-types'; import * as ethUtils from 'ethereumjs-util'; -import Web3ProviderEngine = require('web3-provider-engine'); -import { EthLightwalletSubprovider } from '../../src'; +import { EthLightwalletSubprovider, Web3ProviderEngine } from '../../src'; import { DoneCallback } from '../../src/types'; import { chaiSetup } from '../chai_setup'; import { fixtureData } from '../utils/fixture_data'; diff --git a/packages/subproviders/test/unit/ledger_subprovider_test.ts b/packages/subproviders/test/unit/ledger_subprovider_test.ts index 3b57e125b..edff5144e 100644 --- a/packages/subproviders/test/unit/ledger_subprovider_test.ts +++ b/packages/subproviders/test/unit/ledger_subprovider_test.ts @@ -2,9 +2,8 @@ import * as chai from 'chai'; import { JSONRPCResponsePayload } from 'ethereum-types'; import * as ethUtils from 'ethereumjs-util'; import * as _ from 'lodash'; -import Web3ProviderEngine = require('web3-provider-engine'); -import { LedgerSubprovider } from '../../src'; +import { LedgerSubprovider, Web3ProviderEngine } from '../../src'; import { DoneCallback, LedgerCommunicationClient, diff --git a/packages/subproviders/test/unit/mnemonic_wallet_subprovider_test.ts b/packages/subproviders/test/unit/mnemonic_wallet_subprovider_test.ts index 51ba7094c..f2bdda3cd 100644 --- a/packages/subproviders/test/unit/mnemonic_wallet_subprovider_test.ts +++ b/packages/subproviders/test/unit/mnemonic_wallet_subprovider_test.ts @@ -1,9 +1,8 @@ import * as chai from 'chai'; import { JSONRPCResponsePayload } from 'ethereum-types'; import * as ethUtils from 'ethereumjs-util'; -import Web3ProviderEngine = require('web3-provider-engine'); -import { GanacheSubprovider, MnemonicWalletSubprovider } from '../../src/'; +import { GanacheSubprovider, MnemonicWalletSubprovider, Web3ProviderEngine } from '../../src/'; import { DoneCallback, WalletSubproviderErrors } from '../../src/types'; import { chaiSetup } from '../chai_setup'; import { fixtureData } from '../utils/fixture_data'; diff --git a/packages/subproviders/test/unit/nonce_tracker_subprovider_test.ts b/packages/subproviders/test/unit/nonce_tracker_subprovider_test.ts index fa33cd50a..c437d0815 100644 --- a/packages/subproviders/test/unit/nonce_tracker_subprovider_test.ts +++ b/packages/subproviders/test/unit/nonce_tracker_subprovider_test.ts @@ -1,11 +1,10 @@ import * as chai from 'chai'; -import Web3ProviderEngine = require('web3-provider-engine'); import FixtureSubprovider = require('web3-provider-engine/subproviders/fixture'); import { promisify } from '@0xproject/utils'; import EthereumTx = require('ethereumjs-tx'); -import { NonceTrackerSubprovider } from '../../src'; +import { NonceTrackerSubprovider, Web3ProviderEngine } from '../../src'; import { chaiSetup } from '../chai_setup'; const expect = chai.expect; diff --git a/packages/subproviders/test/unit/private_key_wallet_subprovider_test.ts b/packages/subproviders/test/unit/private_key_wallet_subprovider_test.ts index ab321bcff..95773145f 100644 --- a/packages/subproviders/test/unit/private_key_wallet_subprovider_test.ts +++ b/packages/subproviders/test/unit/private_key_wallet_subprovider_test.ts @@ -1,9 +1,8 @@ import * as chai from 'chai'; import { JSONRPCResponsePayload } from 'ethereum-types'; import * as ethUtils from 'ethereumjs-util'; -import Web3ProviderEngine = require('web3-provider-engine'); -import { GanacheSubprovider, PrivateKeyWalletSubprovider } from '../../src/'; +import { GanacheSubprovider, PrivateKeyWalletSubprovider, Web3ProviderEngine } from '../../src/'; import { DoneCallback, WalletSubproviderErrors } from '../../src/types'; import { chaiSetup } from '../chai_setup'; import { fixtureData } from '../utils/fixture_data'; diff --git a/packages/subproviders/test/unit/redundant_rpc_subprovider_test.ts b/packages/subproviders/test/unit/redundant_rpc_subprovider_test.ts index 810fb8f45..e30d2f74e 100644 --- a/packages/subproviders/test/unit/redundant_rpc_subprovider_test.ts +++ b/packages/subproviders/test/unit/redundant_rpc_subprovider_test.ts @@ -2,10 +2,8 @@ import { DoneCallback } from '@0xproject/types'; import * as chai from 'chai'; import { JSONRPCResponsePayload } from 'ethereum-types'; import * as Sinon from 'sinon'; -import Web3ProviderEngine = require('web3-provider-engine'); -import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); -import { RedundantSubprovider } from '../../src'; +import { RedundantSubprovider, RPCSubprovider, Web3ProviderEngine } from '../../src'; import { Subprovider } from '../../src/subproviders/subprovider'; import { chaiSetup } from '../chai_setup'; import { ganacheSubprovider } from '../utils/ganache_subprovider'; @@ -39,9 +37,7 @@ describe('RedundantSubprovider', () => { }); it('succeeds when supplied at least one healthy endpoint', (done: DoneCallback) => { provider = new Web3ProviderEngine(); - const nonExistentSubprovider = new RpcSubprovider({ - rpcUrl: 'http://does-not-exist:3000', - }); + const nonExistentSubprovider = new RPCSubprovider('http://does-not-exist:3000'); const handleRequestStub = Sinon.stub(nonExistentSubprovider, 'handleRequest').throws( new Error('REQUEST_FAILED'), ); diff --git a/packages/testnet-faucets/package.json b/packages/testnet-faucets/package.json index 72ab8f61b..442f488c9 100644 --- a/packages/testnet-faucets/package.json +++ b/packages/testnet-faucets/package.json @@ -18,7 +18,7 @@ "author": "Fabio Berger", "license": "Apache-2.0", "dependencies": { - "0x.js": "^0.38.0", + "0x.js": "0.38.4", "@0xproject/subproviders": "^0.10.5", "@0xproject/web3-wrapper": "^0.7.2", "@0xproject/typescript-typings": "^0.4.2", @@ -28,8 +28,7 @@ "ethereumjs-util": "^5.1.1", "express": "^4.15.2", "lodash": "^4.17.4", - "rollbar": "^0.6.5", - "web3-provider-engine": "14.0.6" + "rollbar": "^0.6.5" }, "devDependencies": { "@0xproject/tslint-config": "^0.4.21", diff --git a/packages/testnet-faucets/src/ts/handler.ts b/packages/testnet-faucets/src/ts/handler.ts index 6d26691d6..0f61159fa 100644 --- a/packages/testnet-faucets/src/ts/handler.ts +++ b/packages/testnet-faucets/src/ts/handler.ts @@ -5,9 +5,12 @@ import { Provider } from 'ethereum-types'; import * as express from 'express'; import * as _ from 'lodash'; -import { NonceTrackerSubprovider, PrivateKeyWalletSubprovider } from '@0xproject/subproviders'; -import ProviderEngine = require('web3-provider-engine'); -import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); +import { + NonceTrackerSubprovider, + PrivateKeyWalletSubprovider, + RPCSubprovider, + Web3ProviderEngine, +} from '@0xproject/subproviders'; import { configs } from './configs'; import { constants } from './constants'; @@ -39,14 +42,10 @@ export class Handler { if (_.isUndefined(configs.DISPENSER_PRIVATE_KEY)) { throw new Error('Dispenser Private key not found'); } - const engine = new ProviderEngine(); + const engine = new Web3ProviderEngine(); engine.addProvider(new NonceTrackerSubprovider()); engine.addProvider(new PrivateKeyWalletSubprovider(configs.DISPENSER_PRIVATE_KEY)); - engine.addProvider( - new RpcSubprovider({ - rpcUrl, - }), - ); + engine.addProvider(new RPCSubprovider(rpcUrl)); engine.start(); return engine; } diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 03fa2fe8a..72e2a726b 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -221,3 +221,11 @@ export enum RevertReason { ValueGreaterThanZero = 'VALUE_GREATER_THAN_ZERO', InvalidMsgValue = 'INVALID_MSG_VALUE', } + +export enum StatusCodes { + Success = 200, + NotFound = 404, + InternalError = 500, + MethodNotAllowed = 405, + GatewayTimeout = 504, +} diff --git a/packages/typescript-typings/types/detect-node/index.d.ts b/packages/typescript-typings/types/detect-node/index.d.ts new file mode 100644 index 000000000..4c58b8450 --- /dev/null +++ b/packages/typescript-typings/types/detect-node/index.d.ts @@ -0,0 +1,3 @@ +declare module 'detect-node' { + export const isNode: boolean; +} diff --git a/packages/typescript-typings/types/json-rpc-error/index.d.ts b/packages/typescript-typings/types/json-rpc-error/index.d.ts new file mode 100644 index 000000000..dfaf92167 --- /dev/null +++ b/packages/typescript-typings/types/json-rpc-error/index.d.ts @@ -0,0 +1,8 @@ +declare module 'json-rpc-error' { + export class InternalError extends Error { + constructor(err: Error | string); + } + export class MethodNotFound extends Error { + constructor(); + } +} diff --git a/packages/utils/package.json b/packages/utils/package.json index 9168a3538..a454b35ee 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -35,14 +35,15 @@ "typescript": "2.7.1" }, "dependencies": { - "ethereum-types": "^0.0.2", + "@0xproject/types": "^1.0.0", "@0xproject/typescript-typings": "^0.4.2", "@types/node": "^8.0.53", - "ethereumjs-util": "^5.1.1", "bignumber.js": "~4.1.0", + "detect-node": "2.0.3", "ethereum-types": "^0.0.2", "ethereumjs-util": "^5.1.1", "ethers": "3.0.22", + "isomorphic-fetch": "^2.2.1", "js-sha3": "^0.7.0", "lodash": "^4.17.4" }, diff --git a/packages/utils/src/fetchAsync.ts b/packages/utils/src/fetchAsync.ts new file mode 100644 index 000000000..c02e5baba --- /dev/null +++ b/packages/utils/src/fetchAsync.ts @@ -0,0 +1,37 @@ +import isNode = require('detect-node'); +import 'isomorphic-fetch'; + +export const fetchAsync = async ( + endpoint: string, + options: RequestInit = {}, + timeoutMs: number = 20000, +): Promise<Response> => { + if (options.signal || (options as any).timeout) { + throw new Error( + 'Cannot call fetchAsync with options.signal or options.timeout. To set a timeout, please use the supplied "timeoutMs" parameter.', + ); + } + let optionsWithAbortParam; + if (!isNode) { + const controller = new AbortController(); + const signal = controller.signal; + setTimeout(() => { + controller.abort(); + }, timeoutMs); + optionsWithAbortParam = { + signal, + ...options, + }; + } else { + // HACK: the `timeout` param only exists in `node-fetch`, and not on the `isomorphic-fetch` + // `RequestInit` type. Since `isomorphic-fetch` conditionally wraps `node-fetch` when the + // execution environment is `Node.js`, we need to cast it to `any` in that scenario. + optionsWithAbortParam = { + timeout: timeoutMs, + ...options, + } as any; + } + + const response = await fetch(endpoint, optionsWithAbortParam); + return response; +}; diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index fd102cecb..b8e0b1775 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -8,3 +8,4 @@ export { logUtils } from './log_utils'; export { abiUtils } from './abi_utils'; export { NULL_BYTES } from './constants'; export { errorUtils } from './error_utils'; +export { fetchAsync } from './fetchAsync'; diff --git a/packages/website/package.json b/packages/website/package.json index b5b4b6119..ef314ba2d 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -16,7 +16,7 @@ "deploy_staging": "npm run build; aws s3 sync ./public/. s3://staging-0xproject --profile 0xproject --region us-east-1 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers", "deploy_live": - "npm run build; aws s3 sync ./public/. s3://0xproject.com --profile 0xproject --region us-east-1 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --exclude *.map.js" + "DEPLOY_ROLLBAR_SOURCEMAPS=true npm run build; aws s3 sync ./public/. s3://0xproject.com --profile 0xproject --region us-east-1 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --exclude *.map.js" }, "author": "Fabio Berger", "license": "Apache-2.0", @@ -49,7 +49,6 @@ "react-copy-to-clipboard": "^4.2.3", "react-document-title": "^2.0.3", "react-dom": "15.6.1", - "react-ga": "^2.4.1", "react-popper": "^1.0.0-beta.6", "react-redux": "^5.0.3", "react-router-dom": "^4.1.1", @@ -63,7 +62,6 @@ "thenby": "^1.2.3", "truffle-contract": "2.0.1", "web3-provider-engine": "14.0.6", - "whatwg-fetch": "^2.0.3", "xml-js": "^1.6.4" }, "devDependencies": { diff --git a/packages/website/public/index.html b/packages/website/public/index.html index 060f2c3c2..a8a61f8ad 100644 --- a/packages/website/public/index.html +++ b/packages/website/public/index.html @@ -23,6 +23,12 @@ </head> <body style="margin: 0px; min-width: 355px;"> + <!-- Heap SDK --> + <script type="text/javascript"> + window.heap = window.heap || [], heap.load = function (e, t) { window.heap.appid = e, window.heap.config = t = t || {}; var r = t.forceSSL || "https:" === document.location.protocol, a = document.createElement("script"); a.type = "text/javascript", a.async = !0, a.src = (r ? "https:" : "http:") + "//cdn.heapanalytics.com/js/heap-" + e + ".js"; var n = document.getElementsByTagName("script")[0]; n.parentNode.insertBefore(a, n); for (var o = function (e) { return function () { heap.push([e].concat(Array.prototype.slice.call(arguments, 0))) } }, p = ["addEventProperties", "addUserProperties", "clearEventProperties", "identify", "resetIdentity", "removeEventProperty", "setEventProperties", "track", "unsetEventProperty"], c = 0; c < p.length; c++)heap[p[c]] = o(p[c]) }; + heap.load("410099666"); + </script> + <!-- End Heap SDK --> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-98720122-1"></script> <script> diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index 0e6698318..e8168d975 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -15,8 +15,9 @@ import { ledgerEthereumBrowserClientFactoryAsync, LedgerSubprovider, RedundantSubprovider, + RPCSubprovider, SignerSubprovider, - Subprovider, + Web3ProviderEngine, } from '@0xproject/subproviders'; import { BlockParam, @@ -60,9 +61,7 @@ import { configs } from 'ts/utils/configs'; import { constants } from 'ts/utils/constants'; import { errorReporter } from 'ts/utils/error_reporter'; import { utils } from 'ts/utils/utils'; -import ProviderEngine = require('web3-provider-engine'); import FilterSubprovider = require('web3-provider-engine/subproviders/filters'); -import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); import * as MintableArtifacts from '../contracts/Mintable.json'; @@ -148,7 +147,7 @@ export class Blockchain { if (!isU2FSupported) { throw new Error('Cannot update providerType to LEDGER without U2F support'); } - const provider = new ProviderEngine(); + const provider = new Web3ProviderEngine(); const ledgerWalletConfigs = { networkId: networkIdIfExists, ledgerEthereumClientFactoryAsync: ledgerEthereumBrowserClientFactoryAsync, @@ -157,25 +156,21 @@ export class Blockchain { provider.addProvider(ledgerSubprovider); provider.addProvider(new FilterSubprovider()); const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkIdIfExists], publicNodeUrl => { - return new RpcSubprovider({ - rpcUrl: publicNodeUrl, - }); + return new RPCSubprovider(publicNodeUrl); }); - provider.addProvider(new RedundantSubprovider(rpcSubproviders as Subprovider[])); + provider.addProvider(new RedundantSubprovider(rpcSubproviders)); provider.start(); return [provider, ledgerSubprovider]; } else if (doesInjectedWeb3Exist && isPublicNodeAvailableForNetworkId) { // We catch all requests involving a users account and send it to the injectedWeb3 // instance. All other requests go to the public hosted node. - const provider = new ProviderEngine(); + const provider = new Web3ProviderEngine(); provider.addProvider(new SignerSubprovider(injectedWeb3.currentProvider)); provider.addProvider(new FilterSubprovider()); const rpcSubproviders = _.map(publicNodeUrlsIfExistsForNetworkId, publicNodeUrl => { - return new RpcSubprovider({ - rpcUrl: publicNodeUrl, - }); + return new RPCSubprovider(publicNodeUrl); }); - provider.addProvider(new RedundantSubprovider(rpcSubproviders as Subprovider[])); + provider.addProvider(new RedundantSubprovider(rpcSubproviders)); provider.start(); return [provider, undefined]; } else if (doesInjectedWeb3Exist) { @@ -185,15 +180,13 @@ export class Blockchain { // If no injectedWeb3 instance, all requests fallback to our public hosted mainnet/testnet node // We do this so that users can still browse the 0x Portal DApp even if they do not have web3 // injected into their browser. - const provider = new ProviderEngine(); + const provider = new Web3ProviderEngine(); provider.addProvider(new FilterSubprovider()); const networkId = constants.NETWORK_ID_MAINNET; const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkId], publicNodeUrl => { - return new RpcSubprovider({ - rpcUrl: publicNodeUrl, - }); + return new RPCSubprovider(publicNodeUrl); }); - provider.addProvider(new RedundantSubprovider(rpcSubproviders as Subprovider[])); + provider.addProvider(new RedundantSubprovider(rpcSubproviders)); provider.start(); return [provider, undefined]; } @@ -571,7 +564,7 @@ export class Blockchain { configs.DEFAULT_TRACKED_TOKEN_SYMBOLS, )}) not found in tokenRegistry: ${JSON.stringify(tokenRegistryTokens)}`, ); - await errorReporter.reportAsync(err); + errorReporter.report(err); return; } if (_.isEmpty(trackedTokensByAddress)) { @@ -682,8 +675,7 @@ export class Blockchain { // Note: it's not entirely clear from the documentation which // errors will be thrown by `watch`. For now, let's log the error // to rollbar and stop watching when one occurs - // tslint:disable-next-line:no-floating-promises - errorReporter.reportAsync(err); // fire and forget + errorReporter.report(err); // fire and forget return; } else { const decodedLog = decodedLogEvent.log; @@ -795,7 +787,7 @@ export class Blockchain { return tokenByAddress; } private async _onPageLoadInitFireAndForgetAsync(): Promise<void> { - await utils.onPageLoadAsync(); // wait for page to load + await utils.onPageLoadPromise; // wait for page to load const networkIdIfExists = await Blockchain._getInjectedWeb3ProviderNetworkIdIfExistsAsync(); this.networkId = !_.isUndefined(networkIdIfExists) ? networkIdIfExists : constants.NETWORK_ID_MAINNET; const injectedWeb3IfExists = Blockchain._getInjectedWeb3(); @@ -915,7 +907,7 @@ export class Blockchain { if (_.includes(errMsg, 'not been deployed to detected network')) { throw new Error(BlockchainCallErrs.ContractDoesNotExist); } else { - await errorReporter.reportAsync(err); + errorReporter.report(err); throw new Error(BlockchainCallErrs.UnhandledError); } } diff --git a/packages/website/ts/components/eth_weth_conversion_button.tsx b/packages/website/ts/components/eth_weth_conversion_button.tsx index 4b91a2ebd..d547a4e6a 100644 --- a/packages/website/ts/components/eth_weth_conversion_button.tsx +++ b/packages/website/ts/components/eth_weth_conversion_button.tsx @@ -118,7 +118,7 @@ export class EthWethConversionButton extends React.Component< ? 'Failed to wrap your ETH. Please try again.' : 'Failed to unwrap your WETH. Please try again.'; this.props.dispatcher.showFlashMessage(errorMsg); - await errorReporter.reportAsync(err); + errorReporter.report(err); } } this.setState({ diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index 03ba1183d..7da2e0870 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -1,5 +1,5 @@ import { getOrderHashHex, isValidSignature } from '@0xproject/order-utils'; -import { colors, constants as sharedConstants } from '@0xproject/react-shared'; +import { colors } from '@0xproject/react-shared'; import { Order as ZeroExOrder } from '@0xproject/types'; import { BigNumber, logUtils } from '@0xproject/utils'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; @@ -506,6 +506,10 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> { await this._checkForUntrackedTokensAndAskToAddAsync(); } + private _trackOrderEvent(eventName: string): void { + const parsedOrder = this.state.parsedOrder; + analytics.trackOrderEvent(eventName, parsedOrder); + } private async _onFillOrderClickFireAndForgetAsync(): Promise<void> { if (this.props.blockchainErr !== BlockchainErrs.NoError || _.isEmpty(this.props.userAddress)) { this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); @@ -552,14 +556,12 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> { }); return; } - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; - const eventLabel = `${parsedOrder.metadata.takerToken.symbol}-${networkName}`; try { const orderFilledAmount: BigNumber = await this.props.blockchain.fillOrderAsync( signedOrder, this.props.orderFillAmount, ); - analytics.logEvent('Portal', 'Fill Order Success', eventLabel, parsedOrder.signedOrder.takerTokenAmount); + this._trackOrderEvent('Fill Order Success'); // After fill completes, let's force fetch the token balances this.props.dispatcher.forceTokenStateRefetch(); this.setState({ @@ -573,7 +575,7 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> { this.setState({ isFilling: false, }); - analytics.logEvent('Portal', 'Fill Order Failure', eventLabel, parsedOrder.signedOrder.takerTokenAmount); + this._trackOrderEvent('Fill Order Failure'); const errMsg = `${err}`; if (utils.didUserDenyWeb3Request(errMsg)) { return; @@ -583,7 +585,7 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> { this.setState({ globalErrMsg, }); - await errorReporter.reportAsync(err); + errorReporter.report(err); return; } } @@ -628,8 +630,6 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> { }); return; } - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; - const eventLabel = `${parsedOrder.metadata.makerToken.symbol}-${networkName}`; try { await this.props.blockchain.cancelOrderAsync(signedOrder, availableTakerTokenAmount); this.setState({ @@ -638,7 +638,7 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> { globalErrMsg: '', unavailableTakerAmount: takerTokenAmount, }); - analytics.logEvent('Portal', 'Cancel Order Success', eventLabel, parsedOrder.signedOrder.makerTokenAmount); + this._trackOrderEvent('Cancel Order Success'); return; } catch (err) { this.setState({ @@ -648,13 +648,13 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> { if (utils.didUserDenyWeb3Request(errMsg)) { return; } - analytics.logEvent('Portal', 'Cancel Order Failure', eventLabel, parsedOrder.signedOrder.makerTokenAmount); + this._trackOrderEvent('Cancel Order Failure'); globalErrMsg = 'Failed to cancel order, please refresh and try again'; logUtils.log(`${err}`); this.setState({ globalErrMsg, }); - await errorReporter.reportAsync(err); + errorReporter.report(err); return; } } diff --git a/packages/website/ts/components/forms/subscribe_form.tsx b/packages/website/ts/components/forms/subscribe_form.tsx index 8ef58328e..761db7517 100644 --- a/packages/website/ts/components/forms/subscribe_form.tsx +++ b/packages/website/ts/components/forms/subscribe_form.tsx @@ -6,6 +6,7 @@ import { Button } from 'ts/components/ui/button'; import { Container } from 'ts/components/ui/container'; import { Input } from 'ts/components/ui/input'; import { Text } from 'ts/components/ui/text'; +import { analytics } from 'ts/utils/analytics'; import { backendClient } from 'ts/utils/backend_client'; export interface SubscribeFormProps {} @@ -112,6 +113,9 @@ export class SubscribeForm extends React.Component<SubscribeFormProps, Subscribe try { const response = await backendClient.subscribeToNewsletterAsync(this.state.emailText); const status = response.status === 200 ? SubscribeFormStatus.Success : SubscribeFormStatus.Error; + if (status === SubscribeFormStatus.Success) { + analytics.identify(this.state.emailText, 'email'); + } this.setState({ status, emailText: '' }); } catch (error) { this._setStatus(SubscribeFormStatus.Error); diff --git a/packages/website/ts/components/generate_order/generate_order_form.tsx b/packages/website/ts/components/generate_order/generate_order_form.tsx index d26b5c3fa..72efab033 100644 --- a/packages/website/ts/components/generate_order/generate_order_form.tsx +++ b/packages/website/ts/components/generate_order/generate_order_form.tsx @@ -1,6 +1,6 @@ import { generatePseudoRandomSalt, getOrderHashHex } from '@0xproject/order-utils'; -import { colors, constants as sharedConstants } from '@0xproject/react-shared'; -import { ECSignature, Order } from '@0xproject/types'; +import { colors } from '@0xproject/react-shared'; +import { ECSignature, Order as ZeroExOrder } from '@0xproject/types'; import { BigNumber, logUtils } from '@0xproject/utils'; import * as _ from 'lodash'; import Dialog from 'material-ui/Dialog'; @@ -20,7 +20,7 @@ import { SwapIcon } from 'ts/components/ui/swap_icon'; import { Dispatcher } from 'ts/redux/dispatcher'; import { portalOrderSchema } from 'ts/schemas/portal_order_schema'; import { validator } from 'ts/schemas/validator'; -import { AlertTypes, BlockchainErrs, HashData, Side, SideToAssetToken, Token, TokenByAddress } from 'ts/types'; +import { AlertTypes, BlockchainErrs, HashData, Order, Side, SideToAssetToken, Token, TokenByAddress } from 'ts/types'; import { analytics } from 'ts/utils/analytics'; import { constants } from 'ts/utils/constants'; import { errorReporter } from 'ts/utils/error_reporter'; @@ -254,7 +254,8 @@ export class GenerateOrderForm extends React.Component<GenerateOrderFormProps, G userAddressIfExists, debitToken.address, ); - const receiveAmount = this.props.sideToAssetToken[Side.Receive].amount; + const receiveToken = this.props.sideToAssetToken[Side.Receive]; + const receiveAmount = receiveToken.amount; if ( !_.isUndefined(debitToken.amount) && !_.isUndefined(receiveAmount) && @@ -264,24 +265,28 @@ export class GenerateOrderForm extends React.Component<GenerateOrderFormProps, G debitBalance.gte(debitToken.amount) && debitAllowance.gte(debitToken.amount) ) { - const didSignSuccessfully = await this._signTransactionAsync(); - if (didSignSuccessfully) { - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; - const eventLabel = `${this.props.tokenByAddress[debitToken.address].symbol}-${networkName}`; - analytics.logEvent('Portal', 'Sign Order Success', eventLabel, debitToken.amount.toNumber()); + const signedOrder = await this._signTransactionAsync(); + const doesSignedOrderExist = !_.isUndefined(signedOrder); + if (doesSignedOrderExist) { + analytics.trackOrderEvent('Sign Order Success', signedOrder); this.setState({ globalErrMsg: '', shouldShowIncompleteErrs: false, }); } - return didSignSuccessfully; + return doesSignedOrderExist; } else { let globalErrMsg = 'You must fix the above errors in order to generate a valid order'; if (this.props.userAddress === '') { globalErrMsg = 'You must enable wallet communication'; this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); } - analytics.logEvent('Portal', 'Sign Order Failure', globalErrMsg); + analytics.track('Sign Order Failure', { + makerTokenAmount: debitToken.amount.toString(), + makerToken: this.props.tokenByAddress[debitToken.address].symbol, + takerTokenAmount: receiveToken.amount.toString(), + takerToken: this.props.tokenByAddress[receiveToken.address].symbol, + }); this.setState({ globalErrMsg, shouldShowIncompleteErrs: true, @@ -289,7 +294,7 @@ export class GenerateOrderForm extends React.Component<GenerateOrderFormProps, G return false; } } - private async _signTransactionAsync(): Promise<boolean> { + private async _signTransactionAsync(): Promise<Order | undefined> { this.setState({ signingState: SigningState.SIGNING, }); @@ -299,11 +304,11 @@ export class GenerateOrderForm extends React.Component<GenerateOrderFormProps, G this.setState({ signingState: SigningState.UNSIGNED, }); - return false; + return undefined; } const hashData = this.props.hashData; - const zeroExOrder: Order = { + const zeroExOrder: ZeroExOrder = { exchangeContractAddress: exchangeContractAddr, expirationUnixTimestampSec: hashData.orderExpiryTimestamp, feeRecipient: hashData.feeRecipientAddress, @@ -320,9 +325,10 @@ export class GenerateOrderForm extends React.Component<GenerateOrderFormProps, G const orderHash = getOrderHashHex(zeroExOrder); let globalErrMsg = ''; + let order; try { const ecSignature = await this.props.blockchain.signOrderHashAsync(orderHash); - const order = utils.generateOrder( + order = utils.generateOrder( exchangeContractAddr, this.props.sideToAssetToken, hashData.orderExpiryTimestamp, @@ -349,14 +355,14 @@ export class GenerateOrderForm extends React.Component<GenerateOrderFormProps, G globalErrMsg = 'An unexpected error occured. Please try refreshing the page'; logUtils.log(`Unexpected error occured: ${err}`); logUtils.log(err.stack); - await errorReporter.reportAsync(err); + errorReporter.report(err); } } this.setState({ signingState: globalErrMsg === '' ? SigningState.SIGNED : SigningState.UNSIGNED, globalErrMsg, }); - return globalErrMsg === ''; + return order; } private _updateOrderAddress(address?: string): void { if (!_.isUndefined(address)) { diff --git a/packages/website/ts/components/inputs/allowance_toggle.tsx b/packages/website/ts/components/inputs/allowance_toggle.tsx index 0d5995696..297617bef 100644 --- a/packages/website/ts/components/inputs/allowance_toggle.tsx +++ b/packages/website/ts/components/inputs/allowance_toggle.tsx @@ -1,4 +1,4 @@ -import { constants as sharedConstants, Styles } from '@0xproject/react-shared'; +import { Styles } from '@0xproject/react-shared'; import { BigNumber, logUtils } from '@0xproject/utils'; import * as _ from 'lodash'; import Toggle from 'material-ui/Toggle'; @@ -111,14 +111,16 @@ export class AllowanceToggle extends React.Component<AllowanceToggleProps, Allow if (!this._isAllowanceSet()) { newAllowanceAmountInBaseUnits = DEFAULT_ALLOWANCE_AMOUNT_IN_BASE_UNITS; } - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; - const eventLabel = `${this.props.token.symbol}-${networkName}`; + const logData = { + tokenSymbol: this.props.token.symbol, + newAllowance: newAllowanceAmountInBaseUnits.toNumber(), + }; try { await this.props.blockchain.setProxyAllowanceAsync(this.props.token, newAllowanceAmountInBaseUnits); - analytics.logEvent('Portal', 'Set Allowance Success', eventLabel, newAllowanceAmountInBaseUnits.toNumber()); + analytics.track('Set Allowances Success', logData); await this.props.refetchTokenStateAsync(); } catch (err) { - analytics.logEvent('Portal', 'Set Allowance Failure', eventLabel, newAllowanceAmountInBaseUnits.toNumber()); + analytics.track('Set Allowance Failure', logData); this.setState({ isSpinnerVisible: false, }); @@ -129,7 +131,7 @@ export class AllowanceToggle extends React.Component<AllowanceToggleProps, Allow logUtils.log(`Unexpected error encountered: ${err}`); logUtils.log(err.stack); this.props.onErrorOccurred(BalanceErrs.allowanceSettingFailed); - await errorReporter.reportAsync(err); + errorReporter.report(err); } } private _isAllowanceSet(): boolean { diff --git a/packages/website/ts/components/onboarding/portal_onboarding_flow.tsx b/packages/website/ts/components/onboarding/portal_onboarding_flow.tsx index 20a8f0a32..f395674a1 100644 --- a/packages/website/ts/components/onboarding/portal_onboarding_flow.tsx +++ b/packages/website/ts/components/onboarding/portal_onboarding_flow.tsx @@ -1,4 +1,3 @@ -import { constants as sharedConstants } from '@0xproject/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; import { RouteComponentProps, withRouter } from 'react-router'; @@ -225,20 +224,24 @@ class PlainPortalOnboardingFlow extends React.Component<PortalOnboardingFlowProp (this.props.stepIndex === 0 && !this.props.isRunning && this.props.blockchainIsLoaded) || (!this.props.isRunning && !this.props.hasBeenClosed && this.props.blockchainIsLoaded) ) { - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; - analytics.logEvent('Portal', 'Onboarding Started - Automatic', networkName, this.props.stepIndex); + analytics.track('Onboarding Started', { + reason: 'automatic', + stepIndex: this.props.stepIndex, + }); this.props.updateIsRunning(true); } } private _updateOnboardingStep(stepIndex: number): void { - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; this.props.updateOnboardingStep(stepIndex); - analytics.logEvent('Portal', 'Update Onboarding Step', networkName, stepIndex); + analytics.track('Update Onboarding Step', { + stepIndex, + }); } private _closeOnboarding(): void { - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; this.props.updateIsRunning(false); - analytics.logEvent('Portal', 'Onboarding Closed', networkName, this.props.stepIndex); + analytics.track('Onboarding Closed', { + stepIndex: this.props.stepIndex, + }); } private _renderZrxAllowanceToggle(): React.ReactNode { const zrxToken = utils.getZrxToken(this.props.tokenByAddress); diff --git a/packages/website/ts/components/order_json.tsx b/packages/website/ts/components/order_json.tsx index 35188c024..c2606bd56 100644 --- a/packages/website/ts/components/order_json.tsx +++ b/packages/website/ts/components/order_json.tsx @@ -1,5 +1,5 @@ import { ECSignature } from '@0xproject/types'; -import { BigNumber, logUtils } from '@0xproject/utils'; +import { BigNumber, fetchAsync, logUtils } from '@0xproject/utils'; import * as _ from 'lodash'; import Paper from 'material-ui/Paper'; import TextField from 'material-ui/TextField'; @@ -148,13 +148,13 @@ You can see and fill it here: ${this.state.shareLink}`); const bitlyRequestUrl = `${constants.URL_BITLY_API}/v3/shorten?access_token=${ configs.BITLY_ACCESS_TOKEN }&longUrl=${longUrl}`; - const response = await fetch(bitlyRequestUrl); + const response = await fetchAsync(bitlyRequestUrl); const responseBody = await response.text(); const bodyObj = JSON.parse(responseBody); if (response.status !== 200 || bodyObj.status_code !== 200) { // TODO: Show error message in UI logUtils.log(`Unexpected status code: ${response.status} -> ${responseBody}`); - await errorReporter.reportAsync(new Error(`Bitly returned non-200: ${JSON.stringify(response)}`)); + errorReporter.report(new Error(`Bitly returned non-200: ${JSON.stringify(response)}`)); return ''; } return bodyObj.data.url; diff --git a/packages/website/ts/components/portal/portal.tsx b/packages/website/ts/components/portal/portal.tsx index f983241fa..ea821d038 100644 --- a/packages/website/ts/components/portal/portal.tsx +++ b/packages/website/ts/components/portal/portal.tsx @@ -1,4 +1,4 @@ -import { colors, constants as sharedConstants } from '@0xproject/react-shared'; +import { colors } from '@0xproject/react-shared'; import { BigNumber } from '@0xproject/utils'; import * as _ from 'lodash'; import * as React from 'react'; @@ -388,10 +388,11 @@ export class Portal extends React.Component<PortalProps, PortalState> { startOnboarding ); } - private _startOnboarding(): void { - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; - analytics.logEvent('Portal', 'Onboarding Started - Manual', networkName, this.props.portalOnboardingStep); + analytics.track('Onboarding Started', { + reason: 'manual', + stepIndex: this.props.portalOnboardingStep, + }); this.props.dispatcher.updatePortalOnboardingShowing(true); } private _renderWalletSection(): React.ReactNode { diff --git a/packages/website/ts/components/relayer_index/relayer_grid_tile.tsx b/packages/website/ts/components/relayer_index/relayer_grid_tile.tsx index 431cf145b..193dd237a 100644 --- a/packages/website/ts/components/relayer_index/relayer_grid_tile.tsx +++ b/packages/website/ts/components/relayer_index/relayer_grid_tile.tsx @@ -1,4 +1,4 @@ -import { constants as sharedConstants, Styles } from '@0xproject/react-shared'; +import { Styles } from '@0xproject/react-shared'; import * as _ from 'lodash'; import { GridTile as PlainGridTile } from 'material-ui/GridList'; import * as React from 'react'; @@ -64,10 +64,10 @@ export const RelayerGridTile: React.StatelessComponent<RelayerGridTileProps> = ( const link = props.relayerInfo.appUrl || props.relayerInfo.url; const topTokens = props.relayerInfo.topTokens; const weeklyTxnVolume = props.relayerInfo.weeklyTxnVolume; - const networkName = sharedConstants.NETWORK_NAME_BY_ID[props.networkId]; - const eventLabel = `${props.relayerInfo.name}-${networkName}`; const onClick = () => { - analytics.logEvent('Portal', 'Relayer Click', eventLabel); + analytics.track('Relayer Click', { + name: props.relayerInfo.name, + }); utils.openUrl(link); }; const headerImageUrl = props.relayerInfo.logoImgUrl; diff --git a/packages/website/ts/components/relayer_index/relayer_top_tokens.tsx b/packages/website/ts/components/relayer_index/relayer_top_tokens.tsx index c48b672e9..f3787bd27 100644 --- a/packages/website/ts/components/relayer_index/relayer_top_tokens.tsx +++ b/packages/website/ts/components/relayer_index/relayer_top_tokens.tsx @@ -1,9 +1,4 @@ -import { - colors, - constants as sharedConstants, - EtherscanLinkSuffixes, - utils as sharedUtils, -} from '@0xproject/react-shared'; +import { colors, EtherscanLinkSuffixes, utils as sharedUtils } from '@0xproject/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; @@ -46,11 +41,11 @@ class TokenLink extends React.Component<TokenLinkProps, TokenLinkState> { }; } public render(): React.ReactNode { - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; - const eventLabel = `${this.props.tokenInfo.symbol}-${networkName}`; const onClick = (event: React.MouseEvent<HTMLElement>) => { event.stopPropagation(); - analytics.logEvent('Portal', 'Token Click', eventLabel); + analytics.track('Token Click', { + tokenSymbol: this.props.tokenInfo.symbol, + }); const tokenLink = this._tokenLinkFromToken(this.props.tokenInfo, this.props.networkId); utils.openUrl(tokenLink); }; diff --git a/packages/website/ts/components/send_button.tsx b/packages/website/ts/components/send_button.tsx index 8486dbd8b..ac55d430b 100644 --- a/packages/website/ts/components/send_button.tsx +++ b/packages/website/ts/components/send_button.tsx @@ -80,7 +80,7 @@ export class SendButton extends React.Component<SendButtonProps, SendButtonState logUtils.log(`Unexpected error encountered: ${err}`); logUtils.log(err.stack); this.props.onError(); - await errorReporter.reportAsync(err); + errorReporter.report(err); } } this.setState({ diff --git a/packages/website/ts/components/token_balances.tsx b/packages/website/ts/components/token_balances.tsx index 3fae83c00..c8d80702b 100644 --- a/packages/website/ts/components/token_balances.tsx +++ b/packages/website/ts/components/token_balances.tsx @@ -5,7 +5,7 @@ import { Styles, utils as sharedUtils, } from '@0xproject/react-shared'; -import { BigNumber, errorUtils, logUtils } from '@0xproject/utils'; +import { BigNumber, errorUtils, fetchAsync, logUtils } from '@0xproject/utils'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; import * as _ from 'lodash'; import Dialog from 'material-ui/Dialog'; @@ -526,7 +526,7 @@ export class TokenBalances extends React.Component<TokenBalancesProps, TokenBala this.setState({ errorType: BalanceErrs.mintingFailed, }); - await errorReporter.reportAsync(err); + errorReporter.report(err); return false; } } @@ -548,7 +548,7 @@ export class TokenBalances extends React.Component<TokenBalancesProps, TokenBala await utils.sleepAsync(ARTIFICIAL_FAUCET_REQUEST_DELAY); const segment = isEtherRequest ? 'ether' : 'zrx'; - const response = await fetch( + const response = await fetchAsync( `${constants.URL_TESTNET_FAUCET}/${segment}/${this.props.userAddress}?networkId=${this.props.networkId}`, ); const responseBody = await response.text(); @@ -561,7 +561,7 @@ export class TokenBalances extends React.Component<TokenBalancesProps, TokenBala this.setState({ errorType, }); - await errorReporter.reportAsync(new Error(`Faucet returned non-200: ${JSON.stringify(response)}`)); + errorReporter.report(new Error(`Faucet returned non-200: ${JSON.stringify(response)}`)); return false; } diff --git a/packages/website/ts/components/wallet/wallet.tsx b/packages/website/ts/components/wallet/wallet.tsx index 6c1c495d7..e462ab3e0 100644 --- a/packages/website/ts/components/wallet/wallet.tsx +++ b/packages/website/ts/components/wallet/wallet.tsx @@ -1,4 +1,4 @@ -import { constants as sharedConstants, EtherscanLinkSuffixes, utils as sharedUtils } from '@0xproject/react-shared'; +import { EtherscanLinkSuffixes, utils as sharedUtils } from '@0xproject/react-shared'; import { BigNumber, errorUtils } from '@0xproject/utils'; import * as _ from 'lodash'; @@ -488,19 +488,17 @@ export class Wallet extends React.Component<WalletProps, WalletState> { ); } private _openWrappedEtherActionRow(wrappedEtherDirection: Side): void { - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; const action = wrappedEtherDirection === Side.Deposit ? 'Wallet - Wrap ETH Opened' : 'Wallet - Unwrap WETH Opened'; - analytics.logEvent('Portal', action, networkName); + analytics.track(action); this.setState({ wrappedEtherDirection, }); } private _closeWrappedEtherActionRow(wrappedEtherDirection: Side): void { - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; const action = wrappedEtherDirection === Side.Deposit ? 'Wallet - Wrap ETH Closed' : 'Wallet - Unwrap WETH Closed'; - analytics.logEvent('Portal', action, networkName); + analytics.track(action); this.setState({ wrappedEtherDirection: undefined, }); diff --git a/packages/website/ts/components/wallet/wrap_ether_item.tsx b/packages/website/ts/components/wallet/wrap_ether_item.tsx index 2b4cf93fe..fcab5d1dd 100644 --- a/packages/website/ts/components/wallet/wrap_ether_item.tsx +++ b/packages/website/ts/components/wallet/wrap_ether_item.tsx @@ -1,4 +1,4 @@ -import { constants as sharedConstants, Styles } from '@0xproject/react-shared'; +import { Styles } from '@0xproject/react-shared'; import { BigNumber, logUtils } from '@0xproject/utils'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; import * as _ from 'lodash'; @@ -188,20 +188,23 @@ export class WrapEtherItem extends React.Component<WrapEtherItemProps, WrapEther this.setState({ isEthConversionHappening: true, }); - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; + const etherToken = this.props.etherToken; + const amountToConvert = this.state.currentInputAmount; + const ethAmount = Web3Wrapper.toUnitAmount(amountToConvert, constants.DECIMAL_PLACES_ETH).toString(); + const tokenAmount = Web3Wrapper.toUnitAmount(amountToConvert, etherToken.decimals).toString(); try { - const etherToken = this.props.etherToken; - const amountToConvert = this.state.currentInputAmount; if (this.props.direction === Side.Deposit) { await this.props.blockchain.convertEthToWrappedEthTokensAsync(etherToken.address, amountToConvert); - const ethAmount = Web3Wrapper.toUnitAmount(amountToConvert, constants.DECIMAL_PLACES_ETH); - this.props.dispatcher.showFlashMessage(`Successfully wrapped ${ethAmount.toString()} ETH to WETH`); - analytics.logEvent('Portal', 'Wrap ETH Successfully', networkName); + this.props.dispatcher.showFlashMessage(`Successfully wrapped ${ethAmount} ETH to WETH`); + analytics.track('Wrap ETH Success', { + amount: ethAmount, + }); } else { await this.props.blockchain.convertWrappedEthTokensToEthAsync(etherToken.address, amountToConvert); - const tokenAmount = Web3Wrapper.toUnitAmount(amountToConvert, etherToken.decimals); - this.props.dispatcher.showFlashMessage(`Successfully unwrapped ${tokenAmount.toString()} WETH to ETH`); - analytics.logEvent('Portal', 'Unwrap WETH Successfully', networkName); + this.props.dispatcher.showFlashMessage(`Successfully unwrapped ${tokenAmount} WETH to ETH`); + analytics.track('Unwrap WETH Success', { + amount: tokenAmount, + }); } await this.props.refetchEthTokenStateAsync(); this.props.onConversionSuccessful(); @@ -214,12 +217,16 @@ export class WrapEtherItem extends React.Component<WrapEtherItemProps, WrapEther logUtils.log(err.stack); if (this.props.direction === Side.Deposit) { this.props.dispatcher.showFlashMessage('Failed to wrap your ETH. Please try again.'); - analytics.logEvent('Portal', 'Wrap ETH Failed', networkName); + analytics.track('Wrap ETH Failure', { + amount: ethAmount, + }); } else { this.props.dispatcher.showFlashMessage('Failed to unwrap your WETH. Please try again.'); - analytics.logEvent('Portal', 'Unwrap WETH Failed', networkName); + analytics.track('Unwrap WETH Failed', { + amount: tokenAmount, + }); } - await errorReporter.reportAsync(err); + errorReporter.report(err); } } this.setState({ diff --git a/packages/website/ts/index.tsx b/packages/website/ts/index.tsx index 7ceec8c2c..2a5c5e4f1 100644 --- a/packages/website/ts/index.tsx +++ b/packages/website/ts/index.tsx @@ -16,11 +16,9 @@ import { trackedTokenStorage } from 'ts/local_storage/tracked_token_storage'; import { tradeHistoryStorage } from 'ts/local_storage/trade_history_storage'; import { store } from 'ts/redux/store'; import { WebsiteLegacyPaths, WebsitePaths } from 'ts/types'; -import { analytics } from 'ts/utils/analytics'; import { muiTheme } from 'ts/utils/mui_theme'; import { utils } from 'ts/utils/utils'; // Polyfills -import 'whatwg-fetch'; injectTapEventPlugin(); // Check if we've introduced an update that requires us to clear the tradeHistory local storage entries @@ -69,10 +67,6 @@ const LazyEthereumTypesDocumentation = createLazyComponent('Documentation', asyn System.import<any>(/* webpackChunkName: "ethereumTypesDocs" */ 'ts/containers/ethereum_types_documentation'), ); -analytics.init(); -// tslint:disable-next-line:no-floating-promises -analytics.logProviderAsync((window as any).web3); - render( <Router> <div> diff --git a/packages/website/ts/pages/about/about.tsx b/packages/website/ts/pages/about/about.tsx index be4a67cb3..33581c938 100644 --- a/packages/website/ts/pages/about/about.tsx +++ b/packages/website/ts/pages/about/about.tsx @@ -181,14 +181,14 @@ const teamRow6: ProfileInfo[] = [ image: 'images/team/peter.jpg', linkedIn: 'https://www.linkedin.com/in/peter-z-7b9595163/', }, - // { - // name: 'Chris Kalani', - // title: 'Director of Design', - // description: `Previously founded Wake (acquired by InVision). Early Facebook product designer.`, - // image: 'images/team/chris.png', - // linkedIn: 'https://www.linkedin.com/in/chriskalani/', - // github: 'https://github.com/chriskalani', - // }, + { + name: 'Chris Kalani', + title: 'Director of Design', + description: `Previously founded Wake (acquired by InVision). Early Facebook product designer.`, + image: 'images/team/chris.png', + linkedIn: 'https://www.linkedin.com/in/chriskalani/', + github: 'https://github.com/chriskalani', + }, ]; const advisors: ProfileInfo[] = [ diff --git a/packages/website/ts/pages/wiki/wiki.tsx b/packages/website/ts/pages/wiki/wiki.tsx index 9659900be..55f532b11 100644 --- a/packages/website/ts/pages/wiki/wiki.tsx +++ b/packages/website/ts/pages/wiki/wiki.tsx @@ -205,7 +205,7 @@ export class Wiki extends React.Component<WikiProps, WikiState> { articlesBySection, }, async () => { - await utils.onPageLoadAsync(); + await utils.onPageLoadPromise; const hash = this.props.location.hash.slice(1); sharedUtils.scrollToHash(hash, sharedConstants.SCROLL_CONTAINER_ID); }, diff --git a/packages/website/ts/redux/analyticsMiddleware.ts b/packages/website/ts/redux/analyticsMiddleware.ts new file mode 100644 index 000000000..51d39a5d7 --- /dev/null +++ b/packages/website/ts/redux/analyticsMiddleware.ts @@ -0,0 +1,36 @@ +import { Middleware } from 'redux'; +import { State } from 'ts/redux/reducer'; +import { ActionTypes } from 'ts/types'; +import { analytics } from 'ts/utils/analytics'; + +export const analyticsMiddleware: Middleware = store => next => action => { + const nextAction = next(action); + const nextState = (store.getState() as any) as State; + switch (action.type) { + case ActionTypes.UpdateInjectedProviderName: + analytics.addEventProperties({ + injectedProviderName: nextState.injectedProviderName, + }); + break; + case ActionTypes.UpdateNetworkId: + analytics.addEventProperties({ + networkId: nextState.networkId, + }); + break; + case ActionTypes.UpdateUserAddress: + analytics.addUserProperties({ + ethAddress: nextState.userAddress, + }); + break; + case ActionTypes.UpdateUserEtherBalance: + if (nextState.userEtherBalanceInWei) { + analytics.addUserProperties({ + ethBalance: nextState.userEtherBalanceInWei.toString(), + }); + } + break; + default: + break; + } + return nextAction; +}; diff --git a/packages/website/ts/redux/store.ts b/packages/website/ts/redux/store.ts index 2672e3f61..006241371 100644 --- a/packages/website/ts/redux/store.ts +++ b/packages/website/ts/redux/store.ts @@ -1,7 +1,8 @@ import * as _ from 'lodash'; -import { createStore, Store as ReduxStore } from 'redux'; -import { devToolsEnhancer } from 'redux-devtools-extension/developmentOnly'; +import { applyMiddleware, createStore, Store as ReduxStore } from 'redux'; +import { composeWithDevTools } from 'redux-devtools-extension/developmentOnly'; import { stateStorage } from 'ts/local_storage/state_storage'; +import { analyticsMiddleware } from 'ts/redux/analyticsMiddleware'; import { reducer, State } from 'ts/redux/reducer'; const ONE_SECOND = 1000; @@ -9,7 +10,7 @@ const ONE_SECOND = 1000; export const store: ReduxStore<State> = createStore( reducer, stateStorage.getPersistedDefaultState(), - devToolsEnhancer({ name: '0x Website Redux Store' }), + composeWithDevTools(applyMiddleware(analyticsMiddleware)), ); store.subscribe( _.throttle(() => { diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index e8dc694f6..4d0496f6c 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -244,7 +244,10 @@ export enum BlockchainCallErrs { export enum Environments { DEVELOPMENT = 'DEVELOPMENT', + DOGFOOD = 'DOGFOOD', + STAGING = 'STAGING', PRODUCTION = 'PRODUCTION', + UNKNOWN = 'UNKNOWN', } export type ContractInstance = any; // TODO: add type definition for Contract @@ -516,8 +519,10 @@ export interface OutdatedWrappedEtherByNetworkId { }; } -export interface ItemByAddress<T> { - [address: string]: T; +export type ItemByAddress<T> = ObjectMap<T>; + +export interface ObjectMap<T> { + [key: string]: T; } export type TokenStateByAddress = ItemByAddress<TokenState>; diff --git a/packages/website/ts/utils/analytics.ts b/packages/website/ts/utils/analytics.ts index f4bfa083f..e5a1ddfa4 100644 --- a/packages/website/ts/utils/analytics.ts +++ b/packages/website/ts/utils/analytics.ts @@ -1,27 +1,83 @@ import * as _ from 'lodash'; -import * as ReactGA from 'react-ga'; -import { InjectedWeb3 } from 'ts/types'; -import { configs } from 'ts/utils/configs'; +import { ObjectMap, Order } from 'ts/types'; import { utils } from 'ts/utils/utils'; -export const analytics = { - init(): void { - ReactGA.initialize(configs.GOOGLE_ANALYTICS_ID); - }, - logEvent(category: string, action: string, label: string, value?: any): void { - ReactGA.event({ - category, - action, - label, - value, - }); - }, - async logProviderAsync(web3IfExists: InjectedWeb3): Promise<void> { - await utils.onPageLoadAsync(); - const providerType = - !_.isUndefined(web3IfExists) && !_.isUndefined(web3IfExists.currentProvider) - ? utils.getProviderType(web3IfExists.currentProvider) - : 'NONE'; - ReactGA.ga('set', 'dimension1', providerType); - }, -}; +export interface HeapAnalytics { + loaded: boolean; + identify(id: string, idType: string): void; + track(eventName: string, eventProperties?: ObjectMap<string | number>): void; + resetIdentity(): void; + addUserProperties(properties: ObjectMap<string | number>): void; + addEventProperties(properties: ObjectMap<string | number>): void; + removeEventProperty(property: string): void; + clearEventProperties(): void; +} +export class Analytics { + private _heap: HeapAnalytics; + public static init(): Analytics { + return new Analytics(Analytics.getHeap()); + } + public static getHeap(): HeapAnalytics { + const heap = (window as any).heap; + if (!_.isUndefined(heap)) { + return heap; + } else { + throw new Error('Could not find the Heap SDK on the page.'); + } + } + constructor(heap: HeapAnalytics) { + this._heap = heap; + } + // tslint:disable:no-floating-promises + // HeapAnalytics Wrappers + public identify(id: string, idType: string): void { + this._heapLoadedGuardAsync(() => this._heap.identify(id, idType)); + } + public track(eventName: string, eventProperties?: ObjectMap<string | number>): void { + this._heapLoadedGuardAsync(() => this._heap.track(eventName, eventProperties)); + } + public resetIdentity(): void { + this._heapLoadedGuardAsync(() => this._heap.resetIdentity()); + } + public addUserProperties(properties: ObjectMap<string | number>): void { + this._heapLoadedGuardAsync(() => this._heap.addUserProperties(properties)); + } + public addEventProperties(properties: ObjectMap<string | number>): void { + this._heapLoadedGuardAsync(() => this._heap.addEventProperties(properties)); + } + public removeEventProperty(property: string): void { + this._heapLoadedGuardAsync(() => this._heap.removeEventProperty(property)); + } + public clearEventProperties(): void { + this._heapLoadedGuardAsync(() => this._heap.clearEventProperties()); + } + // tslint:enable:no-floating-promises + // Custom methods + public trackOrderEvent(eventName: string, order: Order): void { + const orderLoggingData = { + takerTokenAmount: order.signedOrder.takerTokenAmount, + makeTokenAmount: order.signedOrder.makerTokenAmount, + takerToken: order.metadata.takerToken.symbol, + makerToken: order.metadata.makerToken.symbol, + }; + this.track(eventName, orderLoggingData); + } + /** + * Heap is not available as a UMD module, and additionally has the strange property of replacing itself with + * a different object once it's loaded. + * Instead of having an await call before every analytics use, we opt to have the awaiting logic in here by + * guarding every API call with the guard below. + */ + private async _heapLoadedGuardAsync(callback: () => void): Promise<void> { + if (this._heap.loaded) { + callback(); + return undefined; + } + await utils.onPageLoadPromise; + // HACK: Reset heap to loaded heap + this._heap = (window as any).heap; + callback(); + } +} + +export const analytics = Analytics.init(); diff --git a/packages/website/ts/utils/configs.ts b/packages/website/ts/utils/configs.ts index 97aabd13d..a1c64f9cb 100644 --- a/packages/website/ts/utils/configs.ts +++ b/packages/website/ts/utils/configs.ts @@ -1,11 +1,6 @@ -import * as _ from 'lodash'; -import { Environments, OutdatedWrappedEtherByNetworkId, PublicNodeUrlsByNetworkId } from 'ts/types'; +import { OutdatedWrappedEtherByNetworkId, PublicNodeUrlsByNetworkId } from 'ts/types'; const BASE_URL = window.location.origin; -const isDevelopment = _.includes( - ['https://0xproject.localhost:3572', 'https://localhost:3572', 'https://127.0.0.1'], - BASE_URL, -); const INFURA_API_KEY = 'T5WSC8cautR4KXyYgsRs'; export const configs = { @@ -19,9 +14,8 @@ export const configs = { DEFAULT_TRACKED_TOKEN_SYMBOLS: ['WETH', 'ZRX'], DOMAIN_STAGING: 'staging-0xproject.s3-website-us-east-1.amazonaws.com', DOMAIN_DOGFOOD: 'dogfood.0xproject.com', - DOMAIN_DEVELOPMENT: '0xproject.localhost:3572', + DOMAINS_DEVELOPMENT: ['0xproject.localhost:3572', 'localhost:3572', '127.0.0.1'], DOMAIN_PRODUCTION: '0xproject.com', - ENVIRONMENT: isDevelopment ? Environments.DEVELOPMENT : Environments.PRODUCTION, GOOGLE_ANALYTICS_ID: 'UA-98720122-1', LAST_LOCAL_STORAGE_FILL_CLEARANCE_DATE: '2017-11-22', LAST_LOCAL_STORAGE_TRACKED_TOKEN_CLEARANCE_DATE: '2018-7-5', diff --git a/packages/website/ts/utils/constants.ts b/packages/website/ts/utils/constants.ts index e43f541bf..20441cd75 100644 --- a/packages/website/ts/utils/constants.ts +++ b/packages/website/ts/utils/constants.ts @@ -58,7 +58,7 @@ export const constants = { PROJECT_URL_MAKER: 'https://makerdao.com', PROJECT_URL_ARAGON: 'https://aragon.one', PROJECT_URL_BLOCKNET: 'https://blocknet.co', - PROJECT_URL_0CEAN: 'http://the0cean.com', + PROJECT_URL_0CEAN: 'https://theocean.trade', PROJECT_URL_IMTOKEN: 'https://tokenlon.token.im/', PROJECT_URL_AUGUR: 'https://augur.net', PROJECT_URL_AUCTUS: 'https://auctus.org', diff --git a/packages/website/ts/utils/doc_utils.ts b/packages/website/ts/utils/doc_utils.ts index 7768835fb..1627b9b0c 100644 --- a/packages/website/ts/utils/doc_utils.ts +++ b/packages/website/ts/utils/doc_utils.ts @@ -1,5 +1,5 @@ import { DoxityDocObj, TypeDocNode } from '@0xproject/react-docs'; -import { logUtils } from '@0xproject/utils'; +import { fetchAsync, logUtils } from '@0xproject/utils'; import findVersions = require('find-versions'); import * as _ from 'lodash'; import { S3FileObject, VersionToFilePath } from 'ts/types'; @@ -16,7 +16,7 @@ export const docUtils = { return versionToFilePath; }, async getVersionFileNamesAsync(s3DocJsonRoot: string, folderName: string): Promise<string[]> { - const response = await fetch(s3DocJsonRoot); + const response = await fetchAsync(s3DocJsonRoot); if (response.status !== 200) { // TODO: Show the user an error message when the docs fail to load const errMsg = await response.text(); @@ -73,7 +73,7 @@ export const docUtils = { }, async getJSONDocFileAsync(filePath: string, s3DocJsonRoot: string): Promise<TypeDocNode | DoxityDocObj> { const endpoint = `${s3DocJsonRoot}/${filePath}`; - const response = await fetch(endpoint); + const response = await fetchAsync(endpoint); if (response.status !== 200) { // TODO: Show the user an error message when the docs fail to load const errMsg = await response.text(); diff --git a/packages/website/ts/utils/error_reporter.ts b/packages/website/ts/utils/error_reporter.ts index 2d0661b25..6008fffed 100644 --- a/packages/website/ts/utils/error_reporter.ts +++ b/packages/website/ts/utils/error_reporter.ts @@ -1,7 +1,7 @@ import { logUtils } from '@0xproject/utils'; -import { Environments } from 'ts/types'; import { configs } from 'ts/utils/configs'; import { constants } from 'ts/utils/constants'; +import { utils } from 'ts/utils/utils'; // Suggested way to include Rollbar with Webpack // https://github.com/rollbar/rollbar.js/tree/master/examples/webpack @@ -12,7 +12,7 @@ const rollbarConfig = { itemsPerMinute: 10, maxItems: 500, payload: { - environment: configs.ENVIRONMENT, + environment: utils.getEnvironment(), client: { javascript: { source_map_enabled: true, @@ -40,21 +40,14 @@ import Rollbar = require('../../public/js/rollbar.umd.min.js'); const rollbar = Rollbar.init(rollbarConfig); export const errorReporter = { - async reportAsync(err: Error): Promise<any> { - if (configs.ENVIRONMENT === Environments.DEVELOPMENT) { + report(err: Error): void { + if (utils.isDevelopment()) { return; // Let's not log development errors to rollbar } - - return new Promise((resolve, _reject) => { - rollbar.error(err, (rollbarErr: Error) => { - if (rollbarErr) { - logUtils.log(`Error reporting to rollbar, ignoring: ${rollbarErr}`); - // We never want to reject and cause the app to throw because of rollbar - resolve(); - } else { - resolve(); - } - }); + rollbar.error(err, (rollbarErr: Error) => { + if (rollbarErr) { + logUtils.log(`Error reporting to rollbar, ignoring: ${rollbarErr}`); + } }); }, }; diff --git a/packages/website/ts/utils/fetch_utils.ts b/packages/website/ts/utils/fetch_utils.ts index 513f7e479..e9a88b6b3 100644 --- a/packages/website/ts/utils/fetch_utils.ts +++ b/packages/website/ts/utils/fetch_utils.ts @@ -1,4 +1,4 @@ -import { logUtils } from '@0xproject/utils'; +import { fetchAsync, logUtils } from '@0xproject/utils'; import * as _ from 'lodash'; import * as queryString from 'query-string'; @@ -9,8 +9,7 @@ const logErrorIfPresent = (response: Response, requestedURL: string) => { const errorText = `Error requesting url: ${requestedURL}, ${response.status}: ${response.statusText}`; logUtils.log(errorText); const error = Error(errorText); - // tslint:disable-next-line:no-floating-promises - errorReporter.reportAsync(error); + errorReporter.report(error); throw error; } }; @@ -19,14 +18,14 @@ export const fetchUtils = { async requestAsync(baseUrl: string, path: string, queryParams?: object): Promise<any> { const query = queryStringFromQueryParams(queryParams); const url = `${baseUrl}${path}${query}`; - const response = await fetch(url); + const response = await fetchAsync(url); logErrorIfPresent(response, url); const result = await response.json(); return result; }, async postAsync(baseUrl: string, path: string, body: object): Promise<Response> { const url = `${baseUrl}${path}`; - const response = await fetch(url, { + const response = await fetchAsync(url, { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index 9ca7f607b..739bb7b66 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -30,8 +30,6 @@ import { configs } from 'ts/utils/configs'; import { constants } from 'ts/utils/constants'; import * as u2f from 'ts/vendor/u2f_api'; -const isDogfood = (): boolean => _.includes(window.location.href, configs.DOMAIN_DOGFOOD); - export const utils = { assert(condition: boolean, message: string): void { if (!condition) { @@ -177,18 +175,6 @@ export const utils = { _.includes(errMsg, ledgerDenialErrMsg); return isUserDeniedErrMsg; }, - getCurrentEnvironment(): string { - switch (location.host) { - case configs.DOMAIN_DEVELOPMENT: - return 'development'; - case configs.DOMAIN_STAGING: - return 'staging'; - case configs.DOMAIN_PRODUCTION: - return 'production'; - default: - return 'production'; - } - }, getAddressBeginAndEnd(address: string): string { const truncatedAddress = `${address.substring(0, 6)}...${address.substr(-4)}`; // 0x3d5a...b287 return truncatedAddress; @@ -313,14 +299,13 @@ export const utils = { const baseUrl = `https://${window.location.hostname}${hasPort ? `:${port}` : ''}`; return baseUrl; }, - async onPageLoadAsync(): Promise<void> { + onPageLoadPromise: new Promise((resolve, _reject) => { if (document.readyState === 'complete') { - return; // Already loaded + resolve(); + return; } - return new Promise<void>((resolve, _reject) => { - window.onload = () => resolve(); - }); - }, + window.onload = resolve; + }), getProviderType(provider: Provider): Providers | string { const constructorName = provider.constructor.name; let parsedProviderName = constructorName; @@ -346,10 +331,10 @@ export const utils = { return parsedProviderName; }, getBackendBaseUrl(): string { - return isDogfood() ? configs.BACKEND_BASE_STAGING_URL : configs.BACKEND_BASE_PROD_URL; + return utils.isDogfood() ? configs.BACKEND_BASE_STAGING_URL : configs.BACKEND_BASE_PROD_URL; }, isDevelopment(): boolean { - return configs.ENVIRONMENT === Environments.DEVELOPMENT; + return _.includes(configs.DOMAINS_DEVELOPMENT, window.location.origin); }, isStaging(): boolean { return _.includes(window.location.href, configs.DOMAIN_STAGING); @@ -357,7 +342,27 @@ export const utils = { isExternallyInjected(providerType: ProviderType, injectedProviderName: string): boolean { return providerType === ProviderType.Injected && injectedProviderName !== constants.PROVIDER_NAME_PUBLIC; }, - isDogfood, + isDogfood(): boolean { + return _.includes(window.location.href, configs.DOMAIN_DOGFOOD); + }, + isProduction(): boolean { + return _.includes(window.location.href, configs.DOMAIN_PRODUCTION); + }, + getEnvironment(): Environments { + if (utils.isDogfood()) { + return Environments.DOGFOOD; + } + if (utils.isDevelopment()) { + return Environments.DEVELOPMENT; + } + if (utils.isStaging()) { + return Environments.STAGING; + } + if (utils.isProduction()) { + return Environments.PRODUCTION; + } + return Environments.UNKNOWN; + }, shouldShowJobsPage(): boolean { return this.isDevelopment() || this.isStaging() || this.isDogfood(); }, @@ -380,21 +385,28 @@ export const utils = { getFormattedAmountFromToken(token: Token, tokenState: TokenState): string { return utils.getFormattedAmount(tokenState.balance, token.decimals); }, + format(value: BigNumber, format: string): string { + const formattedAmount = numeral(value).format(format); + if (_.isNaN(formattedAmount)) { + // https://github.com/adamwdraper/Numeral-js/issues/596 + return numeral(new BigNumber(0)).format(format); + } + return formattedAmount; + }, getFormattedAmount(amount: BigNumber, decimals: number): string { const unitAmount = Web3Wrapper.toUnitAmount(amount, decimals); // if the unit amount is less than 1, show the natural number of decimal places with a max of 4 // if the unit amount is greater than or equal to 1, show only 2 decimal places - const precision = unitAmount.lt(1) - ? Math.min(constants.TOKEN_AMOUNT_DISPLAY_PRECISION, unitAmount.decimalPlaces()) - : 2; + const lessThanOnePrecision = Math.min(constants.TOKEN_AMOUNT_DISPLAY_PRECISION, unitAmount.decimalPlaces()); + const greaterThanOnePrecision = 2; + const precision = unitAmount.lt(1) ? lessThanOnePrecision : greaterThanOnePrecision; const format = `0,0.${_.repeat('0', precision)}`; - const formattedAmount = numeral(unitAmount).format(format); - return formattedAmount; + return utils.format(unitAmount, format); }, getUsdValueFormattedAmount(amount: BigNumber, decimals: number, price: BigNumber): string { const unitAmount = Web3Wrapper.toUnitAmount(amount, decimals); const value = unitAmount.mul(price); - return numeral(value).format(constants.NUMERAL_USD_FORMAT); + return utils.format(value, constants.NUMERAL_USD_FORMAT); }, openUrl(url: string): void { window.open(url, '_blank'); diff --git a/packages/website/webpack.config.js b/packages/website/webpack.config.js index 5647b4f93..8653196a6 100644 --- a/packages/website/webpack.config.js +++ b/packages/website/webpack.config.js @@ -9,6 +9,43 @@ const GIT_SHA = childProcess .toString() .trim(); +const generatePlugins = () => { + let plugins = []; + if (process.env.NODE_ENV === 'production') { + plugins = plugins.concat([ + // Since we do not use moment's locale feature, we exclude them from the bundle. + // This reduces the bundle size by 0.4MB. + new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify(process.env.NODE_ENV), + GIT_SHA: JSON.stringify(GIT_SHA), + }, + }), + // TODO: Revert to webpack bundled version with webpack v4. + // The v3 series bundled version does not support ES6 and + // fails to build. + new UglifyJsPlugin({ + sourceMap: true, + uglifyOptions: { + mangle: { + reserved: ['BigNumber'], + }, + }, + }), + ]); + if (process.env.DEPLOY_ROLLBAR_SOURCEMAPS === 'true') { + plugins = plugins.concat([ + new RollbarSourceMapPlugin({ + accessToken: '32c39bfa4bb6440faedc1612a9c13d28', + version: GIT_SHA, + publicPath: 'https://0xproject.com/', + }), + ]); + } + } + return plugins; +}; module.exports = { entry: ['./ts/index.tsx'], output: { @@ -78,34 +115,5 @@ module.exports = { }, disableHostCheck: true, }, - plugins: - process.env.NODE_ENV === 'production' - ? [ - // Since we do not use moment's locale feature, we exclude them from the bundle. - // This reduces the bundle size by 0.4MB. - new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: JSON.stringify(process.env.NODE_ENV), - GIT_SHA: JSON.stringify(GIT_SHA), - }, - }), - // TODO: Revert to webpack bundled version with webpack v4. - // The v3 series bundled version does not support ES6 and - // fails to build. - new UglifyJsPlugin({ - sourceMap: true, - uglifyOptions: { - mangle: { - reserved: ['BigNumber'], - }, - }, - }), - new RollbarSourceMapPlugin({ - accessToken: '32c39bfa4bb6440faedc1612a9c13d28', - version: GIT_SHA, - publicPath: 'https://0xproject.com/', - }), - ] - : [], + plugins: generatePlugins(), }; @@ -2,6 +2,23 @@ # yarn lockfile v1 +"0x.js@0.38.4": + version "0.38.4" + resolved "https://registry.yarnpkg.com/0x.js/-/0x.js-0.38.4.tgz#735c12d3b8d68945caab87990e6cdd24bf5bc070" + dependencies: + "@0xproject/assert" "^0.2.12" + "@0xproject/base-contract" "^0.3.4" + "@0xproject/contract-wrappers" "^0.0.5" + "@0xproject/order-utils" "^0.0.7" + "@0xproject/order-watcher" "^0.0.6" + "@0xproject/sol-compiler" "^0.5.2" + "@0xproject/types" "^0.8.1" + "@0xproject/typescript-typings" "^0.4.1" + "@0xproject/utils" "^0.7.1" + "@0xproject/web3-wrapper" "^0.7.1" + ethers "3.0.22" + lodash "4.17.10" + "8fold-marked@0.3.9": version "0.3.9" resolved "https://registry.yarnpkg.com/8fold-marked/-/8fold-marked-0.3.9.tgz#bb89c645612f8ccfaffac1ca6e3c11f168c9cf59" @@ -122,6 +139,24 @@ ethereumjs-util "5.1.5" lodash "4.17.10" +"@0xproject/order-watcher@^0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@0xproject/order-watcher/-/order-watcher-0.0.6.tgz#85a8fb21e5755bb555f427b12d64d10b89b332e6" + dependencies: + "@0xproject/assert" "^0.2.12" + "@0xproject/base-contract" "^0.3.4" + "@0xproject/contract-wrappers" "^0.0.5" + "@0xproject/fill-scenarios" "^0.0.4" + "@0xproject/json-schemas" "^0.8.1" + "@0xproject/order-utils" "^0.0.7" + "@0xproject/types" "^0.8.1" + "@0xproject/typescript-typings" "^0.4.1" + "@0xproject/utils" "^0.7.1" + "@0xproject/web3-wrapper" "^0.7.1" + bintrees "1.0.2" + ethers "3.0.22" + lodash "4.17.10" + "@0xproject/types@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@0xproject/types/-/types-0.5.0.tgz#ba3cfbc11a8c6344b57c9680aa7df2ea84b9bf05" @@ -1834,7 +1869,7 @@ bindings@^1.2.1, bindings@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" -bintrees@^1.0.2: +bintrees@1.0.2, bintrees@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" @@ -3170,7 +3205,7 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.5: +cross-spawn@^6.0.4, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" dependencies: @@ -3696,7 +3731,7 @@ detect-libc@^1.0.2, detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" -detect-node@^2.0.3: +detect-node@2.0.3, detect-node@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" @@ -6899,7 +6934,7 @@ json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: json-rpc-error "^2.0.0" promise-to-callback "^1.0.0" -json-rpc-error@^2.0.0: +json-rpc-error@2.0.0, json-rpc-error@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/json-rpc-error/-/json-rpc-error-2.0.0.tgz#a7af9c202838b5e905c7250e547f1aff77258a02" dependencies: @@ -8438,12 +8473,12 @@ now-and-later@^2.0.0: once "^1.3.2" npm-run-all@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.2.tgz#90d62d078792d20669139e718621186656cea056" + version "4.1.3" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.3.tgz#49f15b55a66bb4101664ce270cb18e7103f8f185" dependencies: ansi-styles "^3.2.0" chalk "^2.1.0" - cross-spawn "^5.1.0" + cross-spawn "^6.0.4" memorystream "^0.3.1" minimatch "^3.0.4" ps-tree "^1.1.0" @@ -9891,13 +9926,6 @@ react-event-listener@^0.4.5: prop-types "^15.5.4" warning "^3.0.0" -react-ga@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-2.4.1.tgz#dfbd5f028ed39a07067f7a8bf57dc0d240000767" - optionalDependencies: - prop-types "^15.6.0" - react "^15.6.2 || ^16.0" - react-highlight@0xproject/react-highlight: version "0.10.0" resolved "https://codeload.github.com/0xproject/react-highlight/tar.gz/83bbb4a09801abd341e2b9041cd884885a4a2098" @@ -10023,15 +10051,6 @@ react@^15.5.4: object-assign "^4.1.0" prop-types "^15.5.10" -"react@^15.6.2 || ^16.0": - version "16.3.2" - resolved "https://registry.yarnpkg.com/react/-/react-16.3.2.tgz#fdc8420398533a1e58872f59091b272ce2f91ea9" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.0" - read-chunk@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.1.0.tgz#6a04c0928005ed9d42e1a6ac5600e19cbc7ff655" @@ -13270,7 +13289,7 @@ websocket@^1.0.24, websocket@^1.0.25: typedarray-to-buffer "^3.1.2" yaeti "^0.0.6" -whatwg-fetch@2.0.3, whatwg-fetch@>=0.10.0, whatwg-fetch@^2.0.3: +whatwg-fetch@2.0.3, whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" |